#!/bin/zsh source common.zsh if [ "$#" -lt 2 ]; then echo "Usage: $0 {rxe,siw,info,start,status,stop,off} {remote host,...}" fi rdma_ips() { getent hosts $1 | awk '{print $1}' } rdma_devs() { for ip in $(rdma_ips $1); do ssh $1 ip addr show to $ip | awk -F': ' '{print $2}' done } rdma_cur() { ssh $1 rdma link | awk -F '[ |/]' '{print $2}' } rdma_start() { if [ -z "$(rdma_cur $1 | grep $3)" ]; then rdma_stop $1 devs=($(rdma_devs $1)) for i in $(seq ${#devs}); do ssh $1 "sudo rdma link add $3$((i-1)) type $3 netdev ${devs[$i]}" done fi rdma_status $1 $2 } rdma_info() { ssh $1 "sudo ibv_devinfo" 2>&1 | sed "s/^/$2 /g" } rdma_status() { links=($(ssh $1 rdma link show)) if [ ! -z "$links" ]; then ips=($(rdma_ips $1)) devs=($(rdma_devs $1)) for link in $links; do dev=$(echo $link | awk '{print $NF}') ip=${ips[${devs[(ie)$dev]}]} echo "$2 $link ($ip)" done else echo "$2 stopped" fi } rdma_stop() { for dev in $(rdma_cur $1); do ssh $1 "sudo rdma link delete $dev" done } IFS=$'\n' tags=($(FORCE_COLOR=1 python $COLORS/vm.py ${@:2})) for vm in "${@:2}"; do index=${@[(ie)$vm]} tag=${tags[index-1]} case $1 in "rxe") rdma_start $vm $tag "rxe" ;; "siw" | "start") rdma_start $vm $tag "siw" ;; "info") rdma_info $vm $tag ;; "status") rdma_status $vm $tag ;; "stop" | "off") rdma_stop $vm rdma_status $vm $tag ;; *) echo "SoftRoCE, SoftiWARP, Status, or Off?" exit 1 ;; esac done