[PATCH rhel7-branch 5/6] network: add bridge support for kickstart %pre phase (#1075195)
Radek Vykydal
rvykydal at redhat.com
Thu Sep 25 11:30:34 UTC 2014
Resolves: rhbz#1075195
---
pyanaconda/network.py | 115 +++++++++++++++++++++++++++-----------------------
1 file changed, 62 insertions(+), 53 deletions(-)
diff --git a/pyanaconda/network.py b/pyanaconda/network.py
index 867fa5b..d63d8c3 100644
--- a/pyanaconda/network.py
+++ b/pyanaconda/network.py
@@ -465,31 +465,8 @@ def add_connection_for_ksdata(networkdata, devname):
values.append(['bond', 'interface-name', devname, 's'])
options = bond_options_ksdata_to_dbus(networkdata.bondopts)
values.append(['bond', 'options', options, 'a{ss}'])
- for _i, slave in enumerate(networkdata.bondslaves.split(","), 1):
-
- #slave_name = "%s slave %d" % (devname, i)
- slave_name = slave
-
- svalues = []
- suuid = str(uuid4())
- svalues.append(['connection', 'uuid', suuid, 's'])
- svalues.append(['connection', 'id', slave_name, 's'])
- svalues.append(['connection', 'slave-type', 'bond', 's'])
- svalues.append(['connection', 'master', devname, 's'])
- svalues.append(['connection', 'type', '802-3-ethernet', 's'])
- mac = nm.nm_device_perm_hwaddress(slave)
- mac = [int(b, 16) for b in mac.split(":")]
- svalues.append(['802-3-ethernet', 'mac-address', mac, 'ay'])
-
- # disconnect slaves
- if networkdata.activate:
- nm.nm_disconnect_device(slave)
- # remove ifcfg file
- ifcfg_path = find_ifcfg_file_of_device(slave)
- if ifcfg_path and os.access(ifcfg_path, os.R_OK):
- os.unlink(ifcfg_path)
-
- nm.nm_add_connection(svalues)
+ for slave in networkdata.bondslaves.split(","):
+ suuid = _add_slave_connection('bond', slave, devname, networkdata.activate)
added_connections.append((suuid, slave))
dev_spec = None
# type "team"
@@ -498,33 +475,9 @@ def add_connection_for_ksdata(networkdata, devname):
values.append(['connection', 'id', devname, 's'])
values.append(['team', 'interface-name', devname, 's'])
values.append(['team', 'config', networkdata.teamconfig, 's'])
- for _i, (slave, cfg) in enumerate(networkdata.teamslaves):
-
- # assume ethernet, TODO: infiniband, wifi, vlan
- #slave_name = "%s slave %d" % (devname, i)
- slave_name = slave
-
- svalues = []
- suuid = str(uuid4())
- svalues.append(['connection', 'uuid', suuid, 's'])
- svalues.append(['connection', 'id', slave_name, 's'])
- svalues.append(['connection', 'slave-type', 'team', 's'])
- svalues.append(['connection', 'master', devname, 's'])
- svalues.append(['connection', 'type', '802-3-ethernet', 's'])
- mac = nm.nm_device_perm_hwaddress(slave)
- mac = [int(b, 16) for b in mac.split(":")]
- svalues.append(['802-3-ethernet', 'mac-address', mac, 'ay'])
- svalues.append(['team-port', 'config', cfg, 's'])
-
- # disconnect slaves
- if networkdata.activate:
- nm.nm_disconnect_device(slave)
- # remove ifcfg file
- ifcfg_path = find_ifcfg_file_of_device(slave)
- if ifcfg_path and os.access(ifcfg_path, os.R_OK):
- os.unlink(ifcfg_path)
-
- nm.nm_add_connection(svalues)
+ for (slave, cfg) in networkdata.teamslaves:
+ values = [['team-port', 'config', cfg, 's']]
+ suuid = _add_slave_connection('team', slave, devname, networkdata.activate, values)
added_connections.append((suuid, slave))
dev_spec = None
# type "vlan"
@@ -535,6 +488,30 @@ def add_connection_for_ksdata(networkdata, devname):
values.append(['vlan', 'interface-name', devname, 's'])
values.append(['vlan', 'id', int(networkdata.vlanid), 'u'])
dev_spec = None
+ # type "bridge"
+ if networkdata.bridgeslaves:
+ # bridge connection is autoactivated
+ values.append(['connection', 'type', 'bridge', 's'])
+ values.append(['connection', 'id', devname, 's'])
+ values.append(['bridge', 'interface-name', devname, 's'])
+ for opt in networkdata.bridgeopts.split(","):
+ key, _sep, value = opt.partition("=")
+ if key == "stp":
+ if value == "yes":
+ values.append(['bridge', key, True, 'b'])
+ elif value == "no":
+ values.append(['bridge', key, False, 'b'])
+ continue
+ try:
+ value = int(value)
+ except ValueError:
+ log.error("Invalid bridge option %s", opt)
+ continue
+ values.append(['bridge', key, int(value), 'u'])
+ for slave in networkdata.bridgeslaves.split(","):
+ suuid = _add_slave_connection('bridge', slave, devname, networkdata.activate)
+ added_connections.append((suuid, slave))
+ dev_spec = None
# type "802-3-ethernet"
else:
mac = nm.nm_device_perm_hwaddress(devname)
@@ -557,6 +534,38 @@ def add_connection_for_ksdata(networkdata, devname):
added_connections.insert(0, (con_uuid, dev_spec))
return added_connections
+def _add_slave_connection(slave_type, slave, master, activate, values=None):
+ values = values or []
+ #slave_name = "%s slave %d" % (devname, slave_idx)
+ slave_name = slave
+
+ values = []
+ suuid = str(uuid4())
+ # assume ethernet, TODO: infiniband, wifi, vlan
+ values.append(['connection', 'uuid', suuid, 's'])
+ values.append(['connection', 'id', slave_name, 's'])
+ values.append(['connection', 'slave-type', slave_type, 's'])
+ values.append(['connection', 'master', master, 's'])
+ values.append(['connection', 'type', '802-3-ethernet', 's'])
+ mac = nm.nm_device_perm_hwaddress(slave)
+ mac = [int(b, 16) for b in mac.split(":")]
+ values.append(['802-3-ethernet', 'mac-address', mac, 'ay'])
+
+ # disconnect slaves
+ if activate:
+ try:
+ nm.nm_disconnect_device(slave)
+ except nm.DeviceNotActiveError:
+ pass
+ # remove ifcfg file
+ ifcfg_path = find_ifcfg_file_of_device(slave)
+ if ifcfg_path and os.access(ifcfg_path, os.R_OK):
+ os.unlink(ifcfg_path)
+
+ nm.nm_add_connection(values)
+
+ return suuid
+
def ksdata_from_ifcfg(devname, uuid=None):
if devname not in nm.nm_devices():
@@ -1138,7 +1147,7 @@ def get_device_name(network_data):
if not dev_name:
return ""
if dev_name not in nm.nm_devices():
- if not any((network_data.vlanid, network_data.bondslaves, network_data.teamslaves)):
+ if not any((network_data.vlanid, network_data.bondslaves, network_data.teamslaves, network_data.bridgeslaves)):
return ""
if network_data.vlanid:
network_data.parent = dev_name
--
1.9.3
More information about the anaconda-patches
mailing list