diff options
author | Christian Poessinger <christian@poessinger.com> | 2020-05-05 07:21:34 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-05 07:21:34 +0200 |
commit | 9afb06a0187c437f01e5de498851b94025cf9dd8 (patch) | |
tree | cf76b8e4c4d866b4ad9ee467692bebdfa873a382 /src/conf_mode/interfaces-geneve.py | |
parent | 66ecfc6ecada4e50562dcfa4635b83daa5b0b1ff (diff) | |
parent | b16dc5044eb9735c51ea211ea00fa35297d921f3 (diff) | |
download | vyos-1x-9afb06a0187c437f01e5de498851b94025cf9dd8.tar.gz vyos-1x-9afb06a0187c437f01e5de498851b94025cf9dd8.zip |
Merge pull request #384 from jjakob/bridge-fix-T2241
T2241: fix interfaces falling out of bridge
Diffstat (limited to 'src/conf_mode/interfaces-geneve.py')
-rwxr-xr-x | src/conf_mode/interfaces-geneve.py | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/conf_mode/interfaces-geneve.py b/src/conf_mode/interfaces-geneve.py index 708a64474..e4109a221 100755 --- a/src/conf_mode/interfaces-geneve.py +++ b/src/conf_mode/interfaces-geneve.py @@ -22,7 +22,7 @@ from netifaces import interfaces from vyos.config import Config from vyos.ifconfig import GeneveIf -from vyos.validate import is_bridge_member +from vyos.validate import is_member from vyos import ConfigError default_config_data = { @@ -49,11 +49,12 @@ def get_config(): geneve['intf'] = os.environ['VYOS_TAGNODE_VALUE'] + # check if interface is member if a bridge + geneve['is_bridge_member'] = is_member(conf, geneve['intf'], 'bridge') + # Check if interface has been removed if not conf.exists('interfaces geneve ' + geneve['intf']): geneve['deleted'] = True - # check if interface is member if a bridge - geneve['is_bridge_member'] = is_bridge_member(conf, geneve['intf']) return geneve # set new configuration level @@ -97,12 +98,17 @@ def get_config(): def verify(geneve): if geneve['deleted']: if geneve['is_bridge_member']: - interface = geneve['intf'] - bridge = geneve['is_bridge_member'] - raise ConfigError(f'Interface "{interface}" can not be deleted as it belongs to bridge "{bridge}"!') + raise ConfigError(( + f'Cannot delete interface "{geneve["intf"]}" as it is a ' + f'member of bridge "{geneve["is_bridge_member"]}"!')) return None + if geneve['is_bridge_member'] and geneve['address']: + raise ConfigError(( + f'Cannot assign address to interface "{geneve["intf"]}" ' + f'as it is a member of bridge "{geneve["is_bridge_member"]}"!')) + if not geneve['remote']: raise ConfigError('GENEVE remote must be configured') @@ -158,6 +164,10 @@ def apply(geneve): if not geneve['disable']: g.set_admin_state('up') + # re-add ourselves to any bridge we might have fallen out of + if geneve['is_bridge_member']: + g.add_to_bridge(geneve['is_bridge_member']) + return None |