From: Xiao Liang <shaw.leon@gmail.com>
To: netdev@vger.kernel.org, linux-kselftest@vger.kernel.org,
Kuniyuki Iwashima <kuniyu@amazon.com>,
Jakub Kicinski <kuba@kernel.org>
Cc: "David S. Miller" <davem@davemloft.net>,
David Ahern <dsahern@kernel.org>,
Eric Dumazet <edumazet@google.com>,
Paolo Abeni <pabeni@redhat.com>, Ido Schimmel <idosch@nvidia.com>,
Andrew Lunn <andrew+netdev@lunn.ch>,
Simon Horman <horms@kernel.org>,
Donald Hunter <donald.hunter@gmail.com>,
Shuah Khan <shuah@kernel.org>, Jiri Pirko <jiri@resnulli.us>,
Hangbin Liu <liuhangbin@gmail.com>
Subject: [PATCH net-next v2 8/8] selftests: net: Add two test cases for link netns
Date: Thu, 7 Nov 2024 21:30:03 +0800 [thread overview]
Message-ID: <20241107133004.7469-9-shaw.leon@gmail.com> (raw)
In-Reply-To: <20241107133004.7469-1-shaw.leon@gmail.com>
- Add test for creating link in another netns when a link of the same
name and ifindex exists in current netns.
- Add test for netns_atomic - create link directly in target netns,
and no notifications should be generated in current netns.
Signed-off-by: Xiao Liang <shaw.leon@gmail.com>
---
tools/testing/selftests/net/Makefile | 1 +
tools/testing/selftests/net/netns-name.sh | 10 ++++
tools/testing/selftests/net/netns_atomic.py | 54 +++++++++++++++++++++
3 files changed, 65 insertions(+)
create mode 100755 tools/testing/selftests/net/netns_atomic.py
diff --git a/tools/testing/selftests/net/Makefile b/tools/testing/selftests/net/Makefile
index 26a4883a65c9..ba1a486f93dc 100644
--- a/tools/testing/selftests/net/Makefile
+++ b/tools/testing/selftests/net/Makefile
@@ -34,6 +34,7 @@ TEST_PROGS += gre_gso.sh
TEST_PROGS += cmsg_so_mark.sh
TEST_PROGS += cmsg_time.sh cmsg_ipv6.sh
TEST_PROGS += netns-name.sh
+TEST_PROGS += netns_atomic.py
TEST_PROGS += nl_netdev.py
TEST_PROGS += srv6_end_dt46_l3vpn_test.sh
TEST_PROGS += srv6_end_dt4_l3vpn_test.sh
diff --git a/tools/testing/selftests/net/netns-name.sh b/tools/testing/selftests/net/netns-name.sh
index 6974474c26f3..0be1905d1f2f 100755
--- a/tools/testing/selftests/net/netns-name.sh
+++ b/tools/testing/selftests/net/netns-name.sh
@@ -78,6 +78,16 @@ ip -netns $NS link show dev $ALT_NAME 2> /dev/null &&
fail "Can still find alt-name after move"
ip -netns $test_ns link del $DEV || fail
+#
+# Test no conflict of the same name/ifindex in different netns
+#
+ip -netns $NS link add name $DEV index 100 type dummy || fail
+ip -netns $NS link add netns $test_ns name $DEV index 100 type dummy ||
+ fail "Can create in netns without moving"
+ip -netns $test_ns link show dev $DEV >> /dev/null || fail "Device not found"
+ip -netns $NS link del $DEV || fail
+ip -netns $test_ns link del $DEV || fail
+
echo -ne "$(basename $0) \t\t\t\t"
if [ $RET_CODE -eq 0 ]; then
echo "[ OK ]"
diff --git a/tools/testing/selftests/net/netns_atomic.py b/tools/testing/selftests/net/netns_atomic.py
new file mode 100755
index 000000000000..0a3864e22b8b
--- /dev/null
+++ b/tools/testing/selftests/net/netns_atomic.py
@@ -0,0 +1,54 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: GPL-2.0
+
+import ctypes
+
+from lib.py import ksft_run, ksft_exit, ksft_true
+from lib.py import ip
+from lib.py import NetNS
+from lib.py import RtnlFamily
+
+libc = ctypes.cdll.LoadLibrary('libc.so.6')
+
+
+class NSEnter:
+ 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)
+
+ def __exit__(self, exc_type, exc_value, traceback):
+ libc.setns(self.saved.fileno(), 0)
+ self.saved.close()
+
+
+def test_event(ns1, ns2) -> None:
+ with NSEnter(str(ns1)):
+ rtnl = RtnlFamily()
+
+ rtnl.ntf_subscribe("rtnlgrp-link")
+
+ ip(f"netns set {ns1} 0", ns=str(ns2))
+
+ ip(f"link add netns {ns2} link-netnsid 0 dummy1 type dummy")
+ ip(f"link add netns {ns2} dummy2 type dummy", ns=str(ns1))
+
+ ip("link del dummy1", ns=str(ns2))
+ ip("link del dummy2", ns=str(ns2))
+
+ # Should receive no link events in ns1. Wait 5*0.1 seconds.
+ ksft_true(next(rtnl.check_ntf(max_retries=5), None) is None,
+ "Received unexpected link notification")
+
+
+def main() -> None:
+ with NetNS() as ns1, NetNS() as ns2:
+ ksft_run([test_event], args=(ns1, ns2))
+ ksft_exit()
+
+
+if __name__ == "__main__":
+ main()
--
2.47.0
next prev parent reply other threads:[~2024-11-07 13:31 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-07 13:29 [PATCH net-next v2 0/8] net: Improve netns handling in RTNL and ip_tunnel Xiao Liang
2024-11-07 13:29 ` [PATCH net-next v2 1/8] rtnetlink: Lookup device in target netns when creating link Xiao Liang
2024-11-07 13:29 ` [PATCH net-next v2 2/8] rtnetlink: Add netns_atomic flag in rtnl_link_ops Xiao Liang
2024-11-07 13:29 ` [PATCH net-next v2 3/8] net: ip_tunnel: Build flow in underlay net namespace Xiao Liang
2024-11-07 13:29 ` [PATCH net-next v2 4/8] net: ip_tunnel: Add source netns support for newlink Xiao Liang
2024-11-07 13:30 ` [PATCH net-next v2 5/8] net: ip_gre: Add netns_atomic module parameter Xiao Liang
2024-11-07 13:37 ` Eric Dumazet
2024-11-07 14:11 ` Xiao Liang
2024-11-07 15:59 ` Jakub Kicinski
2024-11-07 16:53 ` Xiao Liang
2024-11-08 4:04 ` Jakub Kicinski
2024-11-08 6:44 ` Xiao Liang
2024-11-10 0:59 ` Jakub Kicinski
2024-11-11 8:15 ` Xiao Liang
2024-11-11 23:42 ` Jakub Kicinski
2024-11-12 6:05 ` Xiao Liang
2024-11-07 13:30 ` [PATCH net-next v2 6/8] net: dummy: Set netns_atomic in rtnl ops for testing Xiao Liang
2024-11-07 13:30 ` [PATCH net-next v2 7/8] tools/net/ynl: Add retry limit for async notification Xiao Liang
2024-11-07 16:04 ` Jakub Kicinski
2024-11-07 17:16 ` Donald Hunter
2024-11-08 8:45 ` Xiao Liang
2024-11-08 10:04 ` Donald Hunter
2024-11-08 12:00 ` Donald Hunter
2024-11-07 13:30 ` Xiao Liang [this message]
2024-11-10 1:01 ` [PATCH net-next v2 8/8] selftests: net: Add two test cases for link netns Jakub Kicinski
2024-11-11 8:16 ` Xiao Liang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241107133004.7469-9-shaw.leon@gmail.com \
--to=shaw.leon@gmail.com \
--cc=andrew+netdev@lunn.ch \
--cc=davem@davemloft.net \
--cc=donald.hunter@gmail.com \
--cc=dsahern@kernel.org \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=idosch@nvidia.com \
--cc=jiri@resnulli.us \
--cc=kuba@kernel.org \
--cc=kuniyu@amazon.com \
--cc=linux-kselftest@vger.kernel.org \
--cc=liuhangbin@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=shuah@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.