| From a24d0d95df1929912c0f767f5ab1353552464c84 Mon Sep 17 00:00:00 2001 |
| From: "William A. Kennington III" <william@wkennington.com> |
| Date: Fri, 30 Nov 2018 15:54:45 -0800 |
| Subject: [PATCH 1/3] networkd: Track address configuration |
| |
| This will be useful to assert that our static route configuration always |
| happens after address configuration once our individual configure state |
| goes away. |
| |
| (cherry picked from commit c42ff3a1a7bfea66dc4655096c79bd481159091b) |
| |
| Upstream-Status: Backport |
| --- |
| src/network/networkd-link.c | 11 +++++++++-- |
| src/network/networkd-link.h | 2 ++ |
| 2 files changed, 11 insertions(+), 2 deletions(-) |
| |
| diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c |
| index 4afcf843bd..0faf337069 100644 |
| --- a/src/network/networkd-link.c |
| +++ b/src/network/networkd-link.c |
| @@ -728,6 +728,9 @@ void link_check_ready(Link *link) { |
| if (!link->network) |
| return; |
| |
| + if (!link->addresses_configured) |
| + return; |
| + |
| if (!link->static_routes_configured) |
| return; |
| |
| @@ -835,6 +838,8 @@ static int link_enter_set_routes(Link *link) { |
| |
| assert(link); |
| assert(link->network); |
| + assert(link->addresses_configured); |
| + assert(link->address_messages == 0); |
| assert(link->state == LINK_STATE_SETTING_ADDRESSES); |
| |
| (void) link_set_routing_policy_rule(link); |
| @@ -904,6 +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); |
| } |
| |
| @@ -1204,9 +1210,10 @@ static int link_enter_set_addresses(Link *link) { |
| log_link_debug(link, "Offering DHCPv4 leases"); |
| } |
| |
| - if (link->address_messages == 0) |
| + if (link->address_messages == 0) { |
| + link->addresses_configured = true; |
| link_enter_set_routes(link); |
| - else |
| + } else |
| log_link_debug(link, "Setting addresses"); |
| |
| return 0; |
| diff --git a/src/network/networkd-link.h b/src/network/networkd-link.h |
| index 7e22dfd504..2f37cc1598 100644 |
| --- a/src/network/networkd-link.h |
| +++ b/src/network/networkd-link.h |
| @@ -80,6 +80,8 @@ typedef struct Link { |
| Set *routes; |
| Set *routes_foreign; |
| |
| + bool addresses_configured; |
| + |
| sd_dhcp_client *dhcp_client; |
| sd_dhcp_lease *dhcp_lease; |
| char *lease_file; |
| -- |
| 2.20.1.97.g81188d93c3-goog |
| |