From 6cc073bd87757fed36078159d1d49b238370b58f Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Thu, 2 Dec 2021 17:44:04 -0500 Subject: [PATCH] Create an rdma.zsh command For controlling remote RDMA devices Signed-off-by: Anna Schumaker --- completions/_rdma.zsh | 9 ++++++ rdma.zsh | 66 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 completions/_rdma.zsh create mode 100755 rdma.zsh diff --git a/completions/_rdma.zsh b/completions/_rdma.zsh new file mode 100644 index 0000000..8149588 --- /dev/null +++ b/completions/_rdma.zsh @@ -0,0 +1,9 @@ +#compdef rdma.zsh + +function _rdma.zsh() { + _arguments \ + '1:operation:(rxe siw info start status stop off)' \ + '*:remote host: _alternative + "hosts:hosts: _ssh_hosts" + "domains:domains:($(virsh list --all --name))"' +} diff --git a/rdma.zsh b/rdma.zsh new file mode 100755 index 0000000..abbf7fd --- /dev/null +++ b/rdma.zsh @@ -0,0 +1,66 @@ +#!/bin/zsh + +if [ "$#" -lt 2 ]; then + echo "Usage: $0 {rxe,siw,info,start,status,stop,off} {remote host,...}" +fi + +rdma_ip() { + getent hosts $1 | head -n 1 | awk '{print $1}' +} + +rdma_dev() { + ssh $1 ip addr show to $(rdma_ip $1) | awk -F': ' '{print $2}' +} + +rdma_cur() { + ssh $1 rdma link | awk -F '[0-9 ]' '{print $2}' +} + +rdma_start() { + cur=$(rdma_cur $1) + if [[ "$cur" != "$3" ]]; then + if [[ ! -z "$cur" ]]; then + rdma_stop $1 + fi + ssh $1 "sudo rdma link add "$3"0 type $3 netdev $(rdma_dev $1)" + fi + rdma_status $1 $2 +} + +rdma_info() { + ssh $1 "sudo ibv_devinfo" 2>&1 | sed "s/^/$2 /g" +} + +rdma_status() { + link=$(ssh $1 rdma link show) + if [ ! -z $link ]; then + echo "$2 $link($(rdma_ip $1))" + else + echo "$2 stopped" + fi +} + +rdma_stop() { + ssh $1 "sudo rdma link delete siw0 2>/dev/null" + ssh $1 "sudo rdma link delete rxe0 2>/dev/null" +} + +tags=($(python /home/anna/bin/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