diff options
| author | Christian Poessinger <christian@poessinger.com> | 2022-02-21 18:25:05 +0100 | 
|---|---|---|
| committer | Christian Poessinger <christian@poessinger.com> | 2022-02-21 18:25:05 +0100 | 
| commit | c3661c8d5d7e8f5c1d040cadf134e87f0d77e28e (patch) | |
| tree | 90dcdf81a6bd67cdc1dd778f346561d9039bcb0e | |
| parent | 3a605ad020d8d20b08a72cb1284f6e590d1fd7b5 (diff) | |
| download | vyos-1x-c3661c8d5d7e8f5c1d040cadf134e87f0d77e28e.tar.gz vyos-1x-c3661c8d5d7e8f5c1d040cadf134e87f0d77e28e.zip | |
smoketest: vxlan: T4120: verify support for multiple remote addresses
| -rw-r--r-- | python/vyos/util.py | 8 | ||||
| -rwxr-xr-x | smoketest/scripts/cli/test_interfaces_vxlan.py | 34 | 
2 files changed, 32 insertions, 10 deletions
| diff --git a/python/vyos/util.py b/python/vyos/util.py index 1767ff9d3..4526375df 100644 --- a/python/vyos/util.py +++ b/python/vyos/util.py @@ -774,6 +774,14 @@ def dict_search_recursive(dict_object, key):              for x in dict_search_recursive(j, key):                  yield x +def get_bridge_fdb(interface): +    """ Returns the forwarding database entries for a given interface """ +    if not os.path.exists(f'/sys/class/net/{interface}'): +        return None +    from json import loads +    tmp = loads(cmd(f'bridge -j fdb show dev {interface}')) +    return tmp +  def get_interface_config(interface):      """ Returns the used encapsulation protocol for given interface.          If interface does not exist, None is returned. diff --git a/smoketest/scripts/cli/test_interfaces_vxlan.py b/smoketest/scripts/cli/test_interfaces_vxlan.py index 12fc463ba..f34b99ea4 100755 --- a/smoketest/scripts/cli/test_interfaces_vxlan.py +++ b/smoketest/scripts/cli/test_interfaces_vxlan.py @@ -1,6 +1,6 @@  #!/usr/bin/env python3  # -# Copyright (C) 2020-2021 VyOS maintainers and contributors +# Copyright (C) 2020-2022 VyOS maintainers and contributors  #  # This program is free software; you can redistribute it and/or modify  # it under the terms of the GNU General Public License version 2 or later as @@ -18,8 +18,9 @@ import unittest  from vyos.configsession import ConfigSessionError  from vyos.ifconfig import Interface +from vyos.util import get_bridge_fdb  from vyos.util import get_interface_config - +from vyos.template import is_ipv6  from base_interfaces_test import BasicInterfaceTest  class VXLANInterfaceTest(BasicInterfaceTest.TestCase): @@ -57,21 +58,34 @@ class VXLANInterfaceTest(BasicInterfaceTest.TestCase):          ttl = 20          for interface in self._interfaces:              options = get_interface_config(interface) +            bridge = get_bridge_fdb(interface)              vni = options['linkinfo']['info_data']['id']              self.assertIn(f'vni {vni}', self._options[interface]) -            if any('link' in s for s in self._options[interface]): +            if any('source-interface' in s for s in self._options[interface]):                  link = options['linkinfo']['info_data']['link']                  self.assertIn(f'source-interface {link}', self._options[interface]) -            if any('local6' in s for s in self._options[interface]): -                remote = options['linkinfo']['info_data']['local6'] -                self.assertIn(f'source-address {local6}', self._options[interface]) - -            if any('remote6' in s for s in self._options[interface]): -                remote = options['linkinfo']['info_data']['remote6'] -                self.assertIn(f'remote {remote}', self._options[interface]) +            # Verify source-address setting was properly configured on the Kernel +            if any('source-address' in s for s in self._options[interface]): +                for s in self._options[interface]: +                    if 'source-address' in s: +                        address = s.split()[-1] +                        if is_ipv6(address): +                            tmp = options['linkinfo']['info_data']['local6'] +                        else: +                            tmp = options['linkinfo']['info_data']['local'] +                        self.assertIn(f'source-address {tmp}', self._options[interface]) + +            # Verify remote setting was properly configured on the Kernel +            if any('remote' in s for s in self._options[interface]): +                for s in self._options[interface]: +                    if 'remote' in s: +                        for fdb in bridge: +                            if 'mac' in fdb and fdb['mac'] == '00:00:00:00:00:00': +                                remote = fdb['dst'] +                                self.assertIn(f'remote {remote}', self._options[interface])              if any('group' in s for s in self._options[interface]):                  group = options['linkinfo']['info_data']['group'] | 
