From patchwork Sat Apr 2 07:09:00 2022
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: [Openvpn-devel,5/7] tun: extract close_tun_handle into its own
fucntion and print correct type
X-Patchwork-Submitter: Antonio Quartulli
X-Patchwork-Id: 2359
Message-Id: <20220402070902.30282-6-a@unstable.cc>
To: openvpn-devel@lists.sourceforge.net
Cc: Antonio Quartulli
Date: Sat, 2 Apr 2022 09:09:00 +0200
From: Antonio Quartulli
List-Id:
From: Arne Schwabe
This moves closing the tun handle into its own function and also prints
the adapter type we are operating on, instead hardcoding it to
tap-windows.
Signed-off-by: Arne Schwabe
Signed-off-by: Antonio Quartulli
Acked-by: Frank Lichtenheld
---
src/openvpn/tun.c | 75 ++++++++++++++++++++++++++---------------------
1 file changed, 41 insertions(+), 34 deletions(-)
diff --git a/src/openvpn/tun.c b/src/openvpn/tun.c
index 8ed7c88b..35b1744c 100644
--- a/src/openvpn/tun.c
+++ b/src/openvpn/tun.c
@@ -6772,6 +6772,46 @@ netsh_delete_address_dns(const struct tuntap *tt, bool ipv6, struct gc_arena *gc
argv_free(&argv);
}
+static
+void close_tun_handle(struct tuntap* tt)
+{
+ const char* adaptertype = print_windows_driver(tt->windows_driver);
+ if (tt->hand != NULL)
+ {
+ dmsg(D_WIN32_IO_LOW, "Attempting CancelIO on %s adapter", adaptertype);
+ if (!CancelIo(tt->hand))
+ {
+ msg(M_WARN | M_ERRNO, "Warning: CancelIO failed on %s adapter", adaptertype);
+ }
+ }
+
+ dmsg(D_WIN32_IO_LOW, "Attempting close of overlapped read event on %s adapter", adaptertype);
+ overlapped_io_close(&tt->reads);
+
+ dmsg(D_WIN32_IO_LOW, "Attempting close of overlapped write event on %s adapter", adaptertype);
+ overlapped_io_close(&tt->writes);
+
+ if (tt->hand != NULL)
+ {
+ dmsg(D_WIN32_IO_LOW, "Attempting CloseHandle on %s adapter", adaptertype);
+ if (!CloseHandle(tt->hand))
+ {
+ msg(M_WARN | M_ERRNO, "Warning: CloseHandle failed on %s adapter", adaptertype);
+ }
+ tt->hand = NULL;
+ }
+
+ if (tt->windows_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
close_tun(struct tuntap *tt, openvpn_net_ctx_t *ctx)
{
@@ -6841,43 +6881,10 @@ close_tun(struct tuntap *tt, openvpn_net_ctx_t *ctx)
dhcp_release(tt);
- if (tt->hand != NULL)
- {
- dmsg(D_WIN32_IO_LOW, "Attempting CancelIO on TAP-Windows adapter");
- if (!CancelIo(tt->hand))
- {
- msg(M_WARN | M_ERRNO, "Warning: CancelIO failed on TAP-Windows adapter");
- }
- }
-
- dmsg(D_WIN32_IO_LOW, "Attempting close of overlapped read event on TAP-Windows adapter");
- overlapped_io_close(&tt->reads);
-
- dmsg(D_WIN32_IO_LOW, "Attempting close of overlapped write event on TAP-Windows adapter");
- overlapped_io_close(&tt->writes);
-
- if (tt->hand != NULL)
- {
- dmsg(D_WIN32_IO_LOW, "Attempting CloseHandle on TAP-Windows adapter");
- if (!CloseHandle(tt->hand))
- {
- msg(M_WARN | M_ERRNO, "Warning: CloseHandle failed on TAP-Windows adapter");
- }
- }
+ close_tun_handle(tt);
free(tt->actual_name);
- if (tt->windows_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);
- }
-
-
clear_tuntap(tt);
free(tt);
gc_free(&gc);