Skip to content

Commit 787da64

Browse files
jwhitedzx2c4
authored andcommitted
tun/netstack: enable TCP Selective Acknowledgements
Enable TCP SACK for the gVisor Stack used in tun/netstack. This can improve throughput by an order of magnitude in the presence of packet loss. Signed-off-by: James Tucker <[email protected]> Signed-off-by: Jordan Whited <[email protected]> Signed-off-by: Jason A. Donenfeld <[email protected]>
1 parent 37b3cba commit 787da64

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

tun/netstack/tun.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,13 @@ func CreateNetTUN(localAddresses, dnsServers []netip.Addr, mtu int) (tun.Device,
6565
dnsServers: dnsServers,
6666
mtu: mtu,
6767
}
68+
sackEnabledOpt := tcpip.TCPSACKEnabled(true) // TCP SACK is disabled by default
69+
tcpipErr := dev.stack.SetTransportProtocolOption(tcp.ProtocolNumber, &sackEnabledOpt)
70+
if tcpipErr != nil {
71+
return nil, nil, fmt.Errorf("could not enable TCP SACK: %v", tcpipErr)
72+
}
6873
dev.ep.AddNotify(dev)
69-
tcpipErr := dev.stack.CreateNIC(1, dev.ep)
74+
tcpipErr = dev.stack.CreateNIC(1, dev.ep)
7075
if tcpipErr != nil {
7176
return nil, nil, fmt.Errorf("CreateNIC: %v", tcpipErr)
7277
}

0 commit comments

Comments
 (0)