]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: ignore callback calls when link is in failed state
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 7 Jun 2019 06:04:11 +0000 (15:04 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 7 Jun 2019 07:22:00 +0000 (16:22 +0900)
src/network/networkd-dhcp4.c

index 0ca58721b9ef33877ac57c072f43f08ee9fd80e3..ce1e77429b0c735ed7c90a1fba3ea5ffa6beb9b0 100644 (file)
@@ -21,10 +21,14 @@ static int dhcp4_route_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *li
 
         link->dhcp4_messages--;
 
+        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
+                return 1;
+
         r = sd_netlink_message_get_errno(m);
         if (r < 0 && r != -EEXIST) {
                 log_link_error_errno(link, r, "Could not set DHCPv4 route: %m");
                 link_enter_failed(link);
+                return 1;
         }
 
         if (link->dhcp4_messages == 0) {
@@ -379,12 +383,17 @@ static int dhcp4_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *
 
         assert(link);
 
+        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
+                return 1;
+
         r = sd_netlink_message_get_errno(m);
         if (r < 0 && r != -EEXIST) {
                 log_link_error_errno(link, r, "Could not set DHCPv4 address: %m");
                 link_enter_failed(link);
-        } else if (r >= 0)
-                manager_rtnl_process_address(rtnl, m, link->manager);
+                return 1;
+        }
+
+        manager_rtnl_process_address(rtnl, m, link->manager);
 
         r = link_set_dhcp_routes(link);
         if (r < 0) {