William A. Kennington III | 6b8d479a | 2019-01-15 13:31:49 -0800 | [diff] [blame^] | 1 | From 3283d15fe33da392b7174eb4b82a5ad1ce03a6e4 Mon Sep 17 00:00:00 2001 |
| 2 | From: "William A. Kennington III" <william@wkennington.com> |
| 3 | Date: Fri, 30 Nov 2018 15:36:33 -0800 |
| 4 | Subject: [PATCH 2/3] networkd: Use only a generic CONFIGURING state |
| 5 | |
| 6 | This allows us to convey that we are performing multiple link |
| 7 | configuration changes in parallel. This is needed to support configuring |
| 8 | neighbors while simultaneously configuring addresses and routes. |
| 9 | |
| 10 | (cherry picked from commit 289e6774d0daefe86771171b8f4f97b63354683e) |
| 11 | |
| 12 | Upstream-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 | |
| 18 | diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c |
| 19 | index 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", |
| 159 | diff --git a/src/network/networkd-link.h b/src/network/networkd-link.h |
| 160 | index 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 | -- |
| 175 | 2.20.1.97.g81188d93c3-goog |
| 176 | |