]> git.proxmox.com Git - mirror_ovs.git/blame - tests/cfm.at
treewide: Convert leading tabs to spaces.
[mirror_ovs.git] / tests / cfm.at
CommitLineData
03f209ba
AW
1AT_BANNER([cfm])
2
3m4_define([CFM_CHECK_EXTENDED], [
4AT_CHECK([ovs-appctl cfm/show $1 | sed -e '/next CCM tx:/d' | sed -e '/next fault check:/d' | sed -e '/recv since check:/d'],[0],
5[dnl
6---- $1 ----
7MPID $2: extended
f6d6edc0
BP
8 average health: $3
9 opstate: $4
10 remote_opstate: $5
11 interval: $6
03f209ba 12Remote MPID $7
f6d6edc0 13 opstate: $8
03f209ba
AW
14])
15])
16
5767a79a
AW
17m4_define([CFM_CHECK_EXTENDED_FAULT], [
18AT_CHECK([ovs-appctl cfm/show $1 | sed -e '/next CCM tx:/d' | sed -e '/next fault check:/d' | sed -e '/recv since check:/d'],[0],
19[dnl
20---- $1 ----
21MPID $2: extended
f6d6edc0
BP
22 fault: $3
23 average health: $4
24 opstate: $5
25 remote_opstate: $6
26 interval: $7
5767a79a
AW
27])
28])
29
76c4290d 30m4_define([CFM_VSCTL_LIST_IFACE], [
7fcd0037 31AT_CHECK([ovs-vsctl list interface $1 | sed -n '/$2 /p'],[0],
76c4290d
AW
32[dnl
33$3
34])
35])
36
5bb8a630 37m4_define([CFM_CHECK_DB], [
7fcd0037
AW
38CFM_VSCTL_LIST_IFACE([$1], [cfm_fault], [cfm_fault : $2])
39CFM_VSCTL_LIST_IFACE([$1], [cfm_fault_status], [cfm_fault_status : [[$3]]])
40CFM_VSCTL_LIST_IFACE([$1], [cfm_flap_count], [cfm_flap_count : $4])
41CFM_VSCTL_LIST_IFACE([$1], [cfm_health], [cfm_health : [[$5]]])
42CFM_VSCTL_LIST_IFACE([$1], [cfm_remote_mpids], [cfm_remote_mpids : [[$6]]])
43CFM_VSCTL_LIST_IFACE([$1], [cfm_remote_opstate], [cfm_remote_opstate : $7])
5bb8a630
AW
44])
45
7fcd0037
AW
46# These two tests check the update of cfm status at different scenarios.
47
48# Test cfm status update at startup and removal.
49AT_SETUP([cfm - check update ovsdb 1])
50OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=gre \
51 options:remote_ip=1.2.3.4 -- \
52 set Interface p0 other_config:cfm_interval=300 other_config:cfm_extended=true])
53
54ovs-appctl time/stop
14f602b8
BP
55AT_CHECK([ovs-appctl ofproto/list-tunnels], [0], [dnl
56port 1: p0 (gre: ::->1.2.3.4, key=0, legacy_l2, dp port=1, ttl=64)
57])
7fcd0037
AW
58
59AT_CHECK([ovs-vsctl set Interface p0 cfm_mpid=1])
60# at beginning, since the first fault check timeout is not reached
61# cfm_fault should be false.
62for i in `seq 0 4`; do
63 ovs-appctl time/warp 100
64 CFM_CHECK_DB([p0], [false], [], [0], [], [], [up])
65done
66
67# advance clock to pass the fault check timeout and check cfm
68# status update in OVSDB.
8661af79 69ovs-appctl time/warp 1500 100
7fcd0037
AW
70CFM_CHECK_DB([p0], [true], [recv], [1], [], [], [up])
71
72# remove the cfm on p0 and status should be all empty.
73AT_CHECK([ovs-vsctl remove int p0 cfm_mpid 1])
8661af79 74ovs-appctl time/warp 500 100
7fcd0037
AW
75CFM_CHECK_DB([p0], [[[]]], [], [[[]]], [], [], [[[]]])
76
77OVS_VSWITCHD_STOP
78AT_CLEANUP
79
80# Test cfm status update in normal case.
81AT_SETUP([cfm - check update ovsdb 2])
5bb8a630
AW
82#Create 2 bridges connected by patch ports and enable cfm
83OVS_VSWITCHD_START([add-br br1 -- \
84 set bridge br1 datapath-type=dummy \
85 other-config:hwaddr=aa:55:aa:56:00:00 -- \
86 add-port br1 p1 -- set Interface p1 type=patch \
87 options:peer=p0 -- \
88 add-port br0 p0 -- set Interface p0 type=patch \
89 options:peer=p1 -- \
90 set Interface p0 other_config:cfm_interval=300 other_config:cfm_extended=true -- \
91 set Interface p1 other_config:cfm_interval=300 other_config:cfm_extended=true])
92
93ovs-appctl time/stop
94
95AT_CHECK([ovs-vsctl set Interface p0 cfm_mpid=1])
96# check cfm status update in OVSDB.
8661af79 97ovs-appctl time/warp 1500 100
7fcd0037 98CFM_CHECK_DB([p0], [true], [recv], [1], [], [], [up])
5bb8a630 99
7fcd0037 100# turn cfm on p1 on, cfm status of p0 and p1 should all go up.
5bb8a630 101AT_CHECK([ovs-vsctl set interface p1 cfm_mpid=2])
8661af79 102ovs-appctl time/warp 1500 100
7fcd0037
AW
103CFM_CHECK_DB([p0], [false], [], [2], [], [2], [up])
104CFM_CHECK_DB([p1], [false], [], [0], [], [1], [up])
105
106# turn cfm on p1 off, cfm status of p0 should go down again.
107AT_CHECK([ovs-vsctl remove int p1 cfm_mpid 2])
8661af79 108ovs-appctl time/warp 1500 100
7fcd0037 109CFM_CHECK_DB([p0], [true], [recv], [3], [], [], [up])
5bb8a630
AW
110
111OVS_VSWITCHD_STOP
112AT_CLEANUP
113
03f209ba
AW
114# test cfm under demand mode.
115AT_SETUP([cfm - demand mode])
76c4290d 116#Create 2 bridges connected by patch ports and enable cfm
03f209ba
AW
117OVS_VSWITCHD_START([add-br br1 -- \
118 set bridge br1 datapath-type=dummy \
119 other-config:hwaddr=aa:55:aa:56:00:00 -- \
120 add-port br1 p1 -- set Interface p1 type=patch \
121 options:peer=p0 -- \
122 add-port br0 p0 -- set Interface p0 type=patch \
123 options:peer=p1 -- \
124 set Interface p0 cfm_mpid=1 other_config:cfm_interval=300 other_config:cfm_extended=true -- \
125 set Interface p1 cfm_mpid=2 other_config:cfm_interval=300 other_config:cfm_extended=true ])
126
127ovs-appctl time/stop
128# wait for a while to stablize cfm.
8661af79 129ovs-appctl time/warp 10100 100
03f209ba
AW
130CFM_CHECK_EXTENDED([p0], [1], [100], [up], [up], [300ms], [2], [up])
131CFM_CHECK_EXTENDED([p1], [2], [100], [up], [up], [300ms], [1], [up])
132
133# turn on demand mode on one end.
134AT_CHECK([ovs-vsctl set interface p0 other_config:cfm_demand=true])
135
136# cfm should never go down.
137for i in `seq 0 100`
138do
139 ovs-appctl time/warp 100
140 CFM_CHECK_EXTENDED([p0], [1], [100], [up], [up], [300ms], [2], [up])
141 CFM_CHECK_EXTENDED([p1], [2], [100], [up], [up], [300ms], [1], [up])
142done
143
144# turn on demand mode on the other end.
145AT_CHECK([ovs-vsctl set interface p1 other_config:cfm_demand=true])
146for i in `seq 0 100`
147do
148 ovs-appctl time/warp 100
149 CFM_CHECK_EXTENDED([p0], [1], [100], [up], [up], [300ms], [2], [up])
150 CFM_CHECK_EXTENDED([p1], [2], [100], [up], [up], [300ms], [1], [up])
151done
152
153OVS_VSWITCHD_STOP
154AT_CLEANUP
76c4290d 155
5767a79a
AW
156# test demand_rx_ccm under demand mode.
157AT_SETUP([cfm - demand_rx_ccm])
158#Create 2 bridges connected by patch ports and enable cfm
159OVS_VSWITCHD_START([add-br br1 -- \
160 set bridge br1 datapath-type=dummy \
161 other-config:hwaddr=aa:55:aa:56:00:00 -- \
162 add-port br1 p1 -- set Interface p1 type=patch \
163 options:peer=p0 ofport_request=2 -- \
164 add-port br0 p0 -- set Interface p0 type=patch \
165 options:peer=p1 ofport_request=1 -- \
166 set Interface p0 cfm_mpid=1 other_config:cfm_interval=300 other_config:cfm_extended=true other_config:cfm_demand=true -- \
167 set Interface p1 cfm_mpid=2 other_config:cfm_interval=300 other_config:cfm_extended=true other_config:cfm_demand=true])
168
169ovs-appctl time/stop
170# wait for a while to stablize cfm. (need a longer time, since in demand mode
171# the fault interval is (MAX(ccm_interval_ms, 500) * 3.5) ms)
8661af79 172ovs-appctl time/warp 20100 100
5767a79a
AW
173CFM_CHECK_EXTENDED([p0], [1], [100], [up], [up], [300ms], [2], [up])
174CFM_CHECK_EXTENDED([p1], [2], [100], [up], [up], [300ms], [1], [up])
175
176# turn off the cfm on p1.
177AT_CHECK([ovs-vsctl clear Interface p1 cfm_mpid])
178# cfm should never go down while receiving data packets.
179for i in `seq 0 200`
180do
181 ovs-appctl time/warp 100
6dd3c787 182 AT_CHECK([ovs-ofctl packet-out br1 "in_port=3 packet=90e2ba01475000101856b2e80806000108000604000100101856b2e80202020300000000000002020202 actions=2"],
5767a79a
AW
183 [0], [stdout], [])
184done
185CFM_CHECK_EXTENDED([p0], [1], [0], [up], [up], [300ms], [2], [up])
186
187# wait longer, since the demand_rx_ccm interval is 100 * 300 ms.
188# since there is no ccm received, the [recv] fault should be raised.
189for i in `seq 0 200`
190do
191 ovs-appctl time/warp 100
6dd3c787 192 AT_CHECK([ovs-ofctl packet-out br1 "in_port=3 packet=90e2ba01475000101856b2e80806000108000604000100101856b2e80202020300000000000002020202 actions=2"],
5767a79a
AW
193 [0], [stdout], [])
194done
195CFM_CHECK_EXTENDED_FAULT([p0], [1], [recv], [0], [up], [up], [300ms])
196
197# now turn on the cfm on p1 again,
198AT_CHECK([ovs-vsctl set Interface p1 cfm_mpid=2])
199# cfm should be up for both p0 and p1
8661af79 200ovs-appctl time/warp 20100 100
5767a79a
AW
201CFM_CHECK_EXTENDED([p0], [1], [100], [up], [up], [300ms], [2], [up])
202CFM_CHECK_EXTENDED([p1], [2], [100], [up], [up], [300ms], [1], [up])
203
204# now turn off the cfm on p1 again
205AT_CHECK([ovs-vsctl clear Interface p1 cfm_mpid])
206# since there is no ccm received, the [recv] fault should be raised.
207for i in `seq 0 400`
208do
209 ovs-appctl time/warp 100
6dd3c787 210 AT_CHECK([ovs-ofctl packet-out br1 "in_port=3 packet=90e2ba01475000101856b2e80806000108000604000100101856b2e80202020300000000000002020202 actions=2"],
5767a79a
AW
211 [0], [stdout], [])
212done
213CFM_CHECK_EXTENDED_FAULT([p0], [1], [recv], [0], [up], [up], [300ms])
214
215OVS_VSWITCHD_STOP
216AT_CLEANUP
217
76c4290d
AW
218# test cfm_flap_count.
219AT_SETUP([cfm - flap_count])
220#Create 2 bridges connected by patch ports and enable cfm
221OVS_VSWITCHD_START([add-br br1 -- \
222 set bridge br1 datapath-type=dummy \
223 other-config:hwaddr=aa:55:aa:56:00:00 -- \
224 add-port br1 p1 -- set Interface p1 type=patch \
225 options:peer=p0 -- \
226 add-port br0 p0 -- set Interface p0 type=patch \
227 options:peer=p1 -- \
228 set Interface p0 cfm_mpid=1 other_config:cfm_interval=100 other_config:cfm_extended=true -- \
229 set Interface p1 cfm_mpid=2 other_config:cfm_interval=100 other_config:cfm_extended=true])
230
231ovs-appctl time/stop
232
233# wait for a while to stablize cfm.
8661af79 234ovs-appctl time/warp 10100 100
76c4290d
AW
235CFM_CHECK_EXTENDED([p0], [1], [100], [up], [up], [100ms], [2], [up])
236CFM_CHECK_EXTENDED([p1], [2], [100], [up], [up], [100ms], [1], [up])
237
881d47a9 238# turn cfm on p1 off, should increment the cfm_flap_count on p0.
76c4290d 239AT_CHECK([ovs-vsctl remove interface p1 cfm_mpid 2])
8661af79 240ovs-appctl time/warp 1100 100
76c4290d
AW
241CFM_VSCTL_LIST_IFACE([p0], [cfm_flap_count], [cfm_flap_count : 1])
242CFM_VSCTL_LIST_IFACE([p1], [cfm_flap_count], [cfm_flap_count : [[]]])
243
881d47a9 244# turn cfm on p1 on again, should increment the cfm_flap_count on p0.
76c4290d 245AT_CHECK([ovs-vsctl set interface p1 cfm_mpid=2])
8661af79 246ovs-appctl time/warp 1100 100
76c4290d 247CFM_VSCTL_LIST_IFACE([p0], [cfm_flap_count], [cfm_flap_count : 2])
76c4290d 248
45ebaaf5
JS
249OVS_VSWITCHD_STOP
250AT_CLEANUP
251
252AT_SETUP([cfm - fault_override])
253OVS_VSWITCHD_START([add-br br1 -- \
254 set bridge br1 datapath-type=dummy \
255 other-config:hwaddr=aa:55:aa:56:00:00 -- \
256 add-port br1 p1 -- set Interface p1 type=patch \
257 options:peer=p0 -- \
258 add-port br0 p0 -- set Interface p0 type=patch \
259 options:peer=p1 -- \
260 set Interface p0 cfm_mpid=1 other_config:cfm_interval=100 other_config:cfm_extended=true -- \
261 set Interface p1 cfm_mpid=2 other_config:cfm_interval=100 other_config:cfm_extended=true])
262
263ovs-appctl time/stop
264# wait for a while to stablize cfm.
8661af79 265ovs-appctl time/warp 10100 100
45ebaaf5
JS
266CFM_CHECK_EXTENDED([p0], [1], [100], [up], [up], [100ms], [2], [up])
267CFM_CHECK_EXTENDED([p1], [2], [100], [up], [up], [100ms], [1], [up])
268AT_CHECK([ovs-appctl cfm/show p1 | grep 'fault_override'], [1], [ignore])
269CFM_VSCTL_LIST_IFACE([p1], [cfm_fault_status], [cfm_fault_status : [[]]])
270
271# set a fault and see that this is shown in the CFM module and the database
272AT_CHECK([ovs-appctl cfm/set-fault p1 true], [0], [OK
273])
274AT_CHECK([ovs-appctl time/warp 100], [0], [ignore])
275AT_CHECK([ovs-appctl cfm/show p1 | grep 'fault_override' | sed -e 's/MPID [[0-9]]*: extended //'], [0], [dnl
276fault_override
277])
278CFM_VSCTL_LIST_IFACE([p1], [cfm_fault_status], [cfm_fault_status : [[override]]])
279
280# reset and see that it returned to normal
281AT_CHECK([ovs-appctl cfm/set-fault normal], [0], [OK
282])
283AT_CHECK([ovs-appctl time/warp 100], [0], [ignore])
284AT_CHECK([ovs-appctl cfm/show p1 | grep 'fault_override'], [1], [ignore])
285CFM_VSCTL_LIST_IFACE([p1], [cfm_fault_status], [cfm_fault_status : [[]]])
286
76c4290d 287OVS_VSWITCHD_STOP
8661af79 288AT_CLEANUP
67818616
MV
289
290AT_SETUP([cfm - check that CFM works together with RSTP])
291# Create br0 with interfaces p1
292# and br1 with interfaces p2
293# with p1 and p2 connected via unix domain socket
294OVS_VSWITCHD_START(
295 [set bridge br0 rstp_enable=true -- \
296 add-br br1 -- \
297 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
298 set bridge br1 datapath-type=dummy -- \
299 set bridge br1 rstp_enable=true -- \
300])
301
302AT_CHECK([ovs-vsctl add-port br0 p0 -- \
303 set interface p0 type=dummy options:pstream=punix:$OVS_RUNDIR/p0.sock cfm_mpid=1 other_config:cfm_interval=300 other_config:cfm_extended=true -- \
304])
305
306AT_CHECK([ovs-vsctl add-port br1 p1 -- \
307 set interface p1 type=dummy options:stream=unix:$OVS_RUNDIR/p0.sock cfm_mpid=2 other_config:cfm_interval=300 other_config:cfm_extended=true -- \
308])
309
310ovs-appctl time/stop
311ovs-appctl time/warp 10100 100
312
313# Forwarding should be true
314CFM_CHECK_EXTENDED([p0], [1], [100], [up], [up], [300ms], [2], [up])
315CFM_CHECK_EXTENDED([p1], [2], [100], [up], [up], [300ms], [1], [up])
316
317# Disable cfm on p1, cfm should receive fault.
318AT_CHECK([ovs-vsctl set interface p1 other_config:cfm_extended=false])
319
320ovs-appctl time/warp 5000 100
321CFM_CHECK_EXTENDED_FAULT([p0], [1], [recv], [0], [up], [up], [300ms])
322
323OVS_VSWITCHD_STOP
324AT_CLEANUP
f73b83fd
LS
325
326# test cfm liveness propagation - OF1.3.
327AT_SETUP([cfm - liveness propagation - OF1.3])
328OVS_VSWITCHD_START
329AT_CHECK([ovs-ofctl -O OpenFlow13 -P standard monitor br0 --detach --no-chdir --pidfile])
330check_liveness () {
331 printf '\n\n--- check_liveness %d ---\n\n\n' $1
332 shift
333
5a0e4aec 334 echo >>expout "OFPT_PORT_STATUS (OF1.3): MOD: 1(p0): addr:
f73b83fd
LS
335 config: 0
336 state: $1
337 speed: 0 Mbps now, 0 Mbps max"
338
5a0e4aec 339 AT_CHECK(
f73b83fd
LS
340 [[sed '
341s/ (xid=0x[0-9a-fA-F]*)//
342s/ *duration.*//
343s/addr:[0-9a-fA-F:]*/addr:/' < monitor.log|grep -A3 "MOD: 1(p0)"|grep -ve --]],
344 [0], [expout])
345}
346: > expout
347ovs-appctl -t ovs-ofctl ofctl/barrier
348ovs-appctl -t ovs-ofctl ofctl/set-output-file monitor.log
349# Set miss_send_len to 128, enabling port_status messages to our service connection.
350ovs-appctl -t ovs-ofctl ofctl/send 0409000c0123456700000080
351
352#Create 2 bridges connected by patch ports and enable cfm
353AT_CHECK([ovs-vsctl add-br br1 -- \
354 set bridge br1 datapath-type=dummy \
355 other-config:hwaddr=aa:55:aa:56:00:00 -- \
356 add-port br1 p1 -- set Interface p1 type=patch \
357 options:peer=p0 -- \
358 add-port br0 p0 -- set Interface p0 type=patch \
359 options:peer=p1])
360check_liveness 1 LIVE
361
362AT_CHECK([ovs-vsctl \
363 set Interface p0 cfm_mpid=1 other_config:cfm_interval=100 other_config:cfm_extended=true -- \
364 set Interface p1 cfm_mpid=2 other_config:cfm_interval=100 other_config:cfm_extended=true])
365ovs-appctl time/stop
366# wait for a while to stablize cfm.
367ovs-appctl time/warp 10100 100
368CFM_CHECK_EXTENDED([p0], [1], [100], [up], [up], [100ms], [2], [up])
369CFM_CHECK_EXTENDED([p1], [2], [100], [up], [up], [100ms], [1], [up])
370
371# turn cfm on p1 off, should increment the cfm_flap_count on p0.
372AT_CHECK([ovs-vsctl remove interface p1 cfm_mpid 2])
373ovs-appctl time/warp 1100 100
374CFM_VSCTL_LIST_IFACE([p0], [cfm_flap_count], [cfm_flap_count : 1])
375CFM_VSCTL_LIST_IFACE([p1], [cfm_flap_count], [cfm_flap_count : [[]]])
376check_liveness 2 0
377
378# turn cfm on p1 on again, should increment the cfm_flap_count on p0.
379AT_CHECK([ovs-vsctl set interface p1 cfm_mpid=2])
380ovs-appctl time/warp 1100 100
381check_liveness 3 LIVE
382
383CFM_VSCTL_LIST_IFACE([p0], [cfm_flap_count], [cfm_flap_count : 2])
384
385OVS_VSWITCHD_STOP
386AT_CLEANUP
387
388# test cfm liveness propagation - OF1.4.
389AT_SETUP([cfm - liveness propagation - OF1.4])
390OVS_VSWITCHD_START
391AT_CHECK([ovs-ofctl -O OpenFlow14 -P standard monitor br0 --detach --no-chdir --pidfile])
392check_liveness () {
393 printf '\n\n--- check_liveness %d ---\n\n\n' $1
394 shift
395
5a0e4aec 396 echo >>expout "OFPT_PORT_STATUS (OF1.4): MOD: 1(p0): addr:
f73b83fd
LS
397 config: 0
398 state: $1
399 speed: 0 Mbps now, 0 Mbps max"
400
5a0e4aec 401 AT_CHECK(
f73b83fd
LS
402 [[sed '
403s/ (xid=0x[0-9a-fA-F]*)//
404s/ *duration.*//
405s/addr:[0-9a-fA-F:]*/addr:/' < monitor.log|grep -A3 "MOD: 1(p0)"|grep -ve --]],
406 [0], [expout])
407}
408: > expout
409ovs-appctl -t ovs-ofctl ofctl/barrier
410ovs-appctl -t ovs-ofctl ofctl/set-output-file monitor.log
411# Set miss_send_len to 128, enabling port_status messages to our service connection.
412ovs-appctl -t ovs-ofctl ofctl/send 0509000c0123456700000080
413
414#Create 2 bridges connected by patch ports and enable cfm
415AT_CHECK([ovs-vsctl add-br br1 -- \
416 set bridge br1 datapath-type=dummy \
417 other-config:hwaddr=aa:55:aa:56:00:00 -- \
418 add-port br1 p1 -- set Interface p1 type=patch \
419 options:peer=p0 -- \
420 add-port br0 p0 -- set Interface p0 type=patch \
421 options:peer=p1])
422check_liveness 1 LIVE
423
424AT_CHECK([ovs-vsctl \
425 set Interface p0 cfm_mpid=1 other_config:cfm_interval=100 other_config:cfm_extended=true -- \
426 set Interface p1 cfm_mpid=2 other_config:cfm_interval=100 other_config:cfm_extended=true])
427ovs-appctl time/stop
428# wait for a while to stablize cfm.
429ovs-appctl time/warp 10100 100
430CFM_CHECK_EXTENDED([p0], [1], [100], [up], [up], [100ms], [2], [up])
431CFM_CHECK_EXTENDED([p1], [2], [100], [up], [up], [100ms], [1], [up])
432
433# turn cfm on p1 off, should increment the cfm_flap_count on p0.
434AT_CHECK([ovs-vsctl remove interface p1 cfm_mpid 2])
435ovs-appctl time/warp 1100 100
436CFM_VSCTL_LIST_IFACE([p0], [cfm_flap_count], [cfm_flap_count : 1])
437CFM_VSCTL_LIST_IFACE([p1], [cfm_flap_count], [cfm_flap_count : [[]]])
438check_liveness 2 0
439
440# turn cfm on p1 on again, should increment the cfm_flap_count on p0.
441AT_CHECK([ovs-vsctl set interface p1 cfm_mpid=2])
442ovs-appctl time/warp 1100 100
443check_liveness 3 LIVE
444
445CFM_VSCTL_LIST_IFACE([p0], [cfm_flap_count], [cfm_flap_count : 2])
446
447OVS_VSWITCHD_STOP
448AT_CLEANUP
449
450# test cfm liveness propagation - OF1.5.
451AT_SETUP([cfm - liveness propagation - OF1.5])
452OVS_VSWITCHD_START
453AT_CHECK([ovs-ofctl -O OpenFlow15 -P standard monitor br0 --detach --no-chdir --pidfile])
454check_liveness () {
455 printf '\n\n--- check_liveness %d ---\n\n\n' $1
456 shift
457
5a0e4aec 458 echo >>expout "OFPT_PORT_STATUS (OF1.5): MOD: 1(p0): addr:
f73b83fd
LS
459 config: 0
460 state: $1
461 speed: 0 Mbps now, 0 Mbps max"
462
5a0e4aec 463 AT_CHECK(
f73b83fd
LS
464 [[sed '
465s/ (xid=0x[0-9a-fA-F]*)//
466s/ *duration.*//
467s/addr:[0-9a-fA-F:]*/addr:/' < monitor.log|grep -A3 "MOD: 1(p0)"|grep -ve --]],
468 [0], [expout])
469}
470: > expout
471ovs-appctl -t ovs-ofctl ofctl/barrier
472ovs-appctl -t ovs-ofctl ofctl/set-output-file monitor.log
473# Set miss_send_len to 128, enabling port_status messages to our service connection.
474ovs-appctl -t ovs-ofctl ofctl/send 0609000c0123456700000080
475
476#Create 2 bridges connected by patch ports and enable cfm
477AT_CHECK([ovs-vsctl add-br br1 -- \
478 set bridge br1 datapath-type=dummy \
479 other-config:hwaddr=aa:55:aa:56:00:00 -- \
480 add-port br1 p1 -- set Interface p1 type=patch \
481 options:peer=p0 -- \
482 add-port br0 p0 -- set Interface p0 type=patch \
483 options:peer=p1])
484check_liveness 1 LIVE
485
486AT_CHECK([ovs-vsctl \
487 set Interface p0 cfm_mpid=1 other_config:cfm_interval=100 other_config:cfm_extended=true -- \
488 set Interface p1 cfm_mpid=2 other_config:cfm_interval=100 other_config:cfm_extended=true])
489ovs-appctl time/stop
490# wait for a while to stablize cfm.
491ovs-appctl time/warp 10100 100
492CFM_CHECK_EXTENDED([p0], [1], [100], [up], [up], [100ms], [2], [up])
493CFM_CHECK_EXTENDED([p1], [2], [100], [up], [up], [100ms], [1], [up])
494
495# turn cfm on p1 off, should increment the cfm_flap_count on p0.
496AT_CHECK([ovs-vsctl remove interface p1 cfm_mpid 2])
497ovs-appctl time/warp 1100 100
498CFM_VSCTL_LIST_IFACE([p0], [cfm_flap_count], [cfm_flap_count : 1])
499CFM_VSCTL_LIST_IFACE([p1], [cfm_flap_count], [cfm_flap_count : [[]]])
500check_liveness 2 0
501
502# turn cfm on p1 on again, should increment the cfm_flap_count on p0.
503AT_CHECK([ovs-vsctl set interface p1 cfm_mpid=2])
504ovs-appctl time/warp 1100 100
505check_liveness 3 LIVE
506
507CFM_VSCTL_LIST_IFACE([p0], [cfm_flap_count], [cfm_flap_count : 2])
508
509OVS_VSWITCHD_STOP
510AT_CLEANUP