From b2e65a323394f9012ec69dd3e4c4e6626872470a Mon Sep 17 00:00:00 2001 From: Honggang Li Date: Mar 16 2018 10:25:36 +0000 Subject: script ibdev2netdev Signed-off-by: Honggang Li --- diff --git a/add-ibdev2netdev.patch b/add-ibdev2netdev.patch new file mode 100644 index 0000000..e1a60ee --- /dev/null +++ b/add-ibdev2netdev.patch @@ -0,0 +1,201 @@ +--- /dev/null 2016-06-11 21:31:27.877143799 -0400 ++++ ibdev2netdev 2016-06-11 22:55:00.358718594 -0400 +@@ -0,0 +1,198 @@ ++#! /bin/bash ++ ++usage() ++{ ++ echo "$(basename $0) " ++ echo "-h, --help print help message" ++ echo "-v, --verbose print more info" ++} ++ ++case $1 in ++ "-h" | "--help") ++ usage ++ exit 0 ++ ;; ++esac ++ ++if (( $# > 1 )); then ++ usage ++ exit -1 ++fi ++ ++if (( $# == 1 )) && [ "$1" != "-v" ]; then ++ usage ++ exit -1 ++fi ++ ++ibdevs=$(ls /sys/class/infiniband/) ++ ++devs=$(ls /sys/class/net/ | grep ^[ei]) ++if [ "x$devs" == "x" ]; then ++ # no relevant devices - quit immediately ++ exit ++fi ++ ++for d in $devs; do ++ if [ -f /sys/class/net/$d/dev_id ]; then ++ oldstyle=n ++ break ++ fi ++done ++ ++if [ "x$oldstyle" == "xn" ]; then ++ for d in $ibdevs; do ++ ibrsc=$(cat /sys/class/infiniband/$d/device/resource) ++ eths=$(ls /sys/class/net/) ++ for eth in $eths; do ++ filepath_resource=/sys/class/net/$eth/device/resource ++ ++ if [ -f $filepath_resource ]; then ++ ethrsc=$(cat $filepath_resource) ++ if [ "x$ethrsc" == "x$ibrsc" ]; then ++ filepath_devid=/sys/class/net/$eth/dev_id ++ filepath_devport=/sys/class/net/$eth/dev_port ++ if [ -f $filepath_devid ]; then ++ port1=0 ++ if [ -f $filepath_devport ]; then ++ port1=$(cat $filepath_devport) ++ port1=$(printf "%d" $port1) ++ fi ++ ++ port=$(cat $filepath_devid) ++ port=$(printf "%d" $port) ++ if [ $port1 -gt $port ]; then ++ port=$port1 ++ fi ++ ++ port=$(( port + 1 )) ++ ++ filepath_carrier=/sys/class/net/$eth/carrier ++ ++ if [ -f $filepath_carrier ]; then ++ link_state=$(cat $filepath_carrier 2> /dev/null) ++ if (( link_state == 1 )); then ++ link_state="Up" ++ else ++ link_state="Down" ++ fi ++ else ++ link_state="NA" ++ fi ++ ++ if [ "$1" == "-v" ]; then ++ filepath_portstate=/sys/class/infiniband/$d/ports/$port/state ++ filepath_deviceid=/sys/class/infiniband/$d/device/device ++ filepath_fwver=/sys/class/infiniband/$d/fw_ver ++ filepath_vpd=/sys/class/infiniband/$d/device/vpd ++ ++ # read port state ++ if [ -f $filepath_portstate ]; then ++ ibstate=$(printf "%-6s" $(cat $filepath_portstate | gawk '{print $2}')) ++ else ++ ibstate="na" ++ fi ++ ++ # read device ++ if [ -f $filepath_deviceid ]; then ++ devid=$(printf "mt%d" $(cat $filepath_deviceid)) ++ else ++ devid="na" ++ fi ++ ++ # read fw version ++ if [ -f $filepath_fwver ]; then ++ fwver=$(cat $filepath_fwver) ++ else ++ fwver="na" ++ fi ++ ++ # read device description and part id from the vpd ++ if [ -f $filepath_vpd ]; then ++ tmp=$ifs ++ ifs=":" ++ vpd_content=`cat $filepath_vpd` ++ devdesc=$(printf "%-15s" $(echo $vpd_content | strings | head -1)) ++ partid=$(printf "%-11s" $(echo $vpd_content | strings | head -4 | tail -1 | gawk '{print $1}')) ++ ifs=$tmp ++ else ++ devdesc="" ++ partid="na" ++ fi ++ ++ echo "$d ($devid - $partid) $devdesc fw $fwver port $port ($ibstate) ==> $eth ($link_state)" ++ else ++ echo "$d port $port ==> $eth ($link_state)" ++ fi ++ fi ++ fi ++ fi ++ done ++ done ++else ++########################## ++### old style ++########################## ++ ++function print_line() ++{ ++ echo "$1 port $2 <===> $3" ++} ++ ++function find_guid() ++{ ++ ibdevs=$(ls /sys/class/infiniband/) ++ for ibdev in $ibdevs; do ++ ports=$(ls /sys/class/infiniband/$ibdev/ports/) ++ for port in $ports; do ++ gids=$(ls /sys/class/infiniband/$ibdev/ports/$port/gids) ++ for gid in $gids; do ++ pguid=$(cat /sys/class/infiniband/$ibdev/ports/$port/gids/$gid | cut -b 21- | sed -e 's/://g') ++ if [ x$pguid == x$1 ]; then ++ print_line $ibdev $port $2 ++ fi ++ done ++ done ++ done ++} ++ ++function find_mac() ++{ ++ ibdevs=$(ls /sys/class/infiniband/) ++ for ibdev in $ibdevs; do ++ type=$(cat /sys/class/infiniband/$ibdev/node_type|cut -d ' ' -f 2) ++ ports=$(ls /sys/class/infiniband/$ibdev/ports/) ++ for port in $ports; do ++ gids=$(ls /sys/class/infiniband/$ibdev/ports/$port/gids) ++ for gid in $gids; do ++ if [[ "$type" = "RNIC" ]]; then ++ pmac=$(cat /sys/class/infiniband/$ibdev/ports/$port/gids/$gid | cut -b 1-14|sed -e 's/://g') ++ else ++ first=$(cat /sys/class/infiniband/$ibdev/ports/$port/gids/$gid | cut -b 21-22) ++ first=$(( first ^ 2 )) ++ first=$(printf "%02x" $first) ++ second=$(cat /sys/class/infiniband/$ibdev/ports/$port/gids/$gid | cut -b 21- | sed -e 's/://g' | cut -b 3-6) ++ third=$(cat /sys/class/infiniband/$ibdev/ports/$port/gids/$gid | cut -b 21- | sed -e 's/://g' | cut -b 11-) ++ pmac=$first$second$third ++ fi ++ if [ x$pmac == x$1 ]; then ++ print_line $ibdev $port $2 ++ fi ++ done ++ done ++ done ++} ++ ++ifcs=$(ifconfig -a | egrep '^eth|^ib' | gawk '{print $1}') ++ ++for ifc in $ifcs; do ++ len=$(cat /sys/class/net/$ifc/addr_len) ++ if (( len == 20 )); then ++ guid=$(cat /sys/class/net/$ifc/address | cut -b 37- | sed -e 's/://g') ++ find_guid $guid $ifc ++ elif (( len == 6)); then ++ mac=$(cat /sys/class/net/$ifc/address | sed -e 's/://g') ++ find_mac $mac $ifc ++ fi ++done ++fi ++