Changing the ethX to Ethernet Device Mapping in EL6 and Fedora 12 to 14: Difference between revisions

From Alteeve Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 26: Line 26:


I find it easier to follow instructions when I have an example to follow, so let me provide one here:
I find it easier to follow instructions when I have an example to follow, so let me provide one here:
I've got the same hardware in the same configuration in both of my storage nodes. To keep things simple, I want to make sure that both nodes use the same <span class="code">ethX</span> name for the network devices on each of the given networks.


== Desired Mapping ==
== Desired Mapping ==
Line 32: Line 34:


* <span class="code">eth0</span>
* <span class="code">eth0</span>
** MAC: <span class="code">90:E6:BA:71:82:D8</span>
** Type: <span class="code"># Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller</span>
** MAC: <span class="code">90:E6:BA:71:82:EA</span>
* <span class="code">eth1</span>
* <span class="code">eth1</span>
** MAC: <span class="code">00:21:91:19:96:5A</span>
** Type: <span class="code"># D-Link System Inc DGE-560T PCI Express Gigabit Ethernet Adapter</span>
** MAC: <span class="code">00:21:91:19:96:53</span>
* <span class="code">eth2</span>
* <span class="code">eth2</span>
** MAC: <span class="code">00:0E:0C:59:45:78</span>
** Type: <span class="code"># Intel Corporation 82540EM Gigabit Ethernet Controller</span>
** MAC: <span class="code">00:0E:0C:59:46:E4</span>


== Initial Mapping ==
== Initial Mapping ==


Now lets assume you got this:
When the Fedora install finished, you may have gotten this:


* <span class="code">eth0</span>
* <span class="code">eth0</span>
** MAC: <span class="code">00:21:91:19:96:5A</span>
** Type: <span class="code"># D-Link System Inc DGE-560T PCI Express Gigabit Ethernet Adapter</span>
** MAC: <span class="code">00:21:91:19:96:53</span>
* <span class="code">eth1</span>
* <span class="code">eth1</span>
** MAC: <span class="code">90:E6:BA:71:82:D8</span>
** Type: <span class="code"># Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller</span>
** MAC: <span class="code">90:E6:BA:71:82:EA</span>
* <span class="code">eth2</span>
* <span class="code">eth2</span>
** MAC: <span class="code">00:0E:0C:59:45:78</span>
** Type: <span class="code"># Intel Corporation 82540EM Gigabit Ethernet Controller</span>
** MAC: <span class="code">00:0E:0C:59:46:E4</span>


== The Problem ==
== The Problem ==
Line 57: Line 65:
Traditionally, the <span class="code">ethX</span> to physical ethernet device was linked via the <span class="code">HWADDR=...</span> argument in each NIC's <span class="code">ifcfg-ethX</span> configuration file. With the introduction of [http://en.wikipedia.org/wiki/Udev udev], the <span class="code">HWADDR=...</span> is no longer needed. Instead, this mapping is now made in the <span class="code">70-persistent-net.rules</span> udev configuration file.  
Traditionally, the <span class="code">ethX</span> to physical ethernet device was linked via the <span class="code">HWADDR=...</span> argument in each NIC's <span class="code">ifcfg-ethX</span> configuration file. With the introduction of [http://en.wikipedia.org/wiki/Udev udev], the <span class="code">HWADDR=...</span> is no longer needed. Instead, this mapping is now made in the <span class="code">70-persistent-net.rules</span> udev configuration file.  


So the trick then is to remove or comment-out the <span class="code">HWADDR=...</span> argument in each NIC's <span class="code">ifcfg-ethX</span> configuration file and then  
So the trick then is to remove or comment-out the <span class="code">HWADDR=...</span> argument in each NIC's <span class="code">ifcfg-ethX</span> configuration file, then, change the <span class="code">NAME="ethX"</span> in the udev configuration file to match the MAC address you want.
 
=== Stopping the Network ===


First, stop <span class="code">network</span>. This is important because if you change the MAC address to <span class="code">ethX</span> mapping while the network is still up, the <span class="code">initd</span> script will fail to bring down the network devices and you will need to reboot for the changes to take effect.
First, stop the <span class="code">network</span>. This is important because if you change the MAC address to <span class="code">ethX</span> mapping while the network is still up, the <span class="code">init.d</span> script will fail to bring down the network devices and you will need to reboot for the changes to take effect.


