summaryrefslogtreecommitdiff
path: root/src/network
diff options
context:
space:
mode:
authortomty89 <tom.ty89@gmail.com>2016-05-20 18:20:24 +0800
committertomty89 <tom.ty89@gmail.com>2016-05-20 18:20:24 +0800
commit9243aa45fa0cfcd399aa7db1abd1e64e9ac515e3 (patch)
tree573a2b5ecf1d0b58069069508c1a74fbfe25aa90 /src/network
parent35b132e8ad3c50614605e00cf8ff20988094d21c (diff)
[networkd-ndisc] set IPv6LL address in DHCP client
Fix issue #3256 and probably #1982. Referenced link_acquire_ipv6_conf() in networkd-link.c.
Diffstat (limited to 'src/network')
-rw-r--r--src/network/networkd-ndisc.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c
index b22c58bfe5..78f02cf746 100644
--- a/src/network/networkd-ndisc.c
+++ b/src/network/networkd-ndisc.c
@@ -157,6 +157,10 @@ static void ndisc_router_handler(sd_ndisc *nd, uint8_t flags, const struct in6_a
if (flags & ND_RA_FLAG_MANAGED)
dhcp6_request_address(link);
+ r = sd_dhcp6_client_set_local_address(link->dhcp6_client, &link->ipv6ll_address);
+ if (r < 0 && r != -EBUSY)
+ return log_link_warning_errno(link, r, "Could not set IPv6LL address in DHCP client: %m");
+
r = sd_dhcp6_client_start(link->dhcp6_client);
if (r < 0 && r != -EBUSY)
log_link_warning_errno(link, r, "Starting DHCPv6 client on NDisc request failed: %m");
@@ -203,6 +207,10 @@ static void ndisc_handler(sd_ndisc *nd, int event, void *userdata) {
case SD_NDISC_EVENT_TIMEOUT:
dhcp6_request_address(link);
+ r = sd_dhcp6_client_set_local_address(link->dhcp6_client, &link->ipv6ll_address);
+ if (r < 0 && r != -EBUSY)
+ return log_link_warning_errno(link, r, "Could not set IPv6LL address in DHCP client: %m");
+
r = sd_dhcp6_client_start(link->dhcp6_client);
if (r < 0 && r != -EBUSY)
log_link_warning_errno(link, r, "Starting DHCPv6 client after NDisc timeout failed: %m");