diff options
Diffstat (limited to 'python/vyos/ifconfig/bridge.py')
-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) |