Enable netstack save/restore in cloud/gvisor by default.

PiperOrigin-RevId: 712978128
This commit is contained in:
Nayana Bidari
2025-01-07 11:19:26 -08:00
committed by gVisor bot
parent bf9d60db96
commit cd31d0522a
3 changed files with 27 additions and 28 deletions
+10 -3
View File
@@ -1966,6 +1966,14 @@ func (s *Stack) Pause() {
}
}
func (s *Stack) getNICs() map[tcpip.NICID]*nic {
s.mu.RLock()
defer s.mu.RUnlock()
nics := s.nics
return nics
}
// ReplaceConfig replaces config in the loaded stack.
func (s *Stack) ReplaceConfig(st *Stack) {
if st == nil {
@@ -1976,12 +1984,11 @@ func (s *Stack) ReplaceConfig(st *Stack) {
s.SetRouteTable(st.GetRouteTable())
// Update NICs.
st.mu.Lock()
defer st.mu.Unlock()
nics := st.getNICs()
s.mu.Lock()
defer s.mu.Unlock()
s.nics = make(map[tcpip.NICID]*nic)
for id, nic := range st.nics {
for id, nic := range nics {
nic.stack = s
s.nics[id] = nic
_ = s.NextNICID()
@@ -321,9 +321,6 @@ PosixErrorOr<sockaddr_storage> InetLoopbackAddr(int family) {
// pages one valid and one guard page succeeds as long as the write is
// for exactly the size of 1 page.
TEST_F(PartialBadBufferTest, SendMsgTCP) {
// FIXME(b/171436815): Netstack save/restore is broken.
const DisableSave ds;
auto listen_socket =
ASSERT_NO_ERRNO_AND_VALUE(Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP));
+17 -22
View File
@@ -14,6 +14,8 @@
#include <fcntl.h>
#include <memory>
#ifdef __linux__
#include <linux/filter.h>
#include <sys/epoll.h>
@@ -1317,23 +1319,22 @@ TEST_P(SimpleTcpSocketTest, ListenConnectParallel) {
std::vector<std::unique_ptr<ScopedThread>> threads;
threads.reserve(num_threads);
for (int i = 0; i < num_threads; i++) {
threads.push_back(
std::make_unique<ScopedThread>([&addr, &addrlen, family]() {
const FileDescriptor c = ASSERT_NO_ERRNO_AND_VALUE(
Socket(family, SOCK_STREAM | SOCK_NONBLOCK, IPPROTO_TCP));
threads.push_back(std::make_unique<ScopedThread>([&addr, &addrlen,
family]() {
const FileDescriptor c = ASSERT_NO_ERRNO_AND_VALUE(
Socket(family, SOCK_STREAM | SOCK_NONBLOCK, IPPROTO_TCP));
// Now connect to the bound address and this should fail as nothing
// is listening on the bound address.
EXPECT_THAT(RetryEINTR(connect)(c.get(), AsSockAddr(&addr), addrlen),
SyscallFailsWithErrno(EINPROGRESS));
// Wait for the connect to fail or succeed as it can race with the
// socket listening.
struct pollfd poll_fd = {c.get(), POLLERR | POLLOUT, 0};
const int timeout =
GvisorPlatform() == Platform::kFuchsia ? -1 : 1000;
EXPECT_THAT(RetryEINTR(poll)(&poll_fd, 1, timeout),
SyscallSucceedsWithValue(1));
}));
// Now connect to the bound address and this should fail as nothing
// is listening on the bound address.
EXPECT_THAT(RetryEINTR(connect)(c.get(), AsSockAddr(&addr), addrlen),
SyscallFailsWithErrno(EINPROGRESS));
// Wait for the connect to fail or succeed as it can race with the
// socket listening.
struct pollfd poll_fd = {c.get(), POLLERR | POLLOUT, 0};
const int timeout = GvisorPlatform() == Platform::kFuchsia ? -1 : 1000;
EXPECT_THAT(RetryEINTR(poll)(&poll_fd, 1, timeout),
SyscallSucceedsWithValue(1));
}));
}
}
@@ -2458,24 +2459,18 @@ void ShutdownConnectingSocket(int domain, int shutdown_mode) {
}
TEST_P(SimpleTcpSocketTest, ShutdownReadConnectingSocket) {
// TODO(b/171436815): Re-enable when S/R is fixed.
const DisableSave disable_save;
// TODO(b/175409607): Fix this test for hostinet.
SKIP_IF(IsRunningWithHostinet());
ShutdownConnectingSocket(GetParam(), SHUT_RD);
}
TEST_P(SimpleTcpSocketTest, ShutdownWriteConnectingSocket) {
// TODO(b/171436815): Re-enable when S/R is fixed.
const DisableSave disable_save;
// TODO(b/175409607): Fix this test for hostinet.
SKIP_IF(IsRunningWithHostinet());
ShutdownConnectingSocket(GetParam(), SHUT_WR);
}
TEST_P(SimpleTcpSocketTest, ShutdownReadWriteConnectingSocket) {
// TODO(b/171436815): Re-enable when S/R is fixed.
const DisableSave disable_save;
// TODO(b/175409607): Fix this test for hostinet.
SKIP_IF(IsRunningWithHostinet());
ShutdownConnectingSocket(GetParam(), SHUT_RDWR);