summaryrefslogtreecommitdiff
path: root/tools/testing/selftests/net/lib/py/netns.py
diff options
context:
space:
mode:
authorXiao Liang <shaw.leon@gmail.com>2025-02-19 15:50:38 +0300
committerJakub Kicinski <kuba@kernel.org>2025-02-22 02:28:03 +0300
commit030329416232ff9f2e3e4bb065b29e6c9a7d5050 (patch)
treef3a21746dcb001af24c8148945e662d0775777fc /tools/testing/selftests/net/lib/py/netns.py
parent7ca486d08a30936e3b45f535d920848828fefb33 (diff)
downloadlinux-030329416232ff9f2e3e4bb065b29e6c9a7d5050.tar.xz
selftests: net: Add python context manager for netns entering
Change netns of current thread and switch back on context exit. For example: with NetNSEnter("ns1"): ip("link add dummy0 type dummy") The command be executed in netns "ns1". Signed-off-by: Xiao Liang <shaw.leon@gmail.com> Link: https://patch.msgid.link/20250219125039.18024-13-shaw.leon@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'tools/testing/selftests/net/lib/py/netns.py')
-rw-r--r--tools/testing/selftests/net/lib/py/netns.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/tools/testing/selftests/net/lib/py/netns.py b/tools/testing/selftests/net/lib/py/netns.py
index ecff85f9074f..8e9317044eef 100644
--- a/tools/testing/selftests/net/lib/py/netns.py
+++ b/tools/testing/selftests/net/lib/py/netns.py
@@ -1,9 +1,12 @@
# SPDX-License-Identifier: GPL-2.0
from .utils import ip
+import ctypes
import random
import string
+libc = ctypes.cdll.LoadLibrary('libc.so.6')
+
class NetNS:
def __init__(self, name=None):
@@ -29,3 +32,18 @@ class NetNS:
def __repr__(self):
return f"NetNS({self.name})"
+
+
+class NetNSEnter:
+ def __init__(self, ns_name):
+ self.ns_path = f"/run/netns/{ns_name}"
+
+ def __enter__(self):
+ self.saved = open("/proc/thread-self/ns/net")
+ with open(self.ns_path) as ns_file:
+ libc.setns(ns_file.fileno(), 0)
+ return self
+
+ def __exit__(self, exc_type, exc_value, traceback):
+ libc.setns(self.saved.fileno(), 0)
+ self.saved.close()