确定网络接口的驱动程序

确定网络接口的驱动程序

我想查看哪个驱动程序与 列出的某些网络接口相关联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/)。它们没有到底层的链接device(例如在 pci 总线上),因此您无法像上面那样查询驱动程序。


还有一个特定于 Linux 的工具ethtool。它使用同名套接字 ioctl,而不是读取 sysfs。 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

相关内容