![ネットワークインタフェース用ドライバの決定 [冗長]](https://linux33.com/image/56023/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9%E7%94%A8%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E3%81%AE%E6%B1%BA%E5%AE%9A%20%5B%E5%86%97%E9%95%B7%5D.png)
リストされている特定のネットワークインターフェイスとどのドライバが接続されているかを確認したいと思います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