diff options
author | Maciej Żenczykowski <maze@google.com> | 2022-06-08 00:21:21 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2022-06-08 00:21:21 +0000 |
commit | 255116f9f535d3bd1121bfd6d5ddc44735785dde (patch) | |
tree | 0846f6982f360829a734ee02863cf78241f04483 | |
parent | 898bd17d0c565c2327fd5575544696623e3effda (diff) | |
parent | dc6844a47de17e98d8bd8c9788470ab46af3a93c (diff) | |
download | tests-android13-qpr2-s8-release.tar.gz |
net-test: fix mixed build R+T lack of tcp_default_init_rwnd on old 4.14 kernels am: 913b27b357 am: dc6844a47dandroid-13.0.0_r49android-13.0.0_r48android-13.0.0_r47android-13.0.0_r46android-13.0.0_r45android-13.0.0_r44android-13.0.0_r43android-13.0.0_r42android-13.0.0_r41android-13.0.0_r40android-13.0.0_r39android-13.0.0_r38android-13.0.0_r37android-13.0.0_r36android-13.0.0_r35android-13.0.0_r34android-13.0.0_r33android-13.0.0_r32android13-qpr2-s9-releaseandroid13-qpr2-s8-releaseandroid13-qpr2-s7-releaseandroid13-qpr2-s6-releaseandroid13-qpr2-s5-releaseandroid13-qpr2-s3-releaseandroid13-qpr2-s2-releaseandroid13-qpr2-s12-releaseandroid13-qpr2-s11-releaseandroid13-qpr2-s10-releaseandroid13-qpr2-s1-releaseandroid13-qpr2-releaseandroid13-qpr2-b-s1-releaseandroid13-d4-s2-releaseandroid13-d4-s1-releaseandroid13-d4-release
Original change: https://googleplex-android-review.googlesource.com/c/kernel/tests/+/18718523
Change-Id: Ia3cbaf40adad80e2bfc4c1825da64b3da645a93a
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | net/test/namespace.py | 27 | ||||
-rwxr-xr-x | net/test/sock_diag_test.py | 18 |
2 files changed, 44 insertions, 1 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/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): |