#!/bin/bash# ConfigurationDEV_NAME="tun0"RXE_NAME="rxe0"RDMA_PORT=4791source "$(dirname "$0")/../kselftest/ktap_helpers.sh"exec > /dev/null# --- Cleanup Routine ---# Ensures environment is clean even if the script hits an errorcleanup() { 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 Checkif ! modinfo rdma_rxe >/dev/null 2>&1; then echo "SKIP: rdma_rxe module not found." >&2 exit $KSFT_SKIPfimodprobe rdma_rxe# 2. Setup TUN Deviceecho "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 Linkecho "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 logicif ! ss -Huln sport == :$RDMA_PORT | grep -q ":$RDMA_PORT"; then echo "Error: UDP port $RDMA_PORT is not listening." exit 1fiecho "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 1fiif ss -Huln sport == :$RDMA_PORT | grep -q ":$RDMA_PORT"; then echo "Error: UDP port $RDMA_PORT still listening after netdev removal." exit 1fiecho "Success: NETDEV_UNREGISTER handled correctly."
#!/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."