From: Yu Watanabe Date: Tue, 31 May 2022 14:36:16 +0000 (+0900) Subject: test-network: add tests for erspan version 0 and 2 X-Git-Tag: v252-rc1~880^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2f0260c1bb5c584df08bad17a0afb23052ec9b9c;p=thirdparty%2Fsystemd.git test-network: add tests for erspan version 0 and 2 --- 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 index 00000000000..03db72a8e1d --- /dev/null +++ b/test/test-network/conf/25-erspan0-tunnel-local-any.netdev @@ -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 index 00000000000..ee295d901f6 --- /dev/null +++ b/test/test-network/conf/25-erspan0-tunnel.netdev @@ -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 index 00000000000..beac91b7b48 --- /dev/null +++ b/test/test-network/conf/25-erspan1-tunnel-local-any.netdev @@ -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 index 00000000000..661ae90af03 --- /dev/null +++ b/test/test-network/conf/25-erspan1-tunnel.netdev @@ -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 diff --git a/test/test-network/conf/25-erspan-tunnel-local-any.netdev b/test/test-network/conf/25-erspan2-tunnel-local-any.netdev 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 d16983cbc3f..010cf6761b0 100644 --- a/test/test-network/conf/25-erspan-tunnel-local-any.netdev +++ b/test/test-network/conf/25-erspan2-tunnel-local-any.netdev @@ -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 diff --git a/test/test-network/conf/25-erspan-tunnel.netdev b/test/test-network/conf/25-erspan2-tunnel.netdev similarity index 66% rename from test/test-network/conf/25-erspan-tunnel.netdev rename to test/test-network/conf/25-erspan2-tunnel.netdev index 7127488439a..b91bbaf4dc6 100644 --- a/test/test-network/conf/25-erspan-tunnel.netdev +++ b/test/test-network/conf/25-erspan2-tunnel.netdev @@ -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 diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index 51f379f26a1..7be99f2509c 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -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')