]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test-network: add tests for erspan version 0 and 2
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 31 May 2022 14:36:16 +0000 (23:36 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 31 May 2022 19:02:49 +0000 (04:02 +0900)
test/test-network/conf/25-erspan0-tunnel-local-any.netdev [new file with mode: 0644]
test/test-network/conf/25-erspan0-tunnel.netdev [new file with mode: 0644]
test/test-network/conf/25-erspan1-tunnel-local-any.netdev [new file with mode: 0644]
test/test-network/conf/25-erspan1-tunnel.netdev [new file with mode: 0644]
test/test-network/conf/25-erspan2-tunnel-local-any.netdev [moved from test/test-network/conf/25-erspan-tunnel-local-any.netdev with 65% similarity]
test/test-network/conf/25-erspan2-tunnel.netdev [moved from test/test-network/conf/25-erspan-tunnel.netdev with 66% similarity]
test/test-network/systemd-networkd-tests.py

diff --git a/test/test-network/conf/25-erspan0-tunnel-local-any.netdev b/test/test-network/conf/25-erspan0-tunnel-local-any.netdev
new file mode 100644 (file)
index 0000000..03db72a
--- /dev/null
@@ -0,0 +1,15 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+[NetDev]
+Name=erspan98
+Kind=erspan
+
+[Tunnel]
+ERSPANVersion=0
+# The three settings below will be ignored
+ERSPANIndex=124
+ERSPANDirection=egress
+ERSPANHardwareId=0x2f
+Local = any
+Remote = 172.16.1.100
+Key=102
+SerializeTunneledPackets=true
diff --git a/test/test-network/conf/25-erspan0-tunnel.netdev b/test/test-network/conf/25-erspan0-tunnel.netdev
new file mode 100644 (file)
index 0000000..ee295d9
--- /dev/null
@@ -0,0 +1,15 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+[NetDev]
+Name=erspan99
+Kind=erspan
+
+[Tunnel]
+ERSPANVersion=0
+# The three settings below will be ignored
+ERSPANIndex=123
+ERSPANDirection=ingress
+ERSPANHardwareId=0x1f
+Local = 172.16.1.200
+Remote = 172.16.1.100
+Key=101
+SerializeTunneledPackets=true
diff --git a/test/test-network/conf/25-erspan1-tunnel-local-any.netdev b/test/test-network/conf/25-erspan1-tunnel-local-any.netdev
new file mode 100644 (file)
index 0000000..beac91b
--- /dev/null
@@ -0,0 +1,15 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+[NetDev]
+Name=erspan98
+Kind=erspan
+
+[Tunnel]
+ERSPANVersion=1
+ERSPANIndex=124
+# The two settings below will be ignored
+ERSPANDirection=egress
+ERSPANHardwareId=0x2f
+Local = any
+Remote = 172.16.1.100
+Key=102
+SerializeTunneledPackets=true
diff --git a/test/test-network/conf/25-erspan1-tunnel.netdev b/test/test-network/conf/25-erspan1-tunnel.netdev
new file mode 100644 (file)
index 0000000..661ae90
--- /dev/null
@@ -0,0 +1,15 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+[NetDev]
+Name=erspan99
+Kind=erspan
+
+[Tunnel]
+ERSPANVersion=1
+ERSPANIndex=123
+# The two settings below will be ignored
+ERSPANDirection=ingress
+ERSPANHardwareId=0x1f
+Local = 172.16.1.200
+Remote = 172.16.1.100
+Key=101
+SerializeTunneledPackets=true
similarity index 65%
rename from test/test-network/conf/25-erspan-tunnel-local-any.netdev
rename to test/test-network/conf/25-erspan2-tunnel-local-any.netdev
index d16983cbc3f100f7f42ce31cbc81709822af1563..010cf6761b01848e0a944966c7b50847d8c0d6a7 100644 (file)
@@ -4,7 +4,11 @@ Name=erspan98
 Kind=erspan
 
 [Tunnel]
+ERSPANVersion=2
+# ERSPANIndex= will be ignored
 ERSPANIndex=124
+ERSPANDirection=egress
+ERSPANHardwareId=0x2f
 Local = any
 Remote = 172.16.1.100
 Key=102
similarity index 66%
rename from test/test-network/conf/25-erspan-tunnel.netdev
rename to test/test-network/conf/25-erspan2-tunnel.netdev
index 7127488439a0cdda9e6ec53e5f6b04dd18874e1c..b91bbaf4dc65977a34b1ef6804b176783fdc06cb 100644 (file)
@@ -4,7 +4,11 @@ Name=erspan99
 Kind=erspan
 
 [Tunnel]
+ERSPANVersion=2
+# ERSPANIndex= will be ignored
 ERSPANIndex=123
+ERSPANDirection=ingress
+ERSPANHardwareId=0x1f
 Local = 172.16.1.200
 Remote = 172.16.1.100
 Key=101
index 51f379f26a1d34f7e0bea2c7639928b2d8197863..7be99f2509c7e0108b9fe64b3d2f558dfec7dc2b 100755 (executable)
@@ -85,9 +85,22 @@ def expectedFailureIfModuleIsNotAvailable(module_name):
 
     return f
 
-def expectedFailureIfERSPANModuleIsNotAvailable():
+def expectedFailureIfERSPANv0IsNotSupported():
+    # erspan version 0 is supported since f989d546a2d5a9f001f6f8be49d98c10ab9b1897 (v5.8)
     def f(func):
-        rc = call('ip link add dev erspan99 type erspan seq key 30 local 192.168.1.4 remote 192.168.1.1 erspan_ver 1 erspan 123', stderr=subprocess.DEVNULL)
+        rc = call('ip link add dev erspan99 type erspan seq key 30 local 192.168.1.4 remote 192.168.1.1 erspan_ver 0', stderr=subprocess.DEVNULL)
+        if rc == 0:
+            call('ip link del erspan99')
+            return func
+
+        return unittest.expectedFailure(func)
+
+    return f
+
+def expectedFailureIfERSPANv2IsNotSupported():
+    # erspan version 2 is supported since f551c91de262ba36b20c3ac19538afb4f4507441 (v4.16)
+    def f(func):
+        rc = call('ip link add dev erspan99 type erspan seq key 30 local 192.168.1.4 remote 192.168.1.1 erspan_ver 2', stderr=subprocess.DEVNULL)
         if rc == 0:
             call('ip link del erspan99')
             return func
@@ -993,8 +1006,12 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
         '25-bridge.netdev',
         '25-bridge-configure-without-carrier.network',
         '25-bridge.network',
-        '25-erspan-tunnel-local-any.netdev',
-        '25-erspan-tunnel.netdev',
+        '25-erspan0-tunnel-local-any.netdev',
+        '25-erspan0-tunnel.netdev',
+        '25-erspan1-tunnel-local-any.netdev',
+        '25-erspan1-tunnel.netdev',
+        '25-erspan2-tunnel-local-any.netdev',
+        '25-erspan2-tunnel.netdev',
         '25-fou-gretap.netdev',
         '25-fou-gre.netdev',
         '25-fou-ipip.netdev',
@@ -1795,29 +1812,93 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
         print(output)
         self.assertRegex(output, '6rd-prefix 2602::/24')
 
-    @expectedFailureIfERSPANModuleIsNotAvailable()
-    def test_erspan_tunnel(self):
+    @expectedFailureIfERSPANv0IsNotSupported()
+    def test_erspan_tunnel_v0(self):
         copy_unit_to_networkd_unit_path('12-dummy.netdev', '25-erspan.network',
-                                        '25-erspan-tunnel.netdev', '25-tunnel.network',
-                                        '25-erspan-tunnel-local-any.netdev', '25-tunnel-local-any.network')
+                                        '25-erspan0-tunnel.netdev', '25-tunnel.network',
+                                        '25-erspan0-tunnel-local-any.netdev', '25-tunnel-local-any.network')
         start_networkd()
         self.wait_online(['erspan99:routable', 'erspan98:routable', 'dummy98:degraded'])
 
         output = check_output('ip -d link show erspan99')
         print(output)
