network: fix assertion when link get carrier
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 2 May 2019 23:13:10 +0000 (01:13 +0200)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 2 May 2019 23:14:36 +0000 (01:14 +0200)
This fixes a bug introduced by bd08ce56156751d58584a44e766ef61340cdae2d.
When link is in LINK_STATE_INITIALIZED, `Link::network` may not be
set yet.

Fixes #12452.

src/network/networkd-link.c

index 3e22efb..c56b4df 100644 (file)
@@ -3734,7 +3734,7 @@ int link_ipv6ll_gained(Link *link, const struct in6_addr *address) {
         link->ipv6ll_address = *address;
         link_check_ready(link);
 
-        if (!IN_SET(link->state, LINK_STATE_PENDING, LINK_STATE_UNMANAGED, LINK_STATE_FAILED)) {
+        if (IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED)) {
                 r = link_acquire_ipv6_conf(link);
                 if (r < 0) {
                         link_enter_failed(link);
@@ -3750,7 +3750,7 @@ static int link_carrier_gained(Link *link) {
 
         assert(link);
 
-        if (!IN_SET(link->state, LINK_STATE_PENDING, LINK_STATE_UNMANAGED, LINK_STATE_FAILED)) {
+        if (IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED)) {
                 r = link_acquire_conf(link);
                 if (r < 0) {
                         link_enter_failed(link);