Thread (105 messages) 105 messages, 21 authors, 2009-11-11

RE: PATCH: Network Device Naming mechanism and policy

From: <hidden>
Date: 2009-11-04 14:23:37

Possibly related (same subject, not in this thread)

quoted
quoted
Matt, Ben and I talked about a few other possibilities on IRC. The 
one I like the most at the moment is an idea Ben had to creat dummy 
files named after the ifindex. Then, use symlinks for the 
kernel name 
quoted
quoted
and the various by-$property subdirectories. This means the KOBJ 
events will need to expose the ifindex.
I suppose the KOBJ events already expose the ifindex of a network 
interface. The file "/sys/class/net/ethN/uevent" contains 
INTERFACE=ethN and IFINDEX=n already. But it looks like udev doesn't 
use it in any way.
Right; it could simply do the equivalent of:

touch /dev/netdev/$env{IFINDEX}

instead of its normal mknod(2), and then do normal SYMLINK processing.
That last part is what would link 
/dev/netdev/by-name/$env{INTERFACE} to that device, along with 
/dev/netdev/by-mac/*, /dev/netdev/by-path/*, etc., etc., in as 
many different ways as people want to add rules.

(Or /dev/net/by-* instead of netdev; I'm mostly ambivalent 
about the first-level directory under /dev.  Looks like 
libnetdevname requires /dev/netdev though.)
quoted
For example, with the kernel patch the "/sys/class/net/ethN/uevent" 
contains in addition to the above details, MAJOR=M and MINOR=m which 
the udev knows how to make use of with a rule like

SUBSYSTEM=="net", KERNEL!="tun", NAME="netdev/%k", MODE="0600".
And if the only point is to get the ifindex via stat(2) on the 
resulting symlinks, but people don't like device files, then 
why not get the ifindex via readlink(2) (and a bit of string 
parsing, and a strtol(3) or
strtoul(3) call) instead?  :-)

I suppose this issue can also be addressed in another way. Currently,
the sysfs contains various attributes of a network interface under the
directory "/sys/class/net/ethN", for example
"/sys/class/net/ethN/address". This will be used by udev as below -

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*",
ATTR{address}=="00:1d:09:6a:78:ec", ATTR{type}=="1", KERNEL=="eth*",
NAME="eth1".

Similarly, export an attribute named "smbios_name" to sysfs, i.e
"/sys/class/net/eth0/smbios_name". "Cat /sys/class/net/eth0/smbios_name"
would show "Embedded_NIC_1[23..]" and this can be used by udev in
70-persistent-net.rules as 

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*",
ATTR{smbios_name}=="Embedded_NIC_1", ATTR{type}=="1", KERNEL=="eth*",
NAME="eth0".

I suppose this would not need any changes to the udev code and existing
udev infrastructure can be used as udev is capable handling
ATTR{something}.

This would also ensure that whichever device is "Embedded_NIC_1" as per
the BIOS, will also be "eth0" in the os.

Netdev, What are your views on this idea ?

With regards,
Narendra K  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help