blob: 49c4cc35fa038c44cd610146268f14080960e41d [file] [log] [blame]
William A. Kennington III6b8d479a2019-01-15 13:31:49 -08001From 3283d15fe33da392b7174eb4b82a5ad1ce03a6e4 Mon Sep 17 00:00:00 2001
2From: "William A. Kennington III" <william@wkennington.com>
3Date: Fri, 30 Nov 2018 15:36:33 -0800
4Subject: [PATCH 2/3] networkd: Use only a generic CONFIGURING state
5
6This allows us to convey that we are performing multiple link
7configuration changes in parallel. This is needed to support configuring
8neighbors while simultaneously configuring addresses and routes.
9
10(cherry picked from commit 289e6774d0daefe86771171b8f4f97b63354683e)
11
12Upstream-Status: Backport
13---
14 src/network/networkd-link.c | 37 +++++++++++++++++--------------------
15 src/network/networkd-link.h | 4 +---
16 2 files changed, 18 insertions(+), 23 deletions(-)
17
18diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
19index 0faf337069..71b92185cd 100644
20--- a/src/network/networkd-link.c
21+++ b/src/network/networkd-link.c
22@@ -706,7 +706,7 @@ static void link_enter_configured(Link *link) {
23 assert(link);
24 assert(link->network);
25
26- if (link->state != LINK_STATE_SETTING_ROUTES)
27+ if (link->state != LINK_STATE_CONFIGURING)
28 return;
29
30 log_link_info(link, "Configured");
31@@ -810,9 +810,8 @@ static int route_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userdata
32 int r;
33
34 assert(link->route_messages > 0);
35- assert(IN_SET(link->state, LINK_STATE_SETTING_ADDRESSES,
36- LINK_STATE_SETTING_ROUTES, LINK_STATE_FAILED,
37- LINK_STATE_LINGER));
38+ assert(IN_SET(link->state, LINK_STATE_CONFIGURING,
39+ LINK_STATE_FAILED, LINK_STATE_LINGER));
40
41 link->route_messages--;
42
43@@ -832,7 +831,7 @@ static int route_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userdata
44 return 1;
45 }
46
47-static int link_enter_set_routes(Link *link) {
48+static int link_request_set_routes(Link *link) {
49 Route *rt;
50 int r;
51
52@@ -840,11 +839,11 @@ static int link_enter_set_routes(Link *link) {
53 assert(link->network);
54 assert(link->addresses_configured);
55 assert(link->address_messages == 0);
56- assert(link->state == LINK_STATE_SETTING_ADDRESSES);
57+ assert(link->state != _LINK_STATE_INVALID);
58
59- (void) link_set_routing_policy_rule(link);
60+ link_set_state(link, LINK_STATE_CONFIGURING);
61
62- link_set_state(link, LINK_STATE_SETTING_ROUTES);
63+ (void) link_set_routing_policy_rule(link);
64
65 LIST_FOREACH(routes, rt, link->network->static_routes) {
66 r = route_configure(rt, link, route_handler);
67@@ -893,7 +892,7 @@ static int address_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userda
68 assert(link);
69 assert(link->ifname);
70 assert(link->address_messages > 0);
71- assert(IN_SET(link->state, LINK_STATE_SETTING_ADDRESSES,
72+ assert(IN_SET(link->state, LINK_STATE_CONFIGURING,
73 LINK_STATE_FAILED, LINK_STATE_LINGER));
74
75 link->address_messages--;
76@@ -910,7 +909,7 @@ static int address_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userda
77 if (link->address_messages == 0) {
78 log_link_debug(link, "Addresses set");
79 link->addresses_configured = true;
80- link_enter_set_routes(link);
81+ link_request_set_routes(link);
82 }
83
84 return 1;
85@@ -1054,7 +1053,7 @@ static int link_set_bridge_fdb(Link *link) {
86 return 0;
87 }
88
89-static int link_enter_set_addresses(Link *link) {
90+static int link_request_set_addresses(Link *link) {
91 AddressLabel *label;
92 Address *ad;
93 int r;
94@@ -1067,7 +1066,7 @@ static int link_enter_set_addresses(Link *link) {
95 if (r < 0)
96 return r;
97
98- link_set_state(link, LINK_STATE_SETTING_ADDRESSES);
99+ link_set_state(link, LINK_STATE_CONFIGURING);
100
101 LIST_FOREACH(addresses, ad, link->network->static_addresses) {
102 r = address_configure(ad, link, address_handler, false);
103@@ -1212,7 +1211,7 @@ static int link_enter_set_addresses(Link *link) {
104
105 if (link->address_messages == 0) {
106 link->addresses_configured = true;
107- link_enter_set_routes(link);
108+ link_request_set_routes(link);
109 } else
110 log_link_debug(link, "Setting addresses");
111
112@@ -2313,7 +2312,7 @@ static int link_joined(Link *link) {
113 if (!link_has_carrier(link) && !link->network->configure_without_carrier)
114 return 0;
115
116- return link_enter_set_addresses(link);
117+ return link_request_set_addresses(link);
118 }
119
120 static int netdev_join_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userdata) {
121@@ -2351,7 +2350,7 @@ static int link_enter_join_netdev(Link *link) {
122 assert(link->network);
123 assert(link->state == LINK_STATE_PENDING);
124
125- link_set_state(link, LINK_STATE_ENSLAVING);
126+ link_set_state(link, LINK_STATE_CONFIGURING);
127
128 link_dirty(link);
129
130@@ -3264,7 +3263,7 @@ static int link_carrier_gained(Link *link) {
131 return r;
132 }
133
134- r = link_enter_set_addresses(link);
135+ r = link_request_set_addresses(link);
136 if (r < 0)
137 return r;
138 }
139@@ -3348,7 +3347,7 @@ int link_update(Link *link, sd_netlink_message *m) {
140 if (link->state == LINK_STATE_LINGER) {
141 link_ref(link);
142 log_link_info(link, "Link readded");
143- link_set_state(link, LINK_STATE_ENSLAVING);
144+ link_set_state(link, LINK_STATE_CONFIGURING);
145
146 r = link_new_carrier_maps(link);
147 if (r < 0)
148@@ -3911,9 +3910,7 @@ void link_clean(Link *link) {
149
150 static const char* const link_state_table[_LINK_STATE_MAX] = {
151 [LINK_STATE_PENDING] = "pending",
152- [LINK_STATE_ENSLAVING] = "configuring",
153- [LINK_STATE_SETTING_ADDRESSES] = "configuring",
154- [LINK_STATE_SETTING_ROUTES] = "configuring",
155+ [LINK_STATE_CONFIGURING] = "configuring",
156 [LINK_STATE_CONFIGURED] = "configured",
157 [LINK_STATE_UNMANAGED] = "unmanaged",
158 [LINK_STATE_FAILED] = "failed",
159diff --git a/src/network/networkd-link.h b/src/network/networkd-link.h
160index 2f37cc1598..5fd81be5a5 100644
161--- a/src/network/networkd-link.h
162+++ b/src/network/networkd-link.h
163@@ -19,9 +19,7 @@
164
165 typedef enum LinkState {
166 LINK_STATE_PENDING,
167- LINK_STATE_ENSLAVING,
168- LINK_STATE_SETTING_ADDRESSES,
169- LINK_STATE_SETTING_ROUTES,
170+ LINK_STATE_CONFIGURING,
171 LINK_STATE_CONFIGURED,
172 LINK_STATE_UNMANAGED,
173 LINK_STATE_FAILED,
174--
1752.20.1.97.g81188d93c3-goog
176