| From 3283d15fe33da392b7174eb4b82a5ad1ce03a6e4 Mon Sep 17 00:00:00 2001 |
| From: "William A. Kennington III" <william@wkennington.com> |
| Date: Fri, 30 Nov 2018 15:36:33 -0800 |
| Subject: [PATCH 2/3] 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. |
| |
| (cherry picked from commit 289e6774d0daefe86771171b8f4f97b63354683e) |
| |
| Upstream-Status: Backport |
| --- |
| src/network/networkd-link.c | 37 +++++++++++++++++-------------------- |
| src/network/networkd-link.h | 4 +--- |
| 2 files changed, 18 insertions(+), 23 deletions(-) |
| |
| diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c |
| index 0faf337069..71b92185cd 100644 |
| --- a/src/network/networkd-link.c |
| +++ b/src/network/networkd-link.c |
| @@ -706,7 +706,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"); |
| @@ -810,9 +810,8 @@ static int route_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userdata |
| int r; |
| |
| 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--; |
| |
| @@ -832,7 +831,7 @@ static int route_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userdata |
| return 1; |
| } |
| |
| -static int link_enter_set_routes(Link *link) { |
| +static int link_request_set_routes(Link *link) { |
| Route *rt; |
| int r; |
| |
| @@ -840,11 +839,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); |
| |
| LIST_FOREACH(routes, rt, link->network->static_routes) { |
| r = route_configure(rt, link, route_handler); |
| @@ -893,7 +892,7 @@ static int address_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userda |
| 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--; |
| @@ -910,7 +909,7 @@ static int address_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userda |
| 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; |
| @@ -1054,7 +1053,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; |
| @@ -1067,7 +1066,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); |
| @@ -1212,7 +1211,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"); |
| |
| @@ -2313,7 +2312,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, void *userdata) { |
| @@ -2351,7 +2350,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); |
| |
| @@ -3264,7 +3263,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; |
| } |
| @@ -3348,7 +3347,7 @@ int link_update(Link *link, sd_netlink_message *m) { |
| if (link->state == LINK_STATE_LINGER) { |
| link_ref(link); |
| 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) |
| @@ -3911,9 +3910,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 2f37cc1598..5fd81be5a5 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, |
| -- |
| 2.20.1.97.g81188d93c3-goog |
| |