我想查看哪个驱动程序与 列出的某些网络接口相关联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