Network Device Naming Matt Domsch Technology Strategist, Office of the CTO Office of the CTO
Which is eth0? Office of the CTO 2
Inspiration: Network Switches Ports labeled with slot and port (4/2). Config tools use this label. Office of the CTO 3
Chassis Labels Office of the CTO 4
Problem: Enumeration != Naming • System Administers expect that names are deterministic. Enumeration is non-deterministic. – Racing modprobes (hack: serialized by udev in RHEL6) – Racing firmware loading – Racing udev renames ( fixed Sept’09) – PCI depth-first discovery varies based on motherboard layout • Undefined relationship between chassis label and kernel name • Only one name for each device allowed Office of the CTO 5
Current Solutions^WHacks • ifcfg-eth0 and 70-persistent-net.rules – introduces state to stateless systems • pci=bfsort – Whitelists, assumes PCI bus topology is meaningful • Force sane PCI Bus layout – Breadth-first vs. depth-first list – PCI Express is switched, not a bus hierarchy anymore • PXELINUX + ks=bootif – Only works for 1 NIC, and only if you use PXE We need a better solution. Office of the CTO 6
Standards! • HP added NIC ordering information to SMBIOS vendor fields – Displayed by dmidecode, but not otherwise used • Dell added labels to device objects in SMBIOS 2.6 standard – PowerEdge 10G, 11G implement this • Dell proposed labels and index in ACPI _DSM in PCI Firmware Great, so now we have PCI device to BIOS label mappings. Let’s use them! Office of the CTO 7
Idea #1: Rename devices Office of the CTO 8
Code #1: biosdevname & udev rules • Biosdevname written • Udev rules call biosdevname • Distros didn’t like it – “not upstream enough” • Didn’t solve all the problems – USB network devices – Systems w/o BIOS information – Names limited to 15 characters – Still only 1 “correct” name for each device Office of the CTO 9
Shootdown #1: Office of the CTO 10
Idea #2: /dev/netdev/eth0 Office of the CTO 11
Shootdown #2: Office of the CTO 12
Idea #3: Punt to the OS Installers! Office of the CTO 13
Proposal #3: Installer Screen ---------- Network Configuration ------------------------ Default [ ] | SMBIOS Names [x] | Driver Names [] | MAC Names [] ----------------------------------------------------------------------- eth0 | Addin_NIC_1 | ice0 | ----------------------------------------------------------------------- eth1 | Embedded_NIC_1 | bce0 | ----------------------------------------------------------------------- eth2 | Embedded_NIC_2 | bce1 | ----------------------------------------------------------------------- eth3 | Embedded_NIC_3 | bce2 | ----------------------------------------------------------------------- eth4 | Embedded_NIC_4 | bce3 | ----------------------------------------------------------------------- ------------ | Next | ------------ Office of the CTO 14
Shootdown #3: Office of the CTO 15
Idea #4: libnetdevname • Export names from BIOS into sysfs – SMBIOS 2.6 standard method, or HP vendor method (patch in linux-next) – PCI SIG Firmware Working Group ECN, ACPI _DSM (pending) • Userspace library maps BIOS name to kernel name extern int netdev_kernelname_to_alias (char *, struct alias **); extern int netdev_alias_to_kernelname (char *, char *); • All userspace programs that handle network names need to be patched to call libnetdevname – ethtool, iproute2, net-tools patches written – NetworkManager, distro installers still needed # ifconfig “Embedded NIC 1” # ethtool –p “Embedded NIC 2” Office of the CTO 16
libnetdevname futures • Handle add-in PCI cards • Additional names “by function” – “public”, “ dmz ”, “storage”, “backup”, “admin”, … • Methods to get names from other sources • Handle non-PCI devices • Add method to show which NIC is the “boot device” http://linux.dell.com/wiki/index.php/Oss/libnetdevname netdev@vger.kernel.org linux-hotplug@vger.kernel.org Office of the CTO 17
Call to Action • Got a better idea? Suggest it! • BIOS authors: add ACPI _DSM with labels • Kernel: accept our patches to expose names from BIOS (in linux-next on 7/30) • Network tools authors: incorporate libnetdevname • OS installers: incorporate libnetdevname • Network GUI tools (NetworkManager): display all available names for each interface somehow. Office of the CTO 18
Thanks • Greg Kroah-Hartman • Marco d'Itri • Alex Chiang • David Miller • Bryan Kadzban • Bjorn Helgaas • Alan Cox • Scott James Remnant • Neil Horman • Stephen Hemminger • Dan Williams • Thomas Cantwell • Kay Sievers • John Linville • Chip Webb • Narendra K • Sujit K M • Mukund Khatri • Jordan Hargrave • David Zeuthen • Charles Rose • Peter Jones • Bill Fink • Richard Chan • Jon Masters • Rob Townley • Vijay Nijhawan • Bill Nottingham • Kurt Van Dijck • Vinod Kutty • Ben Hutchings • Hannes Reinecke • Jesse Barnes • Dann Frazier • Karl O. Pinc Office of the CTO 19
Recommend
More recommend