This requires kernel side support: 
[https://reviews.freebsd.org/D51596](https://reviews.freebsd.org/D51596)


—
Kristof

On 29 Jul 2025, at 11:38, Kristof Provost wrote:
> From: Kristof Provost <k...@freebsd.org>
>
> 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 <kprov...@netgate.com>
> ---
>  src/openvpn/dco_freebsd.c | 6 ++++++
>  1 file changed, 6 insertions(+)
>
> diff --git a/src/openvpn/dco_freebsd.c b/src/openvpn/dco_freebsd.c
> index 8add41af..306ecd31 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;
>          }
>
> @@ -118,6 +119,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;
>          }
>
> -- 
> 2.50.1


_______________________________________________
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel

Reply via email to