3 m4_define([CFM_CHECK_EXTENDED], [
4 AT_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],
17 m4_define([CFM_VSCTL_LIST_IFACE], [
18 AT_CHECK([ovs-vsctl list interface $1 | sed -n '/$2/p'],[0],
24 # test cfm under demand mode.
25 AT_SETUP([cfm - demand mode])
26 #Create 2 bridges connected by patch ports and enable cfm
27 OVS_VSWITCHD_START([add-br br1 -- \
28 set bridge br1 datapath-type=dummy \
29 other-config:hwaddr=aa:55:aa:56:00:00 -- \
30 add-port br1 p1 -- set Interface p1 type=patch \
32 add-port br0 p0 -- set Interface p0 type=patch \
34 set Interface p0 cfm_mpid=1 other_config:cfm_interval=300 other_config:cfm_extended=true -- \
35 set Interface p1 cfm_mpid=2 other_config:cfm_interval=300 other_config:cfm_extended=true ])
38 # wait for a while to stablize cfm.
39 for i in `seq 0 100`; do ovs-appctl time/warp 100; done
40 CFM_CHECK_EXTENDED([p0], [1], [100], [up], [up], [300ms], [2], [up])
41 CFM_CHECK_EXTENDED([p1], [2], [100], [up], [up], [300ms], [1], [up])
43 # turn on demand mode on one end.
44 AT_CHECK([ovs-vsctl set interface p0 other_config:cfm_demand=true])
46 # cfm should never go down.
49 ovs-appctl time/warp 100
50 CFM_CHECK_EXTENDED([p0], [1], [100], [up], [up], [300ms], [2], [up])
51 CFM_CHECK_EXTENDED([p1], [2], [100], [up], [up], [300ms], [1], [up])
54 # turn on demand mode on the other end.
55 AT_CHECK([ovs-vsctl set interface p1 other_config:cfm_demand=true])
58 ovs-appctl time/warp 100
59 CFM_CHECK_EXTENDED([p0], [1], [100], [up], [up], [300ms], [2], [up])
60 CFM_CHECK_EXTENDED([p1], [2], [100], [up], [up], [300ms], [1], [up])
66 # test cfm_flap_count.
67 AT_SETUP([cfm - flap_count])
68 #Create 2 bridges connected by patch ports and enable cfm
69 OVS_VSWITCHD_START([add-br br1 -- \
70 set bridge br1 datapath-type=dummy \
71 other-config:hwaddr=aa:55:aa:56:00:00 -- \
72 add-port br1 p1 -- set Interface p1 type=patch \
74 add-port br0 p0 -- set Interface p0 type=patch \
76 set Interface p0 cfm_mpid=1 other_config:cfm_interval=100 other_config:cfm_extended=true -- \
77 set Interface p1 cfm_mpid=2 other_config:cfm_interval=100 other_config:cfm_extended=true])
81 # wait for a while to stablize cfm.
82 for i in `seq 0 100`; do ovs-appctl time/warp 100; done
83 CFM_CHECK_EXTENDED([p0], [1], [100], [up], [up], [100ms], [2], [up])
84 CFM_CHECK_EXTENDED([p1], [2], [100], [up], [up], [100ms], [1], [up])
86 # turn cfm on p1 off, should increment the cfm_flap_count on p0.
87 AT_CHECK([ovs-vsctl remove interface p1 cfm_mpid 2])
88 for i in `seq 0 10`; do ovs-appctl time/warp 100; done
89 CFM_VSCTL_LIST_IFACE([p0], [cfm_flap_count], [cfm_flap_count : 1])
90 CFM_VSCTL_LIST_IFACE([p1], [cfm_flap_count], [cfm_flap_count : [[]]])
92 # turn cfm on p1 on again, should increment the cfm_flap_count on p0.
93 AT_CHECK([ovs-vsctl set interface p1 cfm_mpid=2])
94 for i in `seq 0 10`; do ovs-appctl time/warp 100; done
95 CFM_VSCTL_LIST_IFACE([p0], [cfm_flap_count], [cfm_flap_count : 2])
100 AT_SETUP([cfm - fault_override])
101 OVS_VSWITCHD_START([add-br br1 -- \
102 set bridge br1 datapath-type=dummy \
103 other-config:hwaddr=aa:55:aa:56:00:00 -- \
104 add-port br1 p1 -- set Interface p1 type=patch \
106 add-port br0 p0 -- set Interface p0 type=patch \
108 set Interface p0 cfm_mpid=1 other_config:cfm_interval=100 other_config:cfm_extended=true -- \
109 set Interface p1 cfm_mpid=2 other_config:cfm_interval=100 other_config:cfm_extended=true])
112 # wait for a while to stablize cfm.
113 for i in `seq 0 100`; do ovs-appctl time/warp 100; done
114 CFM_CHECK_EXTENDED([p0], [1], [100], [up], [up], [100ms], [2], [up])
115 CFM_CHECK_EXTENDED([p1], [2], [100], [up], [up], [100ms], [1], [up])
116 AT_CHECK([ovs-appctl cfm/show p1 | grep 'fault_override'], [1], [ignore])
117 CFM_VSCTL_LIST_IFACE([p1], [cfm_fault_status], [cfm_fault_status : [[]]])
119 # set a fault and see that this is shown in the CFM module and the database
120 AT_CHECK([ovs-appctl cfm/set-fault p1 true], [0], [OK
122 AT_CHECK([ovs-appctl time/warp 100], [0], [ignore])
123 AT_CHECK([ovs-appctl cfm/show p1 | grep 'fault_override' | sed -e 's/MPID [[0-9]]*: extended //'], [0], [dnl
126 CFM_VSCTL_LIST_IFACE([p1], [cfm_fault_status], [cfm_fault_status : [[override]]])
128 # reset and see that it returned to normal
129 AT_CHECK([ovs-appctl cfm/set-fault normal], [0], [OK
131 AT_CHECK([ovs-appctl time/warp 100], [0], [ignore])
132 AT_CHECK([ovs-appctl cfm/show p1 | grep 'fault_override'], [1], [ignore])
133 CFM_VSCTL_LIST_IFACE([p1], [cfm_fault_status], [cfm_fault_status : [[]]])