summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorViacheslav Hletenko <v.gletenko@vyos.io>2025-11-19 20:12:41 +0200
committerGitHub <noreply@github.com>2025-11-19 20:12:41 +0200
commit4f2d7c38ca2a0c35e81e0bf8e9a0e4abdf7fdfcc (patch)
tree1f2f9f6b79a70808c2a92cb69a9db78f9ab75027
parent75e293b0f84ea536b61fc55f8d2fcaa94249af01 (diff)
parent2e394e4dfdb582a3d70c5f13875114e5af295289 (diff)
downloadvyos-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-xsmoketest/scripts/cli/test_interfaces_virtual-ethernet.py18
-rwxr-xr-xsrc/conf_mode/interfaces_virtual-ethernet.py3
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}"!')