mirror of
https://github.com/OpenVPN/openvpn.git
synced 2026-05-28 04:03:29 -04:00
FreeBSD-DCO: repair device iteration to find first free interface.
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 <gert@greenie.muc.de> Acked-by: Kristof Provost <kprovost@netgate.com> Message-Id: <20220819182439.71531-1-gert@greenie.muc.de> URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25034.html Signed-off-by: Gert Doering <gert@greenie.muc.de>
This commit is contained in:
parent
0c4d40cb83
commit
efebdfe2de
1 changed files with 5 additions and 12 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue