From patchwork Tue May 13 14:26:35 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gert Doering X-Patchwork-Id: 4246 Return-Path: Delivered-To: patchwork@openvpn.net Received: by 2002:a05:7000:a32a:b0:656:592e:a137 with SMTP id jh42csp1537298mab; Tue, 13 May 2025 07:27:03 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUThy7t/8x6Hu1dbiw+TotdCzA7wn/zT5VFPSlALAcLPz9yTDvQ/8ST0N/w/YXcIBihCqBh/mckOwc=@openvpn.net X-Google-Smtp-Source: AGHT+IFPkcsuKP3PHvpePHAhZwE0e6akbqKHZPJP7CxYhB1c79Bq7wd+K4oAWBKHUeVgpSuBkjRp X-Received: by 2002:a05:6870:e415:b0:2c2:2f08:5e5b with SMTP id 586e51a60fabf-2dba42847e8mr9432234fac.13.1747146423355; Tue, 13 May 2025 07:27:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1747146423; cv=none; d=google.com; s=arc-20240605; b=XuU8CJ7gIhSoACps9oEs1ED5XHfHeLbpEfH/lEWGyXVxCpric1TgwtrEgKPtRe9KVL yBbEfn6MlYTKFQVMFLgDLiAtiIUwg8A+yAxH2aPrn/U+voYWDC4POO1LgC1RFVprWMbe S6al04LNKZVrT8L+qB+1O3n5vLvvr11mvW5si0UCy89Biq18F3Bk0lSm55W9SS58scEG F7NzKuFSctECf3cdyVn6DQ41mI+WBrSx+5MQhegX6T8mmjqIdKm+CH4bGri16c9oQdVw Dw372EM9LEU12z8tzO5xELCpfOE7nerYOp4+uEwqwJp3xJuqoPSVrZlQJdhGwm+yG08V 5wmg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=errors-to:content-transfer-encoding:list-subscribe:list-help :list-post:list-archive:list-unsubscribe:list-id:precedence:subject :mime-version:references:in-reply-to:message-id:date:to:from :dkim-signature:dkim-signature:dkim-signature; bh=dDAyFP7wTVcK6eW4v7F+/JGyjJJH9XsFtbCbD7dC4Io=; fh=4NbAC/LsuMLI0S0hprUlLSLCiHwg6SCAifhH718Jh0Q=; b=E0nei26ddI9ZZ7kHEegveIgBKJDVUBlod995nuk+dS2VxXqg5pFd2vXpZOOPvop4Ds LrAyu/toyz0ctKPRTlzrERemWp6E3TvudY11mOzfi0lSqkBxO3GEi5XswdS4MeiGll1l zH9VKlsSDvj1vEEqbFgKRRJIc+l6KY5WP7VL7sP9sjEE++n8Y4VXxS7MYgxbUU3ccH6k yQpQ/+8VR8ZQMYEB6UfOwxTCaS3K538T3JeHrfbW8Gp4xfvN0Jsxy+6gHs8D1qPX4eJ3 DhUUmtTdl39pjetxNOCYaBXMhVczis9h04NFjXfq0gTAzM2EWle4yXVHgHOXBqaCWLuO zQaw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@lists.sourceforge.net header.s=beta header.b=YxPw2eGE; dkim=neutral (body hash did not verify) header.i=@sourceforge.net header.s=x header.b=W2avZs2D; dkim=neutral (body hash did not verify) header.i=@sf.net header.s=x header.b=Pm1KkvBo; spf=pass (google.com: domain of openvpn-devel-bounces@lists.sourceforge.net designates 216.105.38.7 as permitted sender) smtp.mailfrom=openvpn-devel-bounces@lists.sourceforge.net; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=muc.de Received: from lists.sourceforge.net (lists.sourceforge.net. [216.105.38.7]) by mx.google.com with ESMTPS id 586e51a60fabf-2dba0a31915si6776655fac.137.2025.05.13.07.27.02 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 13 May 2025 07:27:03 -0700 (PDT) Received-SPF: pass (google.com: domain of openvpn-devel-bounces@lists.sourceforge.net designates 216.105.38.7 as permitted sender) client-ip=216.105.38.7; Authentication-Results: mx.google.com; dkim=pass header.i=@lists.sourceforge.net header.s=beta header.b=YxPw2eGE; dkim=neutral (body hash did not verify) header.i=@sourceforge.net header.s=x header.b=W2avZs2D; dkim=neutral (body hash did not verify) header.i=@sf.net header.s=x header.b=Pm1KkvBo; spf=pass (google.com: domain of openvpn-devel-bounces@lists.sourceforge.net designates 216.105.38.7 as permitted sender) smtp.mailfrom=openvpn-devel-bounces@lists.sourceforge.net; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=muc.de DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.sourceforge.net; s=beta; h=Content-Transfer-Encoding:Content-Type: List-Subscribe:List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id: Subject:MIME-Version:References:In-Reply-To:Message-ID:Date:To:From:Sender: Reply-To:Cc:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=dDAyFP7wTVcK6eW4v7F+/JGyjJJH9XsFtbCbD7dC4Io=; b=YxPw2eGE+YnlgS7aobr/ANCaRQ GZjZW8+9zBXQOnDmLEV1Ln20x0uH+eR3dDFrkVmicCSn0d+TJi023RnlGTph303JmHTlb/KJt6mZB 6LlOEiJUIYNOnssVU1r2OI/KriDXOlxkefiFNGJYNdB2z7W/pCnzjUHz7FEtX5StKR80=; Received: from [127.0.0.1] (helo=sfs-ml-3.v29.lw.sourceforge.com) by sfs-ml-3.v29.lw.sourceforge.com with esmtp (Exim 4.95) (envelope-from ) id 1uEqay-0008WD-C5; Tue, 13 May 2025 14:27:00 +0000 Received: from [172.30.29.66] (helo=mx.sourceforge.net) by sfs-ml-3.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1uEqaw-0008W3-IQ for openvpn-devel@lists.sourceforge.net; Tue, 13 May 2025 14:26:58 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:MIME-Version:References: In-Reply-To:Message-ID:Date:Subject:To:From:Sender:Reply-To:Cc:Content-Type: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=/HX2KG/x2k4h6nIqkrhnGdk2BepoMfMJu/t6Dxw2hc0=; b=W2avZs2Dgi+64Tcry8Kn5V/PbK tow+LiV75Ef5rO5YcdOWYE7/IIJ0OfPYBXjMPupchqnQaXSNGqZIcZgVWwyuNTQScr5EB357bN/aY YbBD0T4GQQOCKQp/DaSvAaOHrwjypVhuX6V4/NYnygUCnoj2mEc/h5TXTS43gOMjQvdw=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID: Date:Subject:To:From:Sender:Reply-To:Cc:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=/HX2KG/x2k4h6nIqkrhnGdk2BepoMfMJu/t6Dxw2hc0=; b=Pm1KkvBo7mkBBXEVpn5CmyBTXD KYOwbMizrpKFE0XVmRNLsjOQvBioD4XnXHXvV5YvdN8SNG0EOxNbUVb92ZIZ8wZ8+sLE5V+2Pmt5v OoJ9QJoVM8qZmG3LYafTlmqwKfLmwNNKNky/UiqGvOFHLzXbeOhNtBkJwmnAcKL10818=; Received: from [193.149.48.143] (helo=blue.greenie.muc.de) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.95) id 1uEqas-000425-F7 for openvpn-devel@lists.sourceforge.net; Tue, 13 May 2025 14:26:57 +0000 Received: from blue.greenie.muc.de (localhost [127.0.0.1]) by blue.greenie.muc.de (8.17.1.9/8.17.1.9) with ESMTP id 54DEQgxE008674 for ; Tue, 13 May 2025 16:26:42 +0200 Received: (from gert@localhost) by blue.greenie.muc.de (8.17.1.9/8.17.1.9/Submit) id 54DEQgYV008673 for openvpn-devel@lists.sourceforge.net; Tue, 13 May 2025 16:26:42 +0200 From: Gert Doering To: openvpn-devel@lists.sourceforge.net Date: Tue, 13 May 2025 16:26:35 +0200 Message-ID: <20250513142641.8619-1-gert@greenie.muc.de> X-Mailer: git-send-email 2.49.0 In-Reply-To: References: MIME-Version: 1.0 X-Spam-Score: 2.3 (++) X-Spam-Report: Spam detection software, running on the system "6901ab67b84d", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: From: Lev Stipakov Since DCO supports modern ciphers and server mode, there is no reason to support Wintun anymore. This also removes --windows-driver option support. The default driver is DCO, as it has been since 2.6. If for some reasons one doesn't want to use it, --disable-dco multiplatform option will switch t [...] Content analysis details: (2.3 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 1.3 RDNS_NONE Delivered to internal network by a host with no rDNS 1.0 UC_GIBBERISH_OBFU Multiple instances of "word VERYLONGGIBBERISH word" X-Headers-End: 1uEqas-000425-F7 Subject: [Openvpn-devel] [PATCH v3] win: remove Wintun support X-BeenThere: openvpn-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: openvpn-devel-bounces@lists.sourceforge.net X-getmail-retrieved-from-mailbox: Inbox X-GMAIL-THRID: =?utf-8?q?1832015808248204598?= X-GMAIL-MSGID: =?utf-8?q?1832015808248204598?= From: Lev Stipakov Since DCO supports modern ciphers and server mode, there is no reason to support Wintun anymore. This also removes --windows-driver option support. The default driver is DCO, as it has been since 2.6. If for some reasons one doesn't want to use it, --disable-dco multiplatform option will switch to tap-windows6. Change-Id: I43ec390040bffeec05270271ea7fb54fb219c536 Signed-off-by: Lev Stipakov Acked-by: Gert Doering --- This change was reviewed on Gerrit and approved by at least one developer. I request to merge it to master. Gerrit URL: https://gerrit.openvpn.net/c/openvpn/+/1021 This mail reflects revision 3 of this Change. Acked-by according to Gerrit (reflected above): Gert Doering diff --git a/doc/man-sections/vpn-network-options.rst b/doc/man-sections/vpn-network-options.rst index 67f7e1f..40b8c19 100644 --- a/doc/man-sections/vpn-network-options.rst +++ b/doc/man-sections/vpn-network-options.rst @@ -137,8 +137,7 @@ Set additional network parameters on supported platforms. May be specified on the client or pushed from the server. On Windows these options are handled by the ``tap-windows6`` driver by default or directly by OpenVPN - if dhcp is disabled or the ``wintun`` driver is in use. The - ``OpenVPN for Android`` client also handles them internally. + if dhcp is disabled. The ``OpenVPN for Android`` client also handles them internally. On all other platforms these options are only saved in the client's environment under the name :code:`foreign_option_{n}` before the diff --git a/doc/man-sections/windows-options.rst b/doc/man-sections/windows-options.rst index 1955869..af2fb45 100644 --- a/doc/man-sections/windows-options.rst +++ b/doc/man-sections/windows-options.rst @@ -252,9 +252,3 @@ otherwise it defaulted to :code:`C:\\WINDOWS`. It is not needed to use the ``env`` keyword any more, and it will just be ignored. A warning is logged when this is found in the configuration file. - ---windows-driver drv - Specifies which tun driver to use. Values are :code:`ovpn-dco` (default), - :code:`tap-windows6` and :code:`wintun`. :code:`ovpn-dco` and :code:`wintun` - require ``--dev tun``. :code:`wintun` also requires OpenVPN process to run - elevated, or be invoked using the Interactive Service. diff --git a/include/openvpn-msg.h b/include/openvpn-msg.h index 8b48053..ca8b99f 100644 --- a/include/openvpn-msg.h +++ b/include/openvpn-msg.h @@ -44,7 +44,7 @@ msg_del_wfp_block, msg_register_dns, msg_enable_dhcp, - msg_register_ring_buffers, + deprecated_msg_register_ring_buffers, msg_set_mtu, msg_add_wins_cfg, msg_del_wins_cfg @@ -158,15 +158,6 @@ typedef struct { message_header_t header; - HANDLE device; - HANDLE send_ring_handle; - HANDLE receive_ring_handle; - HANDLE send_tail_moved; - HANDLE receive_tail_moved; -} register_ring_buffers_message_t; - -typedef struct { - message_header_t header; interface_t iface; short family; int mtu; diff --git a/src/openvpn/Makefile.am b/src/openvpn/Makefile.am index 37af683..3c1a875 100644 --- a/src/openvpn/Makefile.am +++ b/src/openvpn/Makefile.am @@ -163,6 +163,6 @@ $(OPTIONAL_DL_LIBS) \ $(OPTIONAL_INOTIFY_LIBS) if WIN32 -openvpn_SOURCES += openvpn_win32_resources.rc wfp_block.c wfp_block.h ring_buffer.h +openvpn_SOURCES += openvpn_win32_resources.rc wfp_block.c wfp_block.h openvpn_LDADD += -lgdi32 -lws2_32 -lwininet -lcrypt32 -liphlpapi -lwinmm -lfwpuclnt -lrpcrt4 -lncrypt -lsetupapi -lbcrypt endif diff --git a/src/openvpn/dco.c b/src/openvpn/dco.c index 7ad9cb3..c61cbda 100644 --- a/src/openvpn/dco.c +++ b/src/openvpn/dco.c @@ -359,14 +359,6 @@ return false; } - if ((o->windows_driver == WINDOWS_DRIVER_WINTUN) - || (o->windows_driver == WINDOWS_DRIVER_TAP_WINDOWS6)) - { - msg(msglevel, "--windows-driver is set to '%s'. Disabling Data Channel Offload", - print_tun_backend_driver(o->windows_driver)); - return false; - } - if ((o->mode == MODE_SERVER) && o->ce.local_list->len > 1) { msg(msglevel, "multiple --local options defined, disabling data channel offload"); diff --git a/src/openvpn/forward.c b/src/openvpn/forward.c index 0b8b262..ed4cdb4 100644 --- a/src/openvpn/forward.c +++ b/src/openvpn/forward.c @@ -1308,26 +1308,11 @@ c->c2.buf = c->c2.buffers->read_tun_buf; #ifdef _WIN32 - if (c->c1.tuntap->backend_driver == WINDOWS_DRIVER_WINTUN) - { - read_wintun(c->c1.tuntap, &c->c2.buf); - if (c->c2.buf.len == -1) - { - register_signal(c->sig, SIGHUP, "tun-abort"); - c->persist.restart_sleep_seconds = 1; - msg(M_INFO, "Wintun read error, restarting"); - perf_pop(); - return; - } - } - else - { - /* we cannot end up here when using dco */ - ASSERT(!dco_enabled(&c->options)); + /* we cannot end up here when using dco */ + ASSERT(!dco_enabled(&c->options)); - sockethandle_t sh = { .is_handle = true, .h = c->c1.tuntap->hand, .prepend_sa = false }; - sockethandle_finalize(sh, &c->c1.tuntap->reads, &c->c2.buf, NULL); - } + sockethandle_t sh = { .is_handle = true, .h = c->c1.tuntap->hand, .prepend_sa = false }; + sockethandle_finalize(sh, &c->c1.tuntap->reads, &c->c2.buf, NULL); #else /* ifdef _WIN32 */ ASSERT(buf_init(&c->c2.buf, c->c2.frame.buf.headroom)); ASSERT(buf_safe(&c->c2.buf, c->c2.frame.buf.payload_size)); @@ -1942,7 +1927,7 @@ #endif #ifdef _WIN32 - size = write_tun_buffered(c->c1.tuntap, &c->c2.to_tun); + size = tun_write_win32(c->c1.tuntap, &c->c2.to_tun); #else if (c->c1.tuntap->backend_driver == DRIVER_AFUNIX) { @@ -2148,17 +2133,6 @@ tuntap |= EVENT_READ; } -#ifdef _WIN32 - if (tuntap_is_wintun(c->c1.tuntap)) - { - /* - * With wintun we are only interested in read event. Ring buffer is - * always ready for write, so we don't do wait. - */ - tuntap = EVENT_READ; - } -#endif - /* * Configure event wait based on socket, tuntap flags. */ @@ -2217,36 +2191,8 @@ } else { -#ifdef _WIN32 - bool skip_iowait = flags & IOW_TO_TUN; - if (flags & IOW_READ_TUN) - { - /* - * don't read from tun if we have pending write to link, - * since every tun read overwrites to_link buffer filled - * by previous tun read - */ - skip_iowait = !(flags & IOW_TO_LINK); - } - if (tuntap_is_wintun(c->c1.tuntap) && skip_iowait) - { - unsigned int ret = 0; - if (flags & IOW_TO_TUN) - { - ret |= TUN_WRITE; - } - if (flags & IOW_READ_TUN) - { - ret |= TUN_READ; - } - multi_io->udp_flags = ret; - } - else -#endif /* ifdef _WIN32 */ - { - /* slow path - delegate to io_wait_dowork_udp to calculate flags */ - get_io_flags_dowork_udp(c, multi_io, flags); - } + /* slow path - delegate to io_wait_dowork_udp to calculate flags */ + get_io_flags_dowork_udp(c, multi_io, flags); } } diff --git a/src/openvpn/forward.h b/src/openvpn/forward.h index 77892d6..74c6036 100644 --- a/src/openvpn/forward.h +++ b/src/openvpn/forward.h @@ -360,12 +360,6 @@ { flags |= IOW_TO_TUN; } -#ifdef _WIN32 - if (tuntap_ring_empty(c->c1.tuntap)) - { - flags &= ~IOW_READ_TUN; - } -#endif return flags; } @@ -393,36 +387,8 @@ } else { -#ifdef _WIN32 - bool skip_iowait = flags & IOW_TO_TUN; - if (flags & IOW_READ_TUN) - { - /* - * don't read from tun if we have pending write to link, - * since every tun read overwrites to_link buffer filled - * by previous tun read - */ - skip_iowait = !(flags & IOW_TO_LINK); - } - if (tuntap_is_wintun(c->c1.tuntap) && skip_iowait) - { - unsigned int ret = 0; - if (flags & IOW_TO_TUN) - { - ret |= TUN_WRITE; - } - if (flags & IOW_READ_TUN) - { - ret |= TUN_READ; - } - c->c2.event_set_status = ret; - } - else -#endif /* ifdef _WIN32 */ - { - /* slow path */ - io_wait_dowork(c, flags); - } + /* slow path */ + io_wait_dowork(c, flags); } } diff --git a/src/openvpn/mudp.c b/src/openvpn/mudp.c index 54dfc72..7158d5c 100644 --- a/src/openvpn/mudp.c +++ b/src/openvpn/mudp.c @@ -457,11 +457,5 @@ { flags |= IOW_READ; } -#ifdef _WIN32 - if (tuntap_ring_empty(m->top.c1.tuntap)) - { - flags &= ~IOW_READ_TUN; - } -#endif return flags; } diff --git a/src/openvpn/multi_io.c b/src/openvpn/multi_io.c index f4ca4df..7f47319 100644 --- a/src/openvpn/multi_io.c +++ b/src/openvpn/multi_io.c @@ -190,20 +190,6 @@ get_io_flags_udp(&m->top, m->multi_io, p2mp_iow_flags(m)); } -#ifdef _WIN32 - if (tuntap_is_wintun(m->top.c1.tuntap)) - { - if (!tuntap_ring_empty(m->top.c1.tuntap)) - { - /* there is data in wintun ring buffer, read it immediately */ - m->multi_io->esr[0].arg = MULTI_IO_TUN; - m->multi_io->esr[0].rwflags = EVENT_READ; - m->multi_io->n_esr = 1; - return 1; - } - persistent = NULL; - } -#endif tun_set(m->top.c1.tuntap, m->multi_io->es, EVENT_READ, MULTI_IO_TUN, persistent); #if defined(ENABLE_DCO) \ && (defined(TARGET_LINUX) || defined(TARGET_FREEBSD) || defined(TARGET_WIN32)) diff --git a/src/openvpn/options.c b/src/openvpn/options.c index 02970a7..55b923c 100644 --- a/src/openvpn/options.c +++ b/src/openvpn/options.c @@ -750,10 +750,6 @@ " optional parameter controls the initial state of ex.\n" "--show-net-up : Show " PACKAGE_NAME "'s view of routing table and net adapter list\n" " after TAP adapter is up and routes have been added.\n" - "--windows-driver : Which tun driver to use?\n" - " ovpn-dco (default)\n" - " tap-windows6\n" - " wintun\n" "--block-outside-dns : Block DNS on other network adapters to prevent DNS leaks\n" "Windows Standalone Options:\n" "\n" @@ -2592,11 +2588,6 @@ prefix); } } - - if (options->windows_driver == WINDOWS_DRIVER_WINTUN && dev != DEV_TYPE_TUN) - { - msg(M_USAGE, "--windows-driver wintun requires --dev tun"); - } #endif /* ifdef _WIN32 */ /* @@ -3371,9 +3362,8 @@ #ifdef _WIN32 const int dev = dev_type_enum(options->dev, options->dev_type); - /* when using wintun/ovpn-dco, kernel doesn't send DHCP requests, so don't use it */ - if ((options->windows_driver == WINDOWS_DRIVER_WINTUN - || options->windows_driver == DRIVER_DCO) + /* when using ovpn-dco, kernel doesn't send DHCP requests, so don't use it */ + if ((options->windows_driver == DRIVER_DCO) && (options->tuntap_options.ip_win32_type == IPW32_SET_DHCP_MASQ || options->tuntap_options.ip_win32_type == IPW32_SET_ADAPTIVE)) { @@ -4665,39 +4655,6 @@ return ret; } -#ifdef _WIN32 -/** - * Parses --windows-driver config option - * - * @param str value of --windows-driver option - * @param msglevel msglevel to report parsing error - * @return enum tun_driver_type driver type, WINDOWS_DRIVER_UNSPECIFIED on unknown --windows-driver value - */ -static enum tun_driver_type -parse_windows_driver(const char *str, const int msglevel) -{ - if (streq(str, "tap-windows6")) - { - return WINDOWS_DRIVER_TAP_WINDOWS6; - } - else if (streq(str, "wintun")) - { - return WINDOWS_DRIVER_WINTUN; - } - - else if (streq(str, "ovpn-dco")) - { - return DRIVER_DCO; - } - else - { - msg(msglevel, "--windows-driver must be tap-windows6, wintun " - "or ovpn-dco"); - return WINDOWS_DRIVER_UNSPECIFIED; - } -} -#endif /* ifdef _WIN32 */ - /* * parse/print topology coding */ @@ -6012,7 +5969,8 @@ else if (streq(p[0], "windows-driver") && p[1] && !p[2]) { VERIFY_PERMISSION(OPT_P_GENERAL); - options->windows_driver = parse_windows_driver(p[1], M_FATAL); + msg(M_WARN, "DEPRECATED OPTION: windows-driver: In OpenVPN 2.7, the default Windows driver is ovpn-dco. " + "If incompatible options are used, OpenVPN will fall back to tap-windows6. Wintun support has been removed."); } #endif else if (streq(p[0], "disable-dco")) diff --git a/src/openvpn/ring_buffer.h b/src/openvpn/ring_buffer.h deleted file mode 100644 index c536980..0000000 --- a/src/openvpn/ring_buffer.h +++ /dev/null @@ -1,125 +0,0 @@ -/* - * OpenVPN -- An application to securely tunnel IP networks - * over a single UDP port, with support for SSL/TLS-based - * session authentication and key exchange, - * packet encryption, packet authentication, and - * packet compression. - * - * Copyright (C) 2002-2024 OpenVPN Inc - * 2019 Lev Stipakov - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#ifdef _WIN32 -#ifndef OPENVPN_RING_BUFFER_H -#define OPENVPN_RING_BUFFER_H - -#include -#include - -#include -#include - -/* - * Values below are taken from Wireguard Windows client - * https://github.com/WireGuard/wireguard-go/blob/master/tun/wintun/ring_windows.go#L14 - */ -#define WINTUN_RING_CAPACITY 0x800000 -#define WINTUN_RING_TRAILING_BYTES 0x10000 -#define WINTUN_MAX_PACKET_SIZE 0xffff -#define WINTUN_PACKET_ALIGN 4 - -#define TUN_IOCTL_REGISTER_RINGS CTL_CODE(51820U, 0x970U, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA) - -/** - * Wintun ring buffer - * See https://github.com/WireGuard/wintun#ring-layout - */ -struct tun_ring -{ - volatile ULONG head; - volatile ULONG tail; - volatile LONG alertable; - UCHAR data[WINTUN_RING_CAPACITY + WINTUN_RING_TRAILING_BYTES]; -}; - -/** - * Struct for ring buffers registration - * See https://github.com/WireGuard/wintun#registering-rings - */ -struct tun_register_rings -{ - struct - { - ULONG ring_size; - struct tun_ring *ring; - HANDLE tail_moved; - } send, receive; -}; - -struct TUN_PACKET_HEADER -{ - uint32_t size; -}; - -struct TUN_PACKET -{ - uint32_t size; - UCHAR data[WINTUN_MAX_PACKET_SIZE]; -}; - -/** - * Registers ring buffers used to exchange data between - * userspace openvpn process and wintun kernel driver, - * see https://github.com/WireGuard/wintun#registering-rings - * - * @param device handle to opened wintun device - * @param send_ring pointer to send ring - * @param receive_ring pointer to receive ring - * @param send_tail_moved event set by wintun to signal openvpn - * that data is available for reading in send ring - * @param receive_tail_moved event set by openvpn to signal wintun - * that data has been written to receive ring - * @return true if registration is successful, false otherwise - use GetLastError() - */ -static inline bool -register_ring_buffers(HANDLE device, - struct tun_ring *send_ring, - struct tun_ring *receive_ring, - HANDLE send_tail_moved, - HANDLE receive_tail_moved) -{ - struct tun_register_rings rr; - BOOL res; - DWORD bytes_returned; - - ZeroMemory(&rr, sizeof(rr)); - - rr.send.ring = send_ring; - rr.send.ring_size = sizeof(struct tun_ring); - rr.send.tail_moved = send_tail_moved; - - rr.receive.ring = receive_ring; - rr.receive.ring_size = sizeof(struct tun_ring); - rr.receive.tail_moved = receive_tail_moved; - - res = DeviceIoControl(device, TUN_IOCTL_REGISTER_RINGS, &rr, sizeof(rr), - NULL, 0, &bytes_returned, NULL); - - return res != FALSE; -} - -#endif /* ifndef OPENVPN_RING_BUFFER_H */ -#endif /* ifdef _WIN32 */ diff --git a/src/openvpn/tun.c b/src/openvpn/tun.c index 5186afa..4dad3a2 100644 --- a/src/openvpn/tun.c +++ b/src/openvpn/tun.c @@ -63,9 +63,6 @@ case WINDOWS_DRIVER_TAP_WINDOWS6: return "tap-windows6"; - case WINDOWS_DRIVER_WINTUN: - return "wintun"; - case DRIVER_GENERIC_TUNTAP: return "tun/tap"; @@ -975,37 +972,8 @@ overlapped_io_init(&tt->writes, frame, TRUE); tt->adapter_index = TUN_ADAPTER_INDEX_INVALID; - if (tt->backend_driver == WINDOWS_DRIVER_WINTUN) - { - tt->wintun_send_ring_handle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, - PAGE_READWRITE, - 0, - sizeof(struct tun_ring), - NULL); - tt->wintun_receive_ring_handle = CreateFileMapping(INVALID_HANDLE_VALUE, - NULL, - PAGE_READWRITE, - 0, - sizeof(struct tun_ring), - NULL); - if ((tt->wintun_send_ring_handle == NULL) || (tt->wintun_receive_ring_handle == NULL)) - { - msg(M_FATAL, "Cannot allocate memory for ring buffer"); - } - - tt->rw_handle.read = CreateEvent(NULL, FALSE, FALSE, NULL); - tt->rw_handle.write = CreateEvent(NULL, FALSE, FALSE, NULL); - - if ((tt->rw_handle.read == NULL) || (tt->rw_handle.write == NULL)) - { - msg(M_FATAL, "Cannot create events for ring buffer"); - } - } - else - { - tt->rw_handle.read = tt->reads.overlapped.hEvent; - tt->rw_handle.write = tt->writes.overlapped.hEvent; - } + tt->rw_handle.read = tt->reads.overlapped.hEvent; + tt->rw_handle.write = tt->writes.overlapped.hEvent; #endif /* ifdef _WIN32 */ } @@ -3945,10 +3913,6 @@ { windows_driver = WINDOWS_DRIVER_TAP_WINDOWS6; } - else if (strcasecmp(component_id, WINTUN_COMPONENT_ID) == 0) - { - windows_driver = WINDOWS_DRIVER_WINTUN; - } else if (strcasecmp(component_id, "ovpn-dco") == 0) { windows_driver = DRIVER_DCO; @@ -4255,7 +4219,7 @@ } /* - * Lookup a TAP-Windows or Wintun adapter by GUID. + * Lookup an adapter by GUID. */ static const struct tap_reg * get_adapter_by_guid(const char *guid, const struct tap_reg *tap_reg) @@ -4310,7 +4274,7 @@ { if (!tap_reg) { - msg(M_FATAL, "There are no TAP-Windows, Wintun or ovpn-dco adapters " + msg(M_FATAL, "There are no TAP-Windows or ovpn-dco adapters " "on this system. You should be able to create an adapter " "by using tapctl.exe utility."); } @@ -6021,46 +5985,6 @@ gc_free(&gc); } -static bool -service_register_ring_buffers(const struct tuntap *tt) -{ - HANDLE msg_channel = tt->options.msg_channel; - ack_message_t ack; - bool ret = true; - struct gc_arena gc = gc_new(); - - register_ring_buffers_message_t msg = { - .header = { - msg_register_ring_buffers, - sizeof(register_ring_buffers_message_t), - 0 - }, - .device = tt->hand, - .send_ring_handle = tt->wintun_send_ring_handle, - .receive_ring_handle = tt->wintun_receive_ring_handle, - .send_tail_moved = tt->rw_handle.read, - .receive_tail_moved = tt->rw_handle.write - }; - - if (!send_msg_iservice(msg_channel, &msg, sizeof(msg), &ack, "Register ring buffers")) - { - ret = false; - } - else if (ack.error_number != NO_ERROR) - { - msg(M_NONFATAL, "Register ring buffers failed using service: %s [status=0x%x]", - strerror_win32(ack.error_number, &gc), ack.error_number); - ret = false; - } - else - { - msg(M_INFO, "Ring buffers registered via service"); - } - - gc_free(&gc); - return ret; -} - void fork_register_dns_action(struct tuntap *tt) { @@ -6298,58 +6222,6 @@ gc_free(&gc); } -static bool -wintun_register_ring_buffer(struct tuntap *tt, const char *device_guid) -{ - bool ret = true; - - tt->wintun_send_ring = (struct tun_ring *)MapViewOfFile(tt->wintun_send_ring_handle, - FILE_MAP_ALL_ACCESS, - 0, - 0, - sizeof(struct tun_ring)); - - tt->wintun_receive_ring = (struct tun_ring *)MapViewOfFile(tt->wintun_receive_ring_handle, - FILE_MAP_ALL_ACCESS, - 0, - 0, - sizeof(struct tun_ring)); - - if (tt->options.msg_channel) - { - ret = service_register_ring_buffers(tt); - } - else - { - if (!register_ring_buffers(tt->hand, - tt->wintun_send_ring, - tt->wintun_receive_ring, - tt->rw_handle.read, - tt->rw_handle.write)) - { - switch (GetLastError()) - { - case ERROR_ACCESS_DENIED: - msg(M_FATAL, "ERROR: Wintun requires SYSTEM privileges and therefore " - "should be used with interactive service. If you want to " - "use openvpn from command line, you need to do SYSTEM " - "elevation yourself (for example with psexec)."); - break; - - case ERROR_ALREADY_INITIALIZED: - msg(M_NONFATAL, "Adapter %s is already in use", device_guid); - break; - - default: - msg(M_NONFATAL | M_ERRNO, "Failed to register ring buffers"); - } - ret = false; - } - - } - return ret; -} - static void tuntap_set_connected(const struct tuntap *tt) { @@ -6509,8 +6381,7 @@ const char *path = NULL; char tuntap_device_path[256]; - if (tt->backend_driver == WINDOWS_DRIVER_WINTUN - || tt->backend_driver == DRIVER_DCO) + if (tt->backend_driver == DRIVER_DCO) { const struct device_instance_id_interface *dev_if; @@ -6564,18 +6435,6 @@ return false; } - if (tt->backend_driver == WINDOWS_DRIVER_WINTUN) - { - /* Wintun adapter may be considered "open" after ring buffers are successfuly registered. */ - if (!wintun_register_ring_buffer(tt, device_guid)) - { - msg(D_TUNTAP_INFO, "Failed to register %s adapter ring buffers", device_guid); - CloseHandle(tt->hand); - tt->hand = NULL; - return false; - } - } - return true; } @@ -6908,16 +6767,6 @@ } tt->hand = NULL; } - - if (tt->backend_driver == WINDOWS_DRIVER_WINTUN) - { - CloseHandle(tt->rw_handle.read); - CloseHandle(tt->rw_handle.write); - UnmapViewOfFile(tt->wintun_send_ring); - UnmapViewOfFile(tt->wintun_receive_ring); - CloseHandle(tt->wintun_send_ring_handle); - CloseHandle(tt->wintun_receive_ring_handle); - } } void diff --git a/src/openvpn/tun.h b/src/openvpn/tun.h index bcc23b4..de1876a 100644 --- a/src/openvpn/tun.h +++ b/src/openvpn/tun.h @@ -39,13 +39,11 @@ #include "proto.h" #include "misc.h" #include "networking.h" -#include "ring_buffer.h" #include "dco.h" enum tun_driver_type { WINDOWS_DRIVER_UNSPECIFIED, WINDOWS_DRIVER_TAP_WINDOWS6, - WINDOWS_DRIVER_WINTUN, DRIVER_GENERIC_TUNTAP, /** using an AF_UNIX socket to pass packets from/to an external program. * This is always defined. We error out if a user tries to open this type @@ -58,7 +56,6 @@ }; #ifdef _WIN32 -#define WINTUN_COMPONENT_ID "wintun" #define DCO_WIN_REFERENCE_STRING "ovpn-dco" #endif @@ -233,11 +230,7 @@ int standby_iter; - HANDLE wintun_send_ring_handle; - HANDLE wintun_receive_ring_handle; - struct tun_ring *wintun_send_ring; - struct tun_ring *wintun_receive_ring; -#else /* ifdef _WIN32 */ + #else /* ifdef _WIN32 */ int fd; /* file descriptor for TUN/TAP dev */ #endif /* ifdef _WIN32 */ @@ -262,20 +255,6 @@ #endif } -#ifdef _WIN32 -static inline bool -tuntap_is_wintun(struct tuntap *tt) -{ - return tt && tt->backend_driver == WINDOWS_DRIVER_WINTUN; -} - -static inline bool -tuntap_ring_empty(struct tuntap *tt) -{ - return tuntap_is_wintun(tt) && (tt->wintun_send_ring->head == tt->wintun_send_ring->tail); -} -#endif - /* * Function prototypes */ @@ -526,74 +505,6 @@ int tun_write_win32(struct tuntap *tt, struct buffer *buf); -static inline ULONG -wintun_ring_packet_align(ULONG size) -{ - return (size + (WINTUN_PACKET_ALIGN - 1)) & ~(WINTUN_PACKET_ALIGN - 1); -} - -static inline ULONG -wintun_ring_wrap(ULONG value) -{ - return value & (WINTUN_RING_CAPACITY - 1); -} - -static inline void -read_wintun(struct tuntap *tt, struct buffer *buf) -{ - struct tun_ring *ring = tt->wintun_send_ring; - ULONG head = ring->head; - ULONG tail = ring->tail; - ULONG content_len; - struct TUN_PACKET *packet; - ULONG aligned_packet_size; - - *buf = tt->reads.buf_init; - buf->len = 0; - - if ((head >= WINTUN_RING_CAPACITY) || (tail >= WINTUN_RING_CAPACITY)) - { - msg(M_INFO, "Wintun: ring capacity exceeded"); - buf->len = -1; - return; - } - - if (head == tail) - { - /* nothing to read */ - return; - } - - content_len = wintun_ring_wrap(tail - head); - if (content_len < sizeof(struct TUN_PACKET_HEADER)) - { - msg(M_INFO, "Wintun: incomplete packet header in send ring"); - buf->len = -1; - return; - } - - packet = (struct TUN_PACKET *) &ring->data[head]; - if (packet->size > WINTUN_MAX_PACKET_SIZE) - { - msg(M_INFO, "Wintun: packet too big in send ring"); - buf->len = -1; - return; - } - - aligned_packet_size = wintun_ring_packet_align(sizeof(struct TUN_PACKET_HEADER) + packet->size); - if (aligned_packet_size > content_len) - { - msg(M_INFO, "Wintun: incomplete packet in send ring"); - buf->len = -1; - return; - } - - buf_write(buf, packet->data, packet->size); - - head = wintun_ring_wrap(head + aligned_packet_size); - ring->head = head; -} - static inline bool is_ip_packet_valid(const struct buffer *buf) { @@ -621,65 +532,6 @@ return true; } -static inline int -write_wintun(struct tuntap *tt, struct buffer *buf) -{ - struct tun_ring *ring = tt->wintun_receive_ring; - ULONG head = ring->head; - ULONG tail = ring->tail; - ULONG aligned_packet_size; - ULONG buf_space; - struct TUN_PACKET *packet; - - /* wintun marks ring as corrupted (overcapacity) if it receives invalid IP packet */ - if (!is_ip_packet_valid(buf)) - { - msg(D_LOW, "write_wintun(): drop invalid IP packet"); - return 0; - } - - if ((head >= WINTUN_RING_CAPACITY) || (tail >= WINTUN_RING_CAPACITY)) - { - msg(M_INFO, "write_wintun(): head/tail value is over capacity"); - return -1; - } - - aligned_packet_size = wintun_ring_packet_align(sizeof(struct TUN_PACKET_HEADER) + BLEN(buf)); - buf_space = wintun_ring_wrap(head - tail - WINTUN_PACKET_ALIGN); - if (aligned_packet_size > buf_space) - { - msg(M_INFO, "write_wintun(): ring is full"); - return 0; - } - - /* copy packet size and data into ring */ - packet = (struct TUN_PACKET * )&ring->data[tail]; - packet->size = BLEN(buf); - memcpy(packet->data, BPTR(buf), BLEN(buf)); - - /* move ring tail */ - ring->tail = wintun_ring_wrap(tail + aligned_packet_size); - if (ring->alertable != 0) - { - SetEvent(tt->rw_handle.write); - } - - return BLEN(buf); -} - -static inline int -write_tun_buffered(struct tuntap *tt, struct buffer *buf) -{ - if (tt->backend_driver == WINDOWS_DRIVER_WINTUN) - { - return write_wintun(tt, buf); - } - else - { - return tun_write_win32(tt, buf); - } -} - static inline bool tuntap_is_dco_win(struct tuntap *tt) { diff --git a/src/openvpnmsica/openvpnmsica.c b/src/openvpnmsica/openvpnmsica.c index 30db644..4ff1b70 100644 --- a/src/openvpnmsica/openvpnmsica.c +++ b/src/openvpnmsica/openvpnmsica.c @@ -320,11 +320,6 @@ L"ACTIVETAPWINDOWS6ADAPTERS"); find_adapters( hInstall, - L"Wintun" L"\0", - L"WINTUNADAPTERS", - L"ACTIVEWINTUNADAPTERS"); - find_adapters( - hInstall, L"ovpn-dco" L"\0", L"OVPNDCOADAPTERS", L"ACTIVEOVPNDCOADAPTERS"); diff --git a/src/openvpnmsica/openvpnmsica.h b/src/openvpnmsica/openvpnmsica.h index 761aa47..9898067 100644 --- a/src/openvpnmsica/openvpnmsica.h +++ b/src/openvpnmsica/openvpnmsica.h @@ -88,10 +88,6 @@ * ACTIVETAPWINDOWS6ADAPTERS properties with semicolon delimited list of all installed adapter * GUIDs and active adapter GUIDs respectively. * - * - Finds existing Wintun adapters and set WINTUNADAPTERS and ACTIVEWINTUNADAPTERS properties - * with semicolon delimited list of all installed adapter GUIDs and active adapter GUIDs - * respectively. - * * - Finds existing ovpn-dco adapters and set OVPNDCOADAPTERS and ACTIVEOVPNDCOADAPTERS properties * with semicolon delimited list of all installed adapter GUIDs and active adapter GUIDs * respectively. diff --git a/src/openvpnserv/CMakeLists.txt b/src/openvpnserv/CMakeLists.txt index 44a40fe..7e3efb2 100644 --- a/src/openvpnserv/CMakeLists.txt +++ b/src/openvpnserv/CMakeLists.txt @@ -20,7 +20,6 @@ ../tapctl/basic.h ../openvpn/wfp_block.c ../openvpn/wfp_block.h openvpnserv_resources.rc - ../openvpn/ring_buffer.h ) target_compile_options(openvpnserv PRIVATE -D_UNICODE diff --git a/src/openvpnserv/Makefile.am b/src/openvpnserv/Makefile.am index f053f40..852746d 100644 --- a/src/openvpnserv/Makefile.am +++ b/src/openvpnserv/Makefile.am @@ -36,5 +36,4 @@ service.c service.h \ validate.c validate.h \ $(top_srcdir)/src/openvpn/wfp_block.c $(top_srcdir)/src/openvpn/wfp_block.h \ - openvpnserv_resources.rc \ - $(top_srcdir)/src/openvpn/ring_buffer.h + openvpnserv_resources.rc diff --git a/src/openvpnserv/interactive.c b/src/openvpnserv/interactive.c index f06d386..cc67181 100644 --- a/src/openvpnserv/interactive.c +++ b/src/openvpnserv/interactive.c @@ -40,7 +40,6 @@ #include "openvpn-msg.h" #include "validate.h" #include "wfp_block.h" -#include "ring_buffer.h" #define IO_TIMEOUT 2000 /*ms*/ @@ -90,7 +89,6 @@ undo_dns6, undo_nrpt, undo_domains, - undo_ring_buffer, undo_wins, _undo_type_max } undo_type_t; @@ -108,11 +106,6 @@ PWSTR domains; } dns_domains_undo_data_t; -typedef struct { - struct tun_ring *send_ring; - struct tun_ring *receive_ring; -} ring_buffer_maps_t; - typedef union { message_header_t header; address_message_t address; @@ -122,7 +115,6 @@ dns_cfg_message_t dns; nrpt_dns_cfg_message_t nrpt_dns; enable_dhcp_message_t dhcp; - register_ring_buffers_message_t rrb; set_mtu_message_t mtu; wins_cfg_message_t wins; } pipe_message_t; @@ -187,23 +179,6 @@ return INVALID_HANDLE_VALUE; } -static void -OvpnUnmapViewOfFile(struct tun_ring **ring) -{ - if (ring && *ring) - { - UnmapViewOfFile(*ring); - *ring = NULL; - } -} - -static void -UnmapRingBuffer(ring_buffer_maps_t *ring_buffer_maps) -{ - OvpnUnmapViewOfFile(&ring_buffer_maps->send_ring); - OvpnUnmapViewOfFile(&ring_buffer_maps->receive_ring); -} - static HANDLE InitOverlapped(LPOVERLAPPED overlapped) { @@ -212,7 +187,6 @@ return overlapped->hEvent; } - static BOOL ResetOverlapped(LPOVERLAPPED overlapped) { @@ -2972,119 +2946,6 @@ } static DWORD -OvpnDuplicateHandle(HANDLE ovpn_proc, HANDLE orig_handle, HANDLE *new_handle) -{ - DWORD err = ERROR_SUCCESS; - - if (!DuplicateHandle(ovpn_proc, orig_handle, GetCurrentProcess(), new_handle, 0, FALSE, DUPLICATE_SAME_ACCESS)) - { - err = GetLastError(); - MsgToEventLog(M_SYSERR, L"Could not duplicate handle"); - return err; - } - - return err; -} - -static DWORD -DuplicateAndMapRing(HANDLE ovpn_proc, HANDLE orig_handle, struct tun_ring **ring) -{ - DWORD err = ERROR_SUCCESS; - - HANDLE dup_handle = NULL; - - err = OvpnDuplicateHandle(ovpn_proc, orig_handle, &dup_handle); - if (err != ERROR_SUCCESS) - { - return err; - } - *ring = (struct tun_ring *)MapViewOfFile(dup_handle, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(struct tun_ring)); - CloseHandleEx(&dup_handle); - if (*ring == NULL) - { - err = GetLastError(); - MsgToEventLog(M_SYSERR, L"Could not map shared memory"); - return err; - } - - return err; -} - -static DWORD -HandleRegisterRingBuffers(const register_ring_buffers_message_t *rrb, HANDLE ovpn_proc, - undo_lists_t *lists) -{ - DWORD err = 0; - - ring_buffer_maps_t *ring_buffer_maps = RemoveListItem(&(*lists)[undo_ring_buffer], CmpAny, NULL); - - if (ring_buffer_maps) - { - UnmapRingBuffer(ring_buffer_maps); - } - else if ((ring_buffer_maps = calloc(1, sizeof(*ring_buffer_maps))) == NULL) - { - return ERROR_OUTOFMEMORY; - } - - HANDLE device = NULL; - HANDLE send_tail_moved = NULL; - HANDLE receive_tail_moved = NULL; - - err = OvpnDuplicateHandle(ovpn_proc, rrb->device, &device); - if (err != ERROR_SUCCESS) - { - goto out; - } - - err = DuplicateAndMapRing(ovpn_proc, rrb->send_ring_handle, &ring_buffer_maps->send_ring); - if (err != ERROR_SUCCESS) - { - goto out; - } - - err = DuplicateAndMapRing(ovpn_proc, rrb->receive_ring_handle, &ring_buffer_maps->receive_ring); - if (err != ERROR_SUCCESS) - { - goto out; - } - - err = OvpnDuplicateHandle(ovpn_proc, rrb->send_tail_moved, &send_tail_moved); - if (err != ERROR_SUCCESS) - { - goto out; - } - - err = OvpnDuplicateHandle(ovpn_proc, rrb->receive_tail_moved, &receive_tail_moved); - if (err != ERROR_SUCCESS) - { - goto out; - } - - if (!register_ring_buffers(device, ring_buffer_maps->send_ring, - ring_buffer_maps->receive_ring, - send_tail_moved, receive_tail_moved)) - { - err = GetLastError(); - MsgToEventLog(M_SYSERR, L"Could not register ring buffers"); - goto out; - } - - err = AddListItem(&(*lists)[undo_ring_buffer], ring_buffer_maps); - -out: - if (err != ERROR_SUCCESS && ring_buffer_maps) - { - UnmapRingBuffer(ring_buffer_maps); - free(ring_buffer_maps); - } - CloseHandleEx(&device); - CloseHandleEx(&send_tail_moved); - CloseHandleEx(&receive_tail_moved); - return err; -} - -static DWORD HandleMTUMessage(const set_mtu_message_t *mtu) { DWORD err = 0; @@ -3191,14 +3052,6 @@ } break; - case msg_register_ring_buffers: - if (msg.header.size == sizeof(msg.rrb)) - { - HANDLE ovpn_hnd = proc_info->hProcess; - ack.error_number = HandleRegisterRingBuffers(&msg.rrb, ovpn_hnd, lists); - } - break; - case msg_set_mtu: if (msg.header.size == sizeof(msg.mtu)) { @@ -3273,10 +3126,6 @@ } break; - case undo_ring_buffer: - UnmapRingBuffer(item->data); - break; - case _undo_type_max: /* unreachable */ break; diff --git a/src/tapctl/main.c b/src/tapctl/main.c index 551a8e6..4569b87 100644 --- a/src/tapctl/main.c +++ b/src/tapctl/main.c @@ -75,8 +75,8 @@ L" Note: This name can also be specified as OpenVPN's --dev-node \n" L" option. \n" L"--hwid Adapter hardware ID. Default value is root\\tap0901, which \n" - L" describes tap-windows6 driver. To work with wintun or ovpn-dco \n" - L" driver, specify 'wintun' or 'ovpn-dco'. \n" + L" describes tap-windows6 driver. To work with ovpn-dco driver, \n" + L" driver, specify 'ovpn-dco'. \n" L"\n" L"Output:\n" L"\n" @@ -94,7 +94,7 @@ L"\n" L"Options:\n" L"\n" - L"--hwid Adapter hardware ID. By default, root\\tap0901, tap0901, wintun and \n" + L"--hwid Adapter hardware ID. By default, root\\tap0901, tap0901 and \n" L" ovpn-dco adapters are listed. Use this switch to limit the list.\n" L"\n" L"Output:\n" @@ -167,10 +167,6 @@ { base_name = L"OpenVPN Data Channel Offload"; } - else if (wcsicmp(hwid, L"wintun") == 0) - { - base_name = L"OpenVPN Wintun"; - } else if (wcsicmp(hwid, L"root\\" _L(TAP_WIN_COMPONENT_ID)) == 0) { base_name = L"OpenVPN TAP-Windows6"; @@ -351,7 +347,6 @@ WCHAR szzHwId[0x100] = L"root\\" _L(TAP_WIN_COMPONENT_ID) L"\0" _L(TAP_WIN_COMPONENT_ID) L"\0" - L"Wintun\0" L"ovpn-dco\0"; /* Parse options. */ diff --git a/src/tapctl/tap.h b/src/tapctl/tap.h index 38ea824..c35176c 100644 --- a/src/tapctl/tap.h +++ b/src/tapctl/tap.h @@ -38,7 +38,7 @@ * description of the device. This pointer is optional and can be NULL. * * @param szHwId A pointer to a NULL-terminated string that supplies the hardware id - * of the device (e.g. "root\\tap0901", "Wintun"). + * of the device (e.g. "root\\tap0901"). * * @param pbRebootRequired A pointer to a BOOL flag. If the device requires a system restart, * this flag is set to TRUE. Otherwise, the flag is left unmodified. This