-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathlib_vrf.bash
executable file
·51 lines (41 loc) · 1.16 KB
/
lib_vrf.bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/bin/bash
# create an associative array of vrf interfaces and their ports
IFLINES=()
declare -A IFNAMES
export IFNAMES
declare -A VRFNAMES
export VRFNAMES
while read line; do
IFLINES+=("$line")
done < <(ip -o link show)
RE_MASTER=' master ([^ ]+) state '
for item in "${IFLINES[@]}"; do
#echo -e "\t$item"
[[ x$item = x ]] && continue
IFS=': ' hunks=($item)
[[ "${hunks[1]}" = "" ]] && continue
ifname="${hunks[1]}"
[[ "$ifname" = *NOARP,MASTER* ]] && continue
IFNAMES["$ifname"]="unknown"
if [[ $item = *master* ]] && [[ $item = *vrf* ]]; then
#echo "Looking for vrf in $ifname"
if [[ $item =~ $RE_MASTER ]]; then
[[ x${BASH_REMATCH[1]} = x ]] && continue;
vrfname=${BASH_REMATCH[1]};
#echo "[[[$ifname]]] [[[$vrfname]]]"
IFNAMES["$ifname"]="$vrfname"
VRFNAMES["$vrfname"]="$ifname"
fi
fi
done
if [[ x$VRF_DEBUG = x1 ]]; then
echo "Interfaces: "
for ifname in "${!IFNAMES[@]}"; do
echo "IFN $ifname => ${IFNAMES[$ifname]}"
done
echo "virtual routers: "
for vrfname in "${!VRFNAMES[@]}"; do
echo "VRF $vrfname => ${VRFNAMES[$vrfname]}"
done
fi
#