diff options
author | jack9603301 <jack9603301@163.com> | 2020-12-13 04:23:50 +0800 |
---|---|---|
committer | jack9603301 <jack9603301@163.com> | 2020-12-13 04:23:50 +0800 |
commit | d03176d70e6390f42c4e46451770dc5f86864bac (patch) | |
tree | 1eb2ee75b5b4343df2152a9b85cbb303aa41ce4f /python/vyos/ifconfig/interface.py | |
parent | 9863c5773e87a0a40eabdd135f3defb953a364de (diff) | |
download | vyos-1x-d03176d70e6390f42c4e46451770dc5f86864bac.tar.gz vyos-1x-d03176d70e6390f42c4e46451770dc5f86864bac.zip |
interfaces: T3114: Modify the logic of the second addition to complete the setting and streamline the code
Diffstat (limited to 'python/vyos/ifconfig/interface.py')
-rw-r--r-- | python/vyos/ifconfig/interface.py | 51 |
1 files changed, 22 insertions, 29 deletions
diff --git a/python/vyos/ifconfig/interface.py b/python/vyos/ifconfig/interface.py index 495e96600..e3c6beb8f 100644 --- a/python/vyos/ifconfig/interface.py +++ b/python/vyos/ifconfig/interface.py @@ -32,6 +32,7 @@ from netifaces import AF_INET6 from vyos import ConfigError from vyos.configdict import list_diff from vyos.configdict import dict_merge +from vyos.configdict import get_vlan_ids from vyos.template import render from vyos.util import mac2eui64 from vyos.util import dict_search @@ -887,6 +888,8 @@ class Interface(Control): # drop all interface addresses first self.flush_addrs() + + ifname = self.ifname for bridge, bridge_config in bridge_dict.items(): # add interface to bridge - use Section.klass to get BridgeIf class @@ -901,17 +904,25 @@ class Interface(Control): self.set_path_cost(bridge_config['priority']) vlan_filter = 0 - - vlan_del = set() vlan_add = set() + + del_ifname_vlan_ids = get_vlan_ids(ifname) + bridge_vlan_filter = 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'] - if int(vlan_id) != 1: - vlan_del.add(1) cmd = f'bridge vlan add dev {self.ifname} vid {vlan_id} pvid untagged master' self._cmd(cmd) vlan_add.add(vlan_id) @@ -926,32 +937,14 @@ class Interface(Control): self._cmd(cmd) vlan_add.add(vlan) - vlan_bridge_ids = Section.klass(bridge)(bridge, create=True).get_vlan_ids() - - apply_vlan_ids = set() - - # Delete VLAN ID for the bridge - for vlan in vlan_del: - if int(vlan) == 1: - cmd = f'bridge vlan del dev {bridge} vid {vlan} self' - self._cmd(cmd) - - # Setting VLAN ID for the bridge - for vlan in vlan_add: - vlan_range = vlan.split('-') - apply_vlan_ids.add(int(vlan_range[0])) - if(len(vlan_range) == 2): - for vlan_id in range(int(vlan_range[0])+1,int(vlan_range[1]) + 1): - if int(vlan_id) not in vlan_bridge_ids: - apply_vlan_ids.add(int(vlan_id)) - - for vlan in apply_vlan_ids: - cmd = f'bridge vlan add dev {bridge} vid {vlan} self' - self._cmd(cmd) - - # enable/disable Vlan Filter - # When the VLAN aware option is not detected, the setting of `bridge` should not be overwritten if vlan_filter: + # Setting VLAN ID for the bridge + for vlan in vlan_add: + cmd = f'bridge vlan add dev {bridge} vid {vlan} self' + 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) def set_dhcp(self, enable): |