Reduce iOS TCP buffers
This commit is contained in:
parent
24b12270db
commit
1664d083fb
1 changed files with 45 additions and 18 deletions
|
|
@ -87,7 +87,7 @@ func (t *GVisor) Start() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
linkEndpoint = &LinkEndpointFilter{linkEndpoint, t.broadcastAddr, t.tun}
|
linkEndpoint = &LinkEndpointFilter{linkEndpoint, t.broadcastAddr, t.tun}
|
||||||
ipStack, err := NewGVisorStackWithOptions(linkEndpoint, nicOptions, false)
|
ipStack, err := newGVisorStack(linkEndpoint, nicOptions, false, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
@ -135,6 +135,10 @@ func NewGVisorStack(ep stack.LinkEndpoint) (*stack.Stack, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewGVisorStackWithOptions(ep stack.LinkEndpoint, opts stack.NICOptions, allowRawEndpoint bool) (*stack.Stack, error) {
|
func NewGVisorStackWithOptions(ep stack.LinkEndpoint, opts stack.NICOptions, allowRawEndpoint bool) (*stack.Stack, error) {
|
||||||
|
return newGVisorStack(ep, opts, allowRawEndpoint, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
func newGVisorStack(ep stack.LinkEndpoint, opts stack.NICOptions, allowRawEndpoint bool, isLocalStack bool) (*stack.Stack, error) {
|
||||||
stackOptions := stack.Options{
|
stackOptions := stack.Options{
|
||||||
NetworkProtocols: []stack.NetworkProtocolFactory{
|
NetworkProtocols: []stack.NetworkProtocolFactory{
|
||||||
ipv4.NewProtocol,
|
ipv4.NewProtocol,
|
||||||
|
|
@ -175,23 +179,46 @@ func NewGVisorStackWithOptions(ep stack.LinkEndpoint, opts stack.NICOptions, all
|
||||||
tcpRecoveryOpt := tcpip.TCPRecovery(0)
|
tcpRecoveryOpt := tcpip.TCPRecovery(0)
|
||||||
err = ipStack.SetTransportProtocolOption(tcp.ProtocolNumber, &tcpRecoveryOpt)
|
err = ipStack.SetTransportProtocolOption(tcp.ProtocolNumber, &tcpRecoveryOpt)
|
||||||
}
|
}
|
||||||
tcpRXBufOpt := tcpip.TCPReceiveBufferSizeRangeOption{
|
if isLocalStack || runtime.GOOS == "ios" {
|
||||||
Min: tcpRXBufMinSize,
|
const iOSBufferDefault = 1 << 15
|
||||||
Default: tcpRXBufDefSize,
|
const iOSBufferMax = 1 << 17
|
||||||
Max: tcpRXBufMaxSize,
|
tcpRXBufOpt := tcpip.TCPReceiveBufferSizeRangeOption{
|
||||||
}
|
Min: tcpRXBufMinSize,
|
||||||
err = ipStack.SetTransportProtocolOption(tcp.ProtocolNumber, &tcpRXBufOpt)
|
Default: iOSBufferDefault,
|
||||||
if err != nil {
|
Max: iOSBufferMax,
|
||||||
return nil, gonet.TranslateNetstackError(err)
|
}
|
||||||
}
|
err = ipStack.SetTransportProtocolOption(tcp.ProtocolNumber, &tcpRXBufOpt)
|
||||||
tcpTXBufOpt := tcpip.TCPSendBufferSizeRangeOption{
|
if err != nil {
|
||||||
Min: tcpTXBufMinSize,
|
return nil, gonet.TranslateNetstackError(err)
|
||||||
Default: tcpTXBufDefSize,
|
}
|
||||||
Max: tcpTXBufMaxSize,
|
tcpTXBufOpt := tcpip.TCPSendBufferSizeRangeOption{
|
||||||
}
|
Min: tcpTXBufMinSize,
|
||||||
err = ipStack.SetTransportProtocolOption(tcp.ProtocolNumber, &tcpTXBufOpt)
|
Default: iOSBufferDefault,
|
||||||
if err != nil {
|
Max: iOSBufferMax,
|
||||||
return nil, gonet.TranslateNetstackError(err)
|
}
|
||||||
|
err = ipStack.SetTransportProtocolOption(tcp.ProtocolNumber, &tcpTXBufOpt)
|
||||||
|
if err != nil {
|
||||||
|
return nil, gonet.TranslateNetstackError(err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
tcpRXBufOpt := tcpip.TCPReceiveBufferSizeRangeOption{
|
||||||
|
Min: tcpRXBufMinSize,
|
||||||
|
Default: tcpRXBufDefSize,
|
||||||
|
Max: tcpRXBufMaxSize,
|
||||||
|
}
|
||||||
|
err = ipStack.SetTransportProtocolOption(tcp.ProtocolNumber, &tcpRXBufOpt)
|
||||||
|
if err != nil {
|
||||||
|
return nil, gonet.TranslateNetstackError(err)
|
||||||
|
}
|
||||||
|
tcpTXBufOpt := tcpip.TCPSendBufferSizeRangeOption{
|
||||||
|
Min: tcpTXBufMinSize,
|
||||||
|
Default: tcpTXBufDefSize,
|
||||||
|
Max: tcpTXBufMaxSize,
|
||||||
|
}
|
||||||
|
err = ipStack.SetTransportProtocolOption(tcp.ProtocolNumber, &tcpTXBufOpt)
|
||||||
|
if err != nil {
|
||||||
|
return nil, gonet.TranslateNetstackError(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return ipStack, nil
|
return ipStack, nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue