python: Remove unused imports and variables.
[cascardo/ovs.git] / tests / rstp.at
1 AT_BANNER([Rapid Spanning Tree Protocol unit tests])
2
3 AT_SETUP([RSTP Single bridge])
4 AT_KEYWORDS([RSTP])
5 AT_DATA([test-rstp-num1],
6 [bridge 0 0x111 = a b
7 run 1000
8 check 0 = root
9 ])
10 AT_CHECK([ovstest test-rstp test-rstp-num1], [0], [])
11 AT_CLEANUP
12
13 AT_SETUP([RSTP Link failure])
14 AT_KEYWORDS([RSTP])
15 AT_DATA([test-rstp-num2],
16 [bridge 0 0x111 = a b
17 bridge 1 0x222 = a c
18 bridge 2 0x333 = b c
19 run 1000
20 check 0 = root
21 check 1 = F:200000 F
22 check 2 = F:200000 Di
23 # Link b goes down
24 bridge 2 = X c
25 run 1000
26 check 1 = F:200000 F
27 check 2 = D F:400000
28 ])
29 AT_CHECK([ovstest test-rstp test-rstp-num2], [0], [])
30 AT_CLEANUP
31
32 AT_SETUP([RSTP Double link Failure])
33 AT_KEYWORDS([RSTP])
34 AT_DATA([test-rstp-num3],
35 [bridge 0 0x111 = a b
36 bridge 1 0x222 = a c d
37 bridge 2 0x333 = b c e
38 bridge 3 0x444 = d f
39 bridge 4 0x555 = e f
40 run 1000
41 check 0 = root
42 check 1 = F:200000 F F
43 check 2 = F:200000 Di F
44 check 3 = F:400000 F
45 check 4 = F:400000 Di
46 # Link b goes down
47 bridge 2 = X c e
48 run 1000
49 check 0 = root
50 check 1 = F:200000 F F
51 check 2 = D F:400000 F
52 check 3 = F:400000 F
53 check 4 = F:600000 Di
54 # Link e goes down
55 bridge 4 = X f
56 run 1000
57 check 0 = root
58 check 1 = F:200000 F F
59 check 2 = D F:400000 F
60 check 3 = F:400000 F
61 check 4 = D F:600000
62 # Link f cost changes
63 bridge 4 = X f:100000
64 run 1000
65 check 4 = D F:500000
66 # Bridge 4 becomes root and
67 bridge 4 ^ 31000
68 run 1000
69 check 4 = root
70 ])
71 AT_CHECK([ovstest test-rstp test-rstp-num3], [0], [])
72 AT_CLEANUP
73
74 AT_SETUP([RSTP example from IEEE 802.1D-2004 figures 17.4 and 17.5])
75 AT_KEYWORDS([RSTP])
76 AT_DATA([test-rstp-ieee802.1d-2004-fig17.4],
77 [bridge 0 0x111 = a b e c
78 bridge 1 0x222 = a b d f
79 bridge 2 0x333 = c d l j h g
80 bridge 3 0x444 = e f n m k i
81 bridge 4 0x555 = g i 0 0
82 bridge 5 0x666 = h k 0 0
83 bridge 6 0x777 = j m 0 0
84 bridge 7 0x888 = l n 0 0
85 run 1000
86 check 0 = root
87 check 1 = F:200000 Di F F
88 check 2 = F:200000 Di F F F F
89 check 3 = F:200000 Di F F F F
90 check 4 = F:400000 Di F F
91 check 5 = F:400000 Di F F
92 check 6 = F:400000 Di F F
93 check 7 = F:400000 Di F F
94
95 # Now connect two ports of bridge 7 to the same LAN.
96 bridge 7 = l n o o
97 # Same results except for bridge 7:
98 run 1000
99 check 0 = root
100 check 1 = F:200000 Di F F
101 check 2 = F:200000 Di F F F F
102 check 3 = F:200000 Di F F F F
103 check 4 = F:400000 Di F F
104 check 5 = F:400000 Di F F
105 check 6 = F:400000 Di F F
106 check 7 = F:400000 Di F Di
107 ])
108 AT_CHECK([ovstest test-rstp test-rstp-ieee802.1d-2004-fig17.4], [0], [])
109 AT_CLEANUP
110
111 AT_SETUP([RSTP example from IEEE 802.1D-2004 figure 17.6])
112 AT_KEYWORDS([RSTP])
113 AT_DATA([test-rstp-ieee802.1d-2004-fig17.6],
114 [bridge 0 0x111 = a b l
115 bridge 1 0x222 = b c d
116 bridge 2 0x333 = d e f
117 bridge 3 0x444 = f g h
118 bridge 4 0x555 = j h i
119 bridge 5 0x666 = l j k
120 run 1000
121 check 0 = root
122 check 1 = F:200000 F F
123 check 2 = F:400000 F F
124 check 3 = F:600000 F Di
125 check 4 = F:400000 F F
126 check 5 = F:200000 F F
127 ])
128 AT_CHECK([ovstest test-rstp test-rstp-ieee802.1d-2004-fig17.6], [0], [])
129 AT_CLEANUP
130
131 AT_SETUP([RSTP example from IEEE 802.1D-2004 figure 17.7])
132 AT_KEYWORDS([RSTP])
133 AT_DATA([test-rstp-ieee802.1d-2004-fig17.7],
134 [bridge 0 0x000 = b
135 bridge 1 0x111 = a b d f h g e c
136 bridge 2 0x222 = g h j l n m k i
137 run 1000
138 check 0 = root
139 check 1 = F F:200000 F F F F F F
140 check 2 = Di F:400000 F F F F F F
141 # Link g priority increment
142 bridge 1 = a b d f h g^112 e c
143 run 1000
144 check 0 = root
145 check 1 = F F:200000 F F F F F F
146 check 2 = F:400000 Di F F F F F F
147 ])
148 AT_CHECK([ovstest test-rstp test-rstp-ieee802.1d-2004-fig17.7], [0], [])
149 AT_CLEANUP
150
151 # Strips out uninteresting parts of flow output, as well as parts
152 # that vary from one run to another (e.g., timing and bond actions).
153 m4_define([STRIP_USED], [[sed '
154     s/used:[0-9]*\.[0-9]*/used:0.0/
155     s/duration=[0-9.]*s*/duration=Xs/
156     s/idle_age=[0-9]*,/idle_age=X,/
157 ']])
158 m4_define([FILTER_STP_TOPOLOGY], [[
159 grep 'STP state changed' | sed '
160     s/.*ofproto_dpif|.*|//
161 ']])
162
163 AT_SETUP([RSTP - dummy interface])
164 # Create br0 with interfaces p1 and p7
165 #    and br1 with interfaces p2 and p8
166 # with p1 and p2 connected via unix domain socket
167 OVS_VSWITCHD_START(
168   [set port br0 other_config:rstp-enable=false -- \
169    set bridge br0 rstp_enable=true -- \
170    add-br br1 -- \
171    set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
172    set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
173                   fail-mode=secure -- \
174    set port br1 other_config:rstp-enable=false -- \
175    set bridge br1 rstp_enable=false -- \
176 ])
177
178 AT_CHECK([ovs-vsctl add-port br0 p1 -- \
179    set interface p1 type=dummy options:pstream=punix:$OVS_RUNDIR/p0.sock ofport_request=1 -- \
180    set port p1 other_config:rstp-enable=true -- \
181 ])
182 AT_CHECK([ovs-vsctl add-port br0 p7 -- \
183    set interface p7 ofport_request=7 type=dummy -- \
184    set port p7 other_config:rstp-enable=false -- \
185 ])
186 AT_CHECK([ovs-vsctl add-port br1 p2 -- \
187    set interface p2 type=dummy options:stream=unix:$OVS_RUNDIR/p0.sock ofport_request=2 -- \
188    set port p2 other_config:rstp-enable=false -- \
189 ])
190 AT_CHECK([ovs-vsctl add-port br1 p8 -- \
191    set interface p8 ofport_request=8 type=dummy -- \
192    set port p8 other_config:rstp-enable=false -- \
193 ])
194
195 #
196 # RSTP needs link to be in admin-state up, netdev-dummy is by default down
197 #
198 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state p1 up], [], [dnl
199 OK
200 ])
201
202 #
203 # Turn RSTP on in br1 after the ports have been added.
204 #
205 AT_CHECK([ovs-vsctl set bridge br1 rstp_enable=true])
206
207 ovs-appctl time/stop
208
209 AT_CHECK([ovs-ofctl add-flow br0 "in_port=7 icmp actions=1"])
210 AT_CHECK([ovs-ofctl add-flow br0 "in_port=1 icmp actions=7"])
211 AT_CHECK([ovs-ofctl add-flow br1 "in_port=8 icmp actions=2"])
212 AT_CHECK([ovs-ofctl add-flow br1 "in_port=2 icmp actions=8"])
213
214 AT_CHECK([ovs-vsctl set port p2 other_config:rstp-enable=true])
215
216 OVS_WAIT_UNTIL([test `cat ovs-vswitchd.log | FILTER_STP_TOPOLOGY | wc -l` -ge 2])
217 AT_CHECK([cat ovs-vswitchd.log | FILTER_STP_TOPOLOGY], [0], [dnl
218 port p1: RSTP state changed from Disabled to Discarding
219 port p2: RSTP state changed from Disabled to Discarding
220 ])
221
222 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)' | grep STP], [0], [dnl
223 RSTP not in forwarding state, skipping output
224 ])
225 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(8),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3,dst=10.0.0.4,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)' | grep STP], [0], [dnl
226 RSTP not in forwarding state, skipping output
227 ])
228
229 #
230 # RSTP needs link to be in admin-state up, netdev-dummy is by default down
231 #
232 AT_CHECK([ovs-appctl netdev-dummy/set-admin-state p2 up], [], [dnl
233 OK
234 ])
235
236 # give time for RSTP to move initially
237
238 ovs-appctl time/warp 1000
239 ovs-appctl time/warp 1000
240
241 OVS_WAIT_UNTIL([test `cat ovs-vswitchd.log | FILTER_STP_TOPOLOGY | wc -l` -ge 4])
242 AT_CHECK([cat ovs-vswitchd.log | FILTER_STP_TOPOLOGY], [0], [dnl
243 port p1: RSTP state changed from Disabled to Discarding
244 port p2: RSTP state changed from Disabled to Discarding
245 port p2: RSTP state changed from Discarding to Forwarding
246 port p1: RSTP state changed from Discarding to Forwarding
247 ])
248
249 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(7),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)' | grep Datapath], [0], [dnl
250 Datapath actions: 1
251 ])
252 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(8),eth(src=50:54:00:00:00:0b,dst=50:54:00:00:00:0c),eth_type(0x0800),ipv4(src=10.0.0.3,dst=10.0.0.4,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)' | grep Datapath], [0], [dnl
253 Datapath actions: 2
254 ])
255
256 AT_CHECK([ovs-vsctl del-br br1])
257
258 AT_CHECK([ovs-vsctl del-port br0 p7])
259 AT_CHECK([ovs-vsctl del-port br0 p1])
260
261 OVS_VSWITCHD_STOP
262 AT_CLEANUP