If you want rename a network interface's device name when using udev. This can
be practical to do since the automatically assigned device name may actually
change around a bit due to random variation in the initialisation process of
them. For instance, eth0 can on one bootup refer to network interface A and
eth1 to network interface B, but on another bootup can interface A be assigned
eth1 and interface B be assigned eth0, which can cause problems if only one of
them has a network cable attached and is configured to obtain an address over
DHCP, the interface without the cable attached will then attempt to do that
instead!

--------------------------------------------------------------------------------

udev Overview

Unlike the traditional Linux system, where the device nodes in the /dev directory
have been a static set of files, udev dynamically provides only the nodes for the
devices actually present on a system. Although devfs provided a similar
functionality, advocates for udev cited a number of reasons for preferring its
implementation over devfs.

udev supports persistent device naming, which does not depend on, for example,
the order in which the devices are plugged into the system. The default udev
setup provides persistent names for storage devices. Any hard disk is recognized
by its unique filesystem id, the name of the disk and the physical location on
the hardware it is connected to.

udev executes entirely in user space, as opposed to devfs' kernel space. One
consequence is that udev moved the naming policy out of the kernel and can run
arbitrary programs to compose a name for the device from the device's properties,
before the node is created.

udev operation

Udev is a generic kernel device manager. It runs as a daemon on a Linux system
and listens to events the kernel sends out if a new device is initialized or a
device is removed from the system. The system provides a set of rules that match
against exported values of the event and properties of the discovered device.
A matching rule will possibly name and create a device node and run configured
programs to set-up and configure the device. Udev rules can match on properties
like the kernel subsystem, the kernel device name, the physical location of the
device, or properties like the device's serial number. Rules can also request
information from external programs to name a device or specify a custom name
that will always be the same, regardless of the order devices are discovered
by the system.

--------------------------------------------------------------------------------

Obtaining the MAC addresses from your Debian machine

If you want to obtain MAC address of any linux machine you need to run the
"ifconfig -a" command. This will show all the existing network interfaces.

Using udev

Create a new file in the udev rules directory, e.g.
	/etc/udev/rules.d/010_netinterfaces.rules
In it specify the renaming in the following way for each interface on its own
line:
	KERNEL="oldnameprefix*", SYSFS{address}=="MACaddress", NAME="newname"

where the oldnameprefix is typically "eth". Note that in the MAC address, the
hexadecimal digits should be in lowercase, otherwise udev fails to match them
properly with the network interface.

You have quite a bit of freedom in choosing the new name, We recommend to keep it
short and without any spaces or weird characters though. You can e.g. specify a
fixed eth0, eth1, eth2 for specific MAC addresses, or you can name them after
their use, or anything really. Remember that some applications that poke on a
low level may dislike them not being called in the normal fashion of eth0, eth1,
etc...

Examples using udev

Three network interfaces being present on a computer, setting a fixed eth0, eth1
and eth2 as their names:
	KERNEL=="eth*", SYSFS{address}=="00:12:34:fe:dc:ba", NAME="eth0"
	KERNEL=="eth*", SYSFS{address}=="00:56:78:98:76:54", NAME="eth1"
	KERNEL=="eth*", SYSFS{address}=="00:90:ab:32:10:fe", NAME="eth2"

Three network interfaces (one Intel, one NVIDIA, and one 3Com) being present on
a computer, naming them after the manufacturer of the interfaces:
	KERNEL=="eth*", SYSFS{address}=="00:12:34:fe:dc:ba", NAME="eth-intel"
	KERNEL=="eth*", SYSFS{address}=="00:56:78:98:76:54", NAME="eth-nv"
	KERNEL=="eth*", SYSFS{address}=="00:90:ab:32:10:fe", NAME="eth-3com"

--------------------------------------------------------------------------------

Updating network configuration

If you named the interfaces in a different fashion as they were named before,
the network configuration needs to be updated for the new interface device names
to be used.

Edit the /etc/network/interfaces file, and change all instances of the old names
to the new names. 

e.g. if you previously used eth0 and have renamed it newname, you'd replace all
instances of "eth0" in that file with "newname". But if you just put a fixed eth0,
eth1, ... as their names, you just need to make sure the one you want to have as
the primary network interface is set to the one you want in the file.

Example

Having renamed the existing eth0, eth1, and eth2 to eth-intel, eth-nv and
eth-3com, choosing to use the eth-intel one as the primary interface.

The /etc/network/interfaces file before changes:
	#primary network interface
	auto eth0
	iface eth0 inet dhcp
	#currently unused network interfaces
	iface eth1 inet dhcp
	iface eth2 inet dhcp
The file after changes:
	#primary network interface
	auto eth-intel
	iface eth-intel inet dhcp
	#currently unused network interfaces
	iface eth-nv inet dhcp
	iface eth-3com inet dhcp

Reboot the computer and verify that the new network interface names are in use
	#ifconfig newname

Where newname is the new interface name you specified. Repeat procedure for
each one you renamed.