Acked-by: Kristof Provost <kprov...@netgate.com>

Thanks!

Kristof

On 19 Aug 2022, at 20:24, Gert Doering wrote:
> During review/update phase, FreeBSD/DCO's ability to find the first
> free tun interface on "--dev tun" got broken, due to two issues:
>
>  - create_interface() called msg(M_ERR|...), which is a fatal error
>    and aborts OpenVPN, so "no retry with 'tun1' after 'tun0' failed"
>
>    Change to M_WARN|M_ERRNO (= warning level, add strerror(errno), return).
>
>  - open_tun_dco_generic() expects "-errno" as return value of
>    open_tun_dco(), and breaks the loop on -EPERM.  create_interface()
>    was returning "-1" instead (ioctl() error signalling), which happens
>    to be "-EPERM" on FreeBSD.
>
>    Change create_interface() to return -errno.
>
> While at it, remove logging of errors from dco_freebsd.c::open_tun_dco()
> (because all errors from create_interface() would be already logged there),
> reducing open_tun_dco() to just a wrapper around create_interface().
>
> Signed-off-by: Gert Doering <g...@greenie.muc.de>
> ---
>  src/openvpn/dco_freebsd.c | 17 +++++------------
>  1 file changed, 5 insertions(+), 12 deletions(-)
>
> diff --git a/src/openvpn/dco_freebsd.c b/src/openvpn/dco_freebsd.c
> index 06b4d6a9..c6da6ce3 100644
> --- a/src/openvpn/dco_freebsd.c
> +++ b/src/openvpn/dco_freebsd.c
> @@ -178,7 +178,8 @@ create_interface(struct tuntap *tt, const char *dev)
>      ret = ioctl(tt->dco.fd, SIOCIFCREATE2, &ifr);
>      if (ret)
>      {
> -        msg(M_ERR | M_ERRNO, "Failed to create interface %s", ifr.ifr_name);
> +        ret = -errno;
> +        msg(M_WARN|M_ERRNO, "Failed to create interface %s (SIOCIFCREATE2)", 
> ifr.ifr_name);
>          return ret;
>      }
>
> @@ -194,9 +195,10 @@ create_interface(struct tuntap *tt, const char *dev)
>      ret = ioctl(tt->dco.fd, SIOCSIFNAME, &ifr);
>      if (ret)
>      {
> +        ret = -errno;
>          /* Delete the created interface again. */
>          (void)ioctl(tt->dco.fd, SIOCIFDESTROY, &ifr);
> -        msg(M_ERR | M_ERRNO, "Failed to create interface %s", ifr.ifr_data);
> +        msg(M_WARN|M_ERRNO, "Failed to create interface %s (SIOCSIFNAME)", 
> ifr.ifr_data);
>          return ret;
>      }
>
> @@ -229,16 +231,7 @@ remove_interface(struct tuntap *tt)
>  int
>  open_tun_dco(struct tuntap *tt, openvpn_net_ctx_t *ctx, const char *dev)
>  {
> -    int ret;
> -
> -    ret = create_interface(tt, dev);
> -
> -    if (ret < 0)
> -    {
> -        msg(M_ERR, "Failed to create interface");
> -    }
> -
> -    return ret;
> +    return create_interface(tt, dev);
>  }
>
>  void
> -- 
> 2.37.1


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

Reply via email to