mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-10-27 01:55:32 +03:00
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.
This commit is contained in:
parent
c42ff3a1a7
commit
289e6774d0
@ -719,7 +719,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");
|
||||
@ -824,9 +824,8 @@ static int route_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
|
||||
|
||||
assert(link);
|
||||
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--;
|
||||
|
||||
@ -846,7 +845,7 @@ static int route_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int link_enter_set_routes(Link *link) {
|
||||
static int link_request_set_routes(Link *link) {
|
||||
enum {
|
||||
PHASE_NON_GATEWAY, /* First phase: Routes without a gateway */
|
||||
PHASE_GATEWAY, /* Second phase: Routes with a gateway */
|
||||
@ -859,12 +858,12 @@ 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);
|
||||
|
||||
link_set_state(link, LINK_STATE_CONFIGURING);
|
||||
|
||||
(void) link_set_routing_policy_rule(link);
|
||||
|
||||
link_set_state(link, LINK_STATE_SETTING_ROUTES);
|
||||
|
||||
/* First add the routes that enable us to talk to gateways, then add in the others that need a gateway. */
|
||||
for (phase = 0; phase < _PHASE_MAX; phase++)
|
||||
LIST_FOREACH(routes, rt, link->network->static_routes) {
|
||||
@ -899,7 +898,7 @@ static int address_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link)
|
||||
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--;
|
||||
@ -916,7 +915,7 @@ static int address_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link)
|
||||
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;
|
||||
@ -1033,7 +1032,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;
|
||||
@ -1046,7 +1045,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);
|
||||
@ -1189,7 +1188,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");
|
||||
|
||||
@ -2276,7 +2275,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, Link *link) {
|
||||
@ -2313,7 +2312,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);
|
||||
|
||||
@ -3426,7 +3425,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;
|
||||
}
|
||||
@ -3509,7 +3508,7 @@ int link_update(Link *link, sd_netlink_message *m) {
|
||||
|
||||
if (link->state == LINK_STATE_LINGER) {
|
||||
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)
|
||||
@ -4037,9 +4036,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",
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user