From 0ba8374bb8a7032ca13ba98d10e8d7c3378ca9c6 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Fri, 8 Sep 2023 14:30:38 +0530 Subject: [PATCH] ndisc: Also set link hoplimit The per route hop limit does not place the hop limit in the IPv6 header. https://github.com/systemd/systemd/issues/28437#issuecomment-1711055181 --- src/network/networkd-ndisc.c | 7 ++++++- src/network/networkd-sysctl.c | 2 +- src/network/networkd-sysctl.h | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c index 08af9c73b99..f4f662cf965 100644 --- a/src/network/networkd-ndisc.c +++ b/src/network/networkd-ndisc.c @@ -199,7 +199,12 @@ static int ndisc_request_route(Route *in, Link *link, sd_ndisc_router *rt) { r = sd_ndisc_router_get_hop_limit(rt, &hop_limit); if (r < 0 && r != -ENODATA) return log_link_warning_errno(link, r, "Failed to get default router hop limit from RA: %m"); - } + + link->network->ipv6_hop_limit = hop_limit; + r = link_set_ipv6_hop_limit(link); + if (r < 0) + log_link_warning_errno(link, r, "Cannot set IPv6 hop limit for interface, ignoring: %m"); + } route->source = NETWORK_CONFIG_SOURCE_NDISC; route->provider.in6 = router; diff --git a/src/network/networkd-sysctl.c b/src/network/networkd-sysctl.c index 0b8169a0176..1a5dffe6f59 100644 --- a/src/network/networkd-sysctl.c +++ b/src/network/networkd-sysctl.c @@ -165,7 +165,7 @@ static int link_set_ipv6_dad_transmits(Link *link) { return sysctl_write_ip_property_int(AF_INET6, link->ifname, "dad_transmits", link->network->ipv6_dad_transmits); } -static int link_set_ipv6_hop_limit(Link *link) { +int link_set_ipv6_hop_limit(Link *link) { assert(link); /* Make this a NOP if IPv6 is not available */ diff --git a/src/network/networkd-sysctl.h b/src/network/networkd-sysctl.h index 064438462c0..99243f7a25d 100644 --- a/src/network/networkd-sysctl.h +++ b/src/network/networkd-sysctl.h @@ -28,6 +28,7 @@ typedef enum IPReversePathFilter { int link_set_sysctl(Link *link); int link_set_ipv6_mtu(Link *link); +int link_set_ipv6_hop_limit(Link *link); const char* ipv6_privacy_extensions_to_string(IPv6PrivacyExtensions i) _const_; IPv6PrivacyExtensions ipv6_privacy_extensions_from_string(const char *s) _pure_;