diff options
| author | Daniil Baturin <daniil@vyos.io> | 2024-03-21 01:04:36 +0100 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-21 01:04:36 +0100 | 
| commit | d03916b59d69c765ecba1f727d8dd1d5a952ccbc (patch) | |
| tree | 0c78dcfe9eda0960a4ff30ee67ab9c3d6fbba073 /python | |
| parent | 33dfe6e07e5cd33363aa22e35f827d8c59ee5e06 (diff) | |
| parent | 9c9b1febff6863ccd3632a04d9e307909b3efe7a (diff) | |
| download | vyos-1x-d03916b59d69c765ecba1f727d8dd1d5a952ccbc.tar.gz vyos-1x-d03916b59d69c765ecba1f727d8dd1d5a952ccbc.zip | |
Merge pull request #3158 from c-po/bridge-T6125
bridge: T6125: support 802.1ad (ethertype 0x88a8) VLAN filtering
Diffstat (limited to 'python')
| -rw-r--r-- | python/vyos/ifconfig/bridge.py | 34 | 
1 files changed, 30 insertions, 4 deletions
| diff --git a/python/vyos/ifconfig/bridge.py b/python/vyos/ifconfig/bridge.py index b29e71394..7936e3da5 100644 --- a/python/vyos/ifconfig/bridge.py +++ b/python/vyos/ifconfig/bridge.py @@ -1,4 +1,4 @@ -# Copyright 2019-2021 VyOS maintainers and contributors <maintainers@vyos.io> +# Copyright 2019-2024 VyOS maintainers and contributors <maintainers@vyos.io>  #  # This library is free software; you can redistribute it and/or  # modify it under the terms of the GNU Lesser General Public @@ -14,12 +14,11 @@  # License along with this library.  If not, see <http://www.gnu.org/licenses/>.  from netifaces import interfaces -import json  from vyos.ifconfig.interface import Interface  from vyos.utils.assertion import assert_boolean +from vyos.utils.assertion import assert_list  from vyos.utils.assertion import assert_positive -from vyos.utils.process import cmd  from vyos.utils.dict import dict_search  from vyos.configdict import get_vlan_ids  from vyos.configdict import list_diff @@ -86,6 +85,10 @@ class BridgeIf(Interface):              'validate': assert_boolean,              'location': '/sys/class/net/{ifname}/bridge/vlan_filtering',          }, +        'vlan_protocol': { +            'validate': lambda v: assert_list(v, ['0x88a8', '0x8100']), +            'location': '/sys/class/net/{ifname}/bridge/vlan_protocol', +        },          'multicast_querier': {              'validate': assert_boolean,              'location': '/sys/class/net/{ifname}/bridge/multicast_querier', @@ -248,6 +251,26 @@ class BridgeIf(Interface):          """          return self.set_interface('del_port', interface) +    def set_vlan_protocol(self, protocol): +        """ +        Set protocol used for VLAN filtering. +        The valid values are 0x8100(802.1q) or 0x88A8(802.1ad). + +        Example: +        >>> from vyos.ifconfig import Interface +        >>> BridgeIf('br0').del_port('eth1') +        """ + +        if protocol not in ['802.1q', '802.1ad']: +            raise ValueError() + +        map = { +            '802.1ad': '0x88a8', +            '802.1q' : '0x8100' +        } + +        return self.set_interface('vlan_protocol', map[protocol]) +      def update(self, config):          """ General helper function which works on a dictionary retrived by          get_config_dict(). It's main intention is to consolidate the scattered @@ -294,10 +317,13 @@ class BridgeIf(Interface):              if member in interfaces():                  self.del_port(member) -        # enable/disable Vlan Filter +        # enable/disable VLAN Filter          tmp = '1' if 'enable_vlan' in config else '0'          self.set_vlan_filter(tmp) +        tmp = config.get('protocol') +        self.set_vlan_protocol(tmp) +          # add VLAN interfaces to local 'parent' bridge to allow forwarding          if 'enable_vlan' in config:              for vlan in config.get('vif_remove', {}): | 
