diff options
author | Jernej Jakob <jernej.jakob@gmail.com> | 2020-05-03 15:38:30 +0200 |
---|---|---|
committer | Jernej Jakob <jernej.jakob@gmail.com> | 2020-05-04 20:58:06 +0200 |
commit | c113977f917ec56fe2b8707bfe8e381b4c181d7d (patch) | |
tree | 528fa4f17773f67e8402eec7027a64c3d22a9f27 | |
parent | 66e150056ad2cfecb302ab7f42d06096395b7517 (diff) | |
download | vyos-1x-c113977f917ec56fe2b8707bfe8e381b4c181d7d.tar.gz vyos-1x-c113977f917ec56fe2b8707bfe8e381b4c181d7d.zip |
util: T2241: add get_bridge_member_config function
Function that parses the config of a bridge member into a dict that is
needed to apply all port config when adding a port to a bridge.
Needed because other interfaces will be adding themselves to the bridge
outside of the bridge conf_mode script and they need a common place to
get their config.
Can't be put as method of BridgeIf as we can't invoke it without it
creating the bridge (create=False raises an exception), we need to
get the configuration before we create the interface.
-rw-r--r-- | python/vyos/util.py | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/python/vyos/util.py b/python/vyos/util.py index c708c1eb4..e598e0ff3 100644 --- a/python/vyos/util.py +++ b/python/vyos/util.py @@ -522,3 +522,50 @@ def ifname_from_config(conf): # no vlans return level[-1] + +def get_bridge_member_config(conf, br, intf): + """ + Gets bridge port (member) configuration + + Arguments: + conf: Config + br: bridge name + intf: interface name + + Returns: + dict with the configuration + False if bridge or bridge port doesn't exist + """ + old_level = conf.get_level() + conf.set_level([]) + + bridge = f'interfaces bridge {br}' + member = f'{bridge} member interface {intf}' + if not ( conf.exists(bridge) and conf.exists(member) ): + return False + + # default bridge port configuration + # cost and priority initialized with linux defaults + # by reading /sys/devices/virtual/net/br0/brif/eth2/{path_cost,priority} + # after adding interface to bridge after reboot + memberconf = { + 'cost': 100, + 'priority': 32, + 'arp_cache_tmo': 30, + 'disable_link_detect': 1, + } + + if conf.exists(f'{member} cost'): + memberconf['cost'] = int(conf.return_value(f'{member} cost')) + + if conf.exists(f'{member} priority'): + memberconf['priority'] = int(conf.return_value(f'{member} priority')) + + if conf.exists(f'{bridge} ip arp-cache-timeout'): + memberconf['arp_cache_tmo'] = int(conf.return_value(f'{bridge} ip arp-cache-timeout')) + + if conf.exists(f'{bridge} disable-link-detect'): + memberconf['disable_link_detect'] = 2 + + conf.set_level(old_level) + return memberconf |