From: Scott James Remnant <scott@ubuntu.com>
To: Matt Domsch <Matt_Domsch@dell.com>
Cc: netdev@vger.kernel.org, linux-hotplug@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: Network Device Naming mechanism and policy
Date: Tue, 24 Mar 2009 17:02:19 +0000 [thread overview]
Message-ID: <1237914139.22009.18.camel@quest> (raw)
In-Reply-To: <20090324154617.GA16332@auslistsprd01.us.dell.com>
[-- Attachment #1: Type: text/plain, Size: 3810 bytes --]
On Tue, 2009-03-24 at 10:46 -0500, Matt Domsch wrote:
> b) udev may run modprobes in parallel. It guarantees that the
> events and modprobes are begun in order, but makes no guarantee
> that one event's modprobe completes before beginning a second
> modprobe. This leads to naming races in the kernel, as drivers
> begun in parallel, which discover their own devices, present
> them to the kernel for name assignment.
>
Also bear in mind that a module completing init() does not necessarily
mean that the interfaces have been created. If the driver requires
firmware, it will call out to userspace, and may not register the
interface until well afterwards.
One could even construct a pathological case where only a virtual device
was registered, and userspace was required to add logical interfaces
(most likely in a udev rule).
> 2) udev may have rules to change the device names. This is most often
> seen in the '70-persistent-net.rules' file. Here we have
> additional challenges:
>
> a) this does not exist the first time devices are discovered; the
> naming may be incorrect during first discovery, leading to the
> names being permanently incorrect (unless this file is edited).
>
Well, the obvious fix to this is to make sure the names are always
correct :)
> c) udev may not always be able to change a device's name. If udev
> uses the kernel assignment namespace (ethN), then a rename of
> eth0->eth1 may require renaming eth1->eth0 (or something else).
> Udev operates on a single device instance at a time, it becomes
> difficult to switch names around for multiple devices, within
> the single namespace.
>
Actually udev handles this by using a temporary name. When renaming
eth0->eth1 it actually uses an intermediate name first. This allows it
to simultaneously swap eth0<->eth1 since one unblocks the other
(actually both unblock each other).
There is a failure case where two devices both end up trying to get the
same name, in which case one will lock with a "_rename" name. There was
an early debate in Ubuntu when we first wrote this code about using
later names (eth2, eth3, etc.) but we realised that just hides the
problem (and it happens again if you plug in a pccard or something that
wants eth2).
Since this is always a bug, making the problem visible was a "good
thing".
> biosdevname (http://linux.dell.com/projects.shtml#biosdevname) takes a
> stab at this. It can be integrated into udev, such that the
> 70-persistent-net.rules file is never used, and the naming for each
> device comes from several different policies. Its primary drawback is
> that it changes the device namespace, which some sysadmins, and tools,
> may not like. Names for devices become eth_s0_0 for the first
> onboard NIC, eth_s0_1 for the second; eth_s3_3 for the fourth port
> on PCI Slot #3, etc.
>
While this works for PCI slots, it already doesn't scale to other buses.
For example what slot number is the pccard slot? If you have two
different pccard devices, would they get assigned the same name (udev
currently assigns them different names).
Now consider USB. Would the device name change depending on which USB
port you plugged it into? Or is USB just a single slot, in which case
what happens when you have two USB ethernet devices?
The Apple USB Ethernet device in my iPhone is not the USB Wireless
adapter I own, both have very different networking configurations.
it's not ideal in the laptop world. Consider a user with two different
> Option 3: INSERT YOUR IDEA HERE
>
I quite liked the idea of /dev/eth0, then we could just use symlinks.
Scott
--
Scott James Remnant
scott@ubuntu.com
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 197 bytes --]
next prev parent reply other threads:[~2009-03-24 17:02 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-03-24 15:46 Network Device Naming mechanism and policy Matt Domsch
2009-03-24 16:21 ` Patrick McHardy
2009-03-24 16:28 ` Kay Sievers
2009-03-24 16:38 ` Patrick McHardy
2009-03-24 16:40 ` Dan Williams
2009-03-24 17:00 ` Alan Cox
2009-03-24 17:04 ` Patrick McHardy
2009-03-24 18:51 ` david
2009-03-24 21:02 ` Alan Cox
2009-03-24 23:14 ` Greg KH
2009-03-24 16:42 ` Karl O. Pinc
2009-03-24 17:45 ` Matt Domsch
2009-03-24 17:02 ` Scott James Remnant [this message]
2009-03-24 17:52 ` Matt Domsch
2009-03-24 18:12 ` Bill Nottingham
2009-03-24 18:20 ` Scott James Remnant
2009-03-24 18:49 ` david
2009-03-24 19:22 ` Matt Domsch
2009-03-24 22:57 ` David Miller
2009-03-25 20:22 ` Chris Friesen
2009-03-26 20:17 ` Dan Williams
2009-03-26 16:39 ` Matt Domsch
2009-03-26 20:16 ` Dan Williams
2009-03-27 16:06 ` Len Brown
2009-04-09 14:58 ` Matt Domsch
2009-03-31 14:07 ` Kurt Van Dijck
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1237914139.22009.18.camel@quest \
--to=scott@ubuntu.com \
--cc=Matt_Domsch@dell.com \
--cc=linux-hotplug@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).