diff options
Diffstat (limited to 'meta-phosphor/recipes-core/systemd/systemd/0002-networkd-Use-only-a-generic-CONFIGURING-state.patch')
-rw-r--r-- | meta-phosphor/recipes-core/systemd/systemd/0002-networkd-Use-only-a-generic-CONFIGURING-state.patch | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/meta-phosphor/recipes-core/systemd/systemd/0002-networkd-Use-only-a-generic-CONFIGURING-state.patch b/meta-phosphor/recipes-core/systemd/systemd/0002-networkd-Use-only-a-generic-CONFIGURING-state.patch new file mode 100644 index 000000000..49c4cc35f --- /dev/null +++ b/meta-phosphor/recipes-core/systemd/systemd/0002-networkd-Use-only-a-generic-CONFIGURING-state.patch @@ -0,0 +1,176 @@ +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 + |