From 32b8ef2cc825d09ac26bb5c7aa4d31ab53df8dc3 Mon Sep 17 00:00:00 2001 From: Brian King Date: Tue, 23 Aug 2011 04:45:22 +0000 Subject: [PATCH] ofpath: Support systems with a large number of devices Improve the ofpath script to be able to display the OF path for more than just the first 16 devices on the system. Signed-off-by: Brian King Signed-off-by: Tony Breeds --- ybin/ofpath | 44 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/ybin/ofpath b/ybin/ofpath index cb4198e..a487149 100755 --- a/ybin/ofpath +++ b/ybin/ofpath @@ -116,15 +116,41 @@ linecount() ## small tr replacment which handles a specific need of this script. smalltr() { - case "$1" in - a) echo 1 ;; b) echo 2 ;; c) echo 3 ;; d) echo 4 ;; e) echo 5 ;; f) echo 6 ;; - g) echo 7 ;; h) echo 8 ;; i) echo 9 ;; j) echo 10 ;; k) echo 11 ;; l) echo 12 ;; - m) echo 13 ;; n) echo 14 ;; o) echo 15 ;; p) echo 16 ;; - 1) echo a ;; 2) echo b ;; 3) echo c ;; 4) echo d ;; 5) echo e ;; - 6) echo f ;; 7) echo g ;; 8) echo h ;; 9) echo i ;; 10) echo j ;; - 11) echo k ;; 12) echo l ;; 13) echo m ;; 14) echo n ;; 15) echo o ;; - 16) echo p ;; - esac + local i a d t val out mod cur + + val="$1" + out="0" + + d=$(printf "%d\n" \'${val:0:1}) + + if (( $d > 57 )) ; then # is a letter + for ((i=0; i < ${#val}; i++)) ; do + d=$(printf "%d\n" \'${val:$i:1}) + a=$(($d - 96)) + out=$(($out * 26)) + out=$(($out + $a)) + done + + else # is a number + t=$val + out="" + + while ((t != 0)) ; do + mod=$(($t % 26)) + t=$(($t / 26)) + if (($mod == 0)) ; then + cur="z" + t=$(($t - 1)) + else + mod=$(($mod + 96)) + cur=$(echo $mod | gawk '{printf "%c", $1}') + fi + out="$cur$out" + done + fi + + echo "$out" + return 0 } -- 2.39.2