blob: 49c4cc35fa038c44cd610146268f14080960e41d [file] [log] [blame]
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