1#!/bin/bash 2 3# Configuration 4NS="test1" 5VETH_A="veth-a" 6VETH_B="veth-b" 7IP_A="1.1.1.1" 8IP_B="1.1.1.2" 9PORT=4791 10 11exec > /dev/null 12 13# --- Cleanup Routine --- 14cleanup() { 15 echo "Cleaning up resources..." 16 rdma link del rxe1 2>/dev/null 17 ip netns exec "$NS" rdma link del rxe0 2>/dev/null 18 ip link delete "$VETH_B" 2>/dev/null 19 ip netns del "$NS" 2>/dev/null 20 modprobe -r rdma_rxe 2>/dev/null 21} 22trap cleanup EXIT 23 24# --- Prerequisite Checks --- 25if [[ $EUID -ne 0 ]]; then 26 echo "This script must be run as root" 27 exit 1 28fi 29 30modprobe rdma_rxe || { echo "Failed to load rdma_rxe"; exit 1; } 31 32# --- Setup Network Topology --- 33echo "Setting up network namespace and veth pair..." 34ip netns add "$NS" 35ip link add "$VETH_A" type veth peer name "$VETH_B" 36ip link set "$VETH_A" netns "$NS" 37 38# Configure Namespace side (test1) 39ip netns exec "$NS" ip addr add "$IP_A/24" dev "$VETH_A" 40ip netns exec "$NS" ip link set "$VETH_A" up 41ip netns exec "$NS" ip link set lo up 42 43# Configure Host side 44ip addr add "$IP_B/24" dev "$VETH_B" 45ip link set "$VETH_B" up 46 47# --- RXE Link Creation --- 48echo "Creating RDMA links..." 49ip netns exec "$NS" rdma link add rxe0 type rxe netdev "$VETH_A" 50rdma link add rxe1 type rxe netdev "$VETH_B" 51 52# Verify UDP 4791 is listening 53check_port() { 54 local target=$1 # "host" or "ns" 55 if [ "$target" == "ns" ]; then 56 ip netns exec "$NS" ss -Huln sport == :$PORT | grep -q ":$PORT" 57 else 58 ss -Huln sport == :$PORT | grep -q ":$PORT" 59 fi 60} 61 62check_port "ns" || { echo "Error: RXE port not listening in namespace"; exit 1; } 63check_port "host" || { echo "Error: RXE port not listening on host"; exit 1; } 64 65# --- Connectivity Test --- 66echo "Testing connectivity with rping..." 67ping -c 2 -W 1 "$IP_A" > /dev/null || { echo "Ping failed"; exit 1; } 68 69# Start rping server in background 70ip netns exec "$NS" rping -s -a "$IP_A" -v > /dev/null 2>&1 & 71RPING_PID=$! 72sleep 1 # Allow server to bind 73 74# Run rping client 75rping -c -a "$IP_A" -d -v -C 3 76RESULT=$? 77 78kill $RPING_PID 2>/dev/null 79 80if [ $RESULT -eq 0 ]; then 81 echo "SUCCESS: RDMA traffic verified." 82else 83 echo "FAILURE: rping failed." 84 exit 1 85fi 86