2004-11-11 21:30:02

by Anthony Samsung

[permalink] [raw]
Subject: network interface to driver and pci slot mapping

Given an interface name (like eth0), how do I determine:
The name of the driver (module) for this interface.
The PCI address for this interface, if relevant.

?

I need something that works non-destructively on a live system, that
isn't broken by nameif, and has a strong chance of producing a correct
result. In particular, parsing syslog is out. There's no consistency
in the format of messages and there's no guarantee the logs from
bootup will still be around. And the interface may have been renamed
since then.


2004-11-11 21:54:19

by linux-os

[permalink] [raw]
Subject: Re: network interface to driver and pci slot mapping

On Thu, 11 Nov 2004, Anthony Samsung wrote:

> Given an interface name (like eth0), how do I determine:
> The name of the driver (module) for this interface.
> The PCI address for this interface, if relevant.
>
> ?
>
> I need something that works non-destructively on a live system, that
> isn't broken by nameif, and has a strong chance of producing a correct
> result. In particular, parsing syslog is out. There's no consistency
> in the format of messages and there's no guarantee the logs from
> bootup will still be around. And the interface may have been renamed
> since then.

If the eth0 device is a module, it's in /etc/modprobe.conf, previous
versions used /etc/modules.conf.
Once you have its module name you can use other resources like

/sys/bus/pci/drivers/MODULENAME


Cheers,
Dick Johnson
Penguin : Linux version 2.6.9 on an i686 machine (5537.79 BogoMips).
Notice : All mail here is now cached for review by John Ashcroft.
98.36% of all statistics are fiction.

2004-11-11 21:56:42

by Jean Tourrilhes

[permalink] [raw]
Subject: Re: network interface to driver and pci slot mapping

Anthony Samsung wrote :
>
> Given an interface name (like eth0), how do I determine:
> The name of the driver (module) for this interface.
> The PCI address for this interface, if relevant.
>
> ?

ethtool -i. Unfortunately, not yet implemented in all driver,
but Jeff is on the case.
There might also be a sysfs way to do it, but it probably
involve lot's a grep or similar magic.

> I need something that works non-destructively on a live system, that
> isn't broken by nameif, and has a strong chance of producing a correct
> result. In particular, parsing syslog is out. There's no consistency
> in the format of messages and there's no guarantee the logs from
> bootup will still be around. And the interface may have been renamed
> since then.

ifrename allow you to rename interfaces based on both driver
name and PCI address, so another option is to make sure interface
names are consistent and meaningful.

Have fun...

Jean

2004-11-11 22:40:22

by Måns Rullgård

[permalink] [raw]
Subject: Re: network interface to driver and pci slot mapping

linux-os <[email protected]> writes:

> If the eth0 device is a module, it's in /etc/modprobe.conf, previous
> versions used /etc/modules.conf.
> Once you have its module name you can use other resources like
>
> /sys/bus/pci/drivers/MODULENAME

On my systems, hotplug loads the modules automatically, so there is
no mention of them anywhere.

--
M?ns Rullg?rd
[email protected]

2004-11-11 22:58:52

by Jeff Garzik

[permalink] [raw]
Subject: Re: network interface to driver and pci slot mapping

M?ns Rullg?rd wrote:
> linux-os <[email protected]> writes:
>
>
>>If the eth0 device is a module, it's in /etc/modprobe.conf, previous
>>versions used /etc/modules.conf.
>>Once you have its module name you can use other resources like
>>
>>/sys/bus/pci/drivers/MODULENAME
>
>
> On my systems, hotplug loads the modules automatically, so there is
> no mention of them anywhere.

Use ethtool.

Jeff



2004-11-12 01:06:59

by Greg KH

[permalink] [raw]
Subject: Re: network interface to driver and pci slot mapping

On Thu, Nov 11, 2004 at 04:28:35PM -0500, Anthony Samsung wrote:
> Given an interface name (like eth0), how do I determine:
> The name of the driver (module) for this interface.
> The PCI address for this interface, if relevant.

Use sysfs. All of this information is there (well, the driver link back
to the module isn't there for most PCI drivers, but the functionality is
there if the drivers are modified to support it...)

thanks,

greg k-h

2004-11-12 03:41:38

by Daniel Stekloff

[permalink] [raw]
Subject: Re: network interface to driver and pci slot mapping

On Thu, 2004-11-11 at 16:56, Greg KH wrote:
> On Thu, Nov 11, 2004 at 04:28:35PM -0500, Anthony Samsung wrote:
> > Given an interface name (like eth0), how do I determine:
> > The name of the driver (module) for this interface.
> > The PCI address for this interface, if relevant.
>
> Use sysfs. All of this information is there (well, the driver link back
> to the module isn't there for most PCI drivers, but the functionality is
> there if the drivers are modified to support it...)


If you're going to use sysfs, libsysfs can help. It can be found in the
sysfsutils package here:

http://linux-diag.sourceforge.net/Sysfsutils.html

[stekloff@... stekloff]$ systool -c net eth0 -D
Class = "net"

Class Device = "eth0"
Device = "0000:02:01.0"
Driver = "e1000"
Devices using "e1000" are:
Device = "0000:02:01.0"


And more extended output:

[stekloff@... stekloff]$ systool -c net eth0 -v
Class = "net"

Class Device = "eth0"
Class Device path = "/sys/class/net/eth0"
addr_len = "6"
address = "00:0d:60:c9:42:06"
broadcast = "ff:ff:ff:ff:ff:ff"
features = "0x3a9"
flags = "0x1002"
ifindex = "6"
iflink = "6"
mtu = "1500"
tx_queue_len = "1000"
type = "1"

Device = "0000:02:01.0"
Device path = "/sys/devices/pci0000:00/0000:00:1e.0/0000:02:01.0"
class = "0x020000"
config = 86 80 1e 10 17 01 30 02 03 00 00 02 08 40
00 00
00 00 24 c0 00 00 20 c0 01 80 00 00 00 00
00 00
00 00 00 00 00 00 00 00 22 00 00 00 14 10
49 05
00 00 00 00 dc 00 00 00 00 00 00 00 0b 01
ff 00
detach_state = "0"
device = "0x101e"
irq = "11"
resource = "0x00000000c0240000 0x00000000c025ffff
0x0000000000000200
0x00000000c0200000 0x00000000c020ffff 0x0000000000000200
0x0000000000008000 0x000000000000803f 0x0000000000000101
0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x000000000000ffff 0x0000000000007200"
subsystem_device = "0x0549"
subsystem_vendor = "0x1014"
vendor = "0x8086"

Driver = "e1000"
Driver path = "/sys/bus/pci/drivers/e1000"
new_id = <store method only>

Devices using "e1000" are:
"0000:02:01.0"

Thanks,

Dan