Wandering Thoughts archives

2006-01-09

How Linux names network interfaces

The usual explanation of how network interfaces get their names is that they're named based on what's in /etc/modprobe.conf (/etc/modules.conf if you're still running a 2.4 series kernel). You'll have lines like:

alias eth0 sk98lin
alias eth1 3c59x
alias eth2 e100

And indeed this usually works, and when your system boots nicely the 3Com 'Marvell' gigabit card is eth0, the 3Com 'Cyclone' 100mbit card is eth1, and the Intel 100mbit card is eth2. Then one day you boot your system single-user without network interfaces enabled and decide to bring up just eth1, so you do 'ifup eth1' (or just 'modprobe eth1'). And the world explodes in your face, because the nice simple explanation is a white lie.

How the Linux kernel really names network interfaces is that network interfaces are named in the order they're found: the first network interface found is eth0, the second is eth1, and so on. The names in the 'alias' lines in /etc/modprobe.conf don't get passed to the kernel; they just help make the normal configuration more generic.

So when you do 'modprobe eth1' on a bare system modprobe maps 'load eth1' to 'load the 3c59x driver', the driver finds a card with a single network interface, and as the first found it becomes eth0. Kaboom. (Similar things can happen if you remove a network card.)

If you want stable names, the kernel does support renaming network interfaces; the usual approach is to name interfaces based on MAC addresses. On modern kernels you can use udev rules (see here); there's also nameif, and your distribution may already support it with the right magic settings.

(On Red Hat and Fedora Core, I believe that you set HWADDR in the ifcfg-* file in /etc/sysconfig/network-scripts. I'm not sure what Debian uses.)

The kernel uses registration order based naming for other things too; the most famous (or infamous) case is SCSI drives, where the first one found is sda, the second one sdb, etc. (The kernel treats SATA drives as SCSI devices, so more and more people may have to care about this one.)

linux/NetworkInterfaceNaming written at 00:14:00; Add Comment


Page tools: See As Normal.
Search:
Login: Password:
Atom Syndication: Recent Pages, Recent Comments.

This dinky wiki is brought to you by the Insane Hackers Guild, Python sub-branch.