ANNOUNCE: bios_dev_name tool, 0.1 release
Matt Domsch
Matt_Domsch at dell.com
Wed Nov 29 17:15:09 CST 2006
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 (http://linux.dell.com/files/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 (http://linux.dell.com/files/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.
http://linux.dell.com/files/bios_dev_name/bios_dev_name-0.1.tar.gz
http://linux.dell.com/files/bios_dev_name/bios_dev_name-0.1.tar.gz.sign
Feedback welcome.
Thanks,
Matt
--
Matt Domsch
Software Architect
Dell Linux Solutions linux.dell.com & www.dell.com/linux
Linux on Dell mailing lists @ http://lists.us.dell.com
More information about the Linux-PowerEdge
mailing list