ANNOUNCE: bios_dev_name tool, 0.1 release

Greg Dickie greg at
Wed Nov 29 18:27:49 CST 2006

Thanks for all these options Matt but I have to ask the obvious
"couldn't it have been fixed in hardware?" (clearly I've been in
software too long ;-)


On Wed, 2006-11-29 at 17:15 -0600, Matt Domsch wrote:
> You may recall several months ago a problem I faced, where the
> BIOS-given name for an ethernet device (e.g. "Gb1") didn't map to the
> expected and obvious Linux device name (e.g. eth0), but instead mapped
> to another name (e.g. eth1).  This was highly confusing to system
> admins with such hardware.
> Since then, I've developed 3 separate "fixes" - each more generic than
> the last.
> 1) a kernel patch in 2.6.19-rc3, which implements a "pci=bfsort"
>    option, to force the kernel to enumerate devices in a breadth-first
>    manner; by default disabled on all but a few Dell systems.  This is
>    the "brute force" method, and while handy, isn't very extensible or
>    flexible.
> 2) name_eths (, a set of scripts
>    that modifies on-disk config files
>    (/etc/sysconfig/network-scripts/ifcfg-eth* HWADDR lines on Red Hat
>    / Fedora systems; /etc/udev/rules.d/30-net_persistent_names rules
>    on SLES/OpenSuSE).  This uses the BIOS PCI IRQ routing table to get
>    the list of embedded vs add-in devices, and assigns names to the
>    embedded devices first (breadth-first if there are several), then
>    to the add-ins, in PCI slot number ascending order (breadth-first
>    if there are several devices in the same slot, e.g. a multiport NIC
>    card) and works quite well, except in a diskless environment where
>    you can't read/write config files.
> so now, option 3:
> 3) bios_dev_name ( -
>    intended to be a udev helper.  For example, something like:
> KERNEL=="eth*", ACTION=="add", PROGRAM="/usr/sbin/bios_dev_name -i %k", NAME="%c"
> which, given the kernel's name for a device, retreives the
> BIOS-expected name, and sets it to that.  Alternately, it can be
> integrated into SuSE's rename_netiface script as demonstrated in the
> patch included in the release.  As a udev helper, it doesn't need
> config files to accomplish its work.
> Right now #1 uses a hard-coded breadth-first search algorithm; #2 uses
> the PCI IRQ routing table and breadth-first.  #3 is the same as #2
> algorithm-wise, but is written in C rather than perl/shell to be more
> available as a udev helper.
> In the future, the SMBIOS Working Group has a proposal to add explicit
> BIOS device naming assignments to the SMBIOS tables.  This will let
> the OS query SMBIOS directly to find out the name a given device
> "should" have (from the BIOS perspective).  I expect bios_dev_name to
> be able to take advantage of this when included in the spec and
> implemented in system BIOS.
> It's also expected that additional device types will be handled,
> rather than only ethernet devices.  That'll depend on need.
> bios_dev_name is released under the GNU GPL v2.
> Feedback welcome.
> Thanks,
> Matt
Greg Dickie
just a guy
Maximum Throughput

More information about the Linux-PowerEdge mailing list