]>
Commit | Line | Data |
---|---|---|
00db2a60 | 1 | AT_BANNER([ovn_controller_vtep]) |
0c1e8a7d AW |
2 | |
3 | # OVN_CONTROLLER_VTEP_START | |
4 | # | |
8af0b1b6 AW |
5 | # Starts the test with a setup with vtep device. Each test case must first |
6 | # call this macro. | |
0c1e8a7d AW |
7 | # |
8 | # Uses vtep-ovs to simulate the vtep switch 'br-vtep' with two physical ports | |
9 | # 'p0', 'p1'. | |
10 | # | |
11 | # Configures ovn-nb with a logical switch 'br-test'. | |
12 | # | |
13 | # | |
14 | m4_define([OVN_CONTROLLER_VTEP_START], | |
8af0b1b6 | 15 | [ |
dfef14ee | 16 | AT_KEYWORDS([ovn]) |
8af0b1b6 AW |
17 | # this will cause skip when 'make check' using Windows setup. |
18 | AT_SKIP_IF([test $HAVE_PYTHON = no]) | |
19 | ||
0c1e8a7d AW |
20 | dnl Create databases (ovn-nb, ovn-sb, vtep). |
21 | AT_CHECK([ovsdb-tool create vswitchd.db $abs_top_srcdir/vswitchd/vswitch.ovsschema]) | |
22 | for daemon in ovn-nb ovn-sb vtep; do | |
23 | AT_CHECK([ovsdb-tool create $daemon.db $abs_top_srcdir/${daemon%%-*}/${daemon}.ovsschema]) | |
24 | done | |
25 | ||
26 | dnl Start ovsdb-server. | |
56120500 BP |
27 | AT_CHECK([ovsdb-server --detach --no-chdir --pidfile --log-file --remote=punix:$OVS_RUNDIR/db.sock vswitchd.db vtep.db], [0], [], [stderr]) |
28 | AT_CHECK([ovsdb-server --detach --no-chdir --pidfile=ovsdb-nb-server.pid --log-file=ovsdb-nb-server.log --remote=punix:$OVS_RUNDIR/ovnnb_db.sock ovn-nb.db], [0], [], [stderr]) | |
29 | AT_CHECK([ovsdb-server --detach --no-chdir --pidfile=ovsdb-sb-server.pid --log-file=ovsdb-sb-server.log --remote=punix:$OVS_RUNDIR/ovnsb_db.sock ovn-sb.db ovn-sb.db], [0], [], [stderr]) | |
60bdd011 | 30 | on_exit "kill `cat ovsdb-server.pid` `cat ovsdb-nb-server.pid` `cat ovsdb-sb-server.pid`" |
0c1e8a7d AW |
31 | AT_CHECK([[sed < stderr ' |
32 | /vlog|INFO|opened log file/d | |
33 | /ovsdb_server|INFO|ovsdb-server (Open vSwitch)/d']]) | |
34 | AT_CAPTURE_FILE([ovsdb-server.log]) | |
35 | ||
36 | dnl Start ovs-vswitchd. | |
7157b6d3 | 37 | AT_CHECK([ovs-vswitchd --enable-dummy=system --disable-system --detach --no-chdir --pidfile --log-file -vvconn -vofproto_dpif], [0], [], [stderr]) |
0c1e8a7d | 38 | AT_CAPTURE_FILE([ovs-vswitchd.log]) |
53eb8cb8 | 39 | on_exit "kill `cat ovs-vswitchd.pid`" |
0c1e8a7d AW |
40 | AT_CHECK([[sed < stderr ' |
41 | /ovs_numa|INFO|Discovered /d | |
42 | /vlog|INFO|opened log file/d | |
43 | /vswitchd|INFO|ovs-vswitchd (Open vSwitch)/d | |
44 | /reconnect|INFO|/d | |
45 | /ofproto|INFO|using datapath ID/d | |
cf114a7f | 46 | /netlink_socket|INFO|netlink: could not enable listening to all nsid/d |
0c1e8a7d AW |
47 | /ofproto|INFO|datapath ID changed to fedcba9876543210/d']]) |
48 | AT_CHECK([ovs-vsctl -- add-br br-vtep \ | |
49 | -- set bridge br-vtep datapath-type=dummy other-config:datapath-id=fedcba9876543210 other-config:hwaddr=aa:55:aa:55:00:00 protocols=[[OpenFlow10,OpenFlow11,OpenFlow12,OpenFlow13,OpenFlow14,OpenFlow15]] fail-mode=secure \ | |
50 | -- add-port br-vtep p0 -- set Interface p0 type=dummy ofport_request=1 \ | |
51 | -- add-port br-vtep p1 -- set Interface p1 type=dummy ofport_request=2]) | |
52 | ||
53 | dnl Start ovs-vtep. | |
54 | AT_CHECK([vtep-ctl add-ps br-vtep -- set Physical_Switch br-vtep tunnel_ips=1.2.3.4]) | |
55 | AT_CHECK([ovs-vtep --log-file=ovs-vtep.log --pidfile=ovs-vtep.pid --detach br-vtep \], [0], [], [stderr]) | |
53eb8cb8 | 56 | on_exit "kill `cat ovs-vtep.pid`" |
0c1e8a7d AW |
57 | AT_CHECK([[sed < stderr ' |
58 | /vlog|INFO|opened log file/d']]) | |
59 | # waits until ovs-vtep starts up. | |
60 | OVS_WAIT_UNTIL([test -n "`vtep-ctl show | grep Physical_Port`"]) | |
61 | ||
62 | dnl Start ovn-northd. | |
ea46a4e9 | 63 | AT_CHECK([ovn-nbctl ls-add br-test]) |
60bdd011 | 64 | AT_CHECK([ovn-northd --detach --pidfile --log-file], [0], [], [stderr]) |
53eb8cb8 | 65 | on_exit "kill `cat ovn-northd.pid`" |
0c1e8a7d AW |
66 | AT_CHECK([[sed < stderr ' |
67 | /vlog|INFO|opened log file/d']]) | |
68 | AT_CAPTURE_FILE([ovn-northd.log]) | |
69 | ||
70 | dnl Start ovn-controllger-vtep. | |
60bdd011 | 71 | AT_CHECK([ovn-controller-vtep --detach --pidfile --log-file --vtep-db=unix:$OVS_RUNDIR/db.sock --ovnsb-db=unix:$OVS_RUNDIR/ovnsb_db.sock], [0], [], [stderr]) |
0c1e8a7d | 72 | AT_CAPTURE_FILE([ovn-controller-vtep.log]) |
53eb8cb8 | 73 | on_exit "kill `cat ovn-controller-vtep.pid`" |
0c1e8a7d AW |
74 | AT_CHECK([[sed < stderr ' |
75 | /vlog|INFO|opened log file/d | |
76 | /reconnect|INFO|/d']]) | |
77 | ]) | |
78 | ||
79 | # OVN_CONTROLLER_VTEP_STOP | |
80 | # | |
81 | # So many exits... Yeah, we started a lot daemons~ | |
82 | # | |
83 | m4_define([OVN_CONTROLLER_VTEP_STOP], | |
f0e65e67 | 84 | [AT_CHECK([check_logs "$1"]) |
d9c8c57c LR |
85 | OVS_APP_EXIT_AND_WAIT([ovs-vtep]) |
86 | OVS_APP_EXIT_AND_WAIT([ovn-northd]) | |
87 | OVS_APP_EXIT_AND_WAIT([ovn-controller-vtep]) | |
88 | OVS_APP_EXIT_AND_WAIT([ovsdb-server]) | |
89 | OVS_APP_EXIT_AND_WAIT([ovs-vswitchd])]) | |
0c1e8a7d | 90 | |
6228d33f AW |
91 | # Adds logical port for a vtep gateway chassis in ovn-nb database. |
92 | # | |
93 | # $1: logical switch name in ovn-nb database | |
94 | # $2: logical port name | |
95 | # $3: physical vtep gateway name | |
96 | # $4: logical switch name on vtep gateway chassis | |
97 | m4_define([OVN_NB_ADD_VTEP_PORT], [ | |
31ed1192 | 98 | AT_CHECK([ovn-nbctl lsp-add $1 $2]) |
60bdd011 | 99 | |
31ed1192 JP |
100 | AT_CHECK([ovn-nbctl lsp-set-type $2 vtep]) |
101 | AT_CHECK([ovn-nbctl lsp-set-options $2 vtep-physical-switch=$3 vtep-logical-switch=$4]) | |
6228d33f | 102 | ]) |
0c1e8a7d | 103 | |
6228d33f | 104 | ############################################## |
0c1e8a7d AW |
105 | |
106 | # tests chassis related updates. | |
1cece4ad | 107 | AT_SETUP([ovn-controller-vtep - chassis]) |
0c1e8a7d AW |
108 | OVN_CONTROLLER_VTEP_START |
109 | ||
110 | # verifies the initial ovn-sb db configuration. | |
eb95259d | 111 | OVS_WAIT_UNTIL([test -n "`ovn-sbctl show | grep Chassis`"]) |
0c1e8a7d AW |
112 | AT_CHECK([ovn-sbctl show], [0], [dnl |
113 | Chassis br-vtep | |
114 | Encap vxlan | |
115 | ip: "1.2.3.4" | |
36283d78 | 116 | options: {csum="false"} |
0c1e8a7d AW |
117 | ]) |
118 | ||
119 | # deletes the chassis via ovn-sbctl and check that it is readded back | |
120 | # with the log. | |
121 | AT_CHECK([ovn-sbctl chassis-del br-vtep]) | |
122 | OVS_WAIT_UNTIL([test -n "`grep WARN ovn-controller-vtep.log`"]) | |
123 | AT_CHECK([sed -n 's/^.*\(|WARN|.*\)$/\1/p' ovn-controller-vtep.log], [0], [dnl | |
124 | |WARN|Chassis for VTEP physical switch (br-vtep) disappears, maybe deleted by ovn-sbctl, adding it back | |
125 | ]) | |
126 | ||
127 | # changes the tunnel_ip on physical switch, watches the update of chassis's | |
128 | # encap. | |
129 | AT_CHECK([vtep-ctl set Physical_Switch br-vtep tunnel_ips=1.2.3.5]) | |
130 | OVS_WAIT_UNTIL([test -n "`ovn-sbctl show | grep 1\.2\.3\.5`"]) | |
131 | AT_CHECK([ovn-sbctl --columns=ip list Encap | cut -d ':' -f2 | tr -d ' '], [0], [dnl | |
132 | "1.2.3.5" | |
133 | ]) | |
134 | ||
135 | # adds vlan_bindings to physical ports. | |
136 | AT_CHECK([vtep-ctl add-ls lswitch0 -- bind-ls br-vtep p0 100 lswitch0 -- bind-ls br-vtep p0 200 lswitch0 -- bind-ls br-vtep p1 300 lswitch0]) | |
137 | OVS_WAIT_UNTIL([test -n "`ovn-sbctl list Chassis | grep -- lswitch0`"]) | |
138 | AT_CHECK([ovn-sbctl --columns=vtep_logical_switches list Chassis | cut -d ':' -f2 | tr -d ' ' ], [0], [dnl | |
139 | [["lswitch0"]] | |
140 | ]) | |
141 | ||
142 | # adds another logical switch and new vlan_bindings. | |
143 | AT_CHECK([vtep-ctl add-ls lswitch1 -- bind-ls br-vtep p0 300 lswitch1]) | |
144 | OVS_WAIT_UNTIL([test -n "`ovn-sbctl list Chassis | grep -- lswitch1`"]) | |
145 | AT_CHECK([ovn-sbctl --columns=vtep_logical_switches list Chassis | cut -d ':' -f2 | tr -d ' '], [0], [dnl | |
146 | [["lswitch0","lswitch1"]] | |
147 | ]) | |
148 | ||
149 | # unbinds one port from lswitch0, nothing should change. | |
150 | AT_CHECK([vtep-ctl unbind-ls br-vtep p0 200]) | |
a2635ac0 | 151 | OVS_WAIT_UNTIL([test -z "`vtep-ctl --columns=vlan_bindings list physical_port p0 | grep -- '200='`"]) |
0c1e8a7d AW |
152 | AT_CHECK([ovn-sbctl --columns=vtep_logical_switches list Chassis | cut -d ':' -f2 | tr -d ' ' ], [0], [dnl |
153 | [["lswitch0","lswitch1"]] | |
154 | ]) | |
155 | ||
156 | # unbinds all ports from lswitch0. | |
157 | AT_CHECK([vtep-ctl unbind-ls br-vtep p0 100 -- unbind-ls br-vtep p1 300]) | |
158 | OVS_WAIT_UNTIL([test -z "`ovn-sbctl list Chassis | grep -- br-vtep_lswitch0`"]) | |
159 | AT_CHECK([ovn-sbctl --columns=vtep_logical_switches list Chassis | cut -d ':' -f2 | tr -d ' ' ], [0], [dnl | |
160 | [["lswitch1"]] | |
161 | ]) | |
162 | ||
163 | # unbinds all ports from lswitch1. | |
164 | AT_CHECK([vtep-ctl unbind-ls br-vtep p0 300]) | |
165 | OVS_WAIT_UNTIL([test -z "`ovn-sbctl list Chassis | grep -- br-vtep_lswitch1`"]) | |
166 | AT_CHECK([ovn-sbctl --columns=vtep_logical_switches list Chassis | cut -d ':' -f2 | tr -d ' '], [0], [dnl | |
167 | [[]] | |
168 | ]) | |
169 | ||
d3292ddf | 170 | OVN_CONTROLLER_VTEP_STOP([/Chassis for VTEP physical switch (br-vtep) disappears/d]) |
0c1e8a7d | 171 | AT_CLEANUP |
6228d33f AW |
172 | |
173 | ||
174 | # Tests binding updates. | |
1cece4ad | 175 | AT_SETUP([ovn-controller-vtep - binding 1]) |
6228d33f AW |
176 | OVN_CONTROLLER_VTEP_START |
177 | ||
178 | # adds logical switch 'lswitch0' and vlan_bindings. | |
179 | AT_CHECK([vtep-ctl add-ls lswitch0 -- bind-ls br-vtep p0 100 lswitch0 -- bind-ls br-vtep p1 300 lswitch0]) | |
80f408f4 | 180 | # adds logical switch port in ovn-nb database, and sets the type and options. |
6228d33f | 181 | OVN_NB_ADD_VTEP_PORT([br-test], [br-vtep_lswitch0], [br-vtep], [lswitch0]) |
8263474e | 182 | ovn-sbctl --timeout=10 wait-until Port_Binding br-vtep_lswitch0 chassis!='[[]]' |
6228d33f AW |
183 | # should see one binding, associated to chassis of 'br-vtep'. |
184 | chassis_uuid=$(ovn-sbctl --columns=_uuid list Chassis br-vtep | cut -d ':' -f2 | tr -d ' ') | |
185 | AT_CHECK_UNQUOTED([ovn-sbctl --columns=chassis list Port_Binding br-vtep_lswitch0 | cut -d ':' -f2 | tr -d ' '], [0], [dnl | |
186 | ${chassis_uuid} | |
187 | ]) | |
188 | ||
189 | # adds another logical switch 'lswitch1' and vlan_bindings. | |
190 | AT_CHECK([vtep-ctl add-ls lswitch1 -- bind-ls br-vtep p0 200 lswitch1]) | |
80f408f4 | 191 | # adds logical switch port in ovn-nb database for lswitch1. |
6228d33f | 192 | OVN_NB_ADD_VTEP_PORT([br-test], [br-vtep_lswitch1], [br-vtep], [lswitch1]) |
8263474e | 193 | ovn-sbctl --timeout=10 wait-until Port_Binding br-vtep_lswitch1 chassis!='[[]]' |
6228d33f AW |
194 | # This is allowed, but not recommended, to have two vlan_bindings (to different vtep logical switches) |
195 | # from one vtep gateway physical port in one ovn-nb logical swithch. | |
7e04dd85 | 196 | AT_CHECK_UNQUOTED([ovn-sbctl --columns=chassis list Port_Binding | cut -d ':' -f2 | tr -d ' ' | sort], [0], [dnl |
6228d33f AW |
197 | |
198 | ${chassis_uuid} | |
199 | ${chassis_uuid} | |
200 | ]) | |
201 | ||
80f408f4 | 202 | # adds another logical switch port in ovn-nb database for lswitch0. |
6228d33f | 203 | OVN_NB_ADD_VTEP_PORT([br-test], [br-vtep_lswitch0_dup], [br-vtep], [lswitch0]) |
8263474e | 204 | ovn-sbctl --timeout=10 wait-until Port_Binding br-vtep_lswitch0_dup chassis!='[[]]' |
6228d33f AW |
205 | # it is not allowed to have more than one ovn-nb logical port for the same |
206 | # vtep logical switch on a vtep gateway chassis, so should still see only | |
207 | # two port_binding entries bound. | |
7e04dd85 | 208 | AT_CHECK_UNQUOTED([ovn-sbctl --columns=chassis list Port_Binding | cut -d ':' -f2 | tr -d ' ' | sort | sort -d], [0], [dnl |
6228d33f AW |
209 | |
210 | ||
211 | [[]] | |
212 | ${chassis_uuid} | |
213 | ${chassis_uuid} | |
214 | ]) | |
215 | # confirms the warning log. | |
216 | AT_CHECK([sed -n 's/^.*\(|WARN|.*\)$/\1/p' ovn-controller-vtep.log | sed 's/([[-_0-9a-z]][[-_0-9a-z]]*)/()/g' | uniq], [0], [dnl | |
217 | |WARN|logical switch (), on vtep gateway chassis () has already been associated with logical port (), ignore logical port () | |
218 | ]) | |
219 | ||
220 | # deletes physical ports from vtep. | |
221 | AT_CHECK([ovs-vsctl del-port p0 -- del-port p1]) | |
6228d33f | 222 | OVS_WAIT_UNTIL([test -z "`ovn-sbctl list Chassis | grep -- br-vtep_lswitch`"]) |
35cfa388 LR |
223 | OVS_WAIT_UNTIL([test -z "`vtep-ctl list physical_port p0`"]) |
224 | OVS_WAIT_UNTIL([test -z "`vtep-ctl list physical_port p1`"]) | |
6228d33f AW |
225 | # should see empty chassis column in both binding entries. |
226 | AT_CHECK_UNQUOTED([ovn-sbctl --columns=chassis list Port_Binding | cut -d ':' -f2 | tr -d ' ' | sort], [0], [dnl | |
227 | ||
228 | ||
229 | [[]] | |
230 | [[]] | |
231 | [[]] | |
232 | ]) | |
233 | ||
d3292ddf | 234 | OVN_CONTROLLER_VTEP_STOP([/has already been associated with logical port/d]) |
6228d33f AW |
235 | AT_CLEANUP |
236 | ||
237 | ||
238 | # Tests corner case: Binding the vtep logical switch from two different | |
239 | # datapath. | |
1cece4ad | 240 | AT_SETUP([ovn-controller-vtep - binding 2]) |
6228d33f AW |
241 | OVN_CONTROLLER_VTEP_START |
242 | ||
243 | # adds logical switch 'lswitch0' and vlan_bindings. | |
244 | AT_CHECK([vtep-ctl add-ls lswitch0 -- bind-ls br-vtep p0 100 lswitch0]) | |
80f408f4 | 245 | # adds logical switch port in ovn-nb database, and sets the type and options. |
6228d33f | 246 | OVN_NB_ADD_VTEP_PORT([br-test], [br-vtep_lswitch0], [br-vtep], [lswitch0]) |
8263474e | 247 | ovn-sbctl --timeout=10 wait-until Port_Binding br-vtep_lswitch0 chassis!='[[]]' |
6228d33f AW |
248 | |
249 | # adds another lswitch 'br-void' in ovn-nb database. | |
ea46a4e9 | 250 | AT_CHECK([ovn-nbctl ls-add br-void]) |
6228d33f AW |
251 | # adds another vtep pswitch 'br-vtep-void' in vtep database. |
252 | AT_CHECK([vtep-ctl add-ps br-vtep-void -- add-port br-vtep-void p0-void -- bind-ls br-vtep-void p0-void 100 lswitch0]) | |
253 | # adds a conflicting logical port (both br-vtep_lswitch0 and br-vtep-void_lswitch0 | |
254 | # are bound to the same logical switch, but they are on different datapath). | |
255 | OVN_NB_ADD_VTEP_PORT([br-void], [br-vtep-void_lswitch0], [br-vtep-void], [lswitch0]) | |
8263474e | 256 | ovn-sbctl --timeout=10 wait-until Port_Binding br-vtep_lswitch0 |
6228d33f AW |
257 | OVS_WAIT_UNTIL([test -n "`grep WARN ovn-controller-vtep.log`"]) |
258 | # confirms the warning log. | |
259 | AT_CHECK([sed -n 's/^.*\(|WARN|.*\)$/\1/p' ovn-controller-vtep.log | sed 's/([[-_0-9a-z]][[-_0-9a-z]]*)/()/g;s/(with tunnel key [[0-9]][[0-9]]*)/()/g' | uniq], [0], [dnl | |
260 | |WARN|logical switch (), on vtep gateway chassis () has already been associated with logical datapath (), ignore logical port () which belongs to logical datapath () | |
261 | ]) | |
262 | ||
263 | # then deletes 'br-void' and 'br-vtep-void', should see 'br-vtep_lswitch0' | |
264 | # bound correctly. | |
ea46a4e9 | 265 | AT_CHECK([ovn-nbctl ls-del br-void]) |
6228d33f AW |
266 | # adds another vtep pswitch 'br-vtep-void' in vtep database. |
267 | AT_CHECK([vtep-ctl del-ps br-vtep-void]) | |
268 | OVS_WAIT_UNTIL([test -z "`ovn-sbctl list Port_Binding | grep br-vtep-void_lswitch0`"]) | |
269 | chassis_uuid=$(ovn-sbctl --columns=_uuid list Chassis br-vtep | cut -d ':' -f2 | tr -d ' ') | |
270 | AT_CHECK_UNQUOTED([ovn-sbctl --columns=chassis list Port_Binding br-vtep_lswitch0 | cut -d ':' -f2 | tr -d ' '], [0], [dnl | |
271 | ${chassis_uuid} | |
272 | ]) | |
273 | ||
d3292ddf | 274 | OVN_CONTROLLER_VTEP_STOP([/has already been associated with logical datapath/d]) |
6228d33f | 275 | AT_CLEANUP |
64ddedae AW |
276 | |
277 | ||
278 | # Tests vtep module vtep logical switch tunnel key update. | |
1cece4ad | 279 | AT_SETUP([ovn-controller-vtep - vtep-lswitch]) |
64ddedae AW |
280 | OVN_CONTROLLER_VTEP_START |
281 | ||
282 | # creates the logical switch in vtep and adds the corresponding logical | |
283 | # port to 'br-test'. | |
284 | AT_CHECK([vtep-ctl add-ls lswitch0 -- bind-ls br-vtep p0 100 lswitch0]) | |
285 | OVN_NB_ADD_VTEP_PORT([br-test], [br-vtep_lswitch0], [br-vtep], [lswitch0]) | |
286 | OVS_WAIT_UNTIL([test -n "`ovn-sbctl list Port_Binding | grep -- br-vtep_lswitch0`"]) | |
287 | ||
288 | # retrieves the expected tunnel key. | |
289 | datapath_uuid=$(ovn-sbctl --columns=datapath list Port_Binding br-vtep_lswitch0 | cut -d ':' -f2 | tr -d ' ') | |
290 | tunnel_key=$(ovn-sbctl --columns=tunnel_key list Datapath_Binding ${datapath_uuid} | cut -d ':' -f2 | tr -d ' ') | |
291 | OVS_WAIT_UNTIL([test -z "`vtep-ctl --columns=tunnel_key list Logical_Switch | grep 0`"]) | |
292 | # checks the vtep logical switch tunnel key configuration. | |
293 | AT_CHECK_UNQUOTED([vtep-ctl --columns=tunnel_key list Logical_Switch | cut -d ':' -f2 | tr -d ' '], [0], [dnl | |
294 | ${tunnel_key} | |
295 | ]) | |
296 | ||
297 | # creates a second physical switch in vtep database, and binds its p0 vlan-100 | |
298 | # to the same logical switch 'lswitch0'. | |
299 | AT_CHECK([vtep-ctl add-ps br-vtep-void -- add-port br-vtep-void p0 -- bind-ls br-vtep-void p0 100 lswitch0]) | |
300 | OVS_WAIT_UNTIL([test -n "`ovn-sbctl --columns=name list Chassis | grep -- br-vtep-void`"]) | |
301 | OVN_NB_ADD_VTEP_PORT([br-test], [br-vtep-void_lswitch0], [br-vtep-void], [lswitch0]) | |
302 | OVS_WAIT_UNTIL([test -n "`ovn-sbctl list Port_Binding | grep -- br-vtep-void_lswitch0`"]) | |
303 | ||
304 | # checks the vtep logical switch tunnel key configuration. | |
305 | AT_CHECK_UNQUOTED([vtep-ctl --columns=tunnel_key list Logical_Switch | cut -d ':' -f2 | tr -d ' '], [0], [dnl | |
306 | ${tunnel_key} | |
307 | ]) | |
308 | ||
309 | # now, deletes br-vtep-void. | |
310 | AT_CHECK([vtep-ctl del-ps br-vtep-void]) | |
311 | OVS_WAIT_UNTIL([test -z "`ovn-sbctl --columns=name list Chassis | grep -- br-vtep-void`"]) | |
312 | # checks the vtep logical switch tunnel key configuration. | |
313 | AT_CHECK_UNQUOTED([vtep-ctl --columns=tunnel_key list Logical_Switch | cut -d ':' -f2 | tr -d ' '], [0], [dnl | |
314 | ${tunnel_key} | |
315 | ]) | |
316 | ||
317 | # changes the ovn-nb logical port type so that it is no longer | |
318 | # vtep port. | |
173acc1c | 319 | AT_CHECK([ovn-nbctl lsp-set-type br-vtep_lswitch0 ""]) |
64ddedae AW |
320 | OVS_WAIT_UNTIL([test -z "`vtep-ctl --columns=tunnel_key list Logical_Switch | grep 1`"]) |
321 | # now should see the tunnel key reset. | |
322 | AT_CHECK([vtep-ctl --columns=tunnel_key list Logical_Switch | cut -d ':' -f2 | tr -d ' '], [0], [dnl | |
323 | 0 | |
324 | ]) | |
325 | ||
326 | OVN_CONTROLLER_VTEP_STOP | |
327 | AT_CLEANUP | |
0c70aa20 AW |
328 | |
329 | ||
330 | # Tests vtep module 'Ucast_Macs_Remote's. | |
1cece4ad | 331 | AT_SETUP([ovn-controller-vtep - vtep-macs 1]) |
0c70aa20 AW |
332 | OVN_CONTROLLER_VTEP_START |
333 | ||
334 | # creates a simple logical network with the vtep device and a fake hv chassis | |
335 | # 'ch0'. | |
31ed1192 JP |
336 | AT_CHECK([ovn-nbctl lsp-add br-test vif0]) |
337 | AT_CHECK([ovn-nbctl lsp-set-addresses vif0 f0:ab:cd:ef:01:02]) | |
8263474e | 338 | AT_CHECK([ovn-nbctl --timeout=10 --wait=sb sync]) |
0c70aa20 | 339 | AT_CHECK([ovn-sbctl chassis-add ch0 vxlan 1.2.3.5]) |
f0f96ba8 | 340 | AT_CHECK([ovn-sbctl lsp-bind vif0 ch0]) |
0c70aa20 AW |
341 | |
342 | # creates the logical switch in vtep and adds the corresponding logical | |
343 | # port to 'br-test'. | |
344 | AT_CHECK([vtep-ctl add-ls lswitch0 -- bind-ls br-vtep p0 100 lswitch0]) | |
345 | OVN_NB_ADD_VTEP_PORT([br-test], [br-vtep_lswitch0], [br-vtep], [lswitch0]) | |
346 | OVS_WAIT_UNTIL([test -n "`ovn-sbctl list Port_Binding | grep br-vtep_lswitch0`"]) | |
347 | ||
348 | # adds another lswitch 'br-void' in ovn-nb database. | |
ea46a4e9 | 349 | AT_CHECK([ovn-nbctl ls-add br-void]) |
0c70aa20 | 350 | # adds fake hv chassis 'ch1'. |
31ed1192 JP |
351 | AT_CHECK([ovn-nbctl lsp-add br-void vif1]) |
352 | AT_CHECK([ovn-nbctl lsp-set-addresses vif1 f0:ab:cd:ef:01:02]) | |
8263474e | 353 | AT_CHECK([ovn-nbctl --timeout=10 --wait=sb sync]) |
0c70aa20 | 354 | AT_CHECK([ovn-sbctl chassis-add ch1 vxlan 1.2.3.6]) |
f0f96ba8 | 355 | AT_CHECK([ovn-sbctl lsp-bind vif1 ch1]) |
0c70aa20 AW |
356 | |
357 | # checks Ucast_Macs_Remote creation. | |
358 | OVS_WAIT_UNTIL([test -n "`vtep-ctl list Ucast_Macs_Remote | grep _uuid`"]) | |
359 | AT_CHECK([vtep-ctl --columns=MAC list Ucast_Macs_Remote | cut -d ':' -f2- | tr -d ' '], [0], [dnl | |
360 | "f0:ab:cd:ef:01:02" | |
361 | ]) | |
362 | ||
363 | # checks physical locator creation. | |
364 | OVS_WAIT_UNTIL([test -n "`vtep-ctl list Physical_Locator | grep _uuid`"]) | |
365 | AT_CHECK([vtep-ctl --columns=dst_ip list Physical_Locator | cut -d ':' -f2 | tr -d ' ' | grep -v 1.2.3.4 | sed '/^$/d'], [0], [dnl | |
366 | "1.2.3.5" | |
367 | ]) | |
368 | ||
369 | # checks tunnel creation by ovs-vtep. | |
370 | OVS_WAIT_UNTIL([test -n "`ovs-vsctl list Interface bfd1.2.3.5`"]) | |
371 | AT_CHECK([ovs-vsctl --columns=options list Interface bfd1.2.3.5 | cut -d ':' -f2 | tr -d ' '], [0], [dnl | |
372 | {remote_ip="1.2.3.5"} | |
373 | ]) | |
374 | ||
80f408f4 | 375 | # adds another mac to logical switch port. |
31ed1192 | 376 | AT_CHECK([ovn-nbctl lsp-set-addresses vif0 f0:ab:cd:ef:01:02 f0:ab:cd:ef:01:03]) |
0c70aa20 AW |
377 | OVS_WAIT_UNTIL([test -n "`vtep-ctl list Ucast_Macs_Remote | grep 03`"]) |
378 | AT_CHECK([vtep-ctl --columns=MAC list Ucast_Macs_Remote | cut -d ':' -f2- | tr -d ' ' | sort], [0], [dnl | |
379 | ||
380 | "f0:ab:cd:ef:01:02" | |
381 | "f0:ab:cd:ef:01:03" | |
382 | ]) | |
383 | ||
80f408f4 | 384 | # removes one mac to logical switch port. |
31ed1192 | 385 | AT_CHECK([ovn-nbctl lsp-set-addresses vif0 f0:ab:cd:ef:01:03]) |
0c70aa20 AW |
386 | OVS_WAIT_UNTIL([test -z "`vtep-ctl --columns=MAC list Ucast_Macs_Remote | grep 02`"]) |
387 | AT_CHECK([vtep-ctl --columns=MAC list Ucast_Macs_Remote | cut -d ':' -f2- | tr -d ' ' | sort], [0], [dnl | |
388 | "f0:ab:cd:ef:01:03" | |
389 | ]) | |
390 | ||
80f408f4 | 391 | # migrates mac to logical switch port vif1 on 'br-void'. |
31ed1192 JP |
392 | AT_CHECK([ovn-nbctl lsp-set-addresses vif0]) |
393 | AT_CHECK([ovn-nbctl lsp-set-addresses vif1 f0:ab:cd:ef:01:03]) | |
0c70aa20 AW |
394 | OVS_WAIT_UNTIL([test -z "`vtep-ctl --columns=MAC list Ucast_Macs_Remote | grep 03`"]) |
395 | AT_CHECK([vtep-ctl --columns=MAC list Ucast_Macs_Remote | cut -d ':' -f2- | tr -d ' ' | sort], [0], [dnl | |
396 | ]) | |
397 | ||
398 | OVN_CONTROLLER_VTEP_STOP | |
399 | AT_CLEANUP | |
400 | ||
401 | ||
402 | # Tests vtep module 'Ucast_Macs_Remote's (corner cases). | |
1cece4ad | 403 | AT_SETUP([ovn-controller-vtep - vtep-macs 2]) |
0c70aa20 AW |
404 | OVN_CONTROLLER_VTEP_START |
405 | ||
406 | # creates a simple logical network with the vtep device and a fake hv chassis | |
407 | # 'ch0'. | |
31ed1192 JP |
408 | AT_CHECK([ovn-nbctl lsp-add br-test vif0]) |
409 | AT_CHECK([ovn-nbctl lsp-set-addresses vif0 f0:ab:cd:ef:01:02]) | |
8263474e | 410 | AT_CHECK([ovn-nbctl --timeout=10 --wait=sb sync]) |
0c70aa20 | 411 | AT_CHECK([ovn-sbctl chassis-add ch0 vxlan 1.2.3.5]) |
f0f96ba8 | 412 | AT_CHECK([ovn-sbctl lsp-bind vif0 ch0]) |
0c70aa20 AW |
413 | |
414 | # creates another vif in the same logical switch with duplicate mac. | |
31ed1192 JP |
415 | AT_CHECK([ovn-nbctl lsp-add br-test vif1]) |
416 | AT_CHECK([ovn-nbctl lsp-set-addresses vif1 f0:ab:cd:ef:01:02]) | |
8263474e | 417 | AT_CHECK([ovn-nbctl --timeout=10 --wait=sb sync]) |
f0f96ba8 | 418 | AT_CHECK([ovn-sbctl lsp-bind vif1 ch0]) |
0c70aa20 AW |
419 | |
420 | # creates the logical switch in vtep and adds the corresponding logical | |
421 | # port to 'br-test'. | |
422 | AT_CHECK([vtep-ctl add-ls lswitch0 -- bind-ls br-vtep p0 100 lswitch0]) | |
423 | OVN_NB_ADD_VTEP_PORT([br-test], [br-vtep_lswitch0], [br-vtep], [lswitch0]) | |
424 | OVS_WAIT_UNTIL([test -n "`ovn-sbctl list Port_Binding | grep br-vtep_lswitch0`"]) | |
425 | ||
426 | # checks Ucast_Macs_Remote creation. Should still only be one entry, since duplicate | |
427 | # mac in the same logical switch is not allowed. | |
428 | OVS_WAIT_UNTIL([test -n "`vtep-ctl list Ucast_Macs_Remote | grep _uuid`"]) | |
429 | AT_CHECK([vtep-ctl --columns=MAC list Ucast_Macs_Remote | cut -d ':' -f2- | tr -d ' '], [0], [dnl | |
430 | "f0:ab:cd:ef:01:02" | |
431 | ]) | |
432 | # confirms the warning log. | |
433 | OVS_WAIT_UNTIL([test -n "`grep WARN ovn-controller-vtep.log`"]) | |
434 | AT_CHECK([sed -n 's/^.*\(|WARN|.*\)$/\1/p' ovn-controller-vtep.log | sed 's/([[-_:0-9a-z]][[-_:0-9a-z]]*)/()/g' | uniq], [0], [dnl | |
435 | |WARN|MAC address () has already been known to be on logical port () in the same logical datapath, so just ignore this logical port () | |
436 | ]) | |
437 | ||
438 | # deletes vif1. | |
31ed1192 | 439 | AT_CHECK([ovn-nbctl lsp-del vif1]) |
0c70aa20 AW |
440 | |
441 | # adds another lswitch 'br-void' in ovn-nb database. | |
ea46a4e9 | 442 | AT_CHECK([ovn-nbctl ls-add br-void]) |
0c70aa20 | 443 | # adds fake hv chassis 'ch1' and vif1 with same mac address as vif0. |
31ed1192 JP |
444 | AT_CHECK([ovn-nbctl lsp-add br-void vif1]) |
445 | AT_CHECK([ovn-nbctl lsp-set-addresses vif1 f0:ab:cd:ef:01:02]) | |
8263474e | 446 | AT_CHECK([ovn-nbctl --timeout=10 --wait=sb sync]) |
0c70aa20 | 447 | AT_CHECK([ovn-sbctl chassis-add ch1 vxlan 1.2.3.6]) |
f0f96ba8 | 448 | AT_CHECK([ovn-sbctl lsp-bind vif1 ch1]) |
0c70aa20 AW |
449 | OVS_WAIT_UNTIL([test -n "`ovn-sbctl list Port_Binding | grep vif1`"]) |
450 | ||
451 | # creates another logical switch in vtep and adds the corresponding logical | |
452 | # port to 'br-void'. | |
453 | AT_CHECK([vtep-ctl add-ls lswitch1 -- bind-ls br-vtep p0 200 lswitch1]) | |
454 | OVN_NB_ADD_VTEP_PORT([br-void], [br-void_lswitch1], [br-vtep], [lswitch1]) | |
455 | OVS_WAIT_UNTIL([test -n "`ovn-sbctl list Port_Binding | grep br-void_lswitch1`"]) | |
456 | ||
457 | # checks Ucast_Macs_Remote creation. Should see two entries since it is allowed | |
458 | # to have duplicate macs in different logical switches. | |
459 | OVS_WAIT_UNTIL([test `vtep-ctl --columns=MAC list Ucast_Macs_Remote | grep 02 | wc -l` -gt 1]) | |
460 | AT_CHECK([vtep-ctl --columns=MAC list Ucast_Macs_Remote | cut -d ':' -f2- | tr -d ' ' | sort], [0], [dnl | |
461 | ||
462 | "f0:ab:cd:ef:01:02" | |
463 | "f0:ab:cd:ef:01:02" | |
464 | ]) | |
465 | ||
466 | OVN_CONTROLLER_VTEP_STOP([/has already been known to be on logical port/d]) | |
467 | AT_CLEANUP |