diff options
| author | Christian Poessinger <christian@poessinger.com> | 2020-07-25 17:54:49 +0200 |
|---|---|---|
| committer | Christian Poessinger <christian@poessinger.com> | 2020-07-25 17:54:49 +0200 |
| commit | b7dfe4e1484df5c711ea81d360643f0331c518c8 (patch) | |
| tree | 405ddf654da4324635f129f8009803cfd321836c /python/vyos/ifconfig/bridge.py | |
| parent | bfbf51acb2d4b6b5fe2d22d39f7259686f98d2a0 (diff) | |
| parent | e57d76e86f7e5280eb065e98552c7d6395805c01 (diff) | |
| download | veeos-1x-b7dfe4e1484df5c711ea81d360643f0331c518c8.tar.gz veeos-1x-b7dfe4e1484df5c711ea81d360643f0331c518c8.zip | |
Merge branch 'interface-rewrite' of github.com:c-po/vyos-1x into current
* 'interface-rewrite' of github.com:c-po/vyos-1x:
vyos.configverify: T2653: fix some formatting issues
ifconfig: T2653: make ifname an optional argument to get_interface_dict()
vyos.configdict: T2653: remove obsolete code from configdict and ifconfig_vlan
wireless: ifconfig: T2653: move to get_config_dict()
ifconfig: T2653: move get_ethertype() from configdict to interface
vlan: ifconfig: T2653: move get_removed_vlans() to vyos.configdiff
bonding: ifconfig: T2653: move to get_config_dict()
ifconfig: T2653: move vlan configuration code to base class
vyos.configdict: T2653: use dict_merge() over update()
ifconfig: T2653: implement update() in derived classes for admin up/down
vyos.configdict: T2653: add new reusable helper node_changed()
geneve: ifconfig: T2653: move to get_config_dict()
ifconfig: T2653: move bridge member check to base class
interfaces: ifconfig: T2653: migrate to get_interface_dict() API
pseudo-ethernet: ifconfig: T2653: move to get_config_dict()
bridge: ifconfig: T2653: move to get_config_dict()
vlan: ifconfig: T2653: only enable interface when lower interface is up
ethernet: ifconfig: T2653: move to get_config_dict()
ifconfig: T2653: set arp-cache-timeout default value of 30ms
Diffstat (limited to 'python/vyos/ifconfig/bridge.py')
| -rw-r--r-- | python/vyos/ifconfig/bridge.py | 78 |
1 files changed, 76 insertions, 2 deletions
diff --git a/python/vyos/ifconfig/bridge.py b/python/vyos/ifconfig/bridge.py index 44b92c1db..da4e1a289 100644 --- a/python/vyos/ifconfig/bridge.py +++ b/python/vyos/ifconfig/bridge.py @@ -13,12 +13,13 @@ # You should have received a copy of the GNU Lesser General Public # License along with this library. If not, see <http://www.gnu.org/licenses/>. +import jmespath from vyos.ifconfig.interface import Interface - +from vyos.ifconfig.stp import STP from vyos.validate import assert_boolean from vyos.validate import assert_positive - +from vyos.util import cmd @Interface.register class BridgeIf(Interface): @@ -187,3 +188,76 @@ class BridgeIf(Interface): >>> BridgeIf('br0').del_port('eth1') """ return self.set_interface('del_port', interface) + + def update(self, config): + """ General helper function which works on a dictionary retrived by + get_config_dict(). It's main intention is to consolidate the scattered + interface setup code and provide a single point of entry when workin + on any interface. """ + + # call base class first + super().update(config) + + # Set ageing time + value = config.get('aging') + self.set_ageing_time(value) + + # set bridge forward delay + value = config.get('forwarding_delay') + self.set_forward_delay(value) + + # set hello time + value = config.get('hello_time') + self.set_hello_time(value) + + # set max message age + value = config.get('max_age') + self.set_max_age(value) + + # set bridge priority + value = config.get('priority') + self.set_priority(value) + + # enable/disable spanning tree + value = '1' if 'stp' in config else '0' + self.set_stp(value) + + # enable or disable IGMP querier + tmp = jmespath.search('igmp.querier', config) + value = '1' if (tmp != None) else '0' + self.set_multicast_querier(value) + + # remove interface from bridge + tmp = jmespath.search('member.interface_remove', config) + if tmp: + for member in tmp: + self.del_port(member) + + STPBridgeIf = STP.enable(BridgeIf) + tmp = jmespath.search('member.interface', config) + if tmp: + for interface, interface_config in tmp.items(): + # if we've come here we already verified the interface doesn't + # have addresses configured so just flush any remaining ones + cmd(f'ip addr flush dev "{interface}"') + # enslave interface port to bridge + self.add_port(interface) + + tmp = STPBridgeIf(interface) + # set bridge port path cost + value = interface_config.get('cost') + tmp.set_path_cost(value) + + # set bridge port path priority + value = interface_config.get('priority') + tmp.set_path_priority(value) + + # Enable/Disable of an interface must always be done at the end of the + # derived class to make use of the ref-counting set_admin_state() + # function. We will only enable the interface if 'up' was called as + # often as 'down'. This is required by some interface implementations + # as certain parameters can only be changed when the interface is + # in admin-down state. This ensures the link does not flap during + # reconfiguration. + state = 'down' if 'disable' in config else 'up' + self.set_admin_state(state) |
