2 # SPDX-License-Identifier: GPL-2.0
10 echo "Usage: $0 [OPTION]"
11 echo -e "\t-4: IPv4 only: disable IPv6 tests (default: test both IPv4 and IPv6)"
14 while getopts "$optstring" option
;do
30 do_complete_ping_test
()
32 echo "INFO: Initial validation ping."
33 # Each node has to be able each one.
34 do_ping
"$ns1" 100.64.0.2
35 do_ping
"$ns2" 100.64.0.1
36 do_ping
"$ns3" 100.64.0.1
37 stop_if_error
"Initial validation failed."
39 do_ping
"$ns1" 100.64.0.3
40 do_ping
"$ns2" 100.64.0.3
41 do_ping
"$ns3" 100.64.0.2
43 do_ping
"$ns1" dead
:beef
:1::2
44 do_ping
"$ns1" dead
:beef
:1::3
45 do_ping
"$ns2" dead
:beef
:1::1
46 do_ping
"$ns2" dead
:beef
:1::2
47 do_ping
"$ns3" dead
:beef
:1::1
48 do_ping
"$ns3" dead
:beef
:1::2
50 stop_if_error
"Initial validation failed."
52 # Wait until supervisor all supervision frames have been processed and the node
53 # entries have been merged. Otherwise duplicate frames will be observed which is
54 # valid at this stage.
56 while [ ${WAIT} -gt 0 ]
58 grep 00:00:00:00:00:00 /sys
/kernel
/debug
/hsr
/hsr
*/node_table
67 # Just a safety delay in case the above check didn't handle it.
70 echo "INFO: Longer ping test."
71 do_ping_long
"$ns1" 100.64.0.2
72 do_ping_long
"$ns1" dead
:beef
:1::2
73 do_ping_long
"$ns1" 100.64.0.3
74 do_ping_long
"$ns1" dead
:beef
:1::3
76 stop_if_error
"Longer ping test failed."
78 do_ping_long
"$ns2" 100.64.0.1
79 do_ping_long
"$ns2" dead
:beef
:1::1
80 do_ping_long
"$ns2" 100.64.0.3
81 do_ping_long
"$ns2" dead
:beef
:1::2
82 stop_if_error
"Longer ping test failed."
84 do_ping_long
"$ns3" 100.64.0.1
85 do_ping_long
"$ns3" dead
:beef
:1::1
86 do_ping_long
"$ns3" 100.64.0.2
87 do_ping_long
"$ns3" dead
:beef
:1::2
88 stop_if_error
"Longer ping test failed."
90 echo "INFO: Cutting one link."
91 do_ping_long
"$ns1" 100.64.0.3 &
94 ip
-net "$ns3" link
set ns3eth1 down
97 ip
-net "$ns3" link
set ns3eth1 up
99 stop_if_error
"Failed with one link down."
101 echo "INFO: Delay the link and drop a few packages."
102 tc
-net "$ns3" qdisc add dev ns3eth1 root netem delay
50ms
103 tc
-net "$ns2" qdisc add dev ns2eth1 root netem delay
5ms loss
25%
105 do_ping_long
"$ns1" 100.64.0.2
106 do_ping_long
"$ns1" 100.64.0.3
108 stop_if_error
"Failed with delay and packetloss."
110 do_ping_long
"$ns2" 100.64.0.1
111 do_ping_long
"$ns2" 100.64.0.3
113 stop_if_error
"Failed with delay and packetloss."
115 do_ping_long
"$ns3" 100.64.0.1
116 do_ping_long
"$ns3" 100.64.0.2
117 stop_if_error
"Failed with delay and packetloss."
119 echo "INFO: All good."
122 setup_hsr_interfaces
()
126 echo "INFO: preparing interfaces for HSRv${HSRv}."
127 # Three HSR nodes. Each node has one link to each of its neighbour, two links in total.
129 # ns1eth1 ----- ns2eth1
138 ip link add ns1eth1 netns
"$ns1" type veth peer name ns2eth1 netns
"$ns2"
139 ip link add ns1eth2 netns
"$ns1" type veth peer name ns3eth1 netns
"$ns3"
140 ip link add ns3eth2 netns
"$ns3" type veth peer name ns2eth2 netns
"$ns2"
143 ip
-net "$ns1" link add name hsr1
type hsr slave1 ns1eth1 slave2 ns1eth2 supervision
45 version
$HSRv proto
0
144 ip
-net "$ns2" link add name hsr2
type hsr slave1 ns2eth1 slave2 ns2eth2 supervision
45 version
$HSRv proto
0
145 ip
-net "$ns3" link add name hsr3
type hsr slave1 ns3eth1 slave2 ns3eth2 supervision
45 version
$HSRv proto
0
148 ip
-net "$ns1" addr add
100.64.0.1/24 dev hsr1
149 ip
-net "$ns1" addr add dead
:beef
:1::1/64 dev hsr1 nodad
150 ip
-net "$ns2" addr add
100.64.0.2/24 dev hsr2
151 ip
-net "$ns2" addr add dead
:beef
:1::2/64 dev hsr2 nodad
152 ip
-net "$ns3" addr add
100.64.0.3/24 dev hsr3
153 ip
-net "$ns3" addr add dead
:beef
:1::3/64 dev hsr3 nodad
155 ip
-net "$ns1" link
set address
00:11:22:00:01:01 dev ns1eth1
156 ip
-net "$ns1" link
set address
00:11:22:00:01:02 dev ns1eth2
158 ip
-net "$ns2" link
set address
00:11:22:00:02:01 dev ns2eth1
159 ip
-net "$ns2" link
set address
00:11:22:00:02:02 dev ns2eth2
161 ip
-net "$ns3" link
set address
00:11:22:00:03:01 dev ns3eth1
162 ip
-net "$ns3" link
set address
00:11:22:00:03:02 dev ns3eth2
165 ip
-net "$ns1" link
set ns1eth1 up
166 ip
-net "$ns1" link
set ns1eth2 up
167 ip
-net "$ns1" link
set hsr1 up
169 ip
-net "$ns2" link
set ns2eth1 up
170 ip
-net "$ns2" link
set ns2eth2 up
171 ip
-net "$ns2" link
set hsr2 up
173 ip
-net "$ns3" link
set ns3eth1 up
174 ip
-net "$ns3" link
set ns3eth2 up
175 ip
-net "$ns3" link
set hsr3 up
178 setup_vlan_interfaces
() {
179 ip
-net "$ns1" link add link hsr1 name hsr1.2
type vlan id
2
180 ip
-net "$ns1" link add link hsr1 name hsr1.3
type vlan id
3
181 ip
-net "$ns1" link add link hsr1 name hsr1.4
type vlan id
4
182 ip
-net "$ns1" link add link hsr1 name hsr1.5
type vlan id
5
184 ip
-net "$ns2" link add link hsr2 name hsr2.2
type vlan id
2
185 ip
-net "$ns2" link add link hsr2 name hsr2.3
type vlan id
3
186 ip
-net "$ns2" link add link hsr2 name hsr2.4
type vlan id
4
187 ip
-net "$ns2" link add link hsr2 name hsr2.5
type vlan id
5
189 ip
-net "$ns3" link add link hsr3 name hsr3.2
type vlan id
2
190 ip
-net "$ns3" link add link hsr3 name hsr3.3
type vlan id
3
191 ip
-net "$ns3" link add link hsr3 name hsr3.4
type vlan id
4
192 ip
-net "$ns3" link add link hsr3 name hsr3.5
type vlan id
5
194 ip
-net "$ns1" addr add
100.64.2.1/24 dev hsr1.2
195 ip
-net "$ns1" addr add
100.64.3.1/24 dev hsr1.3
196 ip
-net "$ns1" addr add
100.64.4.1/24 dev hsr1.4
197 ip
-net "$ns1" addr add
100.64.5.1/24 dev hsr1.5
199 ip
-net "$ns2" addr add
100.64.2.2/24 dev hsr2.2
200 ip
-net "$ns2" addr add
100.64.3.2/24 dev hsr2.3
201 ip
-net "$ns2" addr add
100.64.4.2/24 dev hsr2.4
202 ip
-net "$ns2" addr add
100.64.5.2/24 dev hsr2.5
204 ip
-net "$ns3" addr add
100.64.2.3/24 dev hsr3.2
205 ip
-net "$ns3" addr add
100.64.3.3/24 dev hsr3.3
206 ip
-net "$ns3" addr add
100.64.4.3/24 dev hsr3.4
207 ip
-net "$ns3" addr add
100.64.5.3/24 dev hsr3.5
209 ip
-net "$ns1" link
set dev hsr1.2 up
210 ip
-net "$ns1" link
set dev hsr1.3 up
211 ip
-net "$ns1" link
set dev hsr1.4 up
212 ip
-net "$ns1" link
set dev hsr1.5 up
214 ip
-net "$ns2" link
set dev hsr2.2 up
215 ip
-net "$ns2" link
set dev hsr2.3 up
216 ip
-net "$ns2" link
set dev hsr2.4 up
217 ip
-net "$ns2" link
set dev hsr2.5 up
219 ip
-net "$ns3" link
set dev hsr3.2 up
220 ip
-net "$ns3" link
set dev hsr3.3 up
221 ip
-net "$ns3" link
set dev hsr3.4 up
222 ip
-net "$ns3" link
set dev hsr3.5 up
227 do_ping
"$ns1" 100.64.2.2
228 do_ping
"$ns1" 100.64.3.2
229 do_ping
"$ns1" 100.64.4.2
230 do_ping
"$ns1" 100.64.5.2
232 do_ping
"$ns1" 100.64.2.3
233 do_ping
"$ns1" 100.64.3.3
234 do_ping
"$ns1" 100.64.4.3
235 do_ping
"$ns1" 100.64.5.3
237 do_ping
"$ns2" 100.64.2.1
238 do_ping
"$ns2" 100.64.3.1
239 do_ping
"$ns2" 100.64.4.1
240 do_ping
"$ns2" 100.64.5.1
242 do_ping
"$ns2" 100.64.2.3
243 do_ping
"$ns2" 100.64.3.3
244 do_ping
"$ns2" 100.64.4.3
245 do_ping
"$ns2" 100.64.5.3
247 do_ping
"$ns3" 100.64.2.1
248 do_ping
"$ns3" 100.64.3.1
249 do_ping
"$ns3" 100.64.4.1
250 do_ping
"$ns3" 100.64.5.1
252 do_ping
"$ns3" 100.64.2.2
253 do_ping
"$ns3" 100.64.3.2
254 do_ping
"$ns3" 100.64.4.2
255 do_ping
"$ns3" 100.64.5.2
259 vlan_challenged_hsr1
=$
(ip net
exec "$ns1" ethtool
-k hsr1 |
grep "vlan-challenged" |
awk '{print $2}')
260 vlan_challenged_hsr2
=$
(ip net
exec "$ns2" ethtool
-k hsr2 |
grep "vlan-challenged" |
awk '{print $2}')
261 vlan_challenged_hsr3
=$
(ip net
exec "$ns3" ethtool
-k hsr3 |
grep "vlan-challenged" |
awk '{print $2}')
263 if [[ "$vlan_challenged_hsr1" = "off" ||
"$vlan_challenged_hsr2" = "off" ||
"$vlan_challenged_hsr3" = "off" ]]; then
264 echo "INFO: Running VLAN tests"
265 setup_vlan_interfaces
268 echo "INFO: Not Running VLAN tests as the device does not support VLAN"
275 trap cleanup_all_ns EXIT
277 setup_hsr_interfaces
0
278 do_complete_ping_test
284 setup_hsr_interfaces
1
285 do_complete_ping_test