xref: /linux/tools/testing/selftests/rdma/rxe_socket_with_netns.sh (revision 4b0b946019e7376752456380b67e54eea2f10a7c)
1*e01027caSZhu Yanjun#!/bin/bash
2*e01027caSZhu Yanjun
3*e01027caSZhu Yanjun# Configuration
4*e01027caSZhu YanjunPORT=4791
5*e01027caSZhu YanjunMODS=("tun" "rdma_rxe")
6*e01027caSZhu Yanjun
7*e01027caSZhu Yanjunexec > /dev/null
8*e01027caSZhu Yanjun
9*e01027caSZhu Yanjun# --- Helper: Cleanup Routine ---
10*e01027caSZhu Yanjuncleanup() {
11*e01027caSZhu Yanjun    echo "Cleaning up resources..."
12*e01027caSZhu Yanjun    rdma link del rxe1 2>/dev/null
13*e01027caSZhu Yanjun    rdma link del rxe0 2>/dev/null
14*e01027caSZhu Yanjun    ip link del tun0 2>/dev/null
15*e01027caSZhu Yanjun    ip link del tun1 2>/dev/null
16*e01027caSZhu Yanjun    for m in "${MODS[@]}"; do modprobe -r "$m" 2>/dev/null; done
17*e01027caSZhu Yanjun}
18*e01027caSZhu Yanjun
19*e01027caSZhu Yanjun# Ensure cleanup runs on script exit or interrupt
20*e01027caSZhu Yanjuntrap cleanup EXIT
21*e01027caSZhu Yanjun
22*e01027caSZhu Yanjun# --- Phase 1: Environment Check ---
23*e01027caSZhu Yanjunif [[ $EUID -ne 0 ]]; then
24*e01027caSZhu Yanjun   echo "Error: This script must be run as root."
25*e01027caSZhu Yanjun   exit 1
26*e01027caSZhu Yanjunfi
27*e01027caSZhu Yanjun
28*e01027caSZhu Yanjunfor m in "${MODS[@]}"; do
29*e01027caSZhu Yanjun    modprobe "$m" || { echo "Error: Failed to load $m"; exit 1; }
30*e01027caSZhu Yanjundone
31*e01027caSZhu Yanjun
32*e01027caSZhu Yanjun# --- Phase 2: Create Interfaces & RXE Links ---
33*e01027caSZhu Yanjunecho "Creating tun0 (1.1.1.1) and rxe0..."
34*e01027caSZhu Yanjunip tuntap add mode tun tun0
35*e01027caSZhu Yanjunip addr add 1.1.1.1/24 dev tun0
36*e01027caSZhu Yanjunip link set tun0 up
37*e01027caSZhu Yanjunrdma link add rxe0 type rxe netdev tun0
38*e01027caSZhu Yanjun
39*e01027caSZhu Yanjun# Verify port 4791 is listening
40*e01027caSZhu Yanjunif ! ss -Huln sport = :$PORT | grep -q ":$PORT"; then
41*e01027caSZhu Yanjun    echo "Error: UDP port $PORT not found after rxe0 creation"
42*e01027caSZhu Yanjun    exit 1
43*e01027caSZhu Yanjunfi
44*e01027caSZhu Yanjun
45*e01027caSZhu Yanjunecho "Creating tun1 (2.2.2.2) and rxe1..."
46*e01027caSZhu Yanjunip tuntap add mode tun tun1
47*e01027caSZhu Yanjunip addr add 2.2.2.2/24 dev tun1
48*e01027caSZhu Yanjunip link set tun1 up
49*e01027caSZhu Yanjunrdma link add rxe1 type rxe netdev tun1
50*e01027caSZhu Yanjun
51*e01027caSZhu Yanjun# Verify port 4791 is still listening
52*e01027caSZhu Yanjunif ! ss -Huln sport = :$PORT | grep -q ":$PORT"; then
53*e01027caSZhu Yanjun    echo "Error: UDP port $PORT missing after rxe1 creation"
54*e01027caSZhu Yanjun    exit 1
55*e01027caSZhu Yanjunfi
56*e01027caSZhu Yanjun
57*e01027caSZhu Yanjun# --- Phase 3: Targeted Deletion ---
58*e01027caSZhu Yanjunecho "Deleting rxe1..."
59*e01027caSZhu Yanjunrdma link del rxe1
60*e01027caSZhu Yanjun
61*e01027caSZhu Yanjun# Port should still be active because rxe0 is still alive
62*e01027caSZhu Yanjunif ! ss -Huln sport = :$PORT | grep -q ":$PORT"; then
63*e01027caSZhu Yanjun    echo "Error: UDP port $PORT closed prematurely"
64*e01027caSZhu Yanjun    exit 1
65*e01027caSZhu Yanjunfi
66*e01027caSZhu Yanjun
67*e01027caSZhu Yanjunecho "Deleting rxe0..."
68*e01027caSZhu Yanjunrdma link del rxe0
69*e01027caSZhu Yanjun
70*e01027caSZhu Yanjun# Port should now be gone
71*e01027caSZhu Yanjunif ss -Huln sport = :$PORT | grep -q ":$PORT"; then
72*e01027caSZhu Yanjun    echo "Error: UDP port $PORT still exists after all links deleted"
73*e01027caSZhu Yanjun    exit 1
74*e01027caSZhu Yanjunfi
75*e01027caSZhu Yanjun
76*e01027caSZhu Yanjunecho "Test passed successfully."
77