diff options
author | jack9603301 <jack9603301@163.com> | 2021-01-09 21:32:19 +0800 |
---|---|---|
committer | jack9603301 <jack9603301@163.com> | 2021-01-15 16:26:33 +0800 |
commit | 38566b8fbdec60b1601ed127fd759c85802909e9 (patch) | |
tree | 00a658fbeb2d2b27fe3d7def53b9bbdb681de0c3 /python/vyos/ifconfig/interface.py | |
parent | 931692c5e4b15eb5ab62cd537ffd915365429e1c (diff) | |
download | vyos-1x-38566b8fbdec60b1601ed127fd759c85802909e9.tar.gz vyos-1x-38566b8fbdec60b1601ed127fd759c85802909e9.zip |
bridge: T3137: Let VLAN aware bridge approach the behavior of professional equipment
According to the consensus, the specific behavior of a VLAN aware bridge should conform
to the behavior of professional equipment. This commit makes a significant change to the
behavior of VLAN aware bridge, and has the following behaviors:
1. Disable `vif 1` configuration
2. When the VLAN aware bridge is enabled, the parent interface is always VLAN 1
3. When `native-vlan` is not configured, the default behavior of the device is `native-vlan 1`
4. The VLAN ids forwarded by the bridge are determined by `vif`
5. It has an `enable-vlan` node to enable VLAN awareness
6. VLAN configuration is allowed only when VLAN aware bridge is activated
Diffstat (limited to 'python/vyos/ifconfig/interface.py')
-rw-r--r-- | python/vyos/ifconfig/interface.py | 52 |
1 files changed, 16 insertions, 36 deletions
diff --git a/python/vyos/ifconfig/interface.py b/python/vyos/ifconfig/interface.py index 1561d340e..ffe55648c 100644 --- a/python/vyos/ifconfig/interface.py +++ b/python/vyos/ifconfig/interface.py @@ -900,49 +900,29 @@ class Interface(Control): if 'priority' in bridge_config: self.set_path_cost(bridge_config['priority']) - vlan_filter = 0 - vlan_add = set() - del_ifname_vlan_ids = get_vlan_ids(ifname) - bridge_vlan_filter = Section.klass(bridge)(bridge, create=True).get_vlan_filter() + bridge_vlan_filter = int(Section.klass(bridge)(bridge, create=True).get_vlan_filter()) if bridge_vlan_filter: - if 1 in del_ifname_vlan_ids: - del_ifname_vlan_ids.remove(1) - vlan_filter = 1 - - for vlan in del_ifname_vlan_ids: - cmd = f'bridge vlan del dev {ifname} vid {vlan}' - self._cmd(cmd) - - if 'native_vlan' in bridge_config: - vlan_filter = 1 - cmd = f'bridge vlan del dev {self.ifname} vid 1' - self._cmd(cmd) - vlan_id = bridge_config['native_vlan'] - cmd = f'bridge vlan add dev {self.ifname} vid {vlan_id} pvid untagged master' - self._cmd(cmd) - vlan_add.add(vlan_id) - - if 'allowed_vlan' in bridge_config: - vlan_filter = 1 - if 'native_vlan' not in bridge_config: - cmd = f'bridge vlan del dev {self.ifname} vid 1' - self._cmd(cmd) - for vlan in bridge_config['allowed_vlan']: - cmd = f'bridge vlan add dev {self.ifname} vid {vlan} master' + + # Delete all VLAN IDS configured in the interface first + for vlan in del_ifname_vlan_ids: + cmd = f'bridge vlan del dev {ifname} vid {vlan} master' self._cmd(cmd) - vlan_add.add(vlan) - if vlan_filter: - # Setting VLAN ID for the bridge - for vlan in vlan_add: - cmd = f'bridge vlan add dev {bridge} vid {vlan} self' + if 'native_vlan' in bridge_config: + vlan_id = bridge_config['native_vlan'] + cmd = f'bridge vlan add dev {ifname} vid {vlan_id} pvid untagged master' + self._cmd(cmd) + else: + # VLAN 1 is the default VLAN for all unlabeled packets + cmd = f'bridge vlan add dev {ifname} vid 1 pvid untagged master' self._cmd(cmd) - # enable/disable Vlan Filter - # When the VLAN aware option is not detected, the setting of `bridge` should not be overwritten - Section.klass(bridge)(bridge, create=True).set_vlan_filter(vlan_filter) + if 'allowed_vlan' in bridge_config: + for vlan in bridge_config['allowed_vlan']: + cmd = f'bridge vlan add dev {ifname} vid {vlan} master' + self._cmd(cmd) def set_dhcp(self, enable): """ |