static int ndisc_request_route(Route *in, Link *link, sd_ndisc_router *rt) {
_cleanup_(route_freep) Route *route = in;
struct in6_addr router;
+ uint32_t mtu = 0;
bool is_new;
int r;
if (r < 0)
return r;
+ if (link->network->ipv6_accept_ra_use_mtu) {
+ r = sd_ndisc_router_get_mtu(rt, &mtu);
+ if (r < 0 && r != -ENODATA)
+ return log_link_warning_errno(link, r, "Failed to get default router MTU from RA: %m");
+ }
+
route->source = NETWORK_CONFIG_SOURCE_NDISC;
route->provider.in6 = router;
if (!route->table_set)
route->protocol = RTPROT_RA;
if (route->quickack < 0)
route->quickack = link->network->ipv6_accept_ra_quickack;
+ if (route->mtu == 0)
+ route->mtu = mtu;
is_new = route_get(NULL, link, route, NULL) < 0;
struct in6_addr gateway;
uint16_t lifetime_sec;
unsigned preference;
- uint32_t mtu = 0;
int r;
assert(link);
if (r < 0)
return log_link_warning_errno(link, r, "Failed to get default router preference from RA: %m");
- if (link->network->ipv6_accept_ra_use_mtu) {
- r = sd_ndisc_router_get_mtu(rt, &mtu);
- if (r < 0 && r != -ENODATA)
- return log_link_warning_errno(link, r, "Failed to get default router MTU from RA: %m");
- }
-
if (link->network->ipv6_accept_ra_use_gateway) {
_cleanup_(route_freep) Route *route = NULL;
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)
if (!route->pref_set)
route->pref = preference;
route->lifetime_usec = lifetime_usec;
- if (route->mtu == 0)
- route->mtu = mtu;
r = ndisc_request_route(TAKE_PTR(route), link, rt);
if (r < 0)