mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-23 17:34:00 +03:00
networkd: Add back static routes after DHCPv4 lease expires.
1. When the DHCPv4 lease expires kernel removes the route. So add it back when we gain lease again. Closes https://github.com/systemd/systemd/issues/12426 2. When UseRoutes=false do not remove router
This commit is contained in:
parent
6dc14d7366
commit
b5799eeb07
@ -214,10 +214,7 @@ static int dhcp_lease_lost(Link *link) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
r = address_new(&address);
|
|
||||||
if (r >= 0) {
|
|
||||||
r = sd_dhcp_lease_get_router(link->dhcp_lease, &router);
|
r = sd_dhcp_lease_get_router(link->dhcp_lease, &router);
|
||||||
if (r > 0 && !in4_addr_is_null(&router[0])) {
|
if (r > 0 && !in4_addr_is_null(&router[0])) {
|
||||||
_cleanup_(route_freep) Route *route_gw = NULL;
|
_cleanup_(route_freep) Route *route_gw = NULL;
|
||||||
@ -241,7 +238,10 @@ static int dhcp_lease_lost(Link *link) {
|
|||||||
route_remove(route, link, NULL);
|
route_remove(route, link, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
r = address_new(&address);
|
||||||
|
if (r >= 0) {
|
||||||
r = sd_dhcp_lease_get_address(link->dhcp_lease, &addr);
|
r = sd_dhcp_lease_get_address(link->dhcp_lease, &addr);
|
||||||
if (r >= 0) {
|
if (r >= 0) {
|
||||||
r = sd_dhcp_lease_get_netmask(link->dhcp_lease, &netmask);
|
r = sd_dhcp_lease_get_netmask(link->dhcp_lease, &netmask);
|
||||||
@ -308,6 +308,9 @@ static int dhcp4_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *
|
|||||||
|
|
||||||
link_set_dhcp_routes(link);
|
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) {
|
if (link->dhcp4_messages == 0) {
|
||||||
link->dhcp4_configured = true;
|
link->dhcp4_configured = true;
|
||||||
link_check_ready(link);
|
link_check_ready(link);
|
||||||
|
@ -913,7 +913,7 @@ static int route_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int link_request_set_routes(Link *link) {
|
int link_request_set_routes(Link *link) {
|
||||||
enum {
|
enum {
|
||||||
PHASE_NON_GATEWAY, /* First phase: Routes without a gateway */
|
PHASE_NON_GATEWAY, /* First phase: Routes without a gateway */
|
||||||
PHASE_GATEWAY, /* Second phase: Routes with a gateway */
|
PHASE_GATEWAY, /* Second phase: Routes with a gateway */
|
||||||
|
@ -180,6 +180,7 @@ int link_send_changed(Link *link, const char *property, ...) _sentinel_;
|
|||||||
uint32_t link_get_vrf_table(Link *link);
|
uint32_t link_get_vrf_table(Link *link);
|
||||||
uint32_t link_get_dhcp_route_table(Link *link);
|
uint32_t link_get_dhcp_route_table(Link *link);
|
||||||
uint32_t link_get_ipv6_accept_ra_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) \
|
#define ADDRESS_FMT_VAL(address) \
|
||||||
be32toh((address).s_addr) >> 24, \
|
be32toh((address).s_addr) >> 24, \
|
||||||
|
Loading…
Reference in New Issue
Block a user