| #!/bin/bash |
| |
| # Configuration |
| DEV_NAME="tun0" |
| RXE_NAME="rxe0" |
| RDMA_PORT=4791 |
| |
| source "$(dirname "$0")/../kselftest/ktap_helpers.sh" |
| |
| exec > /dev/null |
| |
| # --- Cleanup Routine --- |
| # Ensures environment is clean even if the script hits an error |
| cleanup() { |
| echo "Performing cleanup..." |
| rdma link del $RXE_NAME 2>/dev/null |
| ip link del $DEV_NAME 2>/dev/null |
| modprobe -r rdma_rxe 2>/dev/null |
| } |
| trap cleanup EXIT |
| |
| # 1. Dependency Check |
| if ! modinfo rdma_rxe >/dev/null 2>&1; then |
| echo "SKIP: rdma_rxe module not found." >&2 |
| exit $KSFT_SKIP |
| fi |
| |
| modprobe rdma_rxe |
| |
| # 2. Setup TUN Device |
| echo "Creating $DEV_NAME..." |
| ip tuntap add mode tun "$DEV_NAME" |
| ip addr add 1.1.1.1/24 dev "$DEV_NAME" |
| ip link set "$DEV_NAME" up |
| |
| # 3. Attach RXE Link |
| echo "Attaching RXE link $RXE_NAME to $DEV_NAME..." |
| rdma link add "$RXE_NAME" type rxe netdev "$DEV_NAME" |
| |
| # 4. Verification: Port Check |
| # Use -H (no header) and -q (quiet) for cleaner scripting logic |
| if ! ss -Huln sport == :$RDMA_PORT | grep -q ":$RDMA_PORT"; then |
| echo "Error: UDP port $RDMA_PORT is not listening." |
| exit 1 |
| fi |
| echo "Verified: RXE is listening on UDP $RDMA_PORT." |
| |
| # 5. Trigger NETDEV_UNREGISTER |
| # We delete the underlying device without deleting the RDMA link first. |
| echo "Triggering NETDEV_UNREGISTER by deleting $DEV_NAME..." |
| ip link del "$DEV_NAME" |
| |
| # 6. Final Verification |
| # The RXE link and the UDP port should be automatically cleaned up by the kernel. |
| if rdma link show "$RXE_NAME" 2>/dev/null; then |
| echo "Error: $RXE_NAME still exists after netdev removal." |
| exit 1 |
| fi |
| |
| if ss -Huln sport == :$RDMA_PORT | grep -q ":$RDMA_PORT"; then |
| echo "Error: UDP port $RDMA_PORT still listening after netdev removal." |
| exit 1 |
| fi |
| |
| echo "Success: NETDEV_UNREGISTER handled correctly." |