29 lines
1.2 KiB
Go
29 lines
1.2 KiB
Go
// values are biased towards higher throughput on high bandwidth-delay
|
|
// product paths, except on memory-constrained platforms.
|
|
tcpRXBufOpt := tcpip.TCPReceiveBufferSizeRangeOption{
|
|
...
|
|
Max: tcpRXBufMaxSize,
|
|
}
|
|
tcpipErr := ipstack.SetTransportProtocolOption(tcp.ProtocolNumber, &tcpRXBufOpt)
|
|
...
|
|
tcpTXBufOpt := tcpip.TCPSendBufferSizeRangeOption{
|
|
...
|
|
Max: tcpTXBufMaxSize,
|
|
}
|
|
tcpipErr = ipstack.SetTransportProtocolOption(tcp.ProtocolNumber, &tcpTXBufOpt)
|
|
...
|
|
sackEnabledOpt := tcpip.TCPSACKEnabled(true) // TCP SACK is disabled by default
|
|
tcpipErr := ipstack.SetTransportProtocolOption(tcp.ProtocolNumber, &sackEnabledOpt)
|
|
...
|
|
// See https://github.com/tailscale/tailscale/issues/9707
|
|
// gVisor's RACK performs poorly. ACKs do not appear to be handled in a
|
|
// timely manner, leading to spurious retransmissions and a reduced
|
|
// congestion window.
|
|
tcpRecoveryOpt := tcpip.TCPRecovery(0)
|
|
tcpipErr = ipstack.SetTransportProtocolOption(tcp.ProtocolNumber, &tcpRecoveryOpt)
|
|
...
|
|
// gVisor defaults to reno at the time of writing. We explicitly set reno
|
|
// See https://github.com/google/gvisor/issues/11632
|
|
renoOpt := tcpip.CongestionControlOption("reno")
|
|
tcpipErr = ipstack.SetTransportProtocolOption(tcp.ProtocolNumber, &renoOpt)
|