From 754635c257b1860ce393cdc342c1b7ca7e65da1f Mon Sep 17 00:00:00 2001 From: Christian Breunig Date: Sun, 19 Apr 2026 22:45:50 +0200 Subject: T8534: refactor sysctl_(read|write) to accept key parts Interface names can contain dots (e.g. VLAN subinterfaces like eth0.10), which conflicts with sysctl's dot-separated key syntax. Change sysctl_read() and sysctl_write() to take key components as a list and normalize each component by replacing . with / before invoking sysctl. This fixes sysctl lookups/updates for VLAN subinterfaces. Extend the SR-TE smoketest to cover a VLAN subinterface. Previous error raising this issue: vyos-configd: sysctl: cannot stat /proc/sys/net/ipv6/conf/eth0/10/seg6_enabled: No such file or directory vyos-configd: sysctl: cannot stat /proc/sys/net/ipv6/conf/eth0/201/seg6_enabled: No such file or directory --- src/tests/test_utils.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'src/tests/test_utils.py') diff --git a/src/tests/test_utils.py b/src/tests/test_utils.py index 9cf6f7a1e..bbf1cb523 100644 --- a/src/tests/test_utils.py +++ b/src/tests/test_utils.py @@ -13,6 +13,7 @@ # along with this program. If not, see . from unittest import TestCase +from unittest.mock import patch class TestVyOSUtils(TestCase): def test_key_mangling(self): @@ -24,7 +25,17 @@ class TestVyOSUtils(TestCase): def test_sysctl_read(self): from vyos.utils.system import sysctl_read - self.assertEqual(sysctl_read('net.ipv4.conf.lo.forwarding'), '1') + self.assertEqual(sysctl_read(['net', 'ipv4', 'conf', 'lo', 'forwarding']), '1') + + def test_sysctl_key_normalization(self): + from vyos.utils.system import sysctl_read + with patch('vyos.utils.system.run') as mock_run: + mock_run.return_value.stdout = b'1\n' + sysctl_read(['net', 'ipv4', 'conf', 'eth0.10', 'forwarding']) + mock_run.assert_called_with( + ['sysctl', '-nb', 'net.ipv4.conf.eth0/10.forwarding'], + capture_output=True, + ) def test_list_strip(self): from vyos.utils.list import list_strip -- cgit v1.2.3