summaryrefslogtreecommitdiff
path: root/src/conf_mode/protocols_segment-routing.py
diff options
context:
space:
mode:
authorChristian Breunig <christian@breunig.cc>2026-04-19 22:45:50 +0200
committerChristian Breunig <christian@breunig.cc>2026-04-21 06:13:21 +0200
commit754635c257b1860ce393cdc342c1b7ca7e65da1f (patch)
tree0fbb50cbf62c7ceb09a1a5f4568318ff0314f5c4 /src/conf_mode/protocols_segment-routing.py
parent1d81dd0c6190d9fd36d01014f3b0a2d4bb91a919 (diff)
downloadvyos-1x-754635c257b1860ce393cdc342c1b7ca7e65da1f.tar.gz
vyos-1x-754635c257b1860ce393cdc342c1b7ca7e65da1f.zip
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
Diffstat (limited to 'src/conf_mode/protocols_segment-routing.py')
-rwxr-xr-xsrc/conf_mode/protocols_segment-routing.py12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/conf_mode/protocols_segment-routing.py b/src/conf_mode/protocols_segment-routing.py
index 4020a0917..8a4d12bd8 100755
--- a/src/conf_mode/protocols_segment-routing.py
+++ b/src/conf_mode/protocols_segment-routing.py
@@ -70,24 +70,24 @@ def apply(config_dict):
for interface in list_diff(current_interfaces, sr_interfaces):
# Disable processing of IPv6-SR packets
- sysctl_write(f'net.ipv6.conf.{interface}.seg6_enabled', '0')
+ sysctl_write(['net', 'ipv6', 'conf', interface, 'seg6_enabled'], '0')
for interface, interface_config in sr.get('interface', {}).items():
# Accept or drop SR-enabled IPv6 packets on this interface
if 'srv6' in interface_config:
- sysctl_write(f'net.ipv6.conf.{interface}.seg6_enabled', '1')
+ sysctl_write(['net', 'ipv6', 'conf', interface, 'seg6_enabled'], '1')
# Define HMAC policy for ingress SR-enabled packets on this interface
# It's a redundant check as HMAC has a default value - but better safe
# then sorry
tmp = dict_search('srv6.hmac', interface_config)
if tmp == 'accept':
- sysctl_write(f'net.ipv6.conf.{interface}.seg6_require_hmac', '0')
+ sysctl_write(['net', 'ipv6', 'conf', interface, 'seg6_require_hmac'], '0')
elif tmp == 'drop':
- sysctl_write(f'net.ipv6.conf.{interface}.seg6_require_hmac', '1')
+ sysctl_write(['net', 'ipv6', 'conf', interface, 'seg6_require_hmac'], '1')
elif tmp == 'ignore':
- sysctl_write(f'net.ipv6.conf.{interface}.seg6_require_hmac', '-1')
+ sysctl_write(['net', 'ipv6', 'conf', interface, 'seg6_require_hmac'], '-1')
else:
- sysctl_write(f'net.ipv6.conf.{interface}.seg6_enabled', '0')
+ sysctl_write(['net', 'ipv6', 'conf', interface, 'seg6_enabled'], '0')
if config_dict and not is_systemd_service_running('vyos-configd.service'):
FRRender().apply()