diff options
author | Christian Poessinger <christian@poessinger.com> | 2020-11-14 09:52:29 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-14 09:52:29 +0100 |
commit | 13190431a45b09f9f110718c1036d8f38bbeff4f (patch) | |
tree | 903a6662c78e8bf6eca16bbad8a43a468f7291af /python/vyos/ifconfig | |
parent | 95c1942d7e0b811e736e33d2f696a13233ead56c (diff) | |
parent | 68b7cbe11dbe14109d9b4c564f2499b574309665 (diff) | |
download | vyos-1x-13190431a45b09f9f110718c1036d8f38bbeff4f.tar.gz vyos-1x-13190431a45b09f9f110718c1036d8f38bbeff4f.zip |
Merge pull request #604 from jack9603301/T3042
bridge: T3042: Better fix implementation errors
Diffstat (limited to 'python/vyos/ifconfig')
-rw-r--r-- | python/vyos/ifconfig/bridge.py | 37 |
1 files changed, 29 insertions, 8 deletions
diff --git a/python/vyos/ifconfig/bridge.py b/python/vyos/ifconfig/bridge.py index 7eac9b886..7c77e050a 100644 --- a/python/vyos/ifconfig/bridge.py +++ b/python/vyos/ifconfig/bridge.py @@ -255,6 +255,9 @@ class BridgeIf(Interface): if member in interfaces(): self.del_port(member) vlan_filter = 0 + + vlan_del = set() + vlan_add = set() tmp = dict_search('member.interface', config) if tmp: @@ -286,12 +289,13 @@ class BridgeIf(Interface): tmp = dict_search('native_vlan_removed', interface_config) - if tmp and 'native_vlan_removed' not in interface_config: - vlan_id = tmp - cmd = f'bridge vlan add dev {interface} vid 1 pvid untagged master' - self._cmd(cmd) + for vlan_id in (tmp or []): cmd = f'bridge vlan del dev {interface} vid {vlan_id}' self._cmd(cmd) + cmd = f'bridge vlan add dev {interface} vid 1 pvid untagged master' + self._cmd(cmd) + vlan_del.add(vlan_id) + vlan_add.add(1) tmp = dict_search('allowed_vlan_removed', interface_config) @@ -299,31 +303,48 @@ class BridgeIf(Interface): for vlan_id in (tmp or []): cmd = f'bridge vlan del dev {interface} vid {vlan_id}' self._cmd(cmd) + vlan_del.add(vlan_id) if 'native_vlan' in interface_config: vlan_filter = 1 cmd = f'bridge vlan del dev {interface} vid 1' self._cmd(cmd) + vlan_del.add(1) vlan_id = interface_config['native_vlan'] cmd = f'bridge vlan add dev {interface} vid {vlan_id} pvid untagged master' self._cmd(cmd) + vlan_add.add(vlan_id) else: cmd = f'bridge vlan del dev {interface} vid 1' self._cmd(cmd) + vlan_del.add(1) if 'allowed_vlan' in interface_config: vlan_filter = 1 for vlan in interface_config['allowed_vlan']: cmd = f'bridge vlan add dev {interface} vid {vlan} master' self._cmd(cmd) + vlan_add.add(vlan) - vif = dict_search('vif', config) - if vif: - for vlan_id,vif_config in vif.items(): - cmd = f'bridge vlan add dev {ifname} vid {vlan_id} self master' + for vlan in vlan_del: + if isinstance(vlan,str) and vlan.isnumeric(): + if int(vlan) == 1: + cmd = f'bridge vlan del dev {ifname} vid {vlan} self' + self._cmd(cmd) + cmd = f'bridge vlan add dev {ifname} vid {vlan} pvid untagged self' + self._cmd(cmd) + else: + cmd = f'bridge vlan del dev {ifname} vid {vlan} self' + self._cmd(cmd) + else: + cmd = f'bridge vlan del dev {ifname} vid {vlan} self' self._cmd(cmd) + for vlan in vlan_add: + cmd = f'bridge vlan add dev {ifname} vid {vlan} self' + self._cmd(cmd) + # enable/disable Vlan Filter self.set_vlan_filter(vlan_filter) |