diff options
| author | Viacheslav Hletenko <v.gletenko@vyos.io> | 2025-11-19 20:12:41 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-11-19 20:12:41 +0200 |
| commit | 4f2d7c38ca2a0c35e81e0bf8e9a0e4abdf7fdfcc (patch) | |
| tree | 1f2f9f6b79a70808c2a92cb69a9db78f9ab75027 | |
| parent | 75e293b0f84ea536b61fc55f8d2fcaa94249af01 (diff) | |
| parent | 2e394e4dfdb582a3d70c5f13875114e5af295289 (diff) | |
| download | vyos-1x-4f2d7c38ca2a0c35e81e0bf8e9a0e4abdf7fdfcc.tar.gz vyos-1x-4f2d7c38ca2a0c35e81e0bf8e9a0e4abdf7fdfcc.zip | |
Merge pull request #4854 from c-po/veth-fix
veth: T8017: bugfix KeyError: 'peer_name'
| -rwxr-xr-x | smoketest/scripts/cli/test_interfaces_virtual-ethernet.py | 18 | ||||
| -rwxr-xr-x | src/conf_mode/interfaces_virtual-ethernet.py | 3 |
2 files changed, 20 insertions, 1 deletions
diff --git a/smoketest/scripts/cli/test_interfaces_virtual-ethernet.py b/smoketest/scripts/cli/test_interfaces_virtual-ethernet.py index 9bcc1cb1f..96ca36830 100755 --- a/smoketest/scripts/cli/test_interfaces_virtual-ethernet.py +++ b/smoketest/scripts/cli/test_interfaces_virtual-ethernet.py @@ -19,6 +19,9 @@ import unittest from base_interfaces_test import BasicInterfaceTest from base_vyostest_shim import VyOSUnitTestSHIM +from vyos.configsession import ConfigSessionError +from vyos.utils.network import interface_exists + class VEthInterfaceTest(BasicInterfaceTest.TestCase): @classmethod def setUpClass(cls): @@ -32,5 +35,20 @@ class VEthInterfaceTest(BasicInterfaceTest.TestCase): # call base-classes classmethod super(VEthInterfaceTest, cls).setUpClass() + def test_invalid_peers(self): + peer = ('veth1001', 'veth1002') + self.cli_set(self._base_path + [peer[0]]) + self.cli_set(self._base_path + [peer[1], 'peer-name', peer[0]]) + + # Configuration mismatch between "veth1001" and "veth1001" + with self.assertRaises(ConfigSessionError): + self.cli_commit() + + self.cli_set(self._base_path + [peer[0], 'peer-name', peer[1]]) + self.cli_commit() + + self.assertTrue(interface_exists(peer[0])) + self.assertTrue(interface_exists(peer[1])) + if __name__ == '__main__': unittest.main(verbosity=2, failfast=VyOSUnitTestSHIM.TestCase.debug_on()) diff --git a/src/conf_mode/interfaces_virtual-ethernet.py b/src/conf_mode/interfaces_virtual-ethernet.py index 81a12c581..4bcabe304 100755 --- a/src/conf_mode/interfaces_virtual-ethernet.py +++ b/src/conf_mode/interfaces_virtual-ethernet.py @@ -27,6 +27,7 @@ from vyos.configverify import verify_bridge_delete from vyos.configverify import verify_vrf from vyos.configverify import verify_mtu_ipv6 from vyos.ifconfig import VethIf +from vyos.utils.dict import dict_search from vyos.utils.network import interface_exists airbag.enable() @@ -82,7 +83,7 @@ def verify(veth): raise ConfigError(f'Used peer-name "{peer_name}" on interface "{ifname}" ' \ 'is not configured!') - if veth['other_interfaces'][peer_name]['peer_name'] != ifname: + if dict_search(f'other_interfaces.{peer_name}.peer_name', veth) != ifname: raise ConfigError( f'Configuration mismatch between "{ifname}" and "{peer_name}"!') |
