How do I find what kernel module is behind a network interface?

How do I find out what kernel module is used for any given network interface?


On the command line run

sudo lshw -C network 

For every network interface you'll get a section starting with *-network. Every section hast a logical name: line that contains the interface name and a configuration: line that contain the driver and some other information.


You can query sysfs to tell you this information. To tell which driver a network interface is using:

ls -l /sys/class/net/<devname>/device/driver

... where <devname> is something like eth0. This driver directory will be a symlink to the driver node in sysfs.

To get the name of the module that provides that driver:

ls -l /sys/class/net/<devname>/device/driver/module

... and this module directory will be a symlink to the module node in sysfs.


IMHO for scripts the best is to use sysfs info (as Jeremy Kerr shows), but for more info:

ethtool -i IFACE_NAME

E.g.:

$ ethtool -i eth0
driver: 8139cp
version: 1.3
firmware-version: 
bus-info: 0000:00:07.0
supports-statistics: yes
supports-test: no
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no

For USB devices you can use the lsusb command e.g.:

lsusb -t