diff options
| author | Christian Breunig <christian@breunig.cc> | 2023-07-31 21:40:59 +0200 | 
|---|---|---|
| committer | Christian Breunig <christian@breunig.cc> | 2023-07-31 21:41:35 +0200 | 
| commit | 348cc302258b59b3e31c4aeb7ccc432086908edc (patch) | |
| tree | 2d873ebfc6a82de71d7c9d342ad511447646c43a /src | |
| parent | 0f25f97c9c5fd4c8f698395565e0b065b7f1c6e9 (diff) | |
| download | vyos-1x-348cc302258b59b3e31c4aeb7ccc432086908edc.tar.gz vyos-1x-348cc302258b59b3e31c4aeb7ccc432086908edc.zip | |
T3700: add "show bridge vlan tunnel"
Diffstat (limited to 'src')
| -rwxr-xr-x | src/op_mode/bridge.py | 43 | 
1 files changed, 36 insertions, 7 deletions
| diff --git a/src/op_mode/bridge.py b/src/op_mode/bridge.py index 1834b9cc9..185db4f20 100755 --- a/src/op_mode/bridge.py +++ b/src/op_mode/bridge.py @@ -29,7 +29,6 @@ from vyos.utils.dict import dict_search  import vyos.opmode -  def _get_json_data():      """      Get bridge data format JSON @@ -46,11 +45,14 @@ def _get_raw_data_summary():      return data_dict -def _get_raw_data_vlan(): +def _get_raw_data_vlan(tunnel:bool=False):      """      :returns dict      """ -    json_data = cmd('bridge --json --compressvlans vlan show') +    show = 'show' +    if tunnel: +        show = 'tunnel' +    json_data = cmd(f'bridge --json --compressvlans vlan {show}')      data_dict = json.loads(json_data)      return data_dict @@ -134,10 +136,34 @@ def _get_formatted_output_vlan(data):              flags = ', '.join(flags_raw if isinstance(flags_raw,list) else "").lower()              data_entries.append([interface, vlan, flags]) -    headers = ["Interface", "Vlan", "Flags"] +    headers = ["Interface", "VLAN", "Flags"]      output = tabulate(data_entries, headers)      return output +def _get_formatted_output_vlan_tunnel(data): +    data_entries = [] +    for entry in data: +        interface = entry.get('ifname') +        first = True +        for tunnel_entry in entry.get('tunnels'): +            vlan = tunnel_entry.get('vlan') +            vni = tunnel_entry.get('tunid') +            if first: +                data_entries.append([interface, vlan, vni]) +                first = False +            else: +                # Group by VXLAN interface only - no need to repeat +                # VXLAN interface name for every VLAN <-> VNI mapping +                # +                # Interface      VLAN    VNI +                # -----------  ------  ----- +                # vxlan0          100    100 +                #                 200    200 +                data_entries.append(['', vlan, vni]) + +    headers = ["Interface", "VLAN", "VNI"] +    output = tabulate(data_entries, headers) +    return output  def _get_formatted_output_fdb(data):      data_entries = [] @@ -192,12 +218,15 @@ def show(raw: bool):          return _get_formatted_output_summary(bridge_data) -def show_vlan(raw: bool): -    bridge_vlan = _get_raw_data_vlan() +def show_vlan(raw: bool, tunnel: typing.Optional[bool]): +    bridge_vlan = _get_raw_data_vlan(tunnel)      if raw:          return bridge_vlan      else: -        return _get_formatted_output_vlan(bridge_vlan) +        if tunnel: +            return _get_formatted_output_vlan_tunnel(bridge_vlan) +        else: +            return _get_formatted_output_vlan(bridge_vlan)  def show_fdb(raw: bool, interface: str): | 
