66 lines
1.7 KiB
Bash
Executable File
66 lines
1.7 KiB
Bash
Executable File
#!/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."
|