]> git.proxmox.com Git - mirror_ovs.git/blame - tests/ovn-controller-vtep.at
netlink linux: enable listening to all nsids
[mirror_ovs.git] / tests / ovn-controller-vtep.at
CommitLineData
00db2a60 1AT_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#
14m4_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#
83m4_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
97m4_define([OVN_NB_ADD_VTEP_PORT], [
31ed1192 98AT_CHECK([ovn-nbctl lsp-add $1 $2])
60bdd011 99
31ed1192
JP
100AT_CHECK([ovn-nbctl lsp-set-type $2 vtep])
101AT_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 107AT_SETUP([ovn-controller-vtep - chassis])
0c1e8a7d
AW
108OVN_CONTROLLER_VTEP_START
109
110# verifies the initial ovn-sb db configuration.
eb95259d 111OVS_WAIT_UNTIL([test -n "`ovn-sbctl show | grep Chassis`"])
0c1e8a7d
AW
112AT_CHECK([ovn-sbctl show], [0], [dnl
113Chassis 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.
121AT_CHECK([ovn-sbctl chassis-del br-vtep])
122OVS_WAIT_UNTIL([test -n "`grep WARN ovn-controller-vtep.log`"])
123AT_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.
129AT_CHECK([vtep-ctl set Physical_Switch br-vtep tunnel_ips=1.2.3.5])
130OVS_WAIT_UNTIL([test -n "`ovn-sbctl show | grep 1\.2\.3\.5`"])
131AT_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.
136AT_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])
137OVS_WAIT_UNTIL([test -n "`ovn-sbctl list Chassis | grep -- lswitch0`"])
138AT_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.
143AT_CHECK([vtep-ctl add-ls lswitch1 -- bind-ls br-vtep p0 300 lswitch1])
144OVS_WAIT_UNTIL([test -n "`ovn-sbctl list Chassis | grep -- lswitch1`"])
145AT_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.
150AT_CHECK([vtep-ctl unbind-ls br-vtep p0 200])
a2635ac0 151OVS_WAIT_UNTIL([test -z "`vtep-ctl --columns=vlan_bindings list physical_port p0 | grep -- '200='`"])
0c1e8a7d
AW
152AT_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.
157AT_CHECK([vtep-ctl unbind-ls br-vtep p0 100 -- unbind-ls br-vtep p1 300])
158OVS_WAIT_UNTIL([test -z "`ovn-sbctl list Chassis | grep -- br-vtep_lswitch0`"])
159AT_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.
164AT_CHECK([vtep-ctl unbind-ls br-vtep p0 300])
165OVS_WAIT_UNTIL([test -z "`ovn-sbctl list Chassis | grep -- br-vtep_lswitch1`"])
166AT_CHECK([ovn-sbctl --columns=vtep_logical_switches list Chassis | cut -d ':' -f2 | tr -d ' '], [0], [dnl
167[[]]
168])
169
d3292ddf 170OVN_CONTROLLER_VTEP_STOP([/Chassis for VTEP physical switch (br-vtep) disappears/d])
0c1e8a7d 171AT_CLEANUP
6228d33f
AW
172
173
174# Tests binding updates.
1cece4ad 175AT_SETUP([ovn-controller-vtep - binding 1])
6228d33f
AW
176OVN_CONTROLLER_VTEP_START
177
178# adds logical switch 'lswitch0' and vlan_bindings.
179AT_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 181OVN_NB_ADD_VTEP_PORT([br-test], [br-vtep_lswitch0], [br-vtep], [lswitch0])
8263474e 182ovn-sbctl --timeout=10 wait-until Port_Binding br-vtep_lswitch0 chassis!='[[]]'
6228d33f
AW
183# should see one binding, associated to chassis of 'br-vtep'.
184chassis_uuid=$(ovn-sbctl --columns=_uuid list Chassis br-vtep | cut -d ':' -f2 | tr -d ' ')
185AT_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.
190AT_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 192OVN_NB_ADD_VTEP_PORT([br-test], [br-vtep_lswitch1], [br-vtep], [lswitch1])
8263474e 193ovn-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 196AT_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 203OVN_NB_ADD_VTEP_PORT([br-test], [br-vtep_lswitch0_dup], [br-vtep], [lswitch0])
8263474e 204ovn-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 208AT_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.
216AT_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.
221AT_CHECK([ovs-vsctl del-port p0 -- del-port p1])
6228d33f 222OVS_WAIT_UNTIL([test -z "`ovn-sbctl list Chassis | grep -- br-vtep_lswitch`"])
35cfa388
LR
223OVS_WAIT_UNTIL([test -z "`vtep-ctl list physical_port p0`"])
224OVS_WAIT_UNTIL([test -z "`vtep-ctl list physical_port p1`"])
6228d33f
AW
225# should see empty chassis column in both binding entries.
226AT_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 234OVN_CONTROLLER_VTEP_STOP([/has already been associated with logical port/d])
6228d33f
AW
235AT_CLEANUP
236
237
238# Tests corner case: Binding the vtep logical switch from two different
239# datapath.
1cece4ad 240AT_SETUP([ovn-controller-vtep - binding 2])
6228d33f
AW
241OVN_CONTROLLER_VTEP_START
242
243# adds logical switch 'lswitch0' and vlan_bindings.
244AT_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 246OVN_NB_ADD_VTEP_PORT([br-test], [br-vtep_lswitch0], [br-vtep], [lswitch0])
8263474e 247ovn-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 250AT_CHECK([ovn-nbctl ls-add br-void])
6228d33f
AW
251# adds another vtep pswitch 'br-vtep-void' in vtep database.
252AT_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).
255OVN_NB_ADD_VTEP_PORT([br-void], [br-vtep-void_lswitch0], [br-vtep-void], [lswitch0])
8263474e 256ovn-sbctl --timeout=10 wait-until Port_Binding br-vtep_lswitch0
6228d33f
AW
257OVS_WAIT_UNTIL([test -n "`grep WARN ovn-controller-vtep.log`"])
258# confirms the warning log.
259AT_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 265AT_CHECK([ovn-nbctl ls-del br-void])
6228d33f
AW
266# adds another vtep pswitch 'br-vtep-void' in vtep database.
267AT_CHECK([vtep-ctl del-ps br-vtep-void])
268OVS_WAIT_UNTIL([test -z "`ovn-sbctl list Port_Binding | grep br-vtep-void_lswitch0`"])
269chassis_uuid=$(ovn-sbctl --columns=_uuid list Chassis br-vtep | cut -d ':' -f2 | tr -d ' ')
270AT_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 274OVN_CONTROLLER_VTEP_STOP([/has already been associated with logical datapath/d])
6228d33f 275AT_CLEANUP
64ddedae
AW
276
277
278# Tests vtep module vtep logical switch tunnel key update.
1cece4ad 279AT_SETUP([ovn-controller-vtep - vtep-lswitch])
64ddedae
AW
280OVN_CONTROLLER_VTEP_START
281
282# creates the logical switch in vtep and adds the corresponding logical
283# port to 'br-test'.
284AT_CHECK([vtep-ctl add-ls lswitch0 -- bind-ls br-vtep p0 100 lswitch0])
285OVN_NB_ADD_VTEP_PORT([br-test], [br-vtep_lswitch0], [br-vtep], [lswitch0])
286OVS_WAIT_UNTIL([test -n "`ovn-sbctl list Port_Binding | grep -- br-vtep_lswitch0`"])
287
288# retrieves the expected tunnel key.
289datapath_uuid=$(ovn-sbctl --columns=datapath list Port_Binding br-vtep_lswitch0 | cut -d ':' -f2 | tr -d ' ')
290tunnel_key=$(ovn-sbctl --columns=tunnel_key list Datapath_Binding ${datapath_uuid} | cut -d ':' -f2 | tr -d ' ')
291OVS_WAIT_UNTIL([test -z "`vtep-ctl --columns=tunnel_key list Logical_Switch | grep 0`"])
292# checks the vtep logical switch tunnel key configuration.
293AT_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'.
299AT_CHECK([vtep-ctl add-ps br-vtep-void -- add-port br-vtep-void p0 -- bind-ls br-vtep-void p0 100 lswitch0])
300OVS_WAIT_UNTIL([test -n "`ovn-sbctl --columns=name list Chassis | grep -- br-vtep-void`"])
301OVN_NB_ADD_VTEP_PORT([br-test], [br-vtep-void_lswitch0], [br-vtep-void], [lswitch0])
302OVS_WAIT_UNTIL([test -n "`ovn-sbctl list Port_Binding | grep -- br-vtep-void_lswitch0`"])
303
304# checks the vtep logical switch tunnel key configuration.
305AT_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.
310AT_CHECK([vtep-ctl del-ps br-vtep-void])
311OVS_WAIT_UNTIL([test -z "`ovn-sbctl --columns=name list Chassis | grep -- br-vtep-void`"])
312# checks the vtep logical switch tunnel key configuration.
313AT_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 319AT_CHECK([ovn-nbctl lsp-set-type br-vtep_lswitch0 ""])
64ddedae
AW
320OVS_WAIT_UNTIL([test -z "`vtep-ctl --columns=tunnel_key list Logical_Switch | grep 1`"])
321# now should see the tunnel key reset.
322AT_CHECK([vtep-ctl --columns=tunnel_key list Logical_Switch | cut -d ':' -f2 | tr -d ' '], [0], [dnl
3230
324])
325
326OVN_CONTROLLER_VTEP_STOP
327AT_CLEANUP
0c70aa20
AW
328
329
330# Tests vtep module 'Ucast_Macs_Remote's.
1cece4ad 331AT_SETUP([ovn-controller-vtep - vtep-macs 1])
0c70aa20
AW
332OVN_CONTROLLER_VTEP_START
333
334# creates a simple logical network with the vtep device and a fake hv chassis
335# 'ch0'.
31ed1192
JP
336AT_CHECK([ovn-nbctl lsp-add br-test vif0])
337AT_CHECK([ovn-nbctl lsp-set-addresses vif0 f0:ab:cd:ef:01:02])
8263474e 338AT_CHECK([ovn-nbctl --timeout=10 --wait=sb sync])
0c70aa20 339AT_CHECK([ovn-sbctl chassis-add ch0 vxlan 1.2.3.5])
f0f96ba8 340AT_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'.
344AT_CHECK([vtep-ctl add-ls lswitch0 -- bind-ls br-vtep p0 100 lswitch0])
345OVN_NB_ADD_VTEP_PORT([br-test], [br-vtep_lswitch0], [br-vtep], [lswitch0])
346OVS_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 349AT_CHECK([ovn-nbctl ls-add br-void])
0c70aa20 350# adds fake hv chassis 'ch1'.
31ed1192
JP
351AT_CHECK([ovn-nbctl lsp-add br-void vif1])
352AT_CHECK([ovn-nbctl lsp-set-addresses vif1 f0:ab:cd:ef:01:02])
8263474e 353AT_CHECK([ovn-nbctl --timeout=10 --wait=sb sync])
0c70aa20 354AT_CHECK([ovn-sbctl chassis-add ch1 vxlan 1.2.3.6])
f0f96ba8 355AT_CHECK([ovn-sbctl lsp-bind vif1 ch1])
0c70aa20
AW
356
357# checks Ucast_Macs_Remote creation.
358OVS_WAIT_UNTIL([test -n "`vtep-ctl list Ucast_Macs_Remote | grep _uuid`"])
359AT_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.
364OVS_WAIT_UNTIL([test -n "`vtep-ctl list Physical_Locator | grep _uuid`"])
365AT_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.
370OVS_WAIT_UNTIL([test -n "`ovs-vsctl list Interface bfd1.2.3.5`"])
371AT_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 376AT_CHECK([ovn-nbctl lsp-set-addresses vif0 f0:ab:cd:ef:01:02 f0:ab:cd:ef:01:03])
0c70aa20
AW
377OVS_WAIT_UNTIL([test -n "`vtep-ctl list Ucast_Macs_Remote | grep 03`"])
378AT_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 385AT_CHECK([ovn-nbctl lsp-set-addresses vif0 f0:ab:cd:ef:01:03])
0c70aa20
AW
386OVS_WAIT_UNTIL([test -z "`vtep-ctl --columns=MAC list Ucast_Macs_Remote | grep 02`"])
387AT_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
392AT_CHECK([ovn-nbctl lsp-set-addresses vif0])
393AT_CHECK([ovn-nbctl lsp-set-addresses vif1 f0:ab:cd:ef:01:03])
0c70aa20
AW
394OVS_WAIT_UNTIL([test -z "`vtep-ctl --columns=MAC list Ucast_Macs_Remote | grep 03`"])
395AT_CHECK([vtep-ctl --columns=MAC list Ucast_Macs_Remote | cut -d ':' -f2- | tr -d ' ' | sort], [0], [dnl
396])
397
398OVN_CONTROLLER_VTEP_STOP
399AT_CLEANUP
400
401
402# Tests vtep module 'Ucast_Macs_Remote's (corner cases).
1cece4ad 403AT_SETUP([ovn-controller-vtep - vtep-macs 2])
0c70aa20
AW
404OVN_CONTROLLER_VTEP_START
405
406# creates a simple logical network with the vtep device and a fake hv chassis
407# 'ch0'.
31ed1192
JP
408AT_CHECK([ovn-nbctl lsp-add br-test vif0])
409AT_CHECK([ovn-nbctl lsp-set-addresses vif0 f0:ab:cd:ef:01:02])
8263474e 410AT_CHECK([ovn-nbctl --timeout=10 --wait=sb sync])
0c70aa20 411AT_CHECK([ovn-sbctl chassis-add ch0 vxlan 1.2.3.5])
f0f96ba8 412AT_CHECK([ovn-sbctl lsp-bind vif0 ch0])
0c70aa20
AW
413
414# creates another vif in the same logical switch with duplicate mac.
31ed1192
JP
415AT_CHECK([ovn-nbctl lsp-add br-test vif1])
416AT_CHECK([ovn-nbctl lsp-set-addresses vif1 f0:ab:cd:ef:01:02])
8263474e 417AT_CHECK([ovn-nbctl --timeout=10 --wait=sb sync])
f0f96ba8 418AT_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'.
422AT_CHECK([vtep-ctl add-ls lswitch0 -- bind-ls br-vtep p0 100 lswitch0])
423OVN_NB_ADD_VTEP_PORT([br-test], [br-vtep_lswitch0], [br-vtep], [lswitch0])
424OVS_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.
428OVS_WAIT_UNTIL([test -n "`vtep-ctl list Ucast_Macs_Remote | grep _uuid`"])
429AT_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.
433OVS_WAIT_UNTIL([test -n "`grep WARN ovn-controller-vtep.log`"])
434AT_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 439AT_CHECK([ovn-nbctl lsp-del vif1])
0c70aa20
AW
440
441# adds another lswitch 'br-void' in ovn-nb database.
ea46a4e9 442AT_CHECK([ovn-nbctl ls-add br-void])
0c70aa20 443# adds fake hv chassis 'ch1' and vif1 with same mac address as vif0.
31ed1192
JP
444AT_CHECK([ovn-nbctl lsp-add br-void vif1])
445AT_CHECK([ovn-nbctl lsp-set-addresses vif1 f0:ab:cd:ef:01:02])
8263474e 446AT_CHECK([ovn-nbctl --timeout=10 --wait=sb sync])
0c70aa20 447AT_CHECK([ovn-sbctl chassis-add ch1 vxlan 1.2.3.6])
f0f96ba8 448AT_CHECK([ovn-sbctl lsp-bind vif1 ch1])
0c70aa20
AW
449OVS_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'.
453AT_CHECK([vtep-ctl add-ls lswitch1 -- bind-ls br-vtep p0 200 lswitch1])
454OVN_NB_ADD_VTEP_PORT([br-void], [br-void_lswitch1], [br-vtep], [lswitch1])
455OVS_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.
459OVS_WAIT_UNTIL([test `vtep-ctl --columns=MAC list Ucast_Macs_Remote | grep 02 | wc -l` -gt 1])
460AT_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
466OVN_CONTROLLER_VTEP_STOP([/has already been known to be on logical port/d])
467AT_CLEANUP