From 4e2ef9d9d1affd08c9a6deeec7f268a7a3a8ebbd Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 16 Jul 2019 13:02:38 +0900 Subject: [PATCH 1/2] network: do not configure routes when dropping addresses Follow-up for 4ff296b02411bb4f0dc38f48cbab06f8645d2a08. --- src/network/networkd-dhcp4.c | 5 +++++ src/network/networkd-link.c | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c index 8a987e84a3..1bb1df32e9 100644 --- a/src/network/networkd-dhcp4.c +++ b/src/network/networkd-dhcp4.c @@ -103,6 +103,11 @@ static int link_set_dhcp_routes(Link *link) { if (!link->network->dhcp_use_routes) return 0; + if (!link_has_carrier(link) && !link->network->configure_without_carrier) + /* During configuring addresses, the link lost its carrier. As networkd is dropping + * the addresses now, let's not configure the routes either. */ + return 0; + table = link_get_dhcp_route_table(link); r = sd_dhcp_lease_get_address(link->dhcp_lease, &address); diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 66fbeac79d..46830290c6 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -934,6 +934,11 @@ int link_request_set_routes(Link *link) { link->static_routes_configured = false; + if (!link_has_carrier(link) && !link->network->configure_without_carrier) + /* During configuring addresses, the link lost its carrier. As networkd is dropping + * the addresses now, let's not configure the routes either. */ + return 0; + r = link_request_set_routing_policy_rule(link); if (r < 0) return r; From 7d7bb5c8613b774bf77c531f46d31ee20d7a1b1e Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Wed, 17 Jul 2019 01:01:07 +0900 Subject: [PATCH 2/2] test-network: extend sleep time Even if addresses provided by DHCP is assigned, the state file may not be written yet, or resolved may not receive the state change signal yet, or resolved may not process the signal yet... --- test/test-network/systemd-networkd-tests.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index 1eda8ee8e8..2fbd9ae7b7 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -2815,7 +2815,7 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities): self.wait_address('veth99', r'inet 192.168.5.[0-9]*/24 brd 192.168.5.255 scope global dynamic', ipv='-4') self.wait_address('veth99', r'inet6 2600::[0-9a-f]*/128 scope global (?:dynamic noprefixroute|noprefixroute dynamic)', ipv='-6') - time.sleep(3) + time.sleep(10) output = check_output(*resolvectl_cmd, 'dns', 'veth99', env=env) print(output) self.assertRegex(output, '192.168.5.1') @@ -2833,7 +2833,7 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities): self.wait_address('veth99', r'inet 192.168.5.[0-9]*/24 brd 192.168.5.255 scope global dynamic', ipv='-4') self.wait_address('veth99', r'inet6 2600::[0-9a-f]*/128 scope global (?:dynamic noprefixroute|noprefixroute dynamic)', ipv='-6') - time.sleep(3) + time.sleep(10) output = check_output(*resolvectl_cmd, 'dns', 'veth99', env=env) print(output) self.assertNotRegex(output, '192.168.5.1') @@ -2851,7 +2851,7 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities): self.wait_address('veth99', r'inet 192.168.5.[0-9]*/24 brd 192.168.5.255 scope global dynamic', ipv='-4') self.wait_address('veth99', r'inet6 2600::[0-9a-f]*/128 scope global (?:dynamic noprefixroute|noprefixroute dynamic)', ipv='-6') - time.sleep(3) + time.sleep(10) output = check_output(*resolvectl_cmd, 'dns', 'veth99', env=env) print(output) self.assertRegex(output, '192.168.5.1') @@ -2869,7 +2869,7 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities): self.wait_address('veth99', r'inet 192.168.5.[0-9]*/24 brd 192.168.5.255 scope global dynamic', ipv='-4') self.wait_address('veth99', r'inet6 2600::[0-9a-f]*/128 scope global (?:dynamic noprefixroute|noprefixroute dynamic)', ipv='-6') - time.sleep(3) + time.sleep(10) output = check_output(*resolvectl_cmd, 'dns', 'veth99', env=env) print(output) self.assertRegex(output, '192.168.5.1')