[Openvpn-devel,net-next,v3,4/4] selftests: ovpn: validate target netns ID in notifications
Commit Message
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 <marco@mandelbit.com>
---
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(-)
@@ -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=()
@@ -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}"