summaryrefslogtreecommitdiff
path: root/meta-phosphor/recipes-core/systemd/systemd/0002-networkd-Use-only-a-generic-CONFIGURING-state.patch
diff options
context:
space:
mode:
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.patch176
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
+