From 66e0bb336e0325e360884c39b7402c5d91a047ec Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Fri, 21 Dec 2018 11:31:00 +0900 Subject: [PATCH 1/3] network: decrease and fix indentation --- src/network/networkd-address.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c index 9f0a22b827..b4e528f0fd 100644 --- a/src/network/networkd-address.c +++ b/src/network/networkd-address.c @@ -632,14 +632,10 @@ int address_configure( r = sd_netlink_message_append_in6_addr(req, IFA_ADDRESS, &address->in_addr_peer.in6); if (r < 0) return log_error_errno(r, "Could not append IFA_ADDRESS attribute: %m"); - } else { - if (address->family == AF_INET) { - if (address->prefixlen <= 30) { - r = sd_netlink_message_append_in_addr(req, IFA_BROADCAST, &address->broadcast); - if (r < 0) - return log_error_errno(r, "Could not append IFA_BROADCAST attribute: %m"); - } - } + } else if (address->family == AF_INET && address->prefixlen <= 30) { + r = sd_netlink_message_append_in_addr(req, IFA_BROADCAST, &address->broadcast); + if (r < 0) + return log_error_errno(r, "Could not append IFA_BROADCAST attribute: %m"); } if (address->label) { @@ -648,8 +644,7 @@ int address_configure( return log_error_errno(r, "Could not append IFA_LABEL attribute: %m"); } - r = sd_netlink_message_append_cache_info(req, IFA_CACHEINFO, - &address->cinfo); + r = sd_netlink_message_append_cache_info(req, IFA_CACHEINFO, &address->cinfo); if (r < 0) return log_error_errno(r, "Could not append IFA_CACHEINFO attribute: %m"); From c8f7123e00a6c1b8bf23f681e2b73ac3b37944f3 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Fri, 21 Dec 2018 15:52:33 +0900 Subject: [PATCH 2/3] network: always check link is ready when address is updated --- src/network/networkd-address.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c index b4e528f0fd..d1ef451004 100644 --- a/src/network/networkd-address.c +++ b/src/network/networkd-address.c @@ -351,18 +351,17 @@ int address_update( address->cinfo = *cinfo; link_update_operstate(address->link); + link_check_ready(address->link); - if (!ready && address_is_ready(address)) { - link_check_ready(address->link); + if (!ready && + address_is_ready(address) && + address->family == AF_INET6 && + in_addr_is_link_local(AF_INET6, &address->in_addr) > 0 && + in_addr_is_null(AF_INET6, (const union in_addr_union*) &address->link->ipv6ll_address) > 0) { - if (address->family == AF_INET6 && - in_addr_is_link_local(AF_INET6, &address->in_addr) > 0 && - in_addr_is_null(AF_INET6, (const union in_addr_union*) &address->link->ipv6ll_address) > 0) { - - r = link_ipv6ll_gained(address->link, &address->in_addr.in6); - if (r < 0) - return r; - } + r = link_ipv6ll_gained(address->link, &address->in_addr.in6); + if (r < 0) + return r; } return 0; From ac60877f1de5cc0e6e10ec181477523c53b18af4 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Fri, 21 Dec 2018 15:53:41 +0900 Subject: [PATCH 3/3] test: add a testcase for Address.Peer= in .network unit --- test/test-network/conf/25-address-section.network | 3 +++ test/test-network/systemd-networkd-tests.py | 15 +++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/test/test-network/conf/25-address-section.network b/test/test-network/conf/25-address-section.network index d0fae69361..4b22f7331a 100644 --- a/test/test-network/conf/25-address-section.network +++ b/test/test-network/conf/25-address-section.network @@ -1,6 +1,9 @@ [Match] Name=dummy98 +[Network] +IPv6AcceptRA=no + [Address] Address=10.2.3.4/16 Peer=10.2.3.5/16 diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index 19572be151..a13ed1ba19 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -650,6 +650,21 @@ class NetworkdNetWorkTests(unittest.TestCase, Utilities): subprocess.call(['ip', 'rule', 'del', 'table', '7']) + def test_address_peer(self): + self.copy_unit_to_networkd_unit_path('25-address-section.network', '12-dummy.netdev') + self.start_networkd() + + self.assertTrue(self.link_exits('dummy98')) + + output = subprocess.check_output(['ip', 'address', 'show', 'dummy98']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, 'inet 10.2.3.4 peer 10.2.3.5/16 scope global 32') + self.assertRegex(output, 'inet 10.6.7.8/16 brd 10.6.255.255 scope global 33') + + output = subprocess.check_output(['networkctl', 'status', 'dummy98']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, 'State: routable \(configured\)') + def test_address_preferred_lifetime_zero_ipv6(self): self.copy_unit_to_networkd_unit_path('25-address-section-miscellaneous.network', '12-dummy.netdev') self.start_networkd()