diff options
author | Xiao Liang <shaw.leon@gmail.com> | 2025-02-19 15:50:38 +0300 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2025-02-22 02:28:03 +0300 |
commit | 030329416232ff9f2e3e4bb065b29e6c9a7d5050 (patch) | |
tree | f3a21746dcb001af24c8148945e662d0775777fc /tools/testing/selftests/net/lib/py/netns.py | |
parent | 7ca486d08a30936e3b45f535d920848828fefb33 (diff) | |
download | linux-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.py | 18 |
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() |