[Openvpn-devel] [PATCH ovpn net-next v3 4/4] selftests: ovpn: validate target netns ID in notifications

Marco Baffo <[email protected]> Wed, 29 Jul 2026 17:38:15 +0200
Newsgroups net.sourceforge.lists.openvpn-devel
Message-ID <[email protected]>
Move one peer interface to a foreign namespace while keeping its transport
socket in the original namespace. Verify that its deletion notification
contains the expected target namespace ID.

Signed-off-by: Marco Baffo <[email protected]>
---
Changes in v3:
- Ignore unrelated events when validating
  notification target netns IDs.

Changes in v2:
- This is a new patch.

 tools/testing/selftests/net/ovpn/common.sh |  3 ++-
 tools/testing/selftests/net/ovpn/test.sh   | 25 ++++++++++++++++++++++
 2 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/tools/testing/selftests/net/ovpn/common.sh b/tools/testing/selftests/net/ovpn/common.sh
index 4f2510fb6d7f..2b90b7bf8700 100644
--- a/tools/testing/selftests/net/ovpn/common.sh
+++ b/tools/testing/selftests/net/ovpn/common.sh
@@ -21,7 +21,8 @@ export OVPN_ID_OFFSET=$(( 9 * (OVPN_SYMMETRIC_ID == 0) ))
 
 OVPN_JQ_FILTER='map(if type == "array" then .[] else . end) |
 	map(select(.msg.peer | has("remote-ipv6") | not)) |
-	map(del(.msg.ifindex)) | sort_by(.msg.peer.id)[]'
+	map(del(.msg.ifindex, .msg["target-netnsid"])) |
+	sort_by(.msg.peer.id)[]'
 OVPN_LAN_IP="11.11.11.11"
 
 declare -A OVPN_TMP_JSONS=()
diff --git a/tools/testing/selftests/net/ovpn/test.sh b/tools/testing/selftests/net/ovpn/test.sh
index 468dd7985c8f..52e482641016 100755
--- a/tools/testing/selftests/net/ovpn/test.sh
+++ b/tools/testing/selftests/net/ovpn/test.sh
@@ -270,8 +270,13 @@ ovpn_run_timeouts() {
 
 	ovpn_log "Setting timeout to 3s P2P:"
 
+	# The transport socket stays in peer3 when its interface is moved.
+	ovpn_cmd_ok "move peer3 interface to peer0" \
+		ip -n ovpn_peer3 link set tun3 netns ovpn_peer0
+
 	for p in $(seq 3 ${OVPN_NUM_PEERS}); do
 		peer_ns="ovpn_peer${p}"
+		[ "${p}" -eq 3 ] && peer_ns="ovpn_peer0"
 		ovpn_cmd_ok "set peer${p} P2P timeout" \
 			"${OVPN_CLI}" -n "${peer_ns}" set_peer \
 				tun${p} $((p + OVPN_ID_OFFSET)) 3 3
@@ -279,9 +284,29 @@ ovpn_run_timeouts() {
 	sleep 5
 }
 
+ovpn_validate_ntf_netnsid() {
+	local peer="$1"
+	local target="$2"
+	local expected_netnsid
+	local received_netnsid
+
+	expected_netnsid=$(ip -n "ovpn_peer${peer}" -j netns list-id |
+		jq -er --arg target "${target}" \
+			'.[] | select(.name == $target) | .nsid')
+	received_netnsid=$(jq -er \
+		'select(.name == "peer-del-ntf" and
+			(.msg | has("target-netnsid"))) |
+		 .msg["target-netnsid"]' \
+		"${OVPN_TMP_JSONS[$peer]}")
+
+	[ "${received_netnsid}" -eq "${expected_netnsid}" ]
+}
+
 ovpn_run_notifications() {
 	local p
 
+	ovpn_cmd_ok "validate peer3 target netns ID" \
+		ovpn_validate_ntf_netnsid 3 ovpn_peer0
 	for p in $(seq 0 ${OVPN_NUM_PEERS}); do
 		ovpn_cmd_ok "validate listener output for peer ${p}" \
 			ovpn_compare_ntfs "${p}"
-- 
2.43.0



_______________________________________________
Openvpn-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openvpn-devel