<source lang="bash">
<source lang="bash">
/etc/init.d/network stop
/etc/init.d/network stop
</source>
</source>
We'll need to work in two directories;
* <span class="code">/etc/sysconfig/network-scripts/</span>
** Where the interface configuration files exist.
* <span class="code">/etc/udev/rules.d/</span>
** Where the <span class="code">udev</span> configuration files exist.


=== Interface Configuration ===
=== Interface Configuration ===


Go to <span class="code">/etc/sysconfig/network-scripts/</span> and then use <span class="code">cat</span> to see the contents of the <span class="code">ifcfg-eth*</span> network configuration files:
Go to the <span class="code">/etc/sysconfig/network-scripts/</span> directory and then use <span class="code">cat</span> to see the contents of the <span class="code">ifcfg-eth*</span> network configuration files:


<source lang="bash">
<source lang="bash">
cd /etc/sysconfig/network-scripts/
cd /etc/sysconfig/network-scripts
cat ifcfg-eth0
cat ifcfg-eth0
cat ifcfg-eth1
cat ifcfg-eth2
</source>
This will produce output something like this:
<source lang="bash">
cd /etc/sysconfig/network-scripts
cat ifcfg-eth*
</source>
</source>
<source lang="text">
<source lang="text">
# D-Link System Inc DGE-560T PCI Express Gigabit Ethernet Adapter
# D-Link System Inc DGE-560T PCI Express Gigabit Ethernet Adapter
HWADDR=00:21:91:19:96:5A
DEVICE=eth0
DEVICE=eth0
BOOTPROTO=static
BOOTPROTO=dhcp
DHCPCLASS=
HWADDR=00:21:91:19:96:53
ONBOOT=yes
ONBOOT=yes
TYPE=Ethernet
DHCP_HOSTNAME=an-node01.alteeve.com
IPADDR=192.168.1.71
</source>
NETMASK=255.255.255.0
<source lang="bash">
GATEWAY=192.168.1.1
cat ifcfg-eth1
DNS1=192.139.81.117
</source>
DNS2=192.139.81.1
<source lang="text">
DEFROUTE=yes
 
# Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller
# Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller
HWADDR=90:E6:BA:71:82:D8
DEVICE=eth1
DEVICE=eth1
BOOTPROTO=static
BOOTPROTO=dhcp
DEFROUTE=yes
HWADDR=90:E6:BA:71:82:EA
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
ONBOOT=yes
ONBOOT=yes
OPTIONS=layer2=1
PEERDNS=yes
PEERROUTES=yes
TYPE=Ethernet
TYPE=Ethernet
IPADDR=10.0.0.71
UUID=9c92fad9-6ecb-3e6c-eb4d-8a47c6f50c04
NETMASK=255.255.255.0
DHCP_HOSTNAME=an-node01.alteeve.com
 
</source>
<source lang="bash">
cat ifcfg-eth2
</source>
<source lang="text">
# Intel Corporation 82540EM Gigabit Ethernet Controller
# Intel Corporation 82540EM Gigabit Ethernet Controller
HWADDR=00:0E:0C:59:45:78
DEVICE=eth2
DEVICE=eth2
BOOTPROTO=static
HWADDR=00:0E:0C:59:46:E4
ONBOOT=yes
ONBOOT=no
TYPE=Ethernet
IPADDR=10.0.1.71
NETMASK=255.255.255.0
</source>
</source>


The important lines are the <span class="code">DEVICE=...</span> and <span class="code">HWADDR=...</span> lines. The rest of the lines will very likely differ from the output above, and most will likely be set to <span class="code">BOOTPROTO=static</span>. One or more may also be set to <span class="code">ONBOOT=yes</span>. It is outside the scope of this tutorial to cover the various settings
The important lines are the <span class="code">DEVICE=...</span> and <span class="code">HWADDR=...</span> lines. The rest of the lines will very likely differ from the output above, and most will likely be set to <span class="code">BOOTPROTO=static</span>. One or more may also be set to <span class="code">ONBOOT=yes</span>. It is outside the scope of this tutorial to cover the various settings


