#!/bin/bash # Configuration PORT=4791 MODS=("tun" "rdma_rxe") exec > /dev/null # --- Helper: Cleanup Routine --- cleanup() { echo "Cleaning up resources..." rdma link del rxe0 2>/dev/null ip link del tun0 2>/dev/null for m in "${MODS[@]}"; do modprobe -r "$m" 2>/dev/null; done } # Ensure cleanup runs on script exit or interrupt trap cleanup EXIT # --- Phase 1: Environment Check --- if [[ $EUID -ne 0 ]]; then echo "Error: This script must be run as root." exit 1 fi for m in "${MODS[@]}"; do modprobe "$m" || { echo "Error: Failed to load $m"; exit 1; } done # --- Phase 2: Create Interfaces & RXE Links --- echo "Creating tun0 (1.1.1.1) and rxe0..." ip tuntap add mode tun tun0 ip addr add 1.1.1.1/24 dev tun0 ip link set tun0 up rdma link add rxe0 type rxe netdev tun0 # Verify port 4791 is listening if ! ss -Huln sport = :$PORT | grep -q ":$PORT"; then echo "Error: UDP port $PORT not found after rxe0 creation" exit 1 fi orig_s=`cat /sys/class/infiniband/rxe0/ports/1/counters/port_xmit_data` orig_r=`cat /sys/class/infiniband/rxe0/ports/1/counters/port_rcv_data` rping -s -a 1.1.1.1 -C 3 -v & sleep 1 rping -c -a 1.1.1.1 -C 3 -d -v new_s=`cat /sys/class/infiniband/rxe0/ports/1/counters/port_xmit_data` new_r=`cat /sys/class/infiniband/rxe0/ports/1/counters/port_rcv_data` echo sent $new_s $orig_s echo rcvd $new_r $orig_r result0=$((new_s - orig_s)) result1=$((new_r - orig_r)) if [ $result0 != $result1 ]; then echo "Error: sent and rcvd bytes different" echo $result0 echo $result1 exit 1 fi echo "Deleting rxe0..." rdma link del rxe0 # Port should now be gone if ss -Huln sport = :$PORT | grep -q ":$PORT"; then echo "Error: UDP port $PORT still exists after all links deleted" exit 1 fi echo "Test passed successfully."