[Openvpn-devel] Undo FreeBSD 12.x workaround on IPv6 ifconfig for 12.4 and up

Message ID 20221227223506.34136-1-gert@greenie.muc.de
State Changes Requested
Headers show
Series [Openvpn-devel] Undo FreeBSD 12.x workaround on IPv6 ifconfig for 12.4 and up | expand

Commit Message

Gert Doering Dec. 27, 2022, 10:35 p.m. UTC
commit 5e19cc2c1bf22d introduced a workaround for a race condition
that showed itself on IPv6 ifconfig on FreeBSD 12.x - sometimes breaking
IPv6 connectivity on tun/tap interfaces.

This was fixed on the FreeBSD side in 12.4, 13.1 and up, and 13.0 is
no longer supported.  So conditionalize the workaround on "12.0..12.3",
to be fully removed later when 12.3 is also running out of support.

Trac: 1226

Signed-off-by: Gert Doering <gert@greenie.muc.de>
---
 src/openvpn/tun.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Comments

Arne Schwabe Jan. 6, 2023, 10:32 a.m. UTC | #1
Am 27.12.22 um 23:35 schrieb Gert Doering:
> commit 5e19cc2c1bf22d introduced a workaround for a race condition
> that showed itself on IPv6 ifconfig on FreeBSD 12.x - sometimes breaking
> IPv6 connectivity on tun/tap interfaces.
> 
> This was fixed on the FreeBSD side in 12.4, 13.1 and up, and 13.0 is
> no longer supported.  So conditionalize the workaround on "12.0..12.3",
> to be fully removed later when 12.3 is also running out of support.
> 
> Trac: 1226
> 
> Signed-off-by: Gert Doering <gert@greenie.muc.de>
> ---
>   src/openvpn/tun.c | 5 +++--
>   1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/src/openvpn/tun.c b/src/openvpn/tun.c
> index a83ec9e6..399e851b 100644
> --- a/src/openvpn/tun.c
> +++ b/src/openvpn/tun.c
> @@ -1104,8 +1104,9 @@ do_ifconfig_ipv6(struct tuntap *tt, const char *ifname, int tun_mtu,
>       openvpn_execve_check(&argv, es, S_FATAL,
>                            "generic BSD ifconfig inet6 failed");
>   
> -#if defined(TARGET_FREEBSD) && __FreeBSD_version >= 1200000
> -    /* On FreeBSD 12 and up, there is ipv6_activate_all_interfaces="YES"
> +#if defined(TARGET_FREEBSD) && __FreeBSD_version >= 1200000 \
> +	&& __FreeBSD_version <= 1200000
> +    /* On FreeBSD 12.0-12.3, there is ipv6_activate_all_interfaces="YES"


That does not look right. Should the second one be < 1300000? Otherwise 
I would rather simplify the expression to __FreeBSD_version == 1200000 
since that is what it currently is.

>        * in rc.conf, which is not set by default.  If it is *not* set,
>        * "all new interfaces that are not already up" are configured by
>        * devd + /etc/pccard_ether as "inet6 ifdisabled".
Gert Doering Jan. 6, 2023, 6:23 p.m. UTC | #2
Hi,

On Fri, Jan 06, 2023 at 11:32:31AM +0100, Arne Schwabe wrote:
> > +#if defined(TARGET_FREEBSD) && __FreeBSD_version >= 1200000 \
> > +	&& __FreeBSD_version <= 1200000
> > +    /* On FreeBSD 12.0-12.3, there is ipv6_activate_all_interfaces="YES"
> 
> 
> That does not look right. Should the second one be < 1300000? Otherwise 
> I would rather simplify the expression to __FreeBSD_version == 1200000 
> since that is what it currently is.

Of course that needs to be 1300000 (and of course it "worked" in my 
test on FreeBSD 13...  but it seems I forgot to re-test on 12.2/12.3)

v2 RSN.

gert

Patch

diff --git a/src/openvpn/tun.c b/src/openvpn/tun.c
index a83ec9e6..399e851b 100644
--- a/src/openvpn/tun.c
+++ b/src/openvpn/tun.c
@@ -1104,8 +1104,9 @@  do_ifconfig_ipv6(struct tuntap *tt, const char *ifname, int tun_mtu,
     openvpn_execve_check(&argv, es, S_FATAL,
                          "generic BSD ifconfig inet6 failed");
 
-#if defined(TARGET_FREEBSD) && __FreeBSD_version >= 1200000
-    /* On FreeBSD 12 and up, there is ipv6_activate_all_interfaces="YES"
+#if defined(TARGET_FREEBSD) && __FreeBSD_version >= 1200000 \
+	&& __FreeBSD_version <= 1200000
+    /* On FreeBSD 12.0-12.3, there is ipv6_activate_all_interfaces="YES"
      * in rc.conf, which is not set by default.  If it is *not* set,
      * "all new interfaces that are not already up" are configured by
      * devd + /etc/pccard_ether as "inet6 ifdisabled".