It is useful for driver authors to be able to add or remove net devices
from certain master devices, so allow a user to do that from inside a
task.
This is currently only supported by bridge and team.
Acked-by: Jiri Pirko <jiri(a)mellanox.com>
Signed-off-by: Ido Schimmel <idosch(a)mellanox.com>
---
v1->v2:
* Rebase correctly on top of Ondrej's patch.
---
lnst/Controller/Machine.py | 6 ++++++
lnst/Controller/Task.py | 6 ++++++
lnst/Slave/InterfaceManager.py | 8 ++++++++
lnst/Slave/NetTestSlave.py | 18 ++++++++++++++++++
4 files changed, 38 insertions(+)
diff --git a/lnst/Controller/Machine.py b/lnst/Controller/Machine.py
index 36f5e9b..9fdbaba 100644
--- a/lnst/Controller/Machine.py
+++ b/lnst/Controller/Machine.py
@@ -806,6 +806,12 @@ class Interface(object):
def set_autoneg(self):
self._machine._rpc_call_x(self._netns, "set_autoneg", self._id)
+ def slave_add(self, if_id):
+ self._machine._rpc_call_x(self._netns, "slave_add", self._id, if_id)
+
+ def slave_del(self, if_id):
+ self._machine._rpc_call_x(self._netns, "slave_del", self._id, if_id)
+
class StaticInterface(Interface):
""" Static interface
diff --git a/lnst/Controller/Task.py b/lnst/Controller/Task.py
index 9054471..21d4fb3 100644
--- a/lnst/Controller/Task.py
+++ b/lnst/Controller/Task.py
@@ -582,6 +582,12 @@ class InterfaceAPI(object):
def set_autoneg(self):
return self._if.set_autoneg()
+ def slave_add(self, slave_id):
+ return self._if.slave_add(slave_id)
+
+ def slave_del(self, slave_id):
+ return self._if.slave_del(slave_id)
+
class ModuleAPI(object):
""" An API class representing a module. """
diff --git a/lnst/Slave/InterfaceManager.py b/lnst/Slave/InterfaceManager.py
index 144f5a7..edeb5bc 100644
--- a/lnst/Slave/InterfaceManager.py
+++ b/lnst/Slave/InterfaceManager.py
@@ -550,3 +550,11 @@ class Device(object):
def set_autoneg(self):
exec_cmd("ethtool -s %s autoneg on" % self._name)
+
+ def slave_add(self, if_id):
+ if self._conf != None:
+ self._conf.slave_add(if_id)
+
+ def slave_del(self, if_id):
+ if self._conf != None:
+ self._conf.slave_del(if_id)
diff --git a/lnst/Slave/NetTestSlave.py b/lnst/Slave/NetTestSlave.py
index 1908bfe..ba57c07 100644
--- a/lnst/Slave/NetTestSlave.py
+++ b/lnst/Slave/NetTestSlave.py
@@ -794,6 +794,24 @@ class SlaveMethods:
self._if_manager.wait_interface_init()
return True
+ def slave_add(self, if_id, slave_id):
+ dev = self._if_manager.get_mapped_device(if_id)
+ if dev is not None:
+ dev.slave_add(slave_id)
+ else:
+ logging.error("Device with id '%s' not found." % if_id)
+ return False
+ return True
+
+ def slave_del(self, if_id, slave_id):
+ dev = self._if_manager.get_mapped_device(if_id)
+ if dev is not None:
+ dev.slave_del(slave_id)
+ else:
+ logging.error("Device with id '%s' not found." % if_id)
+ return False
+ return True
+
class ServerHandler(ConnectionHandler):
def __init__(self, addr):
super(ServerHandler, self).__init__()
--
2.4.10