]> git.ipfire.org Git - thirdparty/openvpn.git/commit
wintun: ring buffers based I/O
authorLev Stipakov <lev@openvpn.net>
Tue, 17 Dec 2019 12:44:10 +0000 (14:44 +0200)
committerGert Doering <gert@greenie.muc.de>
Tue, 17 Dec 2019 19:40:18 +0000 (20:40 +0100)
commitd5fc4bd41616ee01816df873cb6b6567872a29e2
tree422b36969bad44142af53dcfdc68c806bf11de7b
parent0764444b98f58da7d9ceb2e8975cbfa84ea2d95b
wintun: ring buffers based I/O

Implemented according to Wintun documentation
and reference client code.

Wintun uses ring buffers to communicate between
kernel driver and user process. Client allocates
send and receive ring buffers, creates events
and passes it to kernel driver under LocalSystem
privileges.

When data is available for read, wintun modifies
"tail" pointer of send ring and signals via event.
User process reads data from "head" to "tail" and
updates "head" pointer.

When user process is ready to write, it writes
to receive ring, updates "tail" pointer and signals
to kernel via event.

In openvpn code we add send ring's event to event loop.
Before performing io wait, we compare "head" and "tail"
pointers of send ring and if they're different, we skip
io wait and perform read.

This also adds ring buffers support to tcp and udp
server code.

Signed-off-by: Lev Stipakov <lev@openvpn.net>
Acked-by: Steffan Karger <steffan.karger@fox-it.com>
Acked-by: Simon Rozman <simon@rozman.si>
Message-Id: <20191217124410.81-1-lstipakov@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg19243.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
src/openvpn/forward.c
src/openvpn/forward.h
src/openvpn/mtcp.c
src/openvpn/mudp.c
src/openvpn/options.c
src/openvpn/syshead.h
src/openvpn/tun.c
src/openvpn/tun.h
src/openvpn/win32.c
src/openvpn/win32.h