ネットワークインタフェース用ドライバの決定 [冗長]

ネットワークインタフェース用ドライバの決定 [冗長]

リストされている特定のネットワークインターフェイスとどのドライバが接続されているかを確認したいと思います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

関連情報