With networking stopped, all we need to do is change the <span class="code">HWADDR=...</span> lines in <span class="code">ifcfg-eth0</span> to have the MAC address from <span class="code">ifcfg-eth2</span> and vice-versa. For an exhaustive list of available options, please [http://docs.fedoraproject.org/en-US/Fedora/12/html/Deployment_Guide/s1-networkscripts-interfaces.html see the Fedora documentation].
For an exhaustive list of available options, please [http://docs.fedoraproject.org/en-US/Fedora/12/html/Deployment_Guide/s1-networkscripts-interfaces.html see the Fedora documentation].
 
With networking stopped, all we need to do is remove the <span class="code">HWADDR=...</span> lines. '''Personally''', I like to keep the network card name and the <span class="code">HWADDR=...</span> entries in my files, but comment them out. If you wish to do the same, move them to the appropriate file. Further, I use this time to further configure each interface to the values I want. Do whatever is right for you.


To rearrange the mappings, simply change around the <span class="code">HWADDR=...</span> values in the <span class="code">ifcfg-eth*</span> files so that the desired MAC address and <span class="code">DEVICE=...</span> are in the same file. Personally, I like to move around the comment at the top that names the NICs, also. Here is the updated files:
Here is the updated files with updated network settings:


<source lang="bash">
<source lang="bash">
cat ifcfg-eth*
cd /etc/sysconfig/network-scripts
cat ifcfg-eth0
</source>
</source>
<source lang="text">
<source lang="text">
# Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller
# Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller
HWADDR=90:E6:BA:71:82:D8
#HWADDR=90:E6:BA:71:82:EA
DEVICE=eth0
DEVICE=eth0
BOOTPROTO=static
BOOTPROTO=static
Line 143: Line 146:
DNS2=192.139.81.1
DNS2=192.139.81.1
DEFROUTE=yes
DEFROUTE=yes
 
</source>
<source lang="bash">
cat ifcfg-eth1
</source>
<source lang="text">
# D-Link System Inc DGE-560T PCI Express Gigabit Ethernet Adapter
# D-Link System Inc DGE-560T PCI Express Gigabit Ethernet Adapter
HWADDR=00:21:91:19:96:5A
#HWADDR=00:21:91:19:96:53
DEVICE=eth1
DEVICE=eth1
BOOTPROTO=static
BOOTPROTO=static
Line 152: Line 159:
IPADDR=10.0.0.71
IPADDR=10.0.0.71
NETMASK=255.255.255.0
NETMASK=255.255.255.0
 
</source>
<source lang="bash">
cat ifcfg-eth2
</source>
<source lang="text">
# Intel Corporation 82540EM Gigabit Ethernet Controller
# Intel Corporation 82540EM Gigabit Ethernet Controller
HWADDR=00:0E:0C:59:45:78
#HWADDR=00:0E:0C:59:46:E4
DEVICE=eth2
DEVICE=eth2
ONBOOT=yes
BOOTPROTO=static
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
TYPE=Ethernet
IPADDR=10.0.1.71
IPADDR=10.0.1.71
Line 167: Line 178:
The user-space device manager, [http://en.wikipedia.org/wiki/Udev udev], maintains a list of configuration files that help ensure that hardware to <span class="code">/dev</span> (software) mappings stay consistent, even when hardware is hot swapped or moved between physical connections. For networking hardware, this mapping is recorded in the <span class="code">70-persistent-net.rules</span>.
The user-space device manager, [http://en.wikipedia.org/wiki/Udev udev], maintains a list of configuration files that help ensure that hardware to <span class="code">/dev</span> (software) mappings stay consistent, even when hardware is hot swapped or moved between physical connections. For networking hardware, this mapping is recorded in the <span class="code">70-persistent-net.rules</span>.


Here, all that needs to be done is for the <span class="code">NAME="..."</span> entry to be changed to reflect what you want. Note that the entries do not need to be in any particular order.
Here, all that needs to be done is for the <span class="code">NAME="..."</span> entry to be changed to reflect what you want.
 
Note that the entries do not need to be in any particular order.


<source lang="bash">
<source lang="bash">
Line 180: Line 193:
# line, and change only the value of the NAME= key.
# line, and change only the value of the NAME= key.


# PCI device 0x10ec:0x8168 (r8169) (custom name provided by external tool)
# PCI device 0x8086:0x100e (e1000) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="90:e6:ba:71:82:d8", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0e:0c:59:46:e4", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"


# PCI device 0x1186:0x4b00 (sky2) (custom name provided by external tool)
# PCI device 0x1186:0x4b00 (sky2) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:21:91:19:96:5a", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:21:91:19:96:53", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"


# PCI device 0x8086:0x100e (e1000) (custom name provided by external tool)
# PCI device 0x10ec:0x8168 (r8169) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0e:0c:59:45:78", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="90:e6:ba:71:82:ea", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
</source>
</source>


Make the changes and save the file. Continuing with this example, the file should now look like this:
Make the changes and save the file. The file should now look like this:


<source lang="bash">
<source lang="bash">
cd /etc/udev/rules.d/
cat 70-persistent-net.rules
cat
</source>
</source>
<source lang="text">
<source lang="text">
Line 204: Line 216:


# PCI device 0x10ec:0x8168 (r8169) (custom name provided by external tool)
# PCI device 0x10ec:0x8168 (r8169) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="90:e6:ba:71:82:d8", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="90:e6:ba:71:82:ea", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"


# PCI device 0x1186:0x4b00 (sky2) (custom name provided by external tool)
# PCI device 0x1186:0x4b00 (sky2) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:21:91:19:96:5a", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:21:91:19:96:53", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"


# PCI device 0x8086:0x100e (e1000) (custom name provided by external tool)
# PCI device 0x8086:0x100e (e1000) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0e:0c:59:45:78", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0e:0c:59:46:e4", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"
</source>
</source>



Revision as of 23:21, 3 July 2010

 AN!Wiki :: How To :: Changing the ethX to Ethernet Device Mapping in EL6 and Fedora 12 to 14

WARNING: Currently being updated, please don't follow this How-To yet.

When you have two or more ethernet devices in one machine, the Fedora install may not install them in the order you want. This document will show you how to change the ethX to physical ethernet device mapping.

This is desirable in cases where specific network cards need to be used on specific networks, and you are interested in maintaining common ethX names across servers. A practical example is found in the Two Node Fedora 13 Cluster project.

For the Impatient

Assuming that NetworkManager is already removed.

/etc/init.d/network stop
vim /etc/sysconfig/network-scripts/ifcfg-eth*
# Make changes as needed
vim /etc/udev/rules.d/70-persistent-net.rules
# Make changes as needed
start_udev
/etc/init.d/network start

Thanks for fenris02 and mutk

Example

I find it easier to follow instructions when I have an example to follow, so let me provide one here:

I've got the same hardware in the same configuration in both of my storage nodes. To keep things simple, I want to make sure that both nodes use the same ethX name for the network devices on each of the given networks.

Desired Mapping

Let's assume that you want this:

  • eth0
    • Type: # Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller
    • MAC: 90:E6:BA:71:82:EA
  • eth1
    • Type: # D-Link System Inc DGE-560T PCI Express Gigabit Ethernet Adapter
    • MAC: 00:21:91:19:96:53
  • eth2
    • Type: # Intel Corporation 82540EM Gigabit Ethernet Controller
    • MAC: 00:0E:0C:59:46:E4

Initial Mapping

When the Fedora install finished, you may have gotten this:

  • eth0
    • Type: # D-Link System Inc DGE-560T PCI Express Gigabit Ethernet Adapter
    • MAC: 00:21:91:19:96:53
  • eth1
    • Type: # Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller
    • MAC: 90:E6:BA:71:82:EA
  • eth2
    • Type: # Intel Corporation 82540EM Gigabit Ethernet Controller
    • MAC: 00:0E:0C:59:46:E4

The Problem

In the above example, eth2 is where we want it, so we leave it alone. The problem is that eth0 and eth1 are reversed.

The Fix

Traditionally, the ethX to physical ethernet device was linked via the HWADDR=... argument in each NIC's ifcfg-ethX configuration file. With the introduction of udev, the HWADDR=... is no longer needed. Instead, this mapping is now made in the 70-persistent-net.rules udev configuration file.

So the trick then is to remove or comment-out the HWADDR=... argument in each NIC's ifcfg-ethX configuration file, then, change the NAME="ethX" in the udev configuration file to match the MAC address you want.

Stopping the Network

First, stop the network. This is important because if you change the MAC address to ethX mapping while the network is still up, the init.d script will fail to bring down the network devices and you will need to reboot for the changes to take effect.

/etc/init.d/network stop

Interface Configuration

Go to the /etc/sysconfig/network-scripts/ directory and then use cat to see the contents of the ifcfg-eth* network configuration files:

cd /etc/sysconfig/network-scripts
cat ifcfg-eth0
# D-Link System Inc DGE-560T PCI Express Gigabit Ethernet Adapter
DEVICE=eth0
BOOTPROTO=dhcp
DHCPCLASS=
HWADDR=00:21:91:19:96:53
ONBOOT=yes
DHCP_HOSTNAME=an-node01.alteeve.com
cat ifcfg-eth1
# Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller
DEVICE=eth1
BOOTPROTO=dhcp
DEFROUTE=yes
HWADDR=90:E6:BA:71:82:EA
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
ONBOOT=yes
OPTIONS=layer2=1
PEERDNS=yes
PEERROUTES=yes
TYPE=Ethernet
UUID=9c92fad9-6ecb-3e6c-eb4d-8a47c6f50c04
DHCP_HOSTNAME=an-node01.alteeve.com
cat ifcfg-eth2
# Intel Corporation 82540EM Gigabit Ethernet Controller
DEVICE=eth2
HWADDR=00:0E:0C:59:46:E4
ONBOOT=no

The important lines are the DEVICE=... and HWADDR=... lines. The rest of the lines will very likely differ from the output above, and most will likely be set to BOOTPROTO=static. One or more may also be set to ONBOOT=yes. It is outside the scope of this tutorial to cover the various settings

For an exhaustive list of available options, please see the Fedora documentation.

With networking stopped, all we need to do is remove the HWADDR=... lines. Personally, I like to keep the network card name and the HWADDR=... entries in my files, but comment them out. If you wish to do the same, move them to the appropriate file. Further, I use this time to further configure each interface to the values I want. Do whatever is right for you.

Here is the updated files with updated network settings:

cd /etc/sysconfig/network-scripts
cat ifcfg-eth0
# Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller
#HWADDR=90:E6:BA:71:82:EA
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.1.71
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.139.81.117
DNS2=192.139.81.1
DEFROUTE=yes
cat ifcfg-eth1
# D-Link System Inc DGE-560T PCI Express Gigabit Ethernet Adapter
#HWADDR=00:21:91:19:96:53
DEVICE=eth1
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=10.0.0.71
NETMASK=255.255.255.0
cat ifcfg-eth2
# Intel Corporation 82540EM Gigabit Ethernet Controller
#HWADDR=00:0E:0C:59:46:E4
DEVICE=eth2
ONBOOT=yes
BOOTPROTO=static
TYPE=Ethernet
IPADDR=10.0.1.71
NETMASK=255.255.255.0

'udev' Configuration

The user-space device manager, udev, maintains a list of configuration files that help ensure that hardware to /dev (software) mappings stay consistent, even when hardware is hot swapped or moved between physical connections. For networking hardware, this mapping is recorded in the 70-persistent-net.rules.

Here, all that needs to be done is for the NAME="..." entry to be changed to reflect what you want.

Note that the entries do not need to be in any particular order.

cd /etc/udev/rules.d/
cat 70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x8086:0x100e (e1000) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0e:0c:59:46:e4", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"

# PCI device 0x1186:0x4b00 (sky2) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:21:91:19:96:53", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x10ec:0x8168 (r8169) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="90:e6:ba:71:82:ea", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

Make the changes and save the file. The file should now look like this:

cat 70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x10ec:0x8168 (r8169) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="90:e6:ba:71:82:ea", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x1186:0x4b00 (sky2) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:21:91:19:96:53", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

# PCI device 0x8086:0x100e (e1000) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0e:0c:59:46:e4", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"

Making the Changes Take Effect

First, you need to reload udev so that it updates the mapping in memory. This is done using the start_udev program:

start_udev
Starting udev:                                             [  OK  ]

With udev updated, the last step is to restart the network daemon:

/etc/init.d/network start
Bringing up loopback interface:                            [  OK  ]
Bringing up interface eth0:                                [  OK  ]
Bringing up interface eth1:                                [  OK  ]
Bringing up interface eth2:                                [  OK  ]

Done! use ifconfig to verify that the network cards are properly assigned to the specified ethX names.

Caveat!

NOTE: If you are using a vlan, the device facing the vlan can not have the HWADDR=... value set! Set the others and leave this commented out. Otherwise, because of how the vlan loads, the OS will not see the physical device and will fail to bring up the interface at all.

 

Any questions, feedback, advice, complaints or meanderings are welcome.
Alteeve's Niche! Enterprise Support:
Alteeve Support
Community Support
© Alteeve's Niche! Inc. 1997-2024   Anvil! "Intelligent Availability®" Platform
legal stuff: All info is provided "As-Is". Do not use anything here unless you are willing and able to take responsibility for your own actions.