From: William A. Kennington III Date: Fri, 30 Nov 2018 23:36:33 +0000 (-0800) Subject: networkd: Use only a generic CONFIGURING state X-Git-Tag: v240~105^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=289e6774d0daefe86771171b8f4f97b63354683e;p=thirdparty%2Fsystemd.git networkd: Use only a generic CONFIGURING state This allows us to convey that we are performing multiple link configuration changes in parallel. This is needed to support configuring neighbors while simultaneously configuring addresses and routes. --- diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 240ab7f3715..637bd3c554d 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -719,7 +719,7 @@ static void link_enter_configured(Link *link) { assert(link); assert(link->network); - if (link->state != LINK_STATE_SETTING_ROUTES) + if (link->state != LINK_STATE_CONFIGURING) return; log_link_info(link, "Configured"); @@ -824,9 +824,8 @@ static int route_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) { assert(link); assert(link->route_messages > 0); - assert(IN_SET(link->state, LINK_STATE_SETTING_ADDRESSES, - LINK_STATE_SETTING_ROUTES, LINK_STATE_FAILED, - LINK_STATE_LINGER)); + assert(IN_SET(link->state, LINK_STATE_CONFIGURING, + LINK_STATE_FAILED, LINK_STATE_LINGER)); link->route_messages--; @@ -846,7 +845,7 @@ static int route_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) { return 1; } -static int link_enter_set_routes(Link *link) { +static int link_request_set_routes(Link *link) { enum { PHASE_NON_GATEWAY, /* First phase: Routes without a gateway */ PHASE_GATEWAY, /* Second phase: Routes with a gateway */ @@ -859,11 +858,11 @@ static int link_enter_set_routes(Link *link) { assert(link->network); assert(link->addresses_configured); assert(link->address_messages == 0); - assert(link->state == LINK_STATE_SETTING_ADDRESSES); + assert(link->state != _LINK_STATE_INVALID); - (void) link_set_routing_policy_rule(link); + link_set_state(link, LINK_STATE_CONFIGURING); - link_set_state(link, LINK_STATE_SETTING_ROUTES); + (void) link_set_routing_policy_rule(link); /* First add the routes that enable us to talk to gateways, then add in the others that need a gateway. */ for (phase = 0; phase < _PHASE_MAX; phase++) @@ -899,7 +898,7 @@ static int address_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) assert(link); assert(link->ifname); assert(link->address_messages > 0); - assert(IN_SET(link->state, LINK_STATE_SETTING_ADDRESSES, + assert(IN_SET(link->state, LINK_STATE_CONFIGURING, LINK_STATE_FAILED, LINK_STATE_LINGER)); link->address_messages--; @@ -916,7 +915,7 @@ static int address_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) if (link->address_messages == 0) { log_link_debug(link, "Addresses set"); link->addresses_configured = true; - link_enter_set_routes(link); + link_request_set_routes(link); } return 1; @@ -1033,7 +1032,7 @@ static int link_set_bridge_fdb(Link *link) { return 0; } -static int link_enter_set_addresses(Link *link) { +static int link_request_set_addresses(Link *link) { AddressLabel *label; Address *ad; int r; @@ -1046,7 +1045,7 @@ static int link_enter_set_addresses(Link *link) { if (r < 0) return r; - link_set_state(link, LINK_STATE_SETTING_ADDRESSES); + link_set_state(link, LINK_STATE_CONFIGURING); LIST_FOREACH(addresses, ad, link->network->static_addresses) { r = address_configure(ad, link, address_handler, false); @@ -1189,7 +1188,7 @@ static int link_enter_set_addresses(Link *link) { if (link->address_messages == 0) { link->addresses_configured = true; - link_enter_set_routes(link); + link_request_set_routes(link); } else log_link_debug(link, "Setting addresses"); @@ -2276,7 +2275,7 @@ static int link_joined(Link *link) { if (!link_has_carrier(link) && !link->network->configure_without_carrier) return 0; - return link_enter_set_addresses(link); + return link_request_set_addresses(link); } static int netdev_join_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) { @@ -2313,7 +2312,7 @@ static int link_enter_join_netdev(Link *link) { assert(link->network); assert(link->state == LINK_STATE_PENDING); - link_set_state(link, LINK_STATE_ENSLAVING); + link_set_state(link, LINK_STATE_CONFIGURING); link_dirty(link); @@ -3426,7 +3425,7 @@ static int link_carrier_gained(Link *link) { return r; } - r = link_enter_set_addresses(link); + r = link_request_set_addresses(link); if (r < 0) return r; } @@ -3509,7 +3508,7 @@ int link_update(Link *link, sd_netlink_message *m) { if (link->state == LINK_STATE_LINGER) { log_link_info(link, "Link readded"); - link_set_state(link, LINK_STATE_ENSLAVING); + link_set_state(link, LINK_STATE_CONFIGURING); r = link_new_carrier_maps(link); if (r < 0) @@ -4037,9 +4036,7 @@ void link_clean(Link *link) { static const char* const link_state_table[_LINK_STATE_MAX] = { [LINK_STATE_PENDING] = "pending", - [LINK_STATE_ENSLAVING] = "configuring", - [LINK_STATE_SETTING_ADDRESSES] = "configuring", - [LINK_STATE_SETTING_ROUTES] = "configuring", + [LINK_STATE_CONFIGURING] = "configuring", [LINK_STATE_CONFIGURED] = "configured", [LINK_STATE_UNMANAGED] = "unmanaged", [LINK_STATE_FAILED] = "failed", diff --git a/src/network/networkd-link.h b/src/network/networkd-link.h index 92ce7a2ec99..44f3c0bc2f5 100644 --- a/src/network/networkd-link.h +++ b/src/network/networkd-link.h @@ -19,9 +19,7 @@ typedef enum LinkState { LINK_STATE_PENDING, - LINK_STATE_ENSLAVING, - LINK_STATE_SETTING_ADDRESSES, - LINK_STATE_SETTING_ROUTES, + LINK_STATE_CONFIGURING, LINK_STATE_CONFIGURED, LINK_STATE_UNMANAGED, LINK_STATE_FAILED,