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