[PATCH rhel7-branch] network: don't write HWADDR in ifcfgs generated by kickstart (#1040461)

Radek Vykydal rvykydal at redhat.com
Tue Aug 26 12:24:26 UTC 2014


Having persistent device names now, let's just bind configuration to device
name (DEVICE) leaving HWADDR out. Having both of them in ifcfg binds device
name to HWADDR (device is renamed by initscript's 60-net-rules) which is not
what we want eg in cases when moving or replacing NICs.

For special case where device renaming is configured by installation ifname=
dracut boot option we add also the HWADDR into ifcfg file.

Resolves: rhbz#1040461
---
 dracut/parse-kickstart |  7 +++++--
 pyanaconda/network.py  | 11 ++++++++---
 2 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/dracut/parse-kickstart b/dracut/parse-kickstart
index a8ece63..47f6e01 100755
--- a/dracut/parse-kickstart
+++ b/dracut/parse-kickstart
@@ -330,7 +330,10 @@ def ksnet_to_ifcfg(net, filename=None):
         if not os.path.isdir("/tmp/ifcfg"):
             os.makedirs("/tmp/ifcfg")
     ifcfg['DEVICE'] = dev
-    ifcfg['HWADDR'] = readsysfile("/sys/class/net/%s/address" % dev)
+    hwaddr = readsysfile("/sys/class/net/%s/address" % dev)
+    if "ifname={0}:{1}".format(dev, hwaddr).upper() in open("/proc/cmdline").read().upper():
+        # rename by initscript's 60-net-rules on target system after switchroot
+        ifcfg['HWADDR'] = hwaddr
     ifcfg['UUID'] = str(uuid.uuid4())
     # we set real ONBOOT value in anaconda, here
     # we use it to activate devcies by NM on start
@@ -338,7 +341,7 @@ def ksnet_to_ifcfg(net, filename=None):
 
     s390cfg = s390_settings(dev)
     if s390cfg['SUBCHANNELS']:
-        ifcfg.pop('HWADDR')
+        ifcfg.pop('HWADDR', None)
         ifcfg['SUBCHANNELS'] = s390cfg['SUBCHANNELS']
     if s390cfg['NETTYPE']:
         ifcfg['NETTYPE'] = s390cfg['NETTYPE']
diff --git a/pyanaconda/network.py b/pyanaconda/network.py
index 75d2711..afd1cd2 100644
--- a/pyanaconda/network.py
+++ b/pyanaconda/network.py
@@ -543,11 +543,16 @@ def add_connection_for_ksdata(networkdata, devname):
         dev_spec = None
     # type "802-3-ethernet"
     else:
+        mac = nm.nm_device_perm_hwaddress(devname)
+        if flags.cmdline.get("ifname", "").upper() == "{0}:{1}".format(devname, mac).upper():
+            mac = [int(b, 16) for b in mac.split(":")]
+            values.append(['802-3-ethernet', 'mac-address', mac, 'ay'])
+        else:
+            values.append(['802-3-ethernet', 'name', devname, 's'])
         values.append(['connection', 'type', '802-3-ethernet', 's'])
         values.append(['connection', 'id', devname, 's'])
-        mac = nm.nm_device_perm_hwaddress(devname)
-        mac = [int(b, 16) for b in mac.split(":")]
-        values.append(['802-3-ethernet', 'mac-address', mac, 'ay'])
+        values.append(['connection', 'interface-name', devname, 's'])
+
         dev_spec = devname
 
     nm.nm_add_connection(values)
-- 
1.9.3



More information about the anaconda-patches mailing list