}
}
}
- }
- r = address_new(&address);
- if (r >= 0) {
r = sd_dhcp_lease_get_router(link->dhcp_lease, &router);
if (r > 0 && !in4_addr_is_null(&router[0])) {
_cleanup_(route_freep) Route *route_gw = NULL;
route_remove(route, link, NULL);
}
}
+ }
+ r = address_new(&address);
+ if (r >= 0) {
r = sd_dhcp_lease_get_address(link->dhcp_lease, &addr);
if (r >= 0) {
r = sd_dhcp_lease_get_netmask(link->dhcp_lease, &netmask);
link_set_dhcp_routes(link);
+ /* Add back static routes since kernel removes while DHCPv4 address is removed from when lease expires */
+ link_request_set_routes(link);
+
if (link->dhcp4_messages == 0) {
link->dhcp4_configured = true;
link_check_ready(link);
return 1;
}
-static int link_request_set_routes(Link *link) {
+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 */
uint32_t link_get_vrf_table(Link *link);
uint32_t link_get_dhcp_route_table(Link *link);
uint32_t link_get_ipv6_accept_ra_route_table(Link *link);
+int link_request_set_routes(Link *link);
#define ADDRESS_FMT_VAL(address) \
be32toh((address).s_addr) >> 24, \