commit 1a487a1bbda9a5a5a0bcfd8cc9d95decb0847ed2
Author: Radek Pazdera <rpazdera(a)redhat.com>
Date: Fri Jun 8 12:19:28 2012 +0200
NetConfig: Adding libteam/teamdev support
This commit introduces team device support to LNST. Example net
configuration to demonstrate usage of team with LNST was added as well.
Signed-off-by: Radek Pazdera <rpazdera(a)redhat.com>
NetConfig/NetConfigDevNames.py | 6 ++++
NetConfig/NetConfigDevice.py | 36 +++++++++++++++++++++++++++-
NetConfig/NetConfigParse.py | 2 +-
example_recipes/net_configs/team1.xml | 42 +++++++++++++++++++++++++++++++++
4 files changed, 84 insertions(+), 2 deletions(-)
---
diff --git a/NetConfig/NetConfigDevNames.py b/NetConfig/NetConfigDevNames.py
index a8636f6..8522e00 100644
--- a/NetConfig/NetConfigDevNames.py
+++ b/NetConfig/NetConfigDevNames.py
@@ -76,6 +76,9 @@ class NetConfigDevNames:
def _assign_name_macvlan(self, netdev, config):
self._assign_name_generic("t_macvlan", netdev, config)
+ def _assign_name_team(self, netdev, config):
+ self._assign_name_generic("t_team", netdev, config)
+
def _assign_name_vlan(self, netdev, config):
real_netdev = config[netdev["slaves"][0]]
vlan_tci = get_option(netdev, "vlan_tci")
@@ -95,6 +98,9 @@ class NetConfigDevNames:
self._assign_name_bridge(netdev, config)
elif dev_type == "macvlan":
self._assign_name_macvlan(netdev, config)
+ elif dev_type == "team":
+ self._assign_name_team(netdev, config)
+
'''
In second round assign names for vlans as they use
previously assigned names
diff --git a/NetConfig/NetConfigDevice.py b/NetConfig/NetConfigDevice.py
index e024db7..be8e673 100644
--- a/NetConfig/NetConfigDevice.py
+++ b/NetConfig/NetConfigDevice.py
@@ -212,12 +212,46 @@ class NetConfigDeviceVlan(NetConfigDeviceGeneric):
else:
exec_cmd("vconfig rem %s" % dev_name)
+class NetConfigDeviceTeam(NetConfigDeviceGeneric):
+ _pidfile = None
+
+ def _slaves_up(self):
+ for slaveid in get_slaves(self._netdev):
+ slavenetdev = self._config[slaveid]
+ NetConfigDevice(slavenetdev, self._config).up()
+
+ def _slaves_down(self):
+ for slaveid in get_slaves(self._netdev):
+ slavenetdev = self._config[slaveid]
+ NetConfigDevice(slavenetdev, self._config).down()
+
+ def configure(self):
+ self._slaves_down()
+
+ teamd_config = get_option(self._netdev, "teamd_config")
+ teamd_config = teamd_config.replace('"', '\\"')
+
+ dev_name = self._netdev["name"]
+ pidfile = "/var/run/teamd_%s.pid" % dev_name
+
+ exec_cmd("teamd -r -d -c \"%s\" -t %s -p %s" % (teamd_config, dev_name, pidfile))
+
+ self._pidfile = pidfile
+
+ def deconfigure(self):
+ dev_name = self._netdev["name"]
+ pidfile = "/var/run/teamd_%s.pid" % dev_name
+
+ exec_cmd("teamd -k -p %s" % pidfile)
+ self._slaves_up()
+
type_class_mapping = {
"eth": NetConfigDeviceEth,
"bond": NetConfigDeviceBond,
"bridge": NetConfigDeviceBridge,
"macvlan": NetConfigDeviceMacvlan,
- "vlan": NetConfigDeviceVlan
+ "vlan": NetConfigDeviceVlan,
+ "team": NetConfigDeviceTeam
}
def NetConfigDevice(netdev, config):
diff --git a/NetConfig/NetConfigParse.py b/NetConfig/NetConfigParse.py
index ff148e5..9097e88 100644
--- a/NetConfig/NetConfigParse.py
+++ b/NetConfig/NetConfigParse.py
@@ -192,7 +192,7 @@ class NetConfigParse:
if dev_type == "eth":
pass
- elif dev_type in ["bond", "bridge", "vlan", "macvlan"]:
+ elif dev_type in ["bond", "bridge", "vlan", "macvlan", "team"]:
self._parse_options(netdev, dom_netdev, config)
self._parse_slaves(netdev, dom_netdev, config)
else:
diff --git a/example_recipes/net_configs/team1.xml b/example_recipes/net_configs/team1.xml
new file mode 100644
index 0000000..4bebf13
--- /dev/null
+++ b/example_recipes/net_configs/team1.xml
@@ -0,0 +1,42 @@
+<netconfig>
+ <netdevice id="1" type="eth" phys_id="1" />
+ <netdevice id="2" type="eth" phys_id="2" />
+ <netdevice id="5" type="team">
+ <options>
+ <!-- Team device name can be omitted from teamd config,
+ because it will be overridden by LNST anyway. -->
+ <option name="teamd_config">
+ {
+ "runner": {"name": "roundrobin"},
+ "ports": {"eth1": {}, "eth2": {}}
+ }
+ </option>
+ </options>
+ <slaves>
+ <slave id="1" />
+ <slave id="2" />
+ </slaves>
+ <addresses>
+ <address value="192.168.122.200/24" />
+ </addresses>
+ </netdevice>
+ <netdevice id="3" type="eth" phys_id="3" />
+ <netdevice id="4" type="eth" phys_id="4" />
+ <netdevice id="6" type="team">
+ <options>
+ <option name="teamd_config">
+ {
+ "runner": {"name": "roundrobin"},
+ "ports": {"eth3": {}, "eth4": {}}
+ }
+ </option>
+ </options>
+ <slaves>
+ <slave id="3" />
+ <slave id="4" />
+ </slaves>
+ <addresses>
+ <address value="192.168.122.210/24" />
+ </addresses>
+ </netdevice>
+</netconfig>