make PMTUD on by default and settable via sockopt

We've supported PMTUD for a long time and just never turned it on.

Addresses #10344.

PiperOrigin-RevId: 634003508
This commit is contained in:
Kevin Krakauer
2024-05-15 10:44:02 -07:00
committed by gVisor bot
parent 2621d25b52
commit e367e0b134
10 changed files with 143 additions and 19 deletions
+46 -1
View File
@@ -1762,6 +1762,30 @@ func getSockOptIP(t *kernel.Task, s socket.Socket, ep commonEndpoint, name int,
return nil, err
}
return &ret, nil
case linux.IP_MTU_DISCOVER:
if outLen < sizeOfInt32 {
return nil, syserr.ErrInvalidArgument
}
v, err := ep.GetSockOptInt(tcpip.MTUDiscoverOption)
if err != nil {
return nil, syserr.TranslateNetstackError(err)
}
switch tcpip.PMTUDStrategy(v) {
case tcpip.PMTUDiscoveryWant:
v = linux.IP_PMTUDISC_WANT
case tcpip.PMTUDiscoveryDont:
v = linux.IP_PMTUDISC_DONT
case tcpip.PMTUDiscoveryDo:
v = linux.IP_PMTUDISC_DO
case tcpip.PMTUDiscoveryProbe:
v = linux.IP_PMTUDISC_PROBE
default:
panic(fmt.Errorf("unknown PMTUD option: %d", v))
}
vP := primitive.Int32(v)
return &vP, nil
}
return nil, syserr.ErrProtocolNotAvailable
}
@@ -2576,6 +2600,28 @@ func setSockOptIP(t *kernel.Task, s socket.Socket, ep commonEndpoint, name int,
log.Infof("IPT_SO_SET_ADD_COUNTERS is not supported")
return nil
case linux.IP_MTU_DISCOVER:
if len(optVal) == 0 {
return nil
}
v, err := parseIntOrChar(optVal)
if err != nil {
return err
}
switch v {
case linux.IP_PMTUDISC_DONT:
v = int32(tcpip.PMTUDiscoveryDont)
case linux.IP_PMTUDISC_WANT:
v = int32(tcpip.PMTUDiscoveryWant)
case linux.IP_PMTUDISC_DO:
v = int32(tcpip.PMTUDiscoveryDo)
case linux.IP_PMTUDISC_PROBE:
v = int32(tcpip.PMTUDiscoveryProbe)
default:
return syserr.ErrNotSupported
}
return syserr.TranslateNetstackError(ep.SetSockOptInt(tcpip.MTUDiscoverOption, int(v)))
case linux.IP_ADD_SOURCE_MEMBERSHIP,
linux.IP_BIND_ADDRESS_NO_PORT,
linux.IP_BLOCK_SOURCE,
@@ -2585,7 +2631,6 @@ func setSockOptIP(t *kernel.Task, s socket.Socket, ep commonEndpoint, name int,
linux.IP_IPSEC_POLICY,
linux.IP_MINTTL,
linux.IP_MSFILTER,
linux.IP_MTU_DISCOVER,
linux.IP_MULTICAST_ALL,
linux.IP_NODEFRAG,
linux.IP_OPTIONS,