]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test-network: add tests for tunnel mode 37853/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 15 Jun 2025 05:48:20 +0000 (14:48 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 16 Jun 2025 08:01:37 +0000 (17:01 +0900)
test/test-network/conf/25-ip6tnl-tunnel-external.netdev
test/test-network/conf/25-ip6tnl-tunnel-local-any.netdev
test/test-network/conf/25-ip6tnl-tunnel-local-slaac.netdev
test/test-network/conf/25-ip6tnl-tunnel-remote-any.netdev
test/test-network/conf/25-ip6tnl-tunnel.netdev
test/test-network/systemd-networkd-tests.py

index 68926cdd1e2119e2a4bd42a9dbe355d4e30729c2..73f44c8c47f2e28660666206fcf9f35c23001342 100644 (file)
@@ -4,5 +4,4 @@ Name=ip6tnl-external
 Kind=ip6tnl
 
 [Tunnel]
-Mode=ip6ip6
 External=yes
index 3521d33104803ea3838d51b52fb6c5ad939a970e..7d3d5fe815fabf64b9ffff44e8dd38c6329157f5 100644 (file)
@@ -4,6 +4,5 @@ Name=ip6tnl98
 Kind=ip6tnl
 
 [Tunnel]
-Mode=ip6ip6
 Local=any
 Remote=2001:473:fece:cafe::5179
index b07dc4a1301a00501152ec2dc4c5f5ea96416a1a..ebab11f47204e54f1cff8b1db682745d4e4b2b41 100644 (file)
@@ -4,6 +4,5 @@ Name=ip6tnl-slaac
 Kind=ip6tnl
 
 [Tunnel]
-Mode=ip6ip6
 Local=slaac
 Remote=2001:473:fece:cafe::5179
index df22dd829b156db555ee72e0375c34fb06fb039a..1378a92fdcd1bbcc5ce56ebb1939d217f81297a7 100644 (file)
@@ -4,6 +4,5 @@ Name=ip6tnl97
 Kind=ip6tnl
 
 [Tunnel]
-Mode=ip6ip6
 Local=2a00:ffde:4567:edde::4987
 Remote=any
index 486bfbd142964e5c7c698880bf0289bd173ba6b1..3e776b767935d376b103b170233ef0c348702178 100644 (file)
@@ -4,6 +4,5 @@ Name=ip6tnl99
 Kind=ip6tnl
 
 [Tunnel]
-Mode=ip6ip6
 Local=2a00:ffde:4567:edde::4987
 Remote=2001:473:fece:cafe::5179
index 4a418859020bcf34b3adab65a88a02242728db8e..99a91bed761fd8da954bd6b24c3c2a3ecf518c90 100755 (executable)
@@ -2460,27 +2460,38 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
         networkctl_reload()
         self.wait_online('geneve99:degraded')
 
-    def test_ipip_tunnel(self):
+    def _test_ipip_tunnel(self, mode):
         copy_network_unit('12-dummy.netdev', '25-ipip.network',
                           '25-ipip-tunnel.netdev', '25-tunnel.network',
                           '25-ipip-tunnel-local-any.netdev', '25-tunnel-local-any.network',
                           '25-ipip-tunnel-remote-any.netdev', '25-tunnel-remote-any.network',
                           '25-ipip-tunnel-any-any.netdev', '25-tunnel-any-any.network')
+
+        if mode:
+            for netdev in ['25-ipip-tunnel.netdev',
+                           '25-ipip-tunnel-local-any.netdev',
+                           '25-ipip-tunnel-remote-any.netdev',
+                           '25-ipip-tunnel-any-any.netdev']:
+                with open(os.path.join(network_unit_dir, netdev), mode='a', encoding='utf-8') as f:
+                    f.write(f'[Tunnel]\nMode={mode}\n')
+        else:
+            mode = 'ipip' # kernel default
+
         start_networkd()
         self.wait_online('ipiptun99:routable', 'ipiptun98:routable', 'ipiptun97:routable', 'ipiptun96:routable', 'dummy98:degraded')
 
         output = check_output('ip -d link show ipiptun99')
         print(output)
-        self.assertRegex(output, 'ipip (ipip )?remote 192.169.224.239 local 192.168.223.238 dev dummy98')
+        self.assertIn(f'ipip {mode} remote 192.169.224.239 local 192.168.223.238 dev dummy98', output)
         output = check_output('ip -d link show ipiptun98')
         print(output)
-        self.assertRegex(output, 'ipip (ipip )?remote 192.169.224.239 local any dev dummy98')
+        self.assertIn(f'ipip {mode} remote 192.169.224.239 local any dev dummy98', output)
         output = check_output('ip -d link show ipiptun97')
         print(output)
-        self.assertRegex(output, 'ipip (ipip )?remote any local 192.168.223.238 dev dummy98')
+        self.assertIn(f'ipip {mode} remote any local 192.168.223.238 dev dummy98', output)
         output = check_output('ip -d link show ipiptun96')
         print(output)
-        self.assertRegex(output, 'ipip (ipip )?remote any local any dev dummy98')
+        self.assertIn(f'ipip {mode} remote any local any dev dummy98', output)
 
         touch_network_unit(
             '25-ipip-tunnel.netdev',
@@ -2495,6 +2506,18 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
             'ipiptun96:routable',
             'dummy98:degraded')
 
+    def test_ipip_tunnel(self):
+        first = True
+        for mode in [None, 'ipip', 'any']:
+            if first:
+                first = False
+            else:
+                self.tearDown()
+
+            print(f'### test_ipip_tunnel(mode={mode})')
+            with self.subTest(mode=mode):
+                self._test_ipip_tunnel(mode)
+
     def test_gre_tunnel(self):
         copy_network_unit('12-dummy.netdev', '25-gretun.network',
                           '25-gre-tunnel.netdev', '25-tunnel.network',
@@ -2724,7 +2747,7 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
             'vti6tun97:routable',
             'dummy98:degraded')
 
-    def test_ip6tnl_tunnel(self):
+    def _test_ip6tnl_tunnel(self, mode):
         copy_network_unit('12-dummy.netdev', '25-ip6tnl.network',
                           '25-ip6tnl-tunnel.netdev', '25-tunnel.network',
                           '25-ip6tnl-tunnel-local-any.netdev', '25-tunnel-local-any.network',
@@ -2732,6 +2755,18 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
                           '25-veth.netdev', '25-ip6tnl-slaac.network', '25-ipv6-prefix.network',
                           '25-ip6tnl-tunnel-local-slaac.netdev', '25-ip6tnl-tunnel-local-slaac.network',
                           '25-ip6tnl-tunnel-external.netdev', '26-netdev-link-local-addressing-yes.network')
+
+        if mode:
+            for netdev in ['25-ip6tnl-tunnel.netdev',
+                           '25-ip6tnl-tunnel-local-any.netdev',
+                           '25-ip6tnl-tunnel-remote-any.netdev',
+                           '25-ip6tnl-tunnel-local-slaac.netdev',
+                           '25-ip6tnl-tunnel-external.netdev']:
+                with open(os.path.join(network_unit_dir, netdev), mode='a', encoding='utf-8') as f:
+                    f.write(f'[Tunnel]\nMode={mode}\n')
+        else:
+            mode = 'any' # kernel default
+
         start_networkd()
         self.wait_online('ip6tnl99:routable', 'ip6tnl98:routable', 'ip6tnl97:routable',
                          'ip6tnl-slaac:degraded', 'ip6tnl-external:degraded',
@@ -2747,20 +2782,20 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
 
         output = check_output('ip -d link show ip6tnl99')
         print(output)
-        self.assertIn('ip6tnl ip6ip6 remote 2001:473:fece:cafe::5179 local 2a00:ffde:4567:edde::4987 dev dummy98', output)
+        self.assertIn(f'ip6tnl {mode} remote 2001:473:fece:cafe::5179 local 2a00:ffde:4567:edde::4987 dev dummy98', output)
         output = check_output('ip -d link show ip6tnl98')
         print(output)
-        self.assertRegex(output, 'ip6tnl ip6ip6 remote 2001:473:fece:cafe::5179 local (any|::) dev dummy98')
+        self.assertIn(f'ip6tnl {mode} remote 2001:473:fece:cafe::5179 local any dev dummy98', output)
         output = check_output('ip -d link show ip6tnl97')
         print(output)
-        self.assertRegex(output, 'ip6tnl ip6ip6 remote (any|::) local 2a00:ffde:4567:edde::4987 dev dummy98')
+        self.assertIn(f'ip6tnl {mode} remote any local 2a00:ffde:4567:edde::4987 dev dummy98', output)
         output = check_output('ip -d link show ip6tnl-external')
         print(output)
         self.assertIn('ip6tnl-external@NONE:', output)
         self.assertIn('ip6tnl external ', output)
         output = check_output('ip -d link show ip6tnl-slaac')
         print(output)
-        self.assertIn('ip6tnl ip6ip6 remote 2001:473:fece:cafe::5179 local 2002:da8:1:0:1034:56ff:fe78:9abc dev veth99', output)
+        self.assertIn(f'ip6tnl {mode} remote 2001:473:fece:cafe::5179 local 2002:da8:1:0:1034:56ff:fe78:9abc dev veth99', output)
 
         output = check_output('ip -6 address show veth99')
         print(output)
@@ -2787,12 +2822,35 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
             'veth99:routable',
             'veth-peer:degraded')
 
-    def test_sit_tunnel(self):
+    def test_ip6tnl_tunnel(self):
+        first = True
+        for mode in [None, 'ipip6', 'ip6ip6', 'any']:
+            if first:
+                first = False
+            else:
+                self.tearDown()
+
+            print(f'### test_ip6tnl_tunnel(mode={mode})')
+            with self.subTest(mode=mode):
+                self._test_ip6tnl_tunnel(mode)
+
+    def _test_sit_tunnel(self, mode):
         copy_network_unit('12-dummy.netdev', '25-sit.network',
                           '25-sit-tunnel.netdev', '25-tunnel.network',
                           '25-sit-tunnel-local-any.netdev', '25-tunnel-local-any.network',
                           '25-sit-tunnel-remote-any.netdev', '25-tunnel-remote-any.network',
                           '25-sit-tunnel-any-any.netdev', '25-tunnel-any-any.network')
+
+        if mode:
+            for netdev in ['25-sit-tunnel.netdev',
+                           '25-sit-tunnel-local-any.netdev',
+                           '25-sit-tunnel-remote-any.netdev',
+                           '25-sit-tunnel-any-any.netdev']:
+                with open(os.path.join(network_unit_dir, netdev), mode='a', encoding='utf-8') as f:
+                    f.write(f'[Tunnel]\nMode={mode}\n')
+        else:
+            mode = 'ip6ip' # kernel default
+
         start_networkd()
         self.wait_online('sittun99:routable', 'sittun98:routable', 'sittun97:routable', 'sittun96:routable', 'dummy98:degraded')
         self.networkctl_check_unit('sittun99', '25-sit-tunnel', '25-tunnel')
@@ -2803,16 +2861,16 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
 
         output = check_output('ip -d link show sittun99')
         print(output)
-        self.assertRegex(output, "sit (ip6ip )?remote 10.65.223.239 local 10.65.223.238 dev dummy98")
+        self.assertIn(f'sit {mode} remote 10.65.223.239 local 10.65.223.238 dev dummy98', output)
         output = check_output('ip -d link show sittun98')
         print(output)
-        self.assertRegex(output, "sit (ip6ip )?remote 10.65.223.239 local any dev dummy98")
+        self.assertIn(f'sit {mode} remote 10.65.223.239 local any dev dummy98', output)
         output = check_output('ip -d link show sittun97')
         print(output)
-        self.assertRegex(output, "sit (ip6ip )?remote any local 10.65.223.238 dev dummy98")
+        self.assertIn(f'sit {mode} remote any local 10.65.223.238 dev dummy98', output)
         output = check_output('ip -d link show sittun96')
         print(output)
-        self.assertRegex(output, "sit (ip6ip )?remote any local any dev dummy98")
+        self.assertIn(f'sit {mode} remote any local any dev dummy98', output)
 
         touch_network_unit(
             '25-sit-tunnel.netdev',
@@ -2827,6 +2885,18 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
             'sittun96:routable',
             'dummy98:degraded')
 
+    def test_sit_tunnel(self):
+        first = True
+        for mode in [None, 'ipip', 'ip6ip', 'any']:
+            if first:
+                first = False
+            else:
+                self.tearDown()
+
+            print(f'### test_sit_tunnel(mode={mode})')
+            with self.subTest(mode=mode):
+                self._test_sit_tunnel(mode)
+
     def test_isatap_tunnel(self):
         copy_network_unit('12-dummy.netdev', '25-isatap.network',
                           '25-isatap-tunnel.netdev', '25-tunnel.network')