summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2019-09-24 22:08:21 +0200
committerChristian Poessinger <christian@poessinger.com>2019-09-24 22:08:21 +0200
commit0588f5409f57a8d8577bc9bd23c393487fd2987b (patch)
treee51f4d72af89d7918ba5cd2adca01f4b4e5040b8
parent1dc92ac5a36b2e1f3e1f8dc2248e68892bfda248 (diff)
downloadvyos-1x-0588f5409f57a8d8577bc9bd23c393487fd2987b.tar.gz
vyos-1x-0588f5409f57a8d8577bc9bd23c393487fd2987b.zip
Python/ifconfig: T1557: add STPIf class (spanning tree) bridge member
-rw-r--r--python/vyos/ifconfig.py66
-rwxr-xr-xsrc/conf_mode/interface-bridge.py13
2 files changed, 47 insertions, 32 deletions
diff --git a/python/vyos/ifconfig.py b/python/vyos/ifconfig.py
index a959e55d8..a77cde5e7 100644
--- a/python/vyos/ifconfig.py
+++ b/python/vyos/ifconfig.py
@@ -641,6 +641,47 @@ class DummyIf(Interface):
super().__init__(ifname, type='dummy')
+class STPIf(Interface):
+ """
+ A spanning-tree capable interface. This applies only to bridge port member
+ interfaces!
+ """
+ def __init__(self, ifname):
+ super().__init__(ifname)
+
+ def set_path_cost(self, cost):
+ """
+ Set interface path cost, only relevant for STP enabled interfaces
+
+ Example:
+
+ >>> from vyos.ifconfig import Interface
+ >>> Interface('eth0').set_path_cost(4)
+ """
+ if not os.path.isfile('/sys/class/net/{}/brport/path_cost'
+ .format(self._ifname)):
+ raise TypeError('{} is not a bridge port member'.format(self._ifname))
+
+ return self._write_sysfs('/sys/class/net/{}/brport/path_cost'
+ .format(self._ifname), cost)
+
+ def set_path_priority(self, priority):
+ """
+ Set interface path priority, only relevant for STP enabled interfaces
+
+ Example:
+
+ >>> from vyos.ifconfig import Interface
+ >>> Interface('eth0').set_path_priority(4)
+ """
+ if not os.path.isfile('/sys/class/net/{}/brport/priority'
+ .format(self._ifname)):
+ raise TypeError('{} is not a bridge port member'.format(self._ifname))
+
+ return self._write_sysfs('/sys/class/net/{}/brport/priority'
+ .format(self._ifname), priority)
+
+
class BridgeIf(Interface):
"""
@@ -774,31 +815,6 @@ class BridgeIf(Interface):
cmd = 'ip link set dev {} nomaster'.format(interface)
self._cmd(cmd)
- def set_path_cost(self, interface, cost):
- """
- Set interface path cost, only relevant for STP enabled interfaces
-
- Example:
-
- >>> from vyos.ifconfig import Interface
- >>> Interface('eth0').path_cost(4)
- """
- return self._write_sysfs('/sys/class/net/{}/brif/{}/path_cost'
- .format(self._ifname, interface), cost)
-
- def set_path_priority(self, interface, priority):
- """
- Set interface path priority, only relevant for STP enabled interfaces
-
- Example:
-
- >>> from vyos.ifconfig import Interface
- >>> Interface('eth0').priority(4)
- """
- return self._write_sysfs('/sys/class/net/{}/brif/{}/priority'
- .format(self._ifname, interface), priority)
-
-
class VLANIf(Interface):
"""
This class handels the creation and removal of a VLAN interface. It serves
diff --git a/src/conf_mode/interface-bridge.py b/src/conf_mode/interface-bridge.py
index b20e7f6ff..37b5c4979 100755
--- a/src/conf_mode/interface-bridge.py
+++ b/src/conf_mode/interface-bridge.py
@@ -20,7 +20,7 @@ from copy import deepcopy
from sys import exit
from netifaces import interfaces
-from vyos.ifconfig import BridgeIf, Interface
+from vyos.ifconfig import BridgeIf, STPIf
from vyos.configdict import list_diff
from vyos.config import Config
from vyos import ConfigError
@@ -229,16 +229,15 @@ def apply(bridge):
# configure additional bridge member options
for member in bridge['member']:
- # set bridge port path cost
- br.set_path_cost(member['name'], member['cost'])
- # set bridge port path priority
- br.set_path_priority(member['name'], member['priority'])
-
- i = Interface(member['name'])
+ i = STPIf(member['name'])
# configure ARP cache timeout
i.set_arp_cache_tmo(bridge['arp_cache_tmo'])
# ignore link state changes
i.set_link_detect(bridge['disable_link_detect'])
+ # set bridge port path cost
+ i.set_path_cost(member['cost'])
+ # set bridge port path priority
+ i.set_path_priority(member['priority'])
return None