networkd: Wait for DHCPv6 before announcing link configured

Wait until DHCPv6 has acquired an address before announcing the link
to be configured. Log the DHCPv6 lease lost event.
This commit is contained in:
Patrik Flykt 2015-09-23 14:52:03 +03:00
parent e66040417b
commit 18d29550b5
3 changed files with 15 additions and 1 deletions

View file

@ -147,7 +147,9 @@ static void dhcp6_handler(sd_dhcp6_client *client, int event, void *userdata) {
case SD_DHCP6_CLIENT_EVENT_STOP:
case SD_DHCP6_CLIENT_EVENT_RESEND_EXPIRE:
case SD_DHCP6_CLIENT_EVENT_RETRANS_MAX:
log_link_debug(link, "DHCPv6 event %d", event);
log_link_warning(link, "DHCPv6 lease lost");
link->dhcp6_configured = false;
break;
case SD_DHCP6_CLIENT_EVENT_IP_ACQUIRE:
@ -165,6 +167,7 @@ static void dhcp6_handler(sd_dhcp6_client *client, int event, void *userdata) {
return;
}
link->dhcp6_configured = true;
break;
default:
@ -176,6 +179,8 @@ static void dhcp6_handler(sd_dhcp6_client *client, int event, void *userdata) {
event);
return;
}
link_client_handler(link);
}
static int dhcp6_configure(Link *link, int event) {
@ -187,6 +192,8 @@ static int dhcp6_configure(Link *link, int event) {
SD_ICMP6_ND_EVENT_ROUTER_ADVERTISMENT_OTHER,
SD_ICMP6_ND_EVENT_ROUTER_ADVERTISMENT_MANAGED), -EINVAL);
link->dhcp6_configured = false;
if (link->dhcp6_client) {
r = sd_dhcp6_client_get_information_request(link->dhcp6_client,
&information_request);
@ -221,6 +228,9 @@ static int dhcp6_configure(Link *link, int event) {
goto error;
}
if (r == -EALREADY)
link->dhcp6_configured = true;
return r;
}

View file

@ -504,6 +504,9 @@ void link_client_handler(Link *link) {
if (link_dhcp4_enabled(link) && !link->dhcp4_configured)
return;
if (link_dhcp6_enabled(link) && !link->dhcp6_configured)
return;
if (link->state != LINK_STATE_CONFIGURED)
link_enter_configured(link);

View file

@ -91,6 +91,7 @@ struct Link {
uint16_t original_mtu;
unsigned dhcp4_messages;
bool dhcp4_configured;
bool dhcp6_configured;
sd_ipv4ll *ipv4ll;
bool ipv4ll_address;