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(a)mellanox.com>
Signed-off-by: Ido Schimmel <idosch(a)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:
--
2.4.10
Show replies by thread
Wed, Jan 20, 2016 at 05:29:25PM CET, idosch(a)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(a)mellanox.com>
Signed-off-by: Ido Schimmel <idosch(a)mellanox.com>
applied, thanks