From: Matteo Croce Date: Mon, 1 Jul 2024 19:58:30 +0000 (+0200) Subject: test-network: add test for sysctl watch X-Git-Tag: v257-rc1~459^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F32212%2Fhead;p=thirdparty%2Fsystemd.git test-network: add test for sysctl watch Add a NetworkdSysctlTest class which ensures that networkd correctly complains when a sysctl file it's handling has been changed externally. --- diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index a596537ffae..687fda7b3d8 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -8034,6 +8034,38 @@ class NetworkdMTUTests(unittest.TestCase, Utilities): copy_network_unit('12-dummy.netdev', '12-dummy-mtu.link', '12-dummy.network.d/ipv6-mtu-1550.conf') self.check_mtu('1600', '1550', reset=False) +class NetworkdSysctlTest(unittest.TestCase, Utilities): + + def setUp(self): + setup_common() + + def tearDown(self): + tear_down_common() + + @unittest.skipUnless(compare_kernel_version("6.12"), reason="On kernels <= 6.12, bpf_current_task_under_cgroup() isn't available for program types BPF_PROG_TYPE_CGROUP_SYSCTL") + def check_sysctl_watch(self): + copy_network_unit('12-dummy.network', '12-dummy.netdev', '12-dummy.link') + start_networkd() + + self.wait_online('dummy98:routable') + + # Change managed sysctls + 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') + + log=read_networkd_log() + 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'") + 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) if __name__ == '__main__': parser = argparse.ArgumentParser()