]> git.ipfire.org Git - thirdparty/wireguard-go.git/commit
conn, device, tun: implement vectorized I/O on Linux
authorJordan Whited <jordan@tailscale.com>
Thu, 2 Mar 2023 23:08:28 +0000 (15:08 -0800)
committerJason A. Donenfeld <Jason@zx2c4.com>
Fri, 10 Mar 2023 13:52:17 +0000 (14:52 +0100)
commit9e2f3860220280a5630971478b53c8ad9a991ca8
tree218f1bd9a8dd649a8fdb50571a921d1ccff4cae5
parent3bb8fec7e41fcc2138ddb4cba3f46100814fc523
conn, device, tun: implement vectorized I/O on Linux

Implement TCP offloading via TSO and GRO for the Linux tun.Device, which
is made possible by virtio extensions in the kernel's TUN driver.

Delete conn.LinuxSocketEndpoint in favor of a collapsed conn.StdNetBind.
conn.StdNetBind makes use of recvmmsg() and sendmmsg() on Linux. All
platforms now fall under conn.StdNetBind, except for Windows, which
remains in conn.WinRingBind, which still needs to be adjusted to handle
multiple packets.

Also refactor sticky sockets support to eventually be applicable on
platforms other than just Linux. However Linux remains the sole platform
that fully implements it for now.

Co-authored-by: James Tucker <james@tailscale.com>
Signed-off-by: James Tucker <james@tailscale.com>
Signed-off-by: Jordan Whited <jordan@tailscale.com>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
24 files changed:
conn/bind_linux.go [deleted file]
conn/bind_std.go
conn/boundif_android.go
conn/conn.go
conn/controlfns.go [new file with mode: 0644]
conn/controlfns_linux.go [new file with mode: 0644]
conn/controlfns_unix.go [new file with mode: 0644]
conn/default.go
conn/mark_default.go
conn/mark_unix.go
conn/sticky_default.go [new file with mode: 0644]
conn/sticky_linux.go [new file with mode: 0644]
conn/sticky_linux_test.go [new file with mode: 0644]
device/queueconstants_android.go
device/queueconstants_default.go
device/sticky_linux.go
go.mod
go.sum
tun/checksum.go [new file with mode: 0644]
tun/tcp_offload_linux.go [new file with mode: 0644]
tun/tcp_offload_linux_test.go [new file with mode: 0644]
tun/testdata/fuzz/Fuzz_handleGRO/032aec0105f26f709c118365e4830d6dc087cab24cd1e154c2e790589a309b77 [new file with mode: 0644]
tun/testdata/fuzz/Fuzz_handleGRO/0da283f9a2098dec30d1c86784411a8ce2e8e03aa3384105e581f2c67494700d [new file with mode: 0644]
tun/tun_linux.go