-        self.assertRegex(output, 'erspan remote 172.16.1.100 local 172.16.1.200')
-        self.assertRegex(output, 'ikey 0.0.0.101')
-        self.assertRegex(output, 'okey 0.0.0.101')
-        self.assertRegex(output, 'iseq')
-        self.assertRegex(output, 'oseq')
+        self.assertIn('erspan remote 172.16.1.100 local 172.16.1.200', output)
+        self.assertIn('erspan_ver 0', output)
+        self.assertNotIn('erspan_index 123', output)
+        self.assertNotIn('erspan_dir ingress', output)
+        self.assertNotIn('erspan_hwid 1f', output)
+        self.assertIn('ikey 0.0.0.101', output)
+        self.assertIn('iseq', output)
         output = check_output('ip -d link show erspan98')
         print(output)
-        self.assertRegex(output, 'erspan remote 172.16.1.100 local any')
-        self.assertRegex(output, '102')
-        self.assertRegex(output, 'ikey 0.0.0.102')
-        self.assertRegex(output, 'okey 0.0.0.102')
-        self.assertRegex(output, 'iseq')
-        self.assertRegex(output, 'oseq')
+        self.assertIn('erspan remote 172.16.1.100 local any', output)
+        self.assertIn('erspan_ver 0', output)
+        self.assertNotIn('erspan_index 124', output)
+        self.assertNotIn('erspan_dir egress', output)
+        self.assertNotIn('erspan_hwid 2f', output)
+        self.assertIn('ikey 0.0.0.102', output)
+        self.assertIn('iseq', output)
+
+    def test_erspan_tunnel_v1(self):
+        copy_unit_to_networkd_unit_path('12-dummy.netdev', '25-erspan.network',
+                                        '25-erspan1-tunnel.netdev', '25-tunnel.network',
+                                        '25-erspan1-tunnel-local-any.netdev', '25-tunnel-local-any.network')
+        start_networkd()
+        self.wait_online(['erspan99:routable', 'erspan98:routable', 'dummy98:degraded'])
+
+        output = check_output('ip -d link show erspan99')
+        print(output)
+        self.assertIn('erspan remote 172.16.1.100 local 172.16.1.200', output)
+        self.assertIn('erspan_ver 1', output)
+        self.assertIn('erspan_index 123', output)
+        self.assertNotIn('erspan_dir ingress', output)
+        self.assertNotIn('erspan_hwid 1f', output)
+        self.assertIn('ikey 0.0.0.101', output)
+        self.assertIn('okey 0.0.0.101', output)
+        self.assertIn('iseq', output)
+        self.assertIn('oseq', output)
+        output = check_output('ip -d link show erspan98')
+        print(output)
+        self.assertIn('erspan remote 172.16.1.100 local any', output)
+        self.assertIn('erspan_ver 1', output)
+        self.assertIn('erspan_index 124', output)
+        self.assertNotIn('erspan_dir egress', output)
+        self.assertNotIn('erspan_hwid 2f', output)
+        self.assertIn('ikey 0.0.0.102', output)
+        self.assertIn('okey 0.0.0.102', output)
+        self.assertIn('iseq', output)
+        self.assertIn('oseq', output)
+
+    @expectedFailureIfERSPANv2IsNotSupported()
+    def test_erspan_tunnel_v2(self):
+        copy_unit_to_networkd_unit_path('12-dummy.netdev', '25-erspan.network',
+                                        '25-erspan2-tunnel.netdev', '25-tunnel.network',
+                                        '25-erspan2-tunnel-local-any.netdev', '25-tunnel-local-any.network')
+        start_networkd()
+        self.wait_online(['erspan99:routable', 'erspan98:routable', 'dummy98:degraded'])
+
+        output = check_output('ip -d link show erspan99')
+        print(output)
+        self.assertIn('erspan remote 172.16.1.100 local 172.16.1.200', output)
+        self.assertIn('erspan_ver 2', output)
+        self.assertNotIn('erspan_index 123', output)
+        self.assertIn('erspan_dir ingress', output)
+        self.assertIn('erspan_hwid 0x1f', output)
+        self.assertIn('ikey 0.0.0.101', output)
+        self.assertIn('okey 0.0.0.101', output)
+        self.assertIn('iseq', output)
+        self.assertIn('oseq', output)
+        output = check_output('ip -d link show erspan98')
+        print(output)
+        self.assertIn('erspan remote 172.16.1.100 local any', output)
+        self.assertIn('erspan_ver 2', output)
+        self.assertNotIn('erspan_index 124', output)
+        self.assertIn('erspan_dir egress', output)
+        self.assertIn('erspan_hwid 0x2f', output)
+        self.assertIn('ikey 0.0.0.102', output)
+        self.assertIn('okey 0.0.0.102', output)
+        self.assertIn('iseq', output)
+        self.assertIn('oseq', output)
 
     def test_tunnel_independent(self):
         copy_unit_to_networkd_unit_path('25-ipip-tunnel-independent.netdev', '26-netdev-link-local-addressing-yes.network')