When the kernel's STP is not enabled it's possible for the user to explictly set the STP state of a netdev. This can be useful for switchdev driver authors who would like to make sure their driver acts accordingly.
The STP state is expressed as a number in order to be consistent with the underlying 'bridge' utility: 0 - port is DISABLED 1 - STP LISTENING state 2 - STP LEARNING state 3 - STP FORWARDING state 4 - STP BLOCKING state
Acked-by: Jiri Pirko jiri@mellanox.com Signed-off-by: Ido Schimmel idosch@mellanox.com --- lnst/Controller/Machine.py | 4 ++++ lnst/Controller/Task.py | 3 +++ lnst/Slave/BridgeTool.py | 9 +++++++++ lnst/Slave/NetTestSlave.py | 9 +++++++++ 4 files changed, 25 insertions(+)
diff --git a/lnst/Controller/Machine.py b/lnst/Controller/Machine.py index 9fdbaba..884b315 100644 --- a/lnst/Controller/Machine.py +++ b/lnst/Controller/Machine.py @@ -800,6 +800,10 @@ class Interface(object): self._machine._rpc_call_x(self._netns, "set_br_flooding", self._id, br_flooding_info)
+ def set_br_state(self, br_state_info): + self._machine._rpc_call_x(self._netns, "set_br_state", self._id, + br_state_info) + def set_speed(self, speed): self._machine._rpc_call_x(self._netns, "set_speed", self._id, speed)
diff --git a/lnst/Controller/Task.py b/lnst/Controller/Task.py index 21d4fb3..5462d44 100644 --- a/lnst/Controller/Task.py +++ b/lnst/Controller/Task.py @@ -576,6 +576,9 @@ class InterfaceAPI(object): def set_br_flooding(_self, on=True, self=False, master=False): _self._if.set_br_flooding({"on": on, "self": self, "master": master})
+ def set_br_state(_self, state, self=False, master=False): + _self._if.set_br_state({"state": state, "self": self, "master": master}) + def set_speed(self, speed): return self._if.set_speed(speed)
diff --git a/lnst/Slave/BridgeTool.py b/lnst/Slave/BridgeTool.py index fea9201..5e8f497 100644 --- a/lnst/Slave/BridgeTool.py +++ b/lnst/Slave/BridgeTool.py @@ -108,3 +108,12 @@ class BridgeTool:
def set_flooding(self, br_flooding_info): return self._set_link("flood", br_flooding_info) + + def set_state(self, br_state_info): + cmd = "bridge link set dev %s state %s" % (self._dev_name, + br_state_info["state"]) + if br_state_info["self"]: + cmd += " self" + if br_state_info["master"]: + cmd += " master" + exec_cmd(cmd) diff --git a/lnst/Slave/NetTestSlave.py b/lnst/Slave/NetTestSlave.py index ba57c07..1428497 100644 --- a/lnst/Slave/NetTestSlave.py +++ b/lnst/Slave/NetTestSlave.py @@ -772,6 +772,15 @@ class SlaveMethods: brt.set_flooding(br_flooding_info) return True
+ def set_br_state(self, if_id, br_state_info): + dev = self._if_manager.get_mapped_device(if_id) + if not dev: + logging.error("Device with id '%s' not found." % if_id) + return False + brt = BridgeTool(dev.get_name()) + brt.set_state(br_state_info) + return True + def set_speed(self, if_id, speed): dev = self._if_manager.get_mapped_device(if_id) if dev is not None:
Wed, Jan 20, 2016 at 05:29:25PM CET, idosch@mellanox.com wrote:
When the kernel's STP is not enabled it's possible for the user to explictly set the STP state of a netdev. This can be useful for switchdev driver authors who would like to make sure their driver acts accordingly.
The STP state is expressed as a number in order to be consistent with the underlying 'bridge' utility: 0 - port is DISABLED 1 - STP LISTENING state 2 - STP LEARNING state 3 - STP FORWARDING state 4 - STP BLOCKING state
Acked-by: Jiri Pirko jiri@mellanox.com Signed-off-by: Ido Schimmel idosch@mellanox.com
applied, thanks
lnst-developers@lists.fedorahosted.org