From: Gert Doering Date: Mon, 29 Aug 2022 19:01:24 +0000 (+0200) Subject: Adjust Linux+FreeBSD DCO device name handling to 'non DCO linux style' X-Git-Tag: v2.6_beta1~84 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a5cf4cfb77f745;p=thirdparty%2Fopenvpn.git Adjust Linux+FreeBSD DCO device name handling to 'non DCO linux style' On Linux, tun devices are created according to the following algorithm --dev tun -> try tun0, tun1, ... tun255, use first free --dev anything -> create a TUN device named "anything" (as long as "anything" is not "null" or "tap[N]") DCO was following the "other platform convention", where everything not having a digit was iterated ("--dev tun-home" -> "tun-home0") - which does not work for classic tun/tap devices on the BSDs anyway, so is not the best model. Adjust open_tun_dco_generic() to document expected behaviour and do the thing. Signed-off-by: Gert Doering Acked-by: Kristof Provost Acked-by: Antonio Quartulli Message-Id: <20220829190124.2636045-1-gert@greenie.muc.de> URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25134.html Signed-off-by: Gert Doering --- diff --git a/src/openvpn/tun.c b/src/openvpn/tun.c index 94803acd3..458c8ff14 100644 --- a/src/openvpn/tun.c +++ b/src/openvpn/tun.c @@ -1943,12 +1943,14 @@ open_tun_dco_generic(const char *dev, const char *dev_type, } /* - * dynamic open is indicated by --dev specified without - * explicit unit number. Try opening DCO device named "[dev]n" - * where n = [0, 255]. + * unlike "open_tun_generic()", DCO on Linux and FreeBSD follows + * the device naming model of "non-DCO linux", that is: + * --dev tun -> try tun0, tun1, ... tun255, use first free + * --dev -> (try to) create a tun device named "anything" + * ("--dev tap" and "--dev null" are caught earlier and not handled here) */ - if (!tun_name_is_fixed(dev)) + if (strcmp(dev, "tun") == 0) { for (int i = 0; i < 256; ++i) {