commit b3e6b4a754be30844054d8a949c05b425a92f1b1 Author: Ondrej Lichtner olichtne@redhat.com Date: Mon Sep 29 16:08:25 2014 +0200
NetTestSlave: redo mapping of devices that change netns
This patch adds a new slave method "unmap_if" that removes the mapping of the specified interface id.
I also changed how interface mapping and network namespaces work - previously the mapping was copied from the main process when the namespace was created, now the mapping gets cleared and each interface is mapped separately when it's moved to its target netns and unmapped when it's returning.
Signed-off-by: Ondrej Lichtner olichtne@redhat.com Signed-off-by: Jiri Pirko jiri@resnulli.us
lnst/Slave/InterfaceManager.py | 3 +++ lnst/Slave/NetTestSlave.py | 27 ++++++++++++--------------- 2 files changed, 15 insertions(+), 15 deletions(-) --- diff --git a/lnst/Slave/InterfaceManager.py b/lnst/Slave/InterfaceManager.py index 5353eb8..fb191b0 100644 --- a/lnst/Slave/InterfaceManager.py +++ b/lnst/Slave/InterfaceManager.py @@ -47,6 +47,9 @@ class InterfaceManager(object): self._id_mapping[if_id] = if_index return
+ def unmap_if(self, if_id): + del self._id_mapping[if_id] + def clear_if_mapping(self): self._id_mapping = {}
diff --git a/lnst/Slave/NetTestSlave.py b/lnst/Slave/NetTestSlave.py index ff29e9e..eeb0337 100644 --- a/lnst/Slave/NetTestSlave.py +++ b/lnst/Slave/NetTestSlave.py @@ -119,6 +119,10 @@ class SlaveMethods:
return devices
+ def unmap_if(self, if_id): + self._if_manager.unmap_if(if_id) + return True + def get_devices(self): self._if_manager.rescan_devices() devices = self._if_manager.get_devices() @@ -191,13 +195,6 @@ class SlaveMethods: hwaddr = dev1.get_hwaddr() self.set_if_netns(if_id1, config1["netns"])
- msg = {"type": "command", "method_name": "map_if_by_hwaddr", - "args": [if_id1, hwaddr]} - self._server_handler.send_data_to_netns(config1["netns"], msg) - result = self._slave_server.wait_for_result(config1["netns"]) - if len(result["result"]) != 1: - raise Exception("Mapping failed.") - msg = {"type": "command", "method_name": "configure_interface", "args": [if_id1, config1]} self._server_handler.send_data_to_netns(config1["netns"], msg) @@ -210,13 +207,6 @@ class SlaveMethods: hwaddr = dev2.get_hwaddr() self.set_if_netns(if_id2, config2["netns"])
- msg = {"type": "command", "method_name": "map_if_by_hwaddr", - "args": [if_id2, hwaddr]} - self._server_handler.send_data_to_netns(config2["netns"], msg) - result = self._slave_server.wait_for_result(config2["netns"]) - if len(result["result"]) != 1: - raise Exception("Mapping failed.") - msg = {"type": "command", "method_name": "configure_interface", "args": [if_id2, config2]} self._server_handler.send_data_to_netns(config2["netns"], msg) @@ -544,6 +534,7 @@ class SlaveMethods: self._server_handler.clear_netns_connections()
self._if_manager.reconnect_netlink() + self._if_manager.clear_if_mapping() self._server_handler.add_connection('netlink', self._if_manager.get_nl_socket())
@@ -581,9 +572,14 @@ class SlaveMethods: device = self._if_manager.get_mapped_device(if_id) dev_name = device.get_name() device.set_netns(netns) + hwaddr = device.get_hwaddr()
exec_cmd("ip link set %s netns %d" % (dev_name, netns_pid)) - return True + msg = {"type": "command", "method_name": "map_if_by_hwaddr", + "args": [if_id, hwaddr]} + self._server_handler.send_data_to_netns(netns, msg) + result = self._slave_server.wait_for_result(netns) + return result
def return_if_netns(self, if_id): device = self._if_manager.get_mapped_device(if_id) @@ -591,6 +587,7 @@ class SlaveMethods: dev_name = device.get_name() ppid = os.getppid() exec_cmd("ip link set %s netns %d" % (dev_name, ppid)) + self._if_manager.unmap_if(if_id) return True else: netns = device.get_netns()
lnst-developers@lists.fedorahosted.org