mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Enable RACK by default in netstack.
PiperOrigin-RevId: 385944428
This commit is contained in:
committed by
gVisor bot
parent
9e805ce937
commit
a4d743db59
@@ -478,7 +478,7 @@ type endpoint struct {
|
||||
// shutdownFlags represent the current shutdown state of the endpoint.
|
||||
shutdownFlags tcpip.ShutdownFlags
|
||||
|
||||
// tcpRecovery is the loss deteoction algorithm used by TCP.
|
||||
// tcpRecovery is the loss recovery algorithm used by TCP.
|
||||
tcpRecovery tcpip.TCPRecovery
|
||||
|
||||
// sack holds TCP SACK related information for this endpoint.
|
||||
@@ -869,8 +869,6 @@ func newEndpoint(s *stack.Stack, netProto tcpip.NetworkProtocolNumber, waiterQue
|
||||
e.maxSynRetries = uint8(synRetries)
|
||||
}
|
||||
|
||||
s.TransportProtocolOption(ProtocolNumber, &e.tcpRecovery)
|
||||
|
||||
if p := s.GetTCPProbe(); p != nil {
|
||||
e.probe = p
|
||||
}
|
||||
@@ -2922,6 +2920,7 @@ func (e *endpoint) maybeEnableSACKPermitted(synOpts *header.TCPSynOptions) {
|
||||
}
|
||||
if bool(v) && synOpts.SACKPermitted {
|
||||
e.SACKPermitted = true
|
||||
e.stack.TransportProtocolOption(ProtocolNumber, &e.tcpRecovery)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -478,8 +478,7 @@ func NewProtocol(s *stack.Stack) stack.TransportProtocol {
|
||||
minRTO: MinRTO,
|
||||
maxRTO: MaxRTO,
|
||||
maxRetries: MaxRetries,
|
||||
// TODO(gvisor.dev/issue/5243): Set recovery to tcpip.TCPRACKLossDetection.
|
||||
recovery: 0,
|
||||
recovery: tcpip.TCPRACKLossDetection,
|
||||
}
|
||||
p.dispatcher.init(s.Rand(), runtime.GOMAXPROCS(0))
|
||||
return &p
|
||||
|
||||
@@ -36,9 +36,9 @@ const (
|
||||
latency = 5 * time.Millisecond
|
||||
)
|
||||
|
||||
func setStackRACKPermitted(t *testing.T, c *context.Context) {
|
||||
func setStackTCPRecovery(t *testing.T, c *context.Context, recovery int) {
|
||||
t.Helper()
|
||||
opt := tcpip.TCPRACKLossDetection
|
||||
opt := tcpip.TCPRecovery(recovery)
|
||||
if err := c.Stack().SetTransportProtocolOption(header.TCPProtocolNumber, &opt); err != nil {
|
||||
t.Fatalf("c.s.SetTransportProtocolOption(%d, &%v(%v)): %s", header.TCPProtocolNumber, opt, opt, err)
|
||||
}
|
||||
@@ -70,7 +70,6 @@ func TestRACKUpdate(t *testing.T) {
|
||||
close(probeDone)
|
||||
})
|
||||
setStackSACKPermitted(t, c, true)
|
||||
setStackRACKPermitted(t, c)
|
||||
createConnectedWithSACKAndTS(c)
|
||||
|
||||
data := make([]byte, maxPayload)
|
||||
@@ -129,7 +128,6 @@ func TestRACKDetectReorder(t *testing.T) {
|
||||
close(probeDone)
|
||||
})
|
||||
setStackSACKPermitted(t, c, true)
|
||||
setStackRACKPermitted(t, c)
|
||||
createConnectedWithSACKAndTS(c)
|
||||
data := make([]byte, ackNumToVerify*maxPayload)
|
||||
for i := range data {
|
||||
@@ -162,8 +160,8 @@ func TestRACKDetectReorder(t *testing.T) {
|
||||
|
||||
func sendAndReceiveWithSACK(t *testing.T, c *context.Context, numPackets int, enableRACK bool) []byte {
|
||||
setStackSACKPermitted(t, c, true)
|
||||
if enableRACK {
|
||||
setStackRACKPermitted(t, c)
|
||||
if !enableRACK {
|
||||
setStackTCPRecovery(t, c, 0)
|
||||
}
|
||||
createConnectedWithSACKAndTS(c)
|
||||
|
||||
@@ -998,7 +996,6 @@ func TestRACKWithWindowFull(t *testing.T) {
|
||||
defer c.Cleanup()
|
||||
|
||||
setStackSACKPermitted(t, c, true)
|
||||
setStackRACKPermitted(t, c)
|
||||
createConnectedWithSACKAndTS(c)
|
||||
|
||||
seq := seqnum.Value(context.TestInitialSequenceNumber).Add(1)
|
||||
|
||||
@@ -61,6 +61,7 @@ func TestSackPermittedConnect(t *testing.T) {
|
||||
defer c.Cleanup()
|
||||
|
||||
setStackSACKPermitted(t, c, sackEnabled)
|
||||
setStackTCPRecovery(t, c, 0)
|
||||
rep := createConnectedWithSACKPermittedOption(c)
|
||||
data := []byte{1, 2, 3}
|
||||
|
||||
@@ -105,6 +106,7 @@ func TestSackDisabledConnect(t *testing.T) {
|
||||
defer c.Cleanup()
|
||||
|
||||
setStackSACKPermitted(t, c, sackEnabled)
|
||||
setStackTCPRecovery(t, c, 0)
|
||||
|
||||
rep := c.CreateConnectedWithOptions(header.TCPSynOptions{})
|
||||
|
||||
@@ -166,6 +168,7 @@ func TestSackPermittedAccept(t *testing.T) {
|
||||
}
|
||||
}
|
||||
setStackSACKPermitted(t, c, sackEnabled)
|
||||
setStackTCPRecovery(t, c, 0)
|
||||
|
||||
rep := c.AcceptWithOptions(tc.wndScale, header.TCPSynOptions{MSS: defaultIPv4MSS, SACKPermitted: tc.sackPermitted})
|
||||
// Now verify no SACK blocks are
|
||||
@@ -239,6 +242,7 @@ func TestSackDisabledAccept(t *testing.T) {
|
||||
}
|
||||
|
||||
setStackSACKPermitted(t, c, sackEnabled)
|
||||
setStackTCPRecovery(t, c, 0)
|
||||
|
||||
rep := c.AcceptWithOptions(tc.wndScale, header.TCPSynOptions{MSS: defaultIPv4MSS})
|
||||
|
||||
@@ -386,6 +390,7 @@ func TestSACKRecovery(t *testing.T) {
|
||||
log.Printf("state: %+v\n", s)
|
||||
})
|
||||
setStackSACKPermitted(t, c, true)
|
||||
setStackTCPRecovery(t, c, 0)
|
||||
createConnectedWithSACKAndTS(c)
|
||||
|
||||
const iterations = 3
|
||||
|
||||
@@ -498,13 +498,7 @@ TEST(ProcSysNetIpv4Recovery, CanReadAndWrite) {
|
||||
// Check initial value is set to 1.
|
||||
EXPECT_THAT(PreadFd(fd.get(), &buf, sizeof(buf), 0),
|
||||
SyscallSucceedsWithValue(sizeof(to_write) + 1));
|
||||
if (IsRunningOnGvisor()) {
|
||||
// TODO(gvisor.dev/issue/5243): TCPRACKLossDetection = 1 should be turned on
|
||||
// by default.
|
||||
EXPECT_EQ(strcmp(buf, "0\n"), 0);
|
||||
} else {
|
||||
EXPECT_EQ(strcmp(buf, "1\n"), 0);
|
||||
}
|
||||
EXPECT_EQ(strcmp(buf, "1\n"), 0);
|
||||
|
||||
// Set tcp_recovery to one of the allowed constants.
|
||||
EXPECT_THAT(PwriteFd(fd.get(), &to_write, sizeof(to_write), 0),
|
||||
|
||||
Reference in New Issue
Block a user