diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2021-11-09 06:44:45 +0900 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2021-11-09 08:12:36 +0900 |
commit | 610c0db12663bdf271e03919b49626c90aa0a2ba (patch) | |
tree | c81c9fd66ba8ec26aff5dfc75e8ee57bfc93c13f /src/network/networkd-ndisc.c | |
parent | ad0b2df6355fe9c7eae672107bb6cf9ea9263aba (diff) | |
download | systemd-610c0db12663bdf271e03919b49626c90aa0a2ba.tar.gz |
network: ndisc: introduce UseGateway= and UseRoutePrefix= settings
Closes #21263.
Diffstat (limited to 'src/network/networkd-ndisc.c')
-rw-r--r-- | src/network/networkd-ndisc.c | 39 |
1 files changed, 26 insertions, 13 deletions
diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c index 21b5d0a0c0..470c969329 100644 --- a/src/network/networkd-ndisc.c +++ b/src/network/networkd-ndisc.c @@ -290,7 +290,6 @@ static int ndisc_request_address(Address *in, Link *link, sd_ndisc_router *rt) { } static int ndisc_router_process_default(Link *link, sd_ndisc_router *rt) { - _cleanup_(route_freep) Route *route = NULL; usec_t lifetime_usec, timestamp_usec; struct in6_addr gateway; uint16_t lifetime_sec; @@ -299,8 +298,13 @@ static int ndisc_router_process_default(Link *link, sd_ndisc_router *rt) { int r; assert(link); + assert(link->network); assert(rt); + if (!link->network->ipv6_accept_ra_use_gateway && + hashmap_isempty(link->network->routes_by_section)) + return 0; + r = sd_ndisc_router_get_lifetime(rt, &lifetime_sec); if (r < 0) return log_link_error_errno(link, r, "Failed to get gateway lifetime from RA: %m"); @@ -339,23 +343,29 @@ static int ndisc_router_process_default(Link *link, sd_ndisc_router *rt) { return log_link_error_errno(link, r, "Failed to get default router MTU from RA: %m"); } - r = route_new(&route); - if (r < 0) - return log_oom(); + if (link->network->ipv6_accept_ra_use_gateway) { + _cleanup_(route_freep) Route *route = NULL; - route->family = AF_INET6; - route->pref = preference; - route->gw_family = AF_INET6; - route->gw.in6 = gateway; - route->lifetime_usec = lifetime_usec; - route->mtu = mtu; + r = route_new(&route); + if (r < 0) + return log_oom(); - r = ndisc_request_route(TAKE_PTR(route), link, rt); - if (r < 0) - return log_link_error_errno(link, r, "Could not request default route: %m"); + route->family = AF_INET6; + route->pref = preference; + route->gw_family = AF_INET6; + route->gw.in6 = gateway; + route->lifetime_usec = lifetime_usec; + route->mtu = mtu; + + r = ndisc_request_route(TAKE_PTR(route), link, rt); + if (r < 0) + return log_link_error_errno(link, r, "Could not request default route: %m"); + } Route *route_gw; HASHMAP_FOREACH(route_gw, link->network->routes_by_section) { + _cleanup_(route_freep) Route *route = NULL; + if (!route_gw->gateway_from_dhcp_or_ra) continue; @@ -584,6 +594,9 @@ static int ndisc_router_process_route(Link *link, sd_ndisc_router *rt) { assert(link); + if (!link->network->ipv6_accept_ra_use_route_prefix) + return 0; + r = sd_ndisc_router_route_get_lifetime(rt, &lifetime_sec); if (r < 0) return log_link_error_errno(link, r, "Failed to get route lifetime from RA: %m"); |