[PATCH f17-branch] dracut: fix kickstarting with 'network --device=MAC'

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



parse-kickstart needs to check the device to see if it's a MAC and do
the right thing when it is.
---
 dracut/parse-kickstart |   34 +++++++++++++++++++++++++++++-----
 1 files changed, 29 insertions(+), 5 deletions(-)

diff --git a/dracut/parse-kickstart b/dracut/parse-kickstart
index e2e9223..6ef8701 100755
--- a/dracut/parse-kickstart
+++ b/dracut/parse-kickstart
@@ -135,11 +135,32 @@ def init_logger():
         pass
     return logger
 
+def is_mac(addr):
+    return addr and len(addr) == 17 and addr.count(":") == 5 # good enough
+
+def find_devname(mac):
+    sysdir="/sys/class/net"
+    for netif in os.listdir("/sys/class/net"):
+        try:
+            thismac = readfile("/sys/class/net/%s/address" % netif)
+        except IOError:
+            pass
+        else:
+            if thismac.lower() == mac.lower():
+                return netif
+
 def ksnet_to_dracut(args, lineno, net, bootdev=False):
     '''Translate the kickstart network data into dracut network data.'''
     line = []
-
     ip=""
+
+    if is_mac(net.device): # this is a MAC - find the interface name
+        mac = net.device
+        net.device = find_devname(mac)
+        if net.device is None:  # iface not active - pick a name for it
+            net.device = "eth0" # we only get called once, so this is OK
+            line.append("ifname=%s:%s" % (net.device, mac.lower()))
+
     # NOTE: dracut currently only does ipv4 *or* ipv6, so only one ip=arg..
     if net.bootProto in (BOOTPROTO_DHCP, BOOTPROTO_BOOTP):
         ip="dhcp"
@@ -204,15 +225,18 @@ def readfile(f):
 
 def ksnet_to_ifcfg(net, filename=None):
     '''Write an ifcfg file for the given kickstart network config'''
-    if not net.device:
+    dev = net.device
+    if is_mac(dev):
+        dev = find_devname(dev)
+    if not dev:
         return
     ifcfg = dict()
     if filename is None:
-        filename = "/tmp/ifcfg/ifcfg-%s" % net.device
+        filename = "/tmp/ifcfg/ifcfg-%s" % dev
         if not os.path.isdir("/tmp/ifcfg"):
             os.makedirs("/tmp/ifcfg")
-    ifcfg['DEVICE'] = net.device
-    ifcfg['HWADDR'] = readfile("/sys/class/net/%s/address" % net.device)
+    ifcfg['DEVICE'] = dev
+    ifcfg['HWADDR'] = readfile("/sys/class/net/%s/address" % dev)
     ifcfg['UUID'] = readfile("/proc/sys/kernel/random/uuid")
     ifcfg['ONBOOT'] = "yes" if net.onboot else "no"
 
-- 
1.7.7.6

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/anaconda-devel-list


[Index of Archives]     [Kickstart]     [Fedora Users]     [Fedora Legacy List]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]
  Powered by Linux