나열된 특정 네트워크 인터페이스와 어떤 드라이버가 연결되어 있는지 확인하고 싶습니다 ip link
. 나의 첫 번째 생각은 네트워크 인터페이스를 찾고 /dev
장치의 메이저 및 마이너 번호를 보고 관련 드라이버를 결정하는 것이었습니다. 그러나 네트워크 인터페이스는 아래에 나타나지 않습니다 /dev
.
Linux 네트워킹 스택에 대한 기본 사항을 오해하고 있는 것 같습니다(아마도 netfilter/iptables/tc에 여러 커널 모듈이 포함될 수 있기 때문일 수 있음). 그렇다면 수정하시기 바랍니다. 내 순진한 질문은 다음과 같습니다
- 특정 네트워크 인터페이스에 대해 어떤 드라이버가 I/O를 수행하는지 확인하는 방법은 무엇입니까?
- Linux 네트워크 인터페이스가 나타나지 않는 이유는 무엇입니까
/dev
?
답변1
sysfs에서 탐색하는 것이 최선의 접근 방식인지는 잘 모르겠지만(udevadm을 사용해야 할까요?) 적어도 검색 가능합니다.
$ DEV=p8p1
$ readlink /sys/class/net/$DEV/device/driver
../../../../bus/pci/drivers/tg3
lo
"가상" 장치( ) 에서는 작동하지 않습니다 /sys/devices/virtual/
. 기본 레이어(예: pci 버스)에 대한 링크가 없으므로 device
위와 같이 드라이버에 쿼리할 수 없습니다.
Linux 전용 도구도 있습니다 ethtool
. sysfs를 읽는 대신 동일한 이름의 소켓 ioctl을 사용합니다. ioctl은 Linux에만 적용됩니다. 표준 Unix API는 드라이버 이름을 알려주지 않습니다. ethtool
동일한 결과를 제공합니다(작동하지 않으며 lo
추가 정보는 의미가 없습니다).
$ ethtool -i p8p1
driver: tg3
version: 3.137
firmware-version: sb
bus-info: 0000:04:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: no
supports-register-dump: yes
supports-priv-flags: no