Then we can drop static_routes_ready() flag.
assert(netmask);
assert(lifetime);
+ /* address_handler calls link_request_set_routes() and link_request_set_nexthop(). Before they
+ * are called, the related flags must be cleared. Otherwise, the link becomes configured state
+ * before routes are configured. */
+ link->static_routes_configured = false;
+ link->static_nexthops_configured = false;
+
prefixlen = in4_addr_netmask_to_prefixlen(netmask);
r = address_new(&addr);
struct in6_addr ip6_addr;
uint32_t lifetime_preferred, lifetime_valid;
-
link->dhcp6_address_configured = false;
r = sd_dhcp6_client_get_lease(client, &lease);
return link_request_set_routes(link);
} else {
log_link_debug(link, "Setting DHCPv6 addresses");
+ /* address_handler calls link_request_set_routes() and link_request_set_nexthop().
+ * Before they are called, the related flags must be cleared. Otherwise, the link
+ * becomes configured state before routes are configured. */
+ link->static_routes_configured = false;
+ link->static_nexthops_configured = false;
link_set_state(link, LINK_STATE_CONFIGURING);
}
address->cinfo.ifa_prefered = lifetime_preferred;
address->cinfo.ifa_valid = lifetime_valid;
+ /* address_handler calls link_request_set_routes() and link_request_set_nexthop(). Before they
+ * are called, the related flags must be cleared. Otherwise, the link becomes configured state
+ * before routes are configured. */
+ link->static_routes_configured = false;
+ link->static_nexthops_configured = false;
link->dhcp6_pd_address_configured = false;
link_set_state(link, LINK_STATE_CONFIGURING);
NextHop *nh;
int r;
+ link->static_nexthops_configured = false;
+
LIST_FOREACH(nexthops, nh, link->network->static_nexthops) {
r = nexthop_configure(nh, link, nexthop_handler);
if (r < 0)
if (link->route_messages == 0) {
log_link_debug(link, "Routes set");
link->static_routes_configured = true;
- link_check_ready(link);
+ link_request_set_nexthop(link);
}
return 1;
assert(link->state != _LINK_STATE_INVALID);
link->static_routes_configured = false;
- link->static_routes_ready = false;
if (!link_has_carrier(link) && !link->network->configure_without_carrier)
/* During configuring addresses, the link lost its carrier. As networkd is dropping
if (link->route_messages == 0) {
link->static_routes_configured = true;
- link_check_ready(link);
+ link_request_set_nexthop(link);
} else {
log_link_debug(link, "Setting routes");
link_set_state(link, LINK_STATE_CONFIGURING);
return;
}
- if (!link->static_routes_ready) {
- link->static_routes_ready = true;
- r = link_request_set_nexthop(link);
- if (r < 0)
- link_enter_failed(link);
- log_link_debug(link, "%s(): static routes are configured. Configuring static nexthops.", __func__);
- return;
- }
-
if (!link->static_nexthops_configured) {
log_link_debug(link, "%s(): static nexthops are not configured.", __func__);
return;
link->addresses_ready = false;
link->neighbors_configured = false;
link->static_routes_configured = false;
- link->static_routes_ready = false;
link->static_nexthops_configured = false;
link->routing_policy_rules_configured = false;
bool addresses_ready:1;
bool neighbors_configured:1;
bool static_routes_configured:1;
- bool static_routes_ready:1;
bool static_nexthops_configured:1;
bool routing_policy_rules_configured:1;
bool tc_configured:1;
if (link->ndisc_addresses_messages == 0)
link->ndisc_addresses_configured = true;
- else
+ else {
log_link_debug(link, "Setting SLAAC addresses.");
+ /* address_handler calls link_request_set_routes() and link_request_set_nexthop().
+ * Before they are called, the related flags must be cleared. Otherwise, the link
+ * becomes configured state before routes are configured. */
+ link->static_routes_configured = false;
+ link->static_nexthops_configured = false;
+ }
+
if (link->ndisc_routes_messages == 0)
link->ndisc_routes_configured = true;
else