Determina o driver da interface de rede [duplicado]

1

Eu queria ver qual driver estava associado a algumas das interfaces de rede listadas por ip link . Meu primeiro pensamento foi encontrar as interfaces de rede em /dev e examinar os números principais e secundários do dispositivo para determinar o driver associado. No entanto, as interfaces de rede não aparecem em /dev .

Tenho a sensação de que estou entendendo mal uma coisa fundamental sobre a pilha de rede do Linux (talvez porque vários módulos do kernel podem estar envolvidos por causa do netfilter / iptables / tc), então, por favor, resolva isso. Minhas perguntas ingênuas são:

  • Como você determina qual driver executa E / S para uma interface de rede específica?
  • Por que as interfaces de rede do Linux não aparecem em /dev ?
por Doug Richardson 19.09.2014 / 19:47

1 resposta

5

Eu nunca tenho certeza se o spelunking no sysfs é a melhor maneira de fazer as coisas (eu deveria usar o udevadm?), mas pelo menos é detectável

$ DEV=p8p1
$ readlink /sys/class/net/$DEV/device/driver
../../../../bus/pci/drivers/tg3

Não funcionará para dispositivos como lo , que são "virtuais" ( /sys/devices/virtual/ ). Eles não têm o link para um device subjacente (por exemplo, no barramento pci), então você não pode consultar o driver como acima.

Há também uma ferramenta específica do Linux ethtool . Ele usa um ioctl de soquete homônimo em vez de ler sysfs. O ioctl é específico do linux; APIs unix padrão não dizem a você como o driver é chamado. ethtool fornece o mesmo resultado (não funciona para lo e a informação extra é inútil).

$ 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
    
por 19.09.2014 / 19:55