summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-06-09 05:31:18 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-06-09 05:31:18 +0000
commit7083a72c690932b83703c82e35cf58011ea9c391 (patch)
tree0846f6982f360829a734ee02863cf78241f04483
parent4ea204f635140f4c4ed210e6461ebba72ec16959 (diff)
parent37c2a2caaa15d0fe529ad633bfb99e4730ee949b (diff)
downloadtests-android13-mainline-appsearch-release.tar.gz
Snap for 8701376 from 37c2a2caaa15d0fe529ad633bfb99e4730ee949b to mainline-appsearch-releaseaml_ase_331311020aml_ase_331112000aml_ase_331011020android13-mainline-appsearch-release
Change-Id: Ic57f425b2611a62006cba1d958fb195e49216b71
-rw-r--r--net/test/namespace.py27
-rwxr-xr-xnet/test/run_net_test.sh2
-rwxr-xr-xnet/test/sock_diag_test.py18
3 files changed, 45 insertions, 2 deletions
diff --git a/net/test/namespace.py b/net/test/namespace.py
index c8f8f46..3c0a0c1 100644
--- a/net/test/namespace.py
+++ b/net/test/namespace.py
@@ -18,6 +18,7 @@
import ctypes
import ctypes.util
+import errno
import os
import socket
import sys
@@ -128,6 +129,12 @@ def IfPossibleEnterNewNetworkNamespace():
sys.stdout.write('Creating clean namespace... ')
+ # sysctl only present on 4.14 and earlier Android kernels
+ if net_test.LINUX_VERSION < (4, 15, 0):
+ TCP_DEFAULT_INIT_RWND = "/proc/sys/net/ipv4/tcp_default_init_rwnd"
+ # In root netns this will succeed
+ init_rwnd_sysctl = open(TCP_DEFAULT_INIT_RWND, "w")
+
try:
UnShare(CLONE_NEWNS | CLONE_NEWUTS | CLONE_NEWNET)
except OSError as err:
@@ -148,6 +155,26 @@ def IfPossibleEnterNewNetworkNamespace():
# We've already transitioned into the new netns -- it's too late to recover.
raise
+ if net_test.LINUX_VERSION < (4, 15, 0):
+ # In non-root netns this open might fail due to non-namespace-ified sysctl
+ # ie. lack of kernel commit:
+ # https://android-review.googlesource.com/c/kernel/common/+/1312623
+ # ANDROID: namespace'ify tcp_default_init_rwnd implementation
+ try:
+ init_rwnd_sysctl = open(TCP_DEFAULT_INIT_RWND, "w")
+ except IOError as e:
+ if e.errno != errno.ENOENT:
+ raise
+ # Note! if the netns open above succeeded (and thus we don't reach here)
+ # then we don't need to actually update the sysctl, since we'll be able to do
+ # that in the sock_diag_test.py TcpRcvWindowTest test case setUp() call instead.
+ #
+ # As such this write here is *still* to the root netns sysctl
+ # (because we obtained a file descriptor *prior* to unshare/etc...)
+ # and handles the case where the sysctl is not namespace aware and thus
+ # affects the entire system.
+ init_rwnd_sysctl.write("60");
+
print('succeeded.')
return True
diff --git a/net/test/run_net_test.sh b/net/test/run_net_test.sh
index 9dca4fe..1bf876d 100755
--- a/net/test/run_net_test.sh
+++ b/net/test/run_net_test.sh
@@ -2,7 +2,7 @@
# Builds mysteriously fail if stdout is non-blocking.
fixup_ptys() {
- python << 'EOF'
+ python3 << 'EOF'
import fcntl, os, sys
fd = sys.stdout.fileno()
flags = fcntl.fcntl(fd, fcntl.F_GETFL)
diff --git a/net/test/sock_diag_test.py b/net/test/sock_diag_test.py
index 39ace4c..beda5e4 100755
--- a/net/test/sock_diag_test.py
+++ b/net/test/sock_diag_test.py
@@ -562,7 +562,23 @@ class TcpRcvWindowTest(tcp_test.TcpBaseTest, SockDiagBaseTest):
self.assertRaisesErrno(ENOENT, open, self.TCP_DEFAULT_INIT_RWND, "w")
return
- f = open(self.TCP_DEFAULT_INIT_RWND, "w")
+ try:
+ f = open(self.TCP_DEFAULT_INIT_RWND, "w")
+ except IOError as e:
+ # sysctl was namespace-ified on May 25, 2020 in android-4.14-stable [R]
+ # just after 4.14.181 by:
+ # https://android-review.googlesource.com/c/kernel/common/+/1312623
+ # ANDROID: namespace'ify tcp_default_init_rwnd implementation
+ # But that commit might be missing in Q era kernels even when > 4.14.181
+ # when running T vts.
+ if net_test.LINUX_VERSION >= (4, 15, 0):
+ raise
+ if e.errno != ENOENT:
+ raise
+ # we rely on the network namespace creation code
+ # modifying the root netns sysctl before the namespace is even created
+ return
+
f.write("60")
def checkInitRwndSize(self, version, netid):