]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test-network: add a test case for nexthop Group= setting 19594/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 13 May 2021 02:11:48 +0000 (11:11 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 21 May 2021 19:59:45 +0000 (04:59 +0900)
test/test-network/conf/25-nexthop-dummy.network [new file with mode: 0644]
test/test-network/conf/25-nexthop.network
test/test-network/systemd-networkd-tests.py

diff --git a/test/test-network/conf/25-nexthop-dummy.network b/test/test-network/conf/25-nexthop-dummy.network
new file mode 100644 (file)
index 0000000..e494aca
--- /dev/null
@@ -0,0 +1,13 @@
+[Match]
+Name=dummy98
+
+[Network]
+Address=192.168.20.20/24
+
+[NextHop]
+Id=20
+Gateway=192.168.20.1
+
+[NextHop]
+Id=21
+Group=1:3 20:1
index 8b3e4b65c56cd1e6d0c458417cb3e81a15e7da33..6f54e3f0d5027c78739017187b7a0d94e538189a 100644 (file)
@@ -72,3 +72,7 @@ Destination=10.10.10.13
 [Route]
 NextHop=7
 Destination=2001:1234:5:8f62::2
+
+[Route]
+NextHop=21
+Destination=10.10.10.14
index 23b8abfbaaff0be91291c5cea4e760829b44b070..56a22b0a44817a0ac1e62f68d8640229ffe35fd8 100755 (executable)
@@ -1819,6 +1819,7 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities):
         '25-neighbor-ipv6.network',
         '25-neighbor-ip-dummy.network',
         '25-neighbor-ip.network',
+        '25-nexthop-dummy.network',
         '25-nexthop-nothing.network',
         '25-nexthop.network',
         '25-qdisc-cake.network',
@@ -2844,48 +2845,68 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities):
 
     @expectedFailureIfNexthopIsNotAvailable()
     def test_nexthop(self):
-        copy_unit_to_networkd_unit_path('25-nexthop.network', '25-veth.netdev', '25-veth-peer.network')
-        start_networkd()
-        self.wait_online(['veth99:routable', 'veth-peer:routable'])
+        def check_nexthop(self):
+            self.wait_online(['veth99:routable', 'veth-peer:routable', 'dummy98:routable'])
 
-        output = check_output('ip nexthop list dev veth99')
-        print(output)
-        self.assertIn('id 1 via 192.168.5.1 dev veth99', output)
-        self.assertIn('id 2 via 2001:1234:5:8f63::2 dev veth99', output)
-        self.assertIn('id 3 dev veth99', output)
-        self.assertIn('id 4 dev veth99', output)
-        self.assertRegex(output, 'id 5 via 192.168.10.1 dev veth99 .*onlink')
-        self.assertRegex(output, r'id [0-9]* via 192.168.5.2 dev veth99')
+            output = check_output('ip nexthop list dev veth99')
+            print(output)
+            self.assertIn('id 1 via 192.168.5.1 dev veth99', output)
+            self.assertIn('id 2 via 2001:1234:5:8f63::2 dev veth99', output)
+            self.assertIn('id 3 dev veth99', output)
+            self.assertIn('id 4 dev veth99', output)
+            self.assertRegex(output, 'id 5 via 192.168.10.1 dev veth99 .*onlink')
+            self.assertRegex(output, r'id [0-9]* via 192.168.5.2 dev veth99')
+
+            output = check_output('ip nexthop list dev dummy98')
+            print(output)
+            self.assertIn('id 20 via 192.168.20.1 dev dummy98', output)
 
-        # kernel manages blackhole nexthops on lo
-        output = check_output('ip nexthop list dev lo')
-        print(output)
-        self.assertIn('id 6 blackhole', output)
-        self.assertIn('id 7 blackhole', output)
+            # kernel manages blackhole nexthops on lo
+            output = check_output('ip nexthop list dev lo')
+            print(output)
+            self.assertIn('id 6 blackhole', output)
+            self.assertIn('id 7 blackhole', output)
 
