From 78ca255140a4c47577d43d66166bd270c2af4165 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 17 Aug 2026 05:45:47 +0900 Subject: [PATCH] network: do not touch proxy_ndp sysctl when nothing requested Even though the document says "When unset, the kernel's default will be used." for IPv6ProxyNDP=, previously, when both IPv6ProxyNDP= and IPv6ProxyNDPAddress= are unspecified, proxy_ndp sysctl was disabled. This was also inconsistent to other sysctl settings. --- src/network/networkd-sysctl.c | 4 +++- test/test-network/systemd-networkd-tests.py | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/network/networkd-sysctl.c b/src/network/networkd-sysctl.c index ca58a1815e..d627ade828 100644 --- a/src/network/networkd-sysctl.c +++ b/src/network/networkd-sysctl.c @@ -522,8 +522,10 @@ static int link_set_ipv6_proxy_ndp(Link *link) { if (link->network->ipv6_proxy_ndp >= 0) v = link->network->ipv6_proxy_ndp; + else if (network_has_neighbor_proxy_address(link->network, AF_INET6)) + v = true; else - v = network_has_neighbor_proxy_address(link->network, AF_INET6); + return 0; return sysctl_write_ip_property_boolean(AF_INET6, link->ifname, "proxy_ndp", v, manager_get_sysctl_shadow(link->manager)); } diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index 5fc3fa04e9..77b55e84bb 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -11143,21 +11143,21 @@ class NetworkdSysctlTest(unittest.TestCase, Utilities): call('sysctl -w net.ipv6.conf.dummy98.accept_ra=1') call('sysctl -w net.ipv6.conf.dummy98.mtu=1360') call('sysctl -w net.ipv4.conf.dummy98.promote_secondaries=0') - call('sysctl -w net.ipv6.conf.dummy98.proxy_ndp=1') # And unmanaged ones call('sysctl -w net.ipv6.conf.dummy98.hop_limit=4') call('sysctl -w net.ipv6.conf.dummy98.max_addresses=10') + call('sysctl -w net.ipv6.conf.dummy98.proxy_ndp=1') log = read_networkd_log() # fmt: off self.assertRegex(log, r"Foreign process 'sysctl\[\d+\]' changed sysctl '/proc/sys/net/ipv6/conf/dummy98/accept_ra' from '0' to '1', conflicting with our setting to '0'") self.assertRegex(log, r"Foreign process 'sysctl\[\d+\]' changed sysctl '/proc/sys/net/ipv6/conf/dummy98/mtu' from '1550' to '1360', conflicting with our setting to '1550'") self.assertRegex(log, r"Foreign process 'sysctl\[\d+\]' changed sysctl '/proc/sys/net/ipv4/conf/dummy98/promote_secondaries' from '1' to '0', conflicting with our setting to '1'") - self.assertRegex(log, r"Foreign process 'sysctl\[\d+\]' changed sysctl '/proc/sys/net/ipv6/conf/dummy98/proxy_ndp' from '0' to '1', conflicting with our setting to '0'") # fmt: on self.assertNotIn("changed sysctl '/proc/sys/net/ipv6/conf/dummy98/hop_limit'", log) self.assertNotIn("changed sysctl '/proc/sys/net/ipv6/conf/dummy98/max_addresses'", log) + self.assertNotIn("changed sysctl '/proc/sys/net/ipv6/conf/dummy98/proxy_ndp'", log) self.assertNotIn('Sysctl monitor BPF returned error', log)