diff options
Diffstat (limited to 'scripts/netjail/topo.sh')
-rwxr-xr-x | scripts/netjail/topo.sh | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/scripts/netjail/topo.sh b/scripts/netjail/topo.sh new file mode 100755 index 000000000..de3296b45 --- /dev/null +++ b/scripts/netjail/topo.sh | |||
@@ -0,0 +1,162 @@ | |||
1 | #!/bin/bash | ||
2 | |||
3 | declare -A K_PLUGIN | ||
4 | declare -A R_TCP | ||
5 | declare -A R_TCP_ALLOWED | ||
6 | declare -i -A R_TCP_ALLOWED_NUMBER | ||
7 | declare -A R_UDP | ||
8 | declare -A R_UDP_ALLOWED | ||
9 | declare -i -A R_UDP_ALLOWED_NUMBER | ||
10 | declare -A P_PLUGIN | ||
11 | declare -A R_SCRIPT | ||
12 | |||
13 | extract_attributes() | ||
14 | { | ||
15 | line_key=$1 | ||
16 | line=$2 | ||
17 | |||
18 | if [ "$line_key" = "P" ] | ||
19 | then | ||
20 | n=$(echo $line|cut -d \| -f 1|awk -F: '{print $2}') | ||
21 | echo $n | ||
22 | m=$(echo $line|cut -d \| -f 1|awk -F: '{print $3}') | ||
23 | echo $m | ||
24 | else | ||
25 | number=$(echo $line|cut -d \| -f 1| cut -c 2-|cut -d : -f 2 ) | ||
26 | echo $number | ||
27 | fi | ||
28 | |||
29 | #nf=$(echo $line|awk -F: '{print NF}') | ||
30 | nf=$(echo $line|awk -F\| '{print NF}') | ||
31 | for ((i=2;i<=$nf;i++)) | ||
32 | do | ||
33 | entry=$(echo $line |awk -v i=$i -F\| '{print $i}') | ||
34 | echo $entry | ||
35 | if [ "$(echo $entry|grep P)" = "" ]; then | ||
36 | key=$(echo $entry|cut -d { -f 2|cut -d } -f 1|cut -d : -f 1) | ||
37 | echo $key | ||
38 | value=$(echo $entry|cut -d { -f 2|cut -d } -f 1|cut -d : -f 2) | ||
39 | echo $value | ||
40 | if [ "$key" = "tcp_port" ] | ||
41 | then | ||
42 | R_TCP_ALLOWED_NUMBER[$number]=0 | ||
43 | echo tcp port: $value | ||
44 | R_TCP[$number]=$value | ||
45 | elif [ "$key" = "udp_port" ] | ||
46 | then | ||
47 | R_UDP_ALLOWED_NUMBER[$number]=0 | ||
48 | echo udp port: $value | ||
49 | R_UDP[$number]=$value | ||
50 | elif [ "$key" = "plugin" ] | ||
51 | then | ||
52 | echo plugin: $value | ||
53 | echo $line_key | ||
54 | if [ "$line_key" = "P" ] | ||
55 | then | ||
56 | P_PLUGIN[$n,$m]=$value | ||
57 | echo $n $m ${P_PLUGIN[$n,$m]} | ||
58 | elif [ "$line_key" = "K" ] | ||
59 | then | ||
60 | K_PLUGIN[$number]=$value | ||
61 | fi | ||
62 | elif [ "$key" = "script" ] | ||
63 | then | ||
64 | echo script: $value | ||
65 | echo $line_key | ||
66 | R_SCRIPT[$number]=$value | ||
67 | fi | ||
68 | else | ||
69 | p1=$(echo $entry|cut -d P -f 2|cut -d } -f 1|cut -d : -f 2) | ||
70 | echo $p1 | ||
71 | p2=$(echo $entry|cut -d P -f 2|cut -d } -f 1|cut -d : -f 3) | ||
72 | echo $p2 | ||
73 | if [ "$key" = "tcp_port" ] | ||
74 | then | ||
75 | R_TCP_ALLOWED_NUMBER[$number]+=1 | ||
76 | R_TCP_ALLOWED[$number,${R_TCP_ALLOWED_NUMBER[$number]},1]=$p1 | ||
77 | R_TCP_ALLOWED[$number,${R_TCP_ALLOWED_NUMBER[$number]},2]=$p2 | ||
78 | echo ${R_TCP_ALLOWED_NUMBER[$number]} | ||
79 | echo ${R_TCP_ALLOWED[$number,${R_TCP_ALLOWED_NUMBER[$number]},1]} | ||
80 | echo ${R_TCP_ALLOWED[$number,${R_TCP_ALLOWED_NUMBER[$number]},2]} | ||
81 | elif [ "$key" = "udp_port" ] | ||
82 | then | ||
83 | R_UDP_ALLOWED_NUMBER[$number]+=1 | ||
84 | R_UDP_ALLOWED[$number,${R_UDP_ALLOWED_NUMBER[$number]},1]=$p1 | ||
85 | R_UDP_ALLOWED[$number,${R_UDP_ALLOWED_NUMBER[$number]},2]=$p2 | ||
86 | fi | ||
87 | fi | ||
88 | done | ||
89 | #for ((i=2;i<=$nf;i++)) | ||
90 | # do | ||
91 | #entry=$(echo $line |awk -v i=$i -F\| '{print $i}') | ||
92 | key=$(echo $entry|cut -d { -f 2|cut -d } -f 1|cut -d : -f 1) | ||
93 | value=$(echo $entry|cut -d { -f 2|cut -d } -f 1|cut -d : -f 2) | ||
94 | |||
95 | #done | ||
96 | } | ||
97 | |||
98 | parse_line(){ | ||
99 | line=$1 | ||
100 | echo $line | ||
101 | key=$(cut -c -1 <<< $line) | ||
102 | if [ "$key" = "M" ] | ||
103 | then | ||
104 | LOCAL_M=$(cut -d : -f 2 <<< $line) | ||
105 | echo $LOCAL_M | ||
106 | elif [ "$key" = "N" ] | ||
107 | then | ||
108 | GLOBAL_N=$(cut -d : -f 2 <<< $line) | ||
109 | echo $GLOBAL_N | ||
110 | for ((i=1;i<=$GLOBAL_N;i++)) | ||
111 | do | ||
112 | R_TCP[$i]=0 | ||
113 | R_UDP[$i]=0 | ||
114 | R_SCRIPT[$i]="" | ||
115 | done | ||
116 | elif [ "$key" = "X" ] | ||
117 | then | ||
118 | KNOWN=$(cut -d : -f 2 <<< $line) | ||
119 | echo $KNOWN | ||
120 | elif [ "$key" = "T" ] | ||
121 | then | ||
122 | PLUGIN=$(cut -d : -f 2 <<< $line) | ||
123 | echo $PLUGIN | ||
124 | elif [ "$key" = "B" ] | ||
125 | then | ||
126 | BROADCAST=$(cut -d : -f 2 <<< $line) | ||
127 | echo $BROADCAST | ||
128 | elif [ "$key" = "K" ] | ||
129 | then | ||
130 | echo know node | ||
131 | extract_attributes $key $line | ||
132 | elif [ "$key" = "R" ] | ||
133 | then | ||
134 | echo router | ||
135 | extract_attributes $key $line | ||
136 | elif [ "$key" = "P" ] | ||
137 | then | ||
138 | echo node | ||
139 | extract_attributes $key $line | ||
140 | fi | ||
141 | } | ||
142 | |||
143 | read_topology_string(){ | ||
144 | string=$1 | ||
145 | IFS=' ' read -r -a array <<< $string | ||
146 | for element in "${array[@]}" | ||
147 | do | ||
148 | echo $element | ||
149 | parse_line $element | ||
150 | done | ||
151 | } | ||
152 | |||
153 | read_topology(){ | ||
154 | local filename=$1 | ||
155 | while read line; do | ||
156 | # reading each line | ||
157 | parse_line $line | ||
158 | done < $filename | ||
159 | } | ||
160 | |||
161 | |||
162 | |||