4 m4_define([OVN_NBCTL_TEST_START],
5 [dnl Create ovn-nb database.
7 AT_CHECK([ovsdb-tool create ovn-nb.db $abs_top_srcdir/ovn/ovn-nb.ovsschema])
9 dnl Start ovsdb-server.
10 AT_CHECK([ovsdb-server --detach --no-chdir --pidfile --log-file --remote=punix:$OVS_RUNDIR/ovnnb_db.sock ovn-nb.db], [0], [], [stderr])
11 on_exit "kill `cat ovsdb-server.pid`"
12 AT_CHECK([[sed < stderr '
13 /vlog|INFO|opened log file/d
14 /ovsdb_server|INFO|ovsdb-server (Open vSwitch)/d']])
15 AT_CAPTURE_FILE([ovsdb-server.log])
19 m4_define([OVN_NBCTL_TEST_STOP],
20 [# removes all 'Broken pipe' warning logs from ovsdb-server.log. this is in
21 # that *ctl command (e.g. ovn-nbctl) exits right after committing the change
22 # to database. however, in reaction, some daemon (e.g. ovn-controller-vtep)
23 # may immediately update the database. this later update may cause database
24 # sending update back to *ctl command if *ctl has not proceeded to exit yet.
25 # and if *ctl command exits before database calling send, the send from
26 # database will fail with 'Broken pipe' error.
27 AT_CHECK([check_logs "$1
29 OVS_APP_EXIT_AND_WAIT([ovsdb-server])])
32 AT_SETUP([ovn-nbctl - basic switch commands])
35 AT_CHECK([ovn-nbctl ls-add ls0])
36 AT_CHECK([ovn-nbctl ls-list | ${PERL} $srcdir/uuidfilt.pl], [0], [dnl
40 AT_CHECK([ovn-nbctl ls-add ls1])
41 AT_CHECK([ovn-nbctl ls-list | ${PERL} $srcdir/uuidfilt.pl], [0], [dnl
46 AT_CHECK([ovn-nbctl ls-del ls0])
47 AT_CHECK([ovn-nbctl ls-list | ${PERL} $srcdir/uuidfilt.pl], [0], [dnl
51 AT_CHECK([ovn-nbctl show ls0])
52 AT_CHECK([ovn-nbctl ls-add ls0])
53 AT_CHECK([ovn-nbctl show ls0 | ${PERL} $srcdir/uuidfilt.pl], [0],
56 AT_CHECK([ovn-nbctl ls-add ls0], [1], [],
57 [ovn-nbctl: ls0: a switch with this name already exists
59 AT_CHECK([ovn-nbctl --may-exist ls-add ls0])
60 AT_CHECK([ovn-nbctl show ls0 | ${PERL} $srcdir/uuidfilt.pl], [0],
63 AT_CHECK([ovn-nbctl --add-duplicate ls-add ls0])
64 AT_CHECK([ovn-nbctl --may-exist --add-duplicate ls-add ls0], [1], [],
65 [ovn-nbctl: --may-exist and --add-duplicate may not be used together
67 AT_CHECK([ovn-nbctl ls-del ls0], [1], [],
68 [ovn-nbctl: Multiple logical switches named 'ls0'. Use a UUID.
71 AT_CHECK([ovn-nbctl ls-del ls2], [1], [],
72 [ovn-nbctl: ls2: switch name not found
74 AT_CHECK([ovn-nbctl --if-exists ls-del ls2])
76 AT_CHECK([ovn-nbctl ls-add])
77 AT_CHECK([ovn-nbctl ls-add])
78 AT_CHECK([ovn-nbctl --add-duplicate ls-add], [1], [],
79 [ovn-nbctl: --add-duplicate requires specifying a name
81 AT_CHECK([ovn-nbctl --may-exist ls-add], [1], [],
82 [ovn-nbctl: --may-exist requires specifying a name
88 dnl ---------------------------------------------------------------------
90 AT_SETUP([ovn-nbctl - basic logical switch port commands])
93 AT_CHECK([ovn-nbctl ls-add ls0])
94 AT_CHECK([ovn-nbctl lsp-add ls0 lp0])
95 AT_CHECK([ovn-nbctl lsp-add ls0 lp0], [1], [],
96 [ovn-nbctl: lp0: a port with this name already exists
98 AT_CHECK([ovn-nbctl --may-exist lsp-add ls0 lp0])
99 AT_CHECK([ovn-nbctl lsp-list ls0 | ${PERL} $srcdir/uuidfilt.pl], [0], [dnl
103 AT_CHECK([ovn-nbctl lsp-add ls0 lp1])
104 AT_CHECK([ovn-nbctl lsp-list ls0 | ${PERL} $srcdir/uuidfilt.pl], [0], [dnl
109 AT_CHECK([ovn-nbctl ls-add ls1])
110 AT_CHECK([ovn-nbctl lsp-add ls0 lp1], [1], [],
111 [ovn-nbctl: lp1: a port with this name already exists
113 AT_CHECK([ovn-nbctl --may-exist lsp-add ls1 lp1], [1], [],
114 [ovn-nbctl: lp1: port already exists but in switch ls0
116 AT_CHECK([ovn-nbctl --may-exist lsp-add ls0 lp1 lp0 5], [1], [],
117 [ovn-nbctl: lp1: port already exists but has no parent
120 AT_CHECK([ovn-nbctl lsp-del lp1])
121 AT_CHECK([ovn-nbctl lsp-list ls0 | ${PERL} $srcdir/uuidfilt.pl], [0], [dnl
125 AT_CHECK([ovn-nbctl lsp-add ls0 lp2 lp3 5])
126 AT_CHECK([ovn-nbctl --may-exist lsp-add ls0 lp2 lp4 5], [1], [],
127 [ovn-nbctl: lp2: port already exists with different parent lp3
129 AT_CHECK([ovn-nbctl --may-exist lsp-add ls0 lp2 lp3 10], [1], [],
130 [ovn-nbctl: lp2: port already exists with different tag 5
132 AT_CHECK([ovn-nbctl clear Logical_Switch_Port lp2 tag])
133 AT_CHECK([ovn-nbctl --may-exist lsp-add ls0 lp2 lp3 5], [1], [],
134 [ovn-nbctl: lp2: port already exists but has no tag
140 dnl ---------------------------------------------------------------------
142 AT_SETUP([ovn-nbctl - lport addresses])
145 AT_CHECK([ovn-nbctl ls-add ls0])
146 AT_CHECK([ovn-nbctl lsp-add ls0 lp0])
147 AT_CHECK([ovn-nbctl lsp-get-addresses lp0], [0], [dnl
150 AT_CHECK([ovn-nbctl lsp-set-addresses lp0 00:11:22:33:44:55 unknown])
151 AT_CHECK([ovn-nbctl lsp-get-addresses lp0], [0], [dnl
156 AT_CHECK([ovn-nbctl lsp-set-addresses lp0])
157 AT_CHECK([ovn-nbctl lsp-get-addresses lp0], [0], [dnl
163 dnl ---------------------------------------------------------------------
165 AT_SETUP([ovn-nbctl - port security])
168 AT_CHECK([ovn-nbctl ls-add ls0])
169 AT_CHECK([ovn-nbctl lsp-add ls0 lp0])
170 AT_CHECK([ovn-nbctl lsp-get-addresses lp0], [0], [dnl
173 AT_CHECK([ovn-nbctl lsp-set-port-security lp0 aa:bb:cc:dd:ee:ff 00:11:22:33:44:55])
174 AT_CHECK([ovn-nbctl lsp-get-port-security lp0], [0], [dnl
179 AT_CHECK([ovn-nbctl lsp-set-port-security lp0])
180 AT_CHECK([ovn-nbctl lsp-get-port-security lp0], [0], [dnl
186 dnl ---------------------------------------------------------------------
188 AT_SETUP([ovn-nbctl - ACLs])
191 AT_CHECK([ovn-nbctl ls-add ls0])
192 AT_CHECK([ovn-nbctl --log acl-add ls0 from-lport 600 udp drop])
193 AT_CHECK([ovn-nbctl --log acl-add ls0 to-lport 500 udp drop])
194 AT_CHECK([ovn-nbctl acl-add ls0 from-lport 400 tcp drop])
195 AT_CHECK([ovn-nbctl acl-add ls0 to-lport 300 tcp drop])
196 AT_CHECK([ovn-nbctl acl-add ls0 from-lport 200 ip drop])
197 AT_CHECK([ovn-nbctl acl-add ls0 to-lport 100 ip drop])
199 AT_CHECK([ovn-nbctl acl-list ls0], [0], [dnl
200 from-lport 600 (udp) drop log
201 from-lport 400 (tcp) drop
202 from-lport 200 (ip) drop
203 to-lport 500 (udp) drop log
204 to-lport 300 (tcp) drop
205 to-lport 100 (ip) drop
208 dnl Delete in one direction.
209 AT_CHECK([ovn-nbctl acl-del ls0 to-lport])
210 AT_CHECK([ovn-nbctl acl-list ls0], [0], [dnl
211 from-lport 600 (udp) drop log
212 from-lport 400 (tcp) drop
213 from-lport 200 (ip) drop
217 AT_CHECK([ovn-nbctl acl-del ls0])
218 AT_CHECK([ovn-nbctl acl-list ls0], [0], [dnl
221 AT_CHECK([ovn-nbctl acl-add ls0 from-lport 600 udp drop])
222 AT_CHECK([ovn-nbctl acl-add ls0 from-lport 400 tcp drop])
223 AT_CHECK([ovn-nbctl acl-add ls0 from-lport 200 ip drop])
225 dnl Delete a single flow.
226 AT_CHECK([ovn-nbctl acl-del ls0 from-lport 400 tcp])
227 AT_CHECK([ovn-nbctl acl-list ls0], [0], [dnl
228 from-lport 600 (udp) drop
229 from-lport 200 (ip) drop
235 dnl ---------------------------------------------------------------------
237 AT_SETUP([ovn-nbctl - basic logical router commands])
240 AT_CHECK([ovn-nbctl lr-add lr0])
241 AT_CHECK([ovn-nbctl lr-list | ${PERL} $srcdir/uuidfilt.pl], [0], [dnl
245 AT_CHECK([ovn-nbctl lr-add lr1])
246 AT_CHECK([ovn-nbctl lr-list | ${PERL} $srcdir/uuidfilt.pl], [0], [dnl
251 AT_CHECK([ovn-nbctl lr-del lr0])
252 AT_CHECK([ovn-nbctl lr-list | ${PERL} $srcdir/uuidfilt.pl], [0], [dnl
256 AT_CHECK([ovn-nbctl show lr0])
257 AT_CHECK([ovn-nbctl lr-add lr0])
258 AT_CHECK([ovn-nbctl show lr0 | ${PERL} $srcdir/uuidfilt.pl], [0],
261 AT_CHECK([ovn-nbctl lr-add lr0], [1], [],
262 [ovn-nbctl: lr0: a router with this name already exists
264 AT_CHECK([ovn-nbctl --may-exist lr-add lr0])
265 AT_CHECK([ovn-nbctl show lr0 | ${PERL} $srcdir/uuidfilt.pl], [0],
268 AT_CHECK([ovn-nbctl --add-duplicate lr-add lr0])
269 AT_CHECK([ovn-nbctl --may-exist --add-duplicate lr-add lr0], [1], [],
270 [ovn-nbctl: --may-exist and --add-duplicate may not be used together
272 AT_CHECK([ovn-nbctl lr-del lr0], [1], [],
273 [ovn-nbctl: Multiple logical routers named 'lr0'. Use a UUID.
276 AT_CHECK([ovn-nbctl lr-del lr2], [1], [],
277 [ovn-nbctl: lr2: router name not found
279 AT_CHECK([ovn-nbctl --if-exists lr-del lr2])
281 AT_CHECK([ovn-nbctl lr-add])
282 AT_CHECK([ovn-nbctl lr-add])
283 AT_CHECK([ovn-nbctl --add-duplicate lr-add], [1], [],
284 [ovn-nbctl: --add-duplicate requires specifying a name
286 AT_CHECK([ovn-nbctl --may-exist lr-add], [1], [],
287 [ovn-nbctl: --may-exist requires specifying a name
293 dnl ---------------------------------------------------------------------
295 AT_SETUP([ovn-nbctl - basic logical router port commands])
298 AT_CHECK([ovn-nbctl lr-add lr0])
299 AT_CHECK([ovn-nbctl lrp-add lr0 lrp0 00:00:00:01:02:03 192.168.1.1/24])
300 AT_CHECK([ovn-nbctl lrp-add lr0 lrp0 00:00:00:01:02:03 192.168.1.1/24], [1], [],
301 [ovn-nbctl: lrp0: a port with this name already exists
303 AT_CHECK([ovn-nbctl --may-exist lrp-add lr0 lrp0 00:00:00:01:02:03 192.168.1.1/24])
304 AT_CHECK([ovn-nbctl lrp-list lr0 | ${PERL} $srcdir/uuidfilt.pl], [0], [dnl
308 AT_CHECK([ovn-nbctl lrp-add lr0 lrp1 00:00:00:01:02:03 192.168.1.1/24 lrp1-peer])
309 AT_CHECK([ovn-nbctl lrp-list lr0 | ${PERL} $srcdir/uuidfilt.pl], [0], [dnl
314 AT_CHECK([ovn-nbctl lr-add lr1])
315 AT_CHECK([ovn-nbctl lrp-add lr0 lrp1 00:00:00:01:02:03 192.168.1.1/24], [1], [],
316 [ovn-nbctl: lrp1: a port with this name already exists
319 AT_CHECK([ovn-nbctl --may-exist lrp-add lr1 lrp1 00:00:00:01:02:03 192.168.1.1/24], [1], [],
320 [ovn-nbctl: lrp1: port already exists but in router lr0
323 AT_CHECK([ovn-nbctl --may-exist lrp-add lr0 lrp1 00:00:00:04:05:06 192.168.1.1/24], [1], [],
324 [ovn-nbctl: lrp1: port already exists with mac 00:00:00:01:02:03
327 AT_CHECK([ovn-nbctl --may-exist lrp-add lr0 lrp1 00:00:00:01:02:03 192.168.1.1/24], [1], [],
328 [ovn-nbctl: lrp1: port already exists with mismatching peer
331 AT_CHECK([ovn-nbctl --may-exist lrp-add lr0 lrp1 00:00:00:01:02:03 192.168.1.1/24 lrp1-peer])
333 AT_CHECK([ovn-nbctl lrp-del lrp1])
334 AT_CHECK([ovn-nbctl lrp-list lr0 | ${PERL} $srcdir/uuidfilt.pl], [0], [dnl
341 dnl ---------------------------------------------------------------------
343 AT_SETUP([ovn-nbctl - logical router port enable and disable])
346 AT_CHECK([ovn-nbctl lr-add lr0])
347 AT_CHECK([ovn-nbctl lrp-add lr0 lrp0 00:00:00:01:02:03 192.168.1.1/24])
348 AT_CHECK([ovn-nbctl lrp-get-enabled lrp0], [0], [enabled
351 AT_CHECK([ovn-nbctl lrp-set-enabled lrp0 disabled])
352 AT_CHECK([ovn-nbctl lrp-get-enabled lrp0], [0], [disabled
355 AT_CHECK([ovn-nbctl lrp-set-enabled lrp0 enabled])
356 AT_CHECK([ovn-nbctl lrp-get-enabled lrp0], [0], [enabled
359 AT_CHECK([ovn-nbctl lrp-set-enabled lrp0 xyzzy], [1], [],
360 [ovn-nbctl: xyzzy: state must be "enabled" or "disabled"
366 dnl ---------------------------------------------------------------------
368 AT_SETUP([ovn-nbctl - routes])
371 AT_CHECK([ovn-nbctl lr-add lr0])
373 dnl Check IPv4 routes
374 AT_CHECK([ovn-nbctl lr-route-add lr0 0.0.0.0/0 192.168.0.1])
375 AT_CHECK([ovn-nbctl lr-route-add lr0 10.0.1.0/24 11.0.1.1 lp0])
376 AT_CHECK([ovn-nbctl lr-route-add lr0 10.0.0.1/24 11.0.0.2])
378 dnl Add overlapping route with 10.0.0.1/24
379 AT_CHECK([ovn-nbctl lr-route-add lr0 10.0.0.111/24 11.0.0.1], [1], [],
380 [ovn-nbctl: duplicate prefix: 10.0.0.0/24
382 AT_CHECK([ovn-nbctl --may-exist lr-route-add lr0 10.0.0.111/24 11.0.0.1])
384 AT_CHECK([ovn-nbctl lr-route-list lr0], [0], [dnl
387 10.0.1.0/24 11.0.1.1 lp0
388 0.0.0.0/0 192.168.0.1
391 dnl Delete non-existent prefix
392 AT_CHECK([ovn-nbctl lr-route-del lr0 10.0.2.1/24], [1], [],
393 [ovn-nbctl: no matching prefix: 10.0.2.0/24
395 AT_CHECK([ovn-nbctl --if-exists lr-route-del lr0 10.0.2.1/24])
397 AT_CHECK([ovn-nbctl lr-route-del lr0 10.0.1.1/24])
399 AT_CHECK([ovn-nbctl lr-route-list lr0], [0], [dnl
402 0.0.0.0/0 192.168.0.1
405 AT_CHECK([ovn-nbctl lr-route-del lr0])
406 AT_CHECK([ovn-nbctl lr-route-list lr0], [0], [dnl
409 dnl Check IPv6 routes
410 AT_CHECK([ovn-nbctl lr-route-add lr0 ::/0 2001:0db8:0:f101::1])
411 AT_CHECK([ovn-nbctl lr-route-add lr0 2001:0db8:0::/64 2001:0db8:0:f102::1 lp0])
412 AT_CHECK([ovn-nbctl lr-route-add lr0 2001:0db8:1::/64 2001:0db8:0:f103::1])
414 AT_CHECK([ovn-nbctl lr-route-list lr0], [0], [dnl
416 2001:db8::/64 2001:db8:0:f102::1 lp0
417 2001:db8:1::/64 2001:db8:0:f103::1
418 ::/0 2001:db8:0:f101::1
421 AT_CHECK([ovn-nbctl lr-route-del lr0 2001:0db8:0::/64])
423 AT_CHECK([ovn-nbctl lr-route-list lr0], [0], [dnl
425 2001:db8:1::/64 2001:db8:0:f103::1
426 ::/0 2001:db8:0:f101::1
429 AT_CHECK([ovn-nbctl lr-route-del lr0])
430 AT_CHECK([ovn-nbctl lr-route-list lr0], [0], [dnl
433 dnl Check IPv4 and IPv6 routes
434 AT_CHECK([ovn-nbctl lr-route-add lr0 0.0.0.0/0 192.168.0.1])
435 AT_CHECK([ovn-nbctl lr-route-add lr0 10.0.1.1/24 11.0.1.1 lp0])
436 AT_CHECK([ovn-nbctl lr-route-add lr0 10.0.0.1/24 11.0.0.1])
437 AT_CHECK([ovn-nbctl lr-route-add lr0 ::/0 2001:0db8:0:f101::1])
438 AT_CHECK([ovn-nbctl lr-route-add lr0 2001:0db8:0::/64 2001:0db8:0:f102::1 lp0])
439 AT_CHECK([ovn-nbctl lr-route-add lr0 2001:0db8:1::/64 2001:0db8:0:f103::1])
441 AT_CHECK([ovn-nbctl lr-route-list lr0], [0], [dnl
444 10.0.1.0/24 11.0.1.1 lp0
445 0.0.0.0/0 192.168.0.1
448 2001:db8::/64 2001:db8:0:f102::1 lp0
449 2001:db8:1::/64 2001:db8:0:f103::1
450 ::/0 2001:db8:0:f101::1