Resolves: rhbz#1074570
Added label: rhel7-branch.
From: Radek Vykydal rvykydal@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)
@@ -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
Shouldn't this check to make sure it is running on s390?
@@ -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:
Should probably add a check for the file's existance, even though on non-s390 the subchannel check above will return the default dict and skip this.
Looks ok other than those comments.
Added label: ACK.
@@ -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
I thought it is not necessary but now I think we don't want to call the stuff on non-s390 arch, and we are already checking for s390 arch in the module, so I'll add the check.
@@ -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:
Okay, I'll add it.
Closed.
Pushed with changes proposed by bcl.
anaconda-patches@lists.fedorahosted.org