From: Kristof Provost Date: Tue, 29 Jul 2025 09:38:57 +0000 (+0200) Subject: dco-freebsd: pass address scope to the kernel X-Git-Tag: v2.7_alpha3~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b5e0032bf09afa928d9728051599a5e738ff4d10;p=thirdparty%2Fopenvpn.git dco-freebsd: pass address scope to the kernel To support link-local (IPv6) addresses we must pass the scope to the kernel as well. We should also extract it from the kernel notification for float events. Signed-off-by: Kristof Provost Acked-by: Gert Doering Message-Id: <20250729093857.37832-1-kprovost@netgate.com> URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg32401.html Signed-off-by: Gert Doering --- diff --git a/src/openvpn/dco_freebsd.c b/src/openvpn/dco_freebsd.c index a1c1fbfec..488665fcd 100644 --- a/src/openvpn/dco_freebsd.c +++ b/src/openvpn/dco_freebsd.c @@ -62,6 +62,7 @@ sockaddr_to_nvlist(const struct sockaddr *sa) const struct sockaddr_in6 *in6 = (const struct sockaddr_in6 *)sa; nvlist_add_binary(nvl, "address", &in6->sin6_addr, sizeof(in6->sin6_addr)); nvlist_add_number(nvl, "port", in6->sin6_port); + nvlist_add_number(nvl, "scopeid", in6->sin6_scope_id); break; } @@ -117,6 +118,11 @@ nvlist_to_sockaddr(const nvlist_t *nvl, struct sockaddr_storage *ss) assert(len == sizeof(in6->sin6_addr)); memcpy(&in6->sin6_addr, data, sizeof(in6->sin6_addr)); in6->sin6_port = nvlist_get_number(nvl, "port"); + + if (nvlist_exists_number(nvl, "scopeid")) + { + in6->sin6_scope_id = nvlist_get_number(nvl, "scopeid"); + } break; }