[rhel7-branch 1/1] network: add s390 options to default ifcfg files (#1074570)

rvykydal installerbot-noreply at redhat.com
Wed Jul 15 08:19:06 UTC 2015


From: Radek Vykydal <rvykydal at redhat.com>

Resolves: rhbz#1074570
---
 dracut/Makefile.am                  |  1 +
 dracut/anaconda-copy-s390ccwconf.sh |  3 +++
 dracut/module-setup.sh              |  1 +
 dracut/parse-kickstart              |  1 +
 pyanaconda/network.py               | 45 +++++++++++++++++++++++++++++++++++++
 5 files changed, 51 insertions(+)
 create mode 100755 dracut/anaconda-copy-s390ccwconf.sh

diff --git a/dracut/Makefile.am b/dracut/Makefile.am
index 71d6bed..b389a34 100644
--- a/dracut/Makefile.am
+++ b/dracut/Makefile.am
@@ -33,6 +33,7 @@ dist_dracut_SCRIPTS = module-setup.sh \
 		      anaconda-diskroot \
 		      anaconda-copy-ks.sh \
 		      anaconda-copy-cmdline.sh \
+		      anaconda-copy-s390ccwconf.sh \
 		      anaconda-ifcfg.sh \
 		      fetch-kickstart-net.sh \
 		      fetch-kickstart-disk \
diff --git a/dracut/anaconda-copy-s390ccwconf.sh b/dracut/anaconda-copy-s390ccwconf.sh
new file mode 100755
index 0000000..0074720
--- /dev/null
+++ b/dracut/anaconda-copy-s390ccwconf.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+# Copy over s390 config /etc/ccw.conf for anaconda before pivot
+[ -e /etc/ccw.conf ] && cp /etc/ccw.conf /run/install
diff --git a/dracut/module-setup.sh b/dracut/module-setup.sh
index 7e2df9f..5afdfcb 100755
--- a/dracut/module-setup.sh
+++ b/dracut/module-setup.sh
@@ -37,6 +37,7 @@ install() {
     inst "$moddir/anaconda-diskroot" "/sbin/anaconda-diskroot"
     inst_hook pre-pivot 50 "$moddir/anaconda-copy-ks.sh"
     inst_hook pre-pivot 50 "$moddir/anaconda-copy-cmdline.sh"
+    inst_hook pre-pivot 50 "$moddir/anaconda-copy-s390ccwconf.sh"
     inst_hook pre-pivot 99 "$moddir/save-initramfs.sh"
     inst_hook pre-shutdown 50 "$moddir/anaconda-pre-shutdown.sh"
     # kickstart parsing, WOOOO
diff --git a/dracut/parse-kickstart b/dracut/parse-kickstart
index a4f3666..89fdab6 100755
--- a/dracut/parse-kickstart
+++ b/dracut/parse-kickstart
@@ -264,6 +264,7 @@ def find_devname(mac):
         if thismac.lower() == mac.lower():
             return netif
 
+# We duplicate this in pyanaconda/network.py
 def s390_settings(device):
     cfg = {
         'SUBCHANNELS': '',
diff --git a/pyanaconda/network.py b/pyanaconda/network.py
index a9ba670..3e49e8f 100644
--- a/pyanaconda/network.py
+++ b/pyanaconda/network.py
@@ -35,6 +35,7 @@
 import IPy
 from uuid import uuid4
 import itertools
+import glob
 
 from pyanaconda.simpleconfig import SimpleConfigFile
 from blivet.devices import FcoeDiskDevice, iScsiDiskDevice
@@ -537,6 +538,18 @@ def add_connection_for_ksdata(networkdata, devname):
         values.append(['connection', 'id', devname, 's'])
         values.append(['connection', 'interface-name', devname, 's'])
 
+        # Add s390 settings
+        s390cfg = _get_s390_settings(devname)
+        if s390cfg['SUBCHANNELS']:
+            subchannels = s390cfg['SUBCHANNELS'].split(",")
+            values.append(['802-3-ethernet', 's390-subchannels', subchannels, 'as'])
+        if s390cfg['NETTYPE']:
+            values.append(['802-3-ethernet', 's390-nettype', s390cfg['NETTYPE'], 's'])
+        if s390cfg['OPTIONS']:
+            opts = s390cfg['OPTIONS'].split(" ")
+            opts_dict = {k:v for k,v in (o.split("=") for o in opts)}
+            values.append(['802-3-ethernet', 's390-options', opts_dict, 'a{ss}'])
+
         dev_spec = devname
 
     try:
@@ -547,6 +560,38 @@ def add_connection_for_ksdata(networkdata, devname):
     added_connections.insert(0, (con_uuid, dev_spec))
     return added_connections
 
+# We duplicate this in dracut/parse-kickstart
+def _get_s390_settings(devname):
+    cfg = {
+        'SUBCHANNELS': '',
+        'NETTYPE': '',
+        'OPTIONS': ''
+        }
+
+    subchannels = []
+    for symlink in sorted(glob.glob("/sys/class/net/%s/device/cdev[0-9]*" % devname)):
+        subchannels.append(os.path.basename(os.readlink(symlink)))
+    if not subchannels:
+        return cfg
+    cfg['SUBCHANNELS'] = ','.join(subchannels)
+
+    ## cat /etc/ccw.conf
+    #qeth,0.0.0900,0.0.0901,0.0.0902,layer2=0,portname=FOOBAR,portno=0
+    #
+    #SUBCHANNELS="0.0.0900,0.0.0901,0.0.0902"
+    #NETTYPE="qeth"
+    #OPTIONS="layer2=1 portname=FOOBAR portno=0"
+    with open('/run/install/ccw.conf') as f:
+        # pylint: disable=redefined-outer-name
+        for line in f:
+            if cfg['SUBCHANNELS'] in line:
+                items = line.strip().split(',')
+                cfg['NETTYPE'] = items[0]
+                cfg['OPTIONS'] = " ".join(i for i in items[1:] if '=' in i)
+                break
+
+    return cfg
+
 def _add_slave_connection(slave_type, slave, master, activate, values=None):
     values = values or []
     #slave_name = "%s slave %d" % (devname, slave_idx)


-- 
To view this commit on github, visit https://github.com/rhinstaller/anaconda/commit/779f323891762bf2fb98652639aa5691b948f5be


More information about the anaconda-patches mailing list