-        output = check_output('ip route show dev veth99 10.10.10.10')
-        print(output)
-        self.assertEqual('10.10.10.10 nhid 1 via 192.168.5.1 proto static', output)
+            # group nexthops are shown with -0 option
+            output = check_output('ip -0 nexthop list id 21')
+            print(output)
+            self.assertRegex(output, r'id 21 group (1,3/20|20/1,3)')
 
-        output = check_output('ip route show dev veth99 10.10.10.11')
-        print(output)
-        self.assertEqual('10.10.10.11 nhid 2 via inet6 2001:1234:5:8f63::2 proto static', output)
+            output = check_output('ip route show dev veth99 10.10.10.10')
+            print(output)
+            self.assertEqual('10.10.10.10 nhid 1 via 192.168.5.1 proto static', output)
 
-        output = check_output('ip route show dev veth99 10.10.10.12')
-        print(output)
-        self.assertEqual('10.10.10.12 nhid 5 via 192.168.10.1 proto static onlink', output)
+            output = check_output('ip route show dev veth99 10.10.10.11')
+            print(output)
+            self.assertEqual('10.10.10.11 nhid 2 via inet6 2001:1234:5:8f63::2 proto static', output)
 
-        output = check_output('ip -6 route show dev veth99 2001:1234:5:8f62::1')
-        print(output)
-        self.assertEqual('2001:1234:5:8f62::1 nhid 2 via 2001:1234:5:8f63::2 proto static metric 1024 pref medium', output)
+            output = check_output('ip route show dev veth99 10.10.10.12')
+            print(output)
+            self.assertEqual('10.10.10.12 nhid 5 via 192.168.10.1 proto static onlink', output)
 
-        output = check_output('ip route show 10.10.10.13')
-        print(output)
-        self.assertEqual('blackhole 10.10.10.13 nhid 6 dev lo proto static', output)
+            output = check_output('ip -6 route show dev veth99 2001:1234:5:8f62::1')
+            print(output)
+            self.assertEqual('2001:1234:5:8f62::1 nhid 2 via 2001:1234:5:8f63::2 proto static metric 1024 pref medium', output)
 
-        output = check_output('ip -6 route show 2001:1234:5:8f62::2')
-        print(output)
-        self.assertEqual('blackhole 2001:1234:5:8f62::2 nhid 7 dev lo proto static metric 1024 pref medium', output)
+            output = check_output('ip route show 10.10.10.13')
+            print(output)
+            self.assertEqual('blackhole 10.10.10.13 nhid 6 dev lo proto static', output)
+
+            output = check_output('ip -6 route show 2001:1234:5:8f62::2')
+            print(output)
+            self.assertEqual('blackhole 2001:1234:5:8f62::2 nhid 7 dev lo proto static metric 1024 pref medium', output)
+
+            output = check_output('ip route show 10.10.10.14')
+            print(output)
+            self.assertIn('10.10.10.14 nhid 21 proto static', output)
+            self.assertIn('nexthop via 192.168.20.1 dev dummy98 weight 1', output)
+            self.assertIn('nexthop via 192.168.5.1 dev veth99 weight 3', output)
+
+        copy_unit_to_networkd_unit_path('25-nexthop.network', '25-veth.netdev', '25-veth-peer.network',
+                                        '12-dummy.netdev', '25-nexthop-dummy.network')
+        start_networkd()
+
+        check_nexthop(self)
 
         remove_unit_from_networkd_path(['25-nexthop.network'])
         copy_unit_to_networkd_unit_path('25-nexthop-nothing.network')
@@ -2904,11 +2925,13 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities):
 
         remove_unit_from_networkd_path(['25-nexthop-nothing.network'])
         copy_unit_to_networkd_unit_path('25-nexthop.network')
+        rc = call(*networkctl_cmd, 'reconfigure', 'dummy98', env=env)
+        self.assertEqual(rc, 0)
         rc = call(*networkctl_cmd, 'reload', env=env)
         self.assertEqual(rc, 0)
         time.sleep(1)
 
-        self.wait_online(['veth99:routable', 'veth-peer:routable'])
+        check_nexthop(self)
 
         rc = call('ip link del veth99')
         self.assertEqual(rc, 0)