1#!/bin/bash 2 3# Copied from blktests 4get_ipv4_addr() 5{ 6 ip -4 -o addr show dev "$1" | 7 sed -n 's/.*[[:blank:]]inet[[:blank:]]*\([^[:blank:]/]*\).*/\1/p' | 8 head -1 | tr -d '\n' 9} 10 11# existing rdma interfaces 12rdma_interfaces() 13{ 14 rdma link show | sed -nE 's/^link .* netdev ([^ ]+).*$/\1 /p' 15} 16 17# existing valid ipv4 interfaces 18ipv4_interfaces() 19{ 20 ip -o addr show | awk '/inet / {print $2}' | grep -v -w lo 21} 22 23rdma_rxe_detect() 24{ 25 for r in $(rdma_interfaces) 26 do 27 ipv4_interfaces | grep -qw $r && get_ipv4_addr $r && return 28 done 29 30 return 1 31} 32 33rdma_rxe_setup() 34{ 35 for i in $(ipv4_interfaces) 36 do 37 rdma_interfaces | grep -qw $i && continue 38 rdma link add "${i}_rxe" type rxe netdev "$i" && { 39 echo "Setup new rdma/rxe ${i}_rxe for $i with $(get_ipv4_addr $i)" 40 return 41 } 42 done 43 44 echo "Failed to setup any new rdma/rxe link" >&2 45 return 1 46} 47 48rdma_rxe_clean() 49{ 50 modprobe -r rdma_rxe 51} 52 53operation=${1:-detect} 54 55command -v rdma >/dev/null || { 56 echo "Command 'rdma' is not available, please install it first." >&2 57 exit 1 58} 59 60if [ "$operation" == "setup" ] || [ "$operation" == "clean" ]; then 61 [ "$UID" == 0 ] || { 62 echo "Root privilege is required to setup/clean a rdma/rxe link" >&2 63 exit 1 64 } 65 rdma_rxe_"$operation" 66elif [ "$operation" == "detect" ]; then 67 rdma_rxe_detect 68else 69 echo "Usage: $0 [setup | detect | clean]" 70fi 71