3 dnl Creates an empty database in the current directory and then starts
4 dnl an ovsdb-server on it for ovs-vsctl to connect to.
5 m4_define([OVS_VSCTL_SETUP],
7 AT_CHECK([ovsdb-server --detach --no-chdir --pidfile="`pwd`"/pid --remote=punix:socket --unixctl="`pwd`"/unixctl db >/dev/null 2>&1], [0], [ignore], [ignore])])
11 dnl Kills off the database server.
12 m4_define([OVS_VSCTL_CLEANUP], [OVSDB_SERVER_SHUTDOWN])
14 dnl RUN_OVS_VSCTL(COMMAND, ...)
16 dnl Executes each ovs-vsctl COMMAND.
17 m4_define([RUN_OVS_VSCTL],
18 [m4_foreach([command], [$@], [ovs-vsctl --no-wait -vreconnect:emer --db=unix:socket command
20 m4_define([RUN_OVS_VSCTL_ONELINE],
21 [m4_foreach([command], [$@], [ovs-vsctl --no-wait -vreconnect:emer --db=unix:socket --oneline -- command
24 dnl RUN_OVS_VSCTL_TOGETHER(COMMAND, ...)
26 dnl Executes each ovs-vsctl COMMAND in a single run of ovs-vsctl.
27 m4_define([RUN_OVS_VSCTL_TOGETHER],
28 [ovs-vsctl --no-wait -vreconnect:emer --db=unix:socket --oneline dnl
29 m4_foreach([command], [$@], [ -- command])])
31 dnl CHECK_BRIDGES([BRIDGE, PARENT, VLAN], ...)
33 dnl Verifies that "ovs-vsctl list-br" prints the specified list of bridges,
34 dnl which must be in alphabetical order. Also checks that each BRIDGE has the
35 dnl specified PARENT and is on the given VLAN.
36 m4_define([_CHECK_BRIDGE],
37 [AT_CHECK([RUN_OVS_VSCTL([br-to-parent $1])], [0], [$2
38 ], [], [OVS_VSCTL_CLEANUP])
40 # Check br-to-vlan, without --oneline.
41 AT_CHECK([RUN_OVS_VSCTL([br-to-vlan $1])], [0], [$3
42 ], [], [OVS_VSCTL_CLEANUP])
43 # Check br-to-vlan, with --oneline.
44 # (This particular test is interesting with --oneline because it returns
45 # an integer instead of a string and that can cause type mismatches inside
46 # python if not done carefully.)
47 AT_CHECK([RUN_OVS_VSCTL_ONELINE([br-to-vlan $1])], [0], [$3
48 ], [], [OVS_VSCTL_CLEANUP])
50 # Check multiple queries in a single run.
51 AT_CHECK([RUN_OVS_VSCTL_TOGETHER([br-to-parent $1], [br-to-vlan $1])], [0],
54 ], [], [OVS_VSCTL_CLEANUP])])
55 m4_define([CHECK_BRIDGES],
56 [dnl Check that the bridges appear on list-br, without --oneline.
58 [RUN_OVS_VSCTL([list-br])],
60 [m4_foreach([brinfo], [$@], [m4_car(brinfo)
65 dnl Check that the bridges appear on list-br, with --oneline.
67 [RUN_OVS_VSCTL_ONELINE([list-br])],
69 [m4_join([\n], m4_foreach([brinfo], [$@], [m4_car(brinfo),]))
74 dnl Check that each bridge exists according to br-exists and that
75 dnl a bridge that should not exist does not.
76 m4_foreach([brinfo], [$@],
77 [AT_CHECK([RUN_OVS_VSCTL([br-exists m4_car(brinfo)])], [0], [],
78 [], [OVS_VSCTL_CLEANUP])])
79 AT_CHECK([RUN_OVS_VSCTL([br-exists nonexistent])], [2], [], [],
82 dnl Check that each bridge has the expected parent and VLAN.
83 m4_map([_CHECK_BRIDGE], [$@])])
85 dnl CHECK_PORTS(BRIDGE, PORT[, PORT...])
87 dnl Verifies that "ovs-vsctl list-ports BRIDGE" prints the specified
88 dnl list of ports, which must be in alphabetical order. Also checks
89 dnl that "ovs-vsctl port-to-br" reports that each port is
91 m4_define([CHECK_PORTS],
92 [dnl Check ports without --oneline.
94 [RUN_OVS_VSCTL([list-ports $1])],
96 [m4_foreach([port], m4_cdr($@), [port
101 dnl Check ports with --oneline.
103 [RUN_OVS_VSCTL_ONELINE([list-ports $1])],
105 [m4_join([\n], m4_shift($@))
109 AT_CHECK([RUN_OVS_VSCTL([port-to-br $1])], [1], [],
110 [ovs-vsctl: no port named $1
115 [AT_CHECK([RUN_OVS_VSCTL([[port-to-br] port])], [0], [$1
116 ], [], [OVS_VSCTL_CLEANUP])])])
118 dnl CHECK_IFACES(BRIDGE, IFACE[, IFACE...])
120 dnl Verifies that "ovs-vsctl list-ifaces BRIDGE" prints the specified
121 dnl list of ifaces, which must be in alphabetical order. Also checks
122 dnl that "ovs-vsctl iface-to-br" reports that each interface is
124 m4_define([CHECK_IFACES],
126 [RUN_OVS_VSCTL([list-ifaces $1])],
128 [m4_foreach([iface], m4_cdr($@), [iface
132 AT_CHECK([RUN_OVS_VSCTL([iface-to-br $1])], [1], [],
133 [ovs-vsctl: no interface named $1
138 [AT_CHECK([RUN_OVS_VSCTL([[iface-to-br] iface])], [0], [$1
140 [], [OVS_VSCTL_CLEANUP])])])
142 dnl ----------------------------------------------------------------------
143 AT_BANNER([ovs-vsctl unit tests])
145 AT_SETUP([ovs-vsctl connection retry])
146 OVS_RUNDIR=$PWD; export OVS_RUNDIR
148 dnl Without --retry, there should be no retry for active connections.
149 AT_CHECK([ovs-vsctl --db=unix:foo --timeout=10 -vreconnect:emer -- init],
151 AT_CHECK([[sed 's/([^()]*)/(...reason...)/' stderr]], [0],
152 [ovs-vsctl: unix:foo: database connection failed (...reason...)
155 dnl With --retry, we should retry for active connections.
157 [ovs-vsctl --db=unix:foo --timeout=1 --retry -vreconnect:emer -vPATTERN:console:'%c|%p|%m' -- init
160 AT_CHECK([grep -c 'terminating with signal' stderr], [0], [1
162 if test "$IS_WIN32" = "yes"; then
163 AT_CHECK([cat status], [0], [3
167 AT_CHECK([cat status], [0], [142
171 dnl Without --retry, we should retry for passive connections.
173 [ovs-vsctl --db=punix:foo --timeout=1 -vreconnect:emer -vPATTERN:console:'%c|%p|%m' -- init
176 AT_CHECK([grep -c 'terminating with signal' stderr], [0], [1
178 if test "$IS_WIN32" = "yes"; then
179 AT_CHECK([cat status], [0], [3
183 AT_CHECK([cat status], [0], [142
188 dnl ----------------------------------------------------------------------
189 AT_BANNER([ovs-vsctl unit tests -- real bridges])
192 AT_KEYWORDS([ovs-vsctl])
194 AT_CHECK([RUN_OVS_VSCTL([add-br a])], [0], [], [], [OVS_VSCTL_CLEANUP])
195 CHECK_BRIDGES([a, a, 0])
201 AT_SETUP([add-br a, add-br a])
202 AT_KEYWORDS([ovs-vsctl])
204 AT_CHECK([RUN_OVS_VSCTL([add-br a])], [0], [], [], [OVS_VSCTL_CLEANUP])
205 AT_CHECK([RUN_OVS_VSCTL([add-br a])], [1], [],
206 [ovs-vsctl: cannot create a bridge named a because a bridge named a already exists
207 ], [OVS_VSCTL_CLEANUP])
211 AT_SETUP([add-br a, add-br b])
212 AT_KEYWORDS([ovs-vsctl])
214 AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b])], [0], [], [],
216 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br a b 9])], [1], [],
217 [ovs-vsctl: "--may-exist add-br a b 9" but a is not a VLAN bridge
220 CHECK_BRIDGES([a, a, 0], [b, b, 0])
228 AT_SETUP([add-br a, add-br b, del-br a])
229 AT_KEYWORDS([ovs-vsctl])
231 AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b], [del-br a])], [0], [], [],
233 CHECK_BRIDGES([b, b, 0])
239 AT_SETUP([add-br a, del-br a, add-br a])
240 AT_KEYWORDS([ovs-vsctl])
242 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
246 [set Interface a other_config:key=value],
247 [get Interface a other_config:key])], [0], [
252 ], [], [OVS_VSCTL_CLEANUP])
253 CHECK_BRIDGES([a, a, 0])
259 AT_SETUP([add-br a, add-port a a1, add-port a a2])
260 AT_KEYWORDS([ovs-vsctl])
262 AT_CHECK([RUN_OVS_VSCTL(
264 [--if-exists del-br b],
266 [add-port a a2])], [0], [], [], [OVS_VSCTL_CLEANUP])
267 CHECK_BRIDGES([a, a, 0])
268 CHECK_PORTS([a], [a1], [a2])
269 CHECK_IFACES([a], [a1], [a2])
273 AT_SETUP([add-br a, add-port a a1, add-port a a1])
274 AT_KEYWORDS([ovs-vsctl])
276 AT_CHECK([RUN_OVS_VSCTL(
278 [add-port a a1])], [0], [], [], [OVS_VSCTL_CLEANUP])
279 AT_CHECK([RUN_OVS_VSCTL([add-port a a1])], [1], [],
280 [ovs-vsctl: cannot create a port named a1 because a port named a1 already exists on bridge a
281 ], [OVS_VSCTL_CLEANUP])
285 AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-br a])
286 AT_KEYWORDS([ovs-vsctl])
288 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
293 [--if-exists del-port b b2],
300 ], [], [OVS_VSCTL_CLEANUP])
301 CHECK_BRIDGES([b, b, 0])
302 CHECK_PORTS([b], [b1])
303 CHECK_IFACES([b], [b1])
307 AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3])
308 AT_KEYWORDS([ovs-vsctl])
310 AT_CHECK([RUN_OVS_VSCTL(
312 [add-bond a bond0 a1 a2 a3])], [0], [], [], [OVS_VSCTL_CLEANUP])
313 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-bond a bond0 a3 a1 a2])], [0], [], [],
315 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-bond a bond0 a2 a1])], [1], [],
316 [ovs-vsctl: "--may-exist add-bond a bond0 a2 a1" but bond0 actually has interface(s) a1, a2, a3
319 CHECK_BRIDGES([a, a, 0])
320 CHECK_PORTS([a], [bond0])
321 CHECK_IFACES([a], [a1], [a2], [a3])
325 AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-port a a1])
326 AT_KEYWORDS([ovs-vsctl])
328 AT_CHECK([RUN_OVS_VSCTL(
331 [add-port a a1 tag=9],
333 [--may-exist add-port b b1],
334 [del-port a a1])], [0], [9
335 ], [], [OVS_VSCTL_CLEANUP])
336 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-port b b1])], [0], [], [],
338 AT_CHECK([RUN_OVS_VSCTL([del-port a])], [1], [],
339 [ovs-vsctl: cannot delete port a because it is the local port for bridge a (deleting this port requires deleting the entire bridge)
342 AT_CHECK([RUN_OVS_VSCTL([--if-exists del-port a])], [0], [], [],
344 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-port a b1])], [1], [],
345 [ovs-vsctl: "--may-exist add-port a b1" but b1 is actually attached to bridge b
348 CHECK_BRIDGES([a, a, 0], [b, b, 0])
351 CHECK_PORTS([b], [b1])
352 CHECK_IFACES([b], [b1])
356 AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3, del-port bond0])
357 AT_KEYWORDS([ovs-vsctl])
359 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
361 [add-bond a bond0 a1 a2 a3 tag=9],
362 [get Port bond0 tag],
363 [del-port bond0])], [0], [
367 ], [], [OVS_VSCTL_CLEANUP])
368 CHECK_BRIDGES([a, a, 0])
373 AT_SETUP([external IDs])
374 AT_KEYWORDS([ovs-vsctl])
376 AT_CHECK([RUN_OVS_VSCTL_ONELINE(
379 [add-bond a bond0 a2 a3],
380 [br-set-external-id a key0 value0],
381 [set port a1 external-ids:key1=value1],
382 [set interface a2 external-ids:key2=value2],
383 [set interface a2 external-ids:key3=value3],
384 [set interface a3 external-ids:key4=value4],
385 [br-get-external-id a],
386 [br-get-external-id a key0],
387 [br-get-external-id a key1],
388 [br-set-external-id a key0 othervalue],
389 [br-get-external-id a],
390 [br-set-external-id a key0],
391 [br-get-external-id a],
392 [get port a1 external-ids],
393 [get interface a2 external-ids],
394 [get interface a3 external-ids])], [0], [
410 {"key2"="value2", "key3"="value3"}
412 ], [], [OVS_VSCTL_CLEANUP])
413 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
414 [br-get-external-id a],
415 [get port a1 external-ids],
416 [get interface a2 external-ids],
417 [get interface a3 external-ids])], [0],
420 {"key2"="value2", "key3"="value3"}
422 ], [], [OVS_VSCTL_CLEANUP])
423 CHECK_BRIDGES([a, a, 0])
424 CHECK_PORTS([a], [a1], [bond0])
425 CHECK_IFACES([a], [a1], [a2], [a3])
429 AT_SETUP([controllers])
430 AT_KEYWORDS([controller ovs-vsctl])
432 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
435 [get-controller br0],
436 [set-controller br0 tcp:4.5.6.7],
437 [get-controller br0],
439 [del-controller br0],
440 [get-controller br0],
442 [set-controller br0 tcp:8.9.10.11 tcp:5.4.3.2],
443 [get-controller br0])], [0], [
450 tcp:5.4.3.2\ntcp:8.9.10.11
451 ], [], [OVS_VSCTL_CLEANUP])
455 dnl ----------------------------------------------------------------------
456 dnl OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([VLAN])
457 m4_define([OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF],
461 [--may-exist add-br xenbr0],
462 [add-port xenbr0 eth0],
463 [--may-exist add-port xenbr0 eth0],
464 [add-br xapi1 xenbr0 $1],
465 [--may-exist add-br xapi1 xenbr0 $1],
466 [add-port xapi1 eth0.$1])],
467 [0], [], [], [OVS_VSCTL_CLEANUP])])
469 dnl OVS_VSCTL_FAKE_BRIDGE_TESTS([VLAN])
470 m4_define([OVS_VSCTL_FAKE_BRIDGE_TESTS], [
471 AT_BANNER([ovs-vsctl unit tests -- fake bridges (VLAN $1)])
473 AT_SETUP([simple fake bridge (VLAN $1)])
474 AT_KEYWORDS([ovs-vsctl fake-bridge])
476 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
477 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1])], [1], [],
478 [ovs-vsctl: "--may-exist add-br xapi1" but xapi1 is a VLAN bridge for VLAN $1
479 ], [OVS_VSCTL_CLEANUP])
480 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1 xxx $1])], [1], [],
481 [ovs-vsctl: "--may-exist add-br xapi1 xxx $1" but xapi1 has the wrong parent xenbr0
482 ], [OVS_VSCTL_CLEANUP])
483 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1 xenbr0 10])], [1], [],
484 [ovs-vsctl: "--may-exist add-br xapi1 xenbr0 10" but xapi1 is a VLAN bridge for the wrong VLAN $1
485 ], [OVS_VSCTL_CLEANUP])
486 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br dup xenbr0 $1])], [1], [],
487 [ovs-vsctl: bridge xenbr0 already has a child VLAN bridge xapi1 on VLAN $1
488 ], [OVS_VSCTL_CLEANUP])
489 CHECK_BRIDGES([xapi1, xenbr0, $1], [xenbr0, xenbr0, 0])
490 CHECK_PORTS([xenbr0], [eth0])
491 CHECK_IFACES([xenbr0], [eth0])
492 CHECK_PORTS([xapi1], [eth0.$1])
493 CHECK_IFACES([xapi1], [eth0.$1])
497 AT_SETUP([list bridges -- real and fake (VLAN $1)])
498 AT_KEYWORDS([ovs-vsctl fake-bridge])
500 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
501 AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- list-br])], [0],
503 ], [], [OVS_VSCTL_CLEANUP])
504 AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- --real list-br])], [0],
506 ], [], [OVS_VSCTL_CLEANUP])
507 AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- --fake list-br])], [0],
509 ], [], [OVS_VSCTL_CLEANUP])
513 AT_SETUP([simple fake bridge + del-br fake bridge (VLAN $1)])
514 AT_KEYWORDS([ovs-vsctl fake-bridge])
516 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
517 AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])], [0], [], [], [OVS_VSCTL_CLEANUP])
518 CHECK_BRIDGES([xenbr0, xenbr0, 0])
519 CHECK_PORTS([xenbr0], [eth0])
520 CHECK_IFACES([xenbr0], [eth0])
524 AT_SETUP([simple fake bridge + del-br real bridge (VLAN $1)])
525 AT_KEYWORDS([ovs-vsctl fake-bridge])
527 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
528 AT_CHECK([RUN_OVS_VSCTL([del-br xenbr0])], [0], [], [], [OVS_VSCTL_CLEANUP])
533 AT_SETUP([simple fake bridge + external IDs (VLAN $1)])
534 AT_KEYWORDS([ovs-vsctl fake-bridge])
536 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
537 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
538 [br-set-external-id xenbr0 key0 value0],
539 [br-set-external-id xapi1 key1 value1],
540 [br-get-external-id xenbr0],
541 [br-get-external-id xenbr0 key0],
542 [br-get-external-id xapi1],
543 [br-get-external-id xapi1 key1])], [0], [
549 ], [], [OVS_VSCTL_CLEANUP])
550 CHECK_BRIDGES([xapi1, xenbr0, $1], [xenbr0, xenbr0, 0])
551 CHECK_PORTS([xenbr0], [eth0])
552 CHECK_IFACES([xenbr0], [eth0])
553 CHECK_PORTS([xapi1], [eth0.$1])
554 CHECK_IFACES([xapi1], [eth0.$1])
557 ]) # OVS_VSCTL_FAKE_BRIDGE_TESTS
559 OVS_VSCTL_FAKE_BRIDGE_TESTS([9])
560 OVS_VSCTL_FAKE_BRIDGE_TESTS([0])
562 dnl OVS_VSCTL_SETUP_BOND_FAKE_CONF([VLAN])
563 m4_define([OVS_VSCTL_SETUP_BOND_FAKE_CONF],
567 [add-bond xapi1 bond0 eth0 eth1],
568 [add-br xapi2 xapi1 $1],
569 [add-port xapi2 bond0.$1])],
570 [0], [], [], [OVS_VSCTL_CLEANUP])])
572 AT_SETUP([fake bridge on bond])
573 AT_KEYWORDS([ovs-vsctl fake-bridge])
575 OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
576 CHECK_BRIDGES([xapi1, xapi1, 0], [xapi2, xapi1, 11])
577 CHECK_PORTS([xapi1], [bond0])
578 CHECK_IFACES([xapi1], [eth0], [eth1])
579 CHECK_PORTS([xapi2], [bond0.11])
580 CHECK_IFACES([xapi2], [bond0.11])
584 AT_SETUP([fake bridge on bond + del-br fake bridge])
585 AT_KEYWORDS([ovs-vsctl fake-bridge])
587 OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
588 AT_CHECK([RUN_OVS_VSCTL_ONELINE([del-br xapi2])], [0], [
589 ], [], [OVS_VSCTL_CLEANUP])
590 CHECK_BRIDGES([xapi1, xapi1, 0])
591 CHECK_PORTS([xapi1], [bond0])
592 CHECK_IFACES([xapi1], [eth0], [eth1])
596 AT_SETUP([fake bridge on bond + del-br real bridge])
597 AT_KEYWORDS([ovs-vsctl fake-bridge])
599 OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
600 AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])])
605 dnl ----------------------------------------------------------------------
606 AT_BANNER([ovs-vsctl unit tests -- manager commands])
609 AT_KEYWORDS([manager ovs-vsctl])
611 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
614 [set-manager tcp:4.5.6.7],
616 [set-manager tcp:8.9.10.11 tcp:5.4.3.2],
619 [get-manager])], [0], [
624 tcp:5.4.3.2\ntcp:8.9.10.11
627 ], [], [OVS_VSCTL_CLEANUP])
631 dnl ----------------------------------------------------------------------
632 AT_BANNER([ovs-vsctl unit tests -- database commands])
634 AT_SETUP([database commands -- positive checks])
635 AT_KEYWORDS([ovs-vsctl])
638 [RUN_OVS_VSCTL_TOGETHER([--id=@br0 create bridge name=br123],
639 [set b br123 name=br0],
640 [set o . bridges=@br0])],
641 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
643 AT_CHECK([RUN_OVS_VSCTL([list bridge], [get bridge br0 _uuid])],
644 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
646 AT_CHECK([${PERL} $srcdir/uuidfilt.pl out1 out2], [0],
655 datapath_version : ""
661 mcast_snooping_enable: false
674 ]], [ignore], [test ! -e pid || kill `cat pid`])
676 [RUN_OVS_VSCTL([--columns=fail_mode,name,datapath_type list bridge])],
681 ]], [ignore], [test ! -e pid || kill `cat pid`])
683 [RUN_OVS_VSCTL([--columns=fail_mode,name,datapath_type find bridge])],
688 ]], [ignore], [test ! -e pid || kill `cat pid`])
690 RUN_OVS_VSCTL_TOGETHER([--id=@br1 create bridge name=br1 datapath_type="foo"],
691 [--id=@br2 create bridge name=br2 external-ids:bar=quux],
692 [add o . bridges @br1 @br2])],
693 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
695 [RUN_OVS_VSCTL([--columns=name find bridge datapath_type!=foo])], [0], [stdout],
696 [ignore], [test ! -e pid || kill `cat pid`])
697 AT_CHECK([sed -n '/./p' stdout | sort], [0],
704 'other_config:datapath_id="0123456789ab"' \
705 'other_config:hwaddr="00:11:22:33:44:55"' \
706 'external-ids={"uuids"="9c45f225-a7cf-439d-976d-83db6271fda1"}' -- \
707 add bridge br0 external_ids '"roles"="local; remote; cloud"'])],
708 [0], [], [], [OVS_VSCTL_CLEANUP])
709 AT_CHECK([RUN_OVS_VSCTL_ONELINE([get bridge br0 other_config external-ids])],
710 [0], [{datapath_id="0123456789ab", hwaddr="00:11:22:33:44:55"}\n{roles="local; remote; cloud", uuids="9c45f225-a7cf-439d-976d-83db6271fda1"}
711 ], [], [OVS_VSCTL_CLEANUP])
712 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 other_config:hwaddr -- --if-exists get bridge br0 other-config:nonexistent])],
713 [0], ["00:11:22:33:44:55"
715 ], [], [OVS_VSCTL_CLEANUP])
716 AT_CHECK([RUN_OVS_VSCTL([remove bridge br0 other_config hwaddr 'datapath_id=""' -- get bridge br0 other_config])],
717 [0], [{datapath_id="0123456789ab"}
718 ], [], [OVS_VSCTL_CLEANUP])
719 AT_CHECK([RUN_OVS_VSCTL([remove bridge br0 other_config 'datapath_id="0123456789ab"' -- get bridge br0 other_config])],
721 ], [], [OVS_VSCTL_CLEANUP])
722 AT_CHECK([RUN_OVS_VSCTL([clear bridge br0 external-ids -- get bridge br0 external_ids])],
724 ], [], [OVS_VSCTL_CLEANUP])
725 AT_CHECK([RUN_OVS_VSCTL_TOGETHER([destroy bridge br0],
726 [destroy bridge br1],
727 [destroy bridge br2],
728 [clear o . bridges])],
729 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
730 AT_CHECK([RUN_OVS_VSCTL([list bridge])],
731 [0], [], [], [OVS_VSCTL_CLEANUP])
732 AT_CHECK([RUN_OVS_VSCTL([--if-exists get bridge x datapath_id])],
733 [0], [], [], [OVS_VSCTL_CLEANUP])
734 AT_CHECK([RUN_OVS_VSCTL([--if-exists list bridge x])],
735 [0], [], [], [OVS_VSCTL_CLEANUP])
736 AT_CHECK([RUN_OVS_VSCTL([--if-exists set controller x connection_mode=standalone])],
737 [0], [], [], [OVS_VSCTL_CLEANUP])
739 [RUN_OVS_VSCTL([--if-exists remove netflow x targets '"1.2.3.4:567"'])],
740 [0], [], [], [OVS_VSCTL_CLEANUP])
742 [RUN_OVS_VSCTL([--if-exists clear netflow x targets])],
743 [0], [], [], [OVS_VSCTL_CLEANUP])
747 AT_SETUP([database commands -- negative checks])
748 AT_KEYWORDS([ovs-vsctl])
751 AT_CHECK([ovs-vsctl --may-exist],
752 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
753 ], [OVS_VSCTL_CLEANUP])
754 AT_CHECK([ovs-vsctl --may-exist --],
755 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
756 ], [OVS_VSCTL_CLEANUP])
757 AT_CHECK([ovs-vsctl -- --may-exist],
758 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
759 ], [OVS_VSCTL_CLEANUP])
761 AT_CHECK([RUN_OVS_VSCTL([add-br br0])],
762 [0], [ignore], [], [OVS_VSCTL_CLEANUP])
763 AT_CHECK([RUN_OVS_VSCTL([add-br br1])],
764 [0], [ignore], [], [OVS_VSCTL_CLEANUP])
765 AT_CHECK([RUN_OVS_VSCTL([set-controller br1 tcp:127.0.0.1])],
766 [0], [ignore], [], [OVS_VSCTL_CLEANUP])
768 RUN_OVS_VSCTL_TOGETHER([--id=@n create netflow targets='"1.2.3.4:567"'],
769 [set bridge br0 netflow=@n])],
770 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
771 cp stdout netflow-uuid
772 AT_CHECK([RUN_OVS_VSCTL([list netflow `cat netflow-uuid`])],
773 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
774 AT_CHECK([${PERL} $srcdir/uuidfilt.pl netflow-uuid stdout], [0],
779 add_id_to_interface : false
783 targets : ["1.2.3.4:567"]
784 ]], [ignore], [test ! -e pid || kill `cat pid`])
785 AT_CHECK([RUN_OVS_VSCTL([list interx x])],
786 [1], [], [ovs-vsctl: unknown table "interx"
787 ], [OVS_VSCTL_CLEANUP])
788 AT_CHECK([RUN_OVS_VSCTL([list bridge x])],
789 [1], [], [ovs-vsctl: no row "x" in table Bridge
790 ], [OVS_VSCTL_CLEANUP])
791 AT_CHECK([RUN_OVS_VSCTL([get bridge x datapath_id])],
792 [1], [], [ovs-vsctl: no row "x" in table Bridge
793 ], [OVS_VSCTL_CLEANUP])
794 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 d])],
795 [1], [], [ovs-vsctl: Bridge contains more than one column whose name matches "d"
796 ], [OVS_VSCTL_CLEANUP])
797 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 x])],
798 [1], [], [ovs-vsctl: Bridge does not contain a column whose name matches "x"
799 ], [OVS_VSCTL_CLEANUP])
800 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 :y=z])],
801 [1], [], [ovs-vsctl: :y=z: missing column name
802 ], [OVS_VSCTL_CLEANUP])
803 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 datapath_id:y=z])],
804 [1], [], [ovs-vsctl: datapath_id:y=z: trailing garbage "=z" in argument
805 ], [OVS_VSCTL_CLEANUP])
806 AT_CHECK([RUN_OVS_VSCTL([set bridge br0 'datapath_id:y>=z'])],
807 [1], [], [ovs-vsctl: datapath_id:y>=z: argument does not end in "=" followed by a value.
808 ], [OVS_VSCTL_CLEANUP])
809 AT_CHECK([RUN_OVS_VSCTL([set controller x connection_mode=standalone])],
810 [1], [], [ovs-vsctl: no row "x" in table Controller
811 ], [OVS_VSCTL_CLEANUP])
812 AT_CHECK([RUN_OVS_VSCTL([wait-until bridge br0 datapath_id:y,z])],
813 [1], [], [ovs-vsctl: datapath_id:y,z: argument does not end in "=", "!=", "<", ">", "<=", ">=", "{=}", "{!=}", "{<}", "{>}", "{<=}", or "{>=}" followed by a value.
814 ], [OVS_VSCTL_CLEANUP])
815 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 datapath_id::])],
816 [1], [], [ovs-vsctl: datapath_id::: trailing garbage ":" in argument
817 ], [OVS_VSCTL_CLEANUP])
818 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 datapath_id:x])],
819 [1], [], [ovs-vsctl: cannot specify key to get for non-map column datapath_id
820 ], [OVS_VSCTL_CLEANUP])
821 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 external_ids:x])],
822 [1], [], [ovs-vsctl: no key "x" in Bridge record "br0" column external_ids
823 ], [OVS_VSCTL_CLEANUP])
824 AT_CHECK([RUN_OVS_VSCTL([set bridge br0 flood_vlans=-1])],
825 [1], [], [ovs-vsctl: constraint violation: -1 is not in the valid range 0 to 4095 (inclusive)
826 ], [OVS_VSCTL_CLEANUP])
827 AT_CHECK([RUN_OVS_VSCTL([set bridge br0 flood_vlans=4096])],
828 [1], [], [ovs-vsctl: constraint violation: 4096 is not in the valid range 0 to 4095 (inclusive)
829 ], [OVS_VSCTL_CLEANUP])
830 AT_CHECK([RUN_OVS_VSCTL([set c br1 'connection-mode=xyz'])],
831 [1], [], [[ovs-vsctl: constraint violation: xyz is not one of the allowed values ([in-band, out-of-band])
832 ]], [OVS_VSCTL_CLEANUP])
833 AT_CHECK([RUN_OVS_VSCTL([set c br1 connection-mode:x=y])],
834 [1], [], [ovs-vsctl: cannot specify key to set for non-map column connection_mode
835 ], [OVS_VSCTL_CLEANUP])
836 AT_CHECK([RUN_OVS_VSCTL([add bridge br1 datapath_id x y])],
837 [1], [], [ovs-vsctl: "add" operation would put 2 values in column datapath_id of table Bridge but the maximum number is 1
838 ], [OVS_VSCTL_CLEANUP])
839 AT_CHECK([RUN_OVS_VSCTL([remove netflow `cat netflow-uuid` targets '"1.2.3.4:567"'])],
840 [1], [], [ovs-vsctl: "remove" operation would put 0 values in column targets of table NetFlow but the minimum number is 1
841 ], [OVS_VSCTL_CLEANUP])
842 AT_CHECK([RUN_OVS_VSCTL([remove netflow x targets '"1.2.3.4:567"'])],
843 [1], [], [ovs-vsctl: no row "x" in table NetFlow
844 ], [OVS_VSCTL_CLEANUP])
845 AT_CHECK([RUN_OVS_VSCTL([clear netflow x targets])],
846 [1], [], [ovs-vsctl: no row "x" in table NetFlow
847 ], [OVS_VSCTL_CLEANUP])
848 AT_CHECK([RUN_OVS_VSCTL([clear netflow `cat netflow-uuid` targets])],
849 [1], [], [ovs-vsctl: "clear" operation cannot be applied to column targets of table NetFlow, which is not allowed to be empty
850 ], [OVS_VSCTL_CLEANUP])
851 AT_CHECK([RUN_OVS_VSCTL([destroy bridge br2])],
852 [1], [], [ovs-vsctl: no row "br2" in table Bridge
853 ], [OVS_VSCTL_CLEANUP])
854 AT_CHECK([RUN_OVS_VSCTL([add in br1 name x])],
855 [1], [], [ovs-vsctl: cannot modify read-only column name in table Interface
856 ], [OVS_VSCTL_CLEANUP])
857 AT_CHECK([RUN_OVS_VSCTL([set port br0 name=br2])],
858 [1], [], [ovs-vsctl: cannot modify read-only column name in table Port
859 ], [OVS_VSCTL_CLEANUP])
860 AT_CHECK([RUN_OVS_VSCTL([remove bridge br0 name br1])],
861 [1], [], [ovs-vsctl: cannot modify read-only column name in table Bridge
862 ], [OVS_VSCTL_CLEANUP])
863 AT_CHECK([RUN_OVS_VSCTL([remove bridge br1 flood-vlans true])],
864 [1], [], [ovs-vsctl: "true" is not a valid integer
865 ], [OVS_VSCTL_CLEANUP])
866 AT_CHECK([RUN_OVS_VSCTL([clear bridge br1 name])],
867 [1], [], [ovs-vsctl: cannot modify read-only column name in table Bridge
868 ], [OVS_VSCTL_CLEANUP])
872 AT_SETUP([database commands -- conditions])
873 AT_KEYWORDS([ovs-vsctl])
874 ON_EXIT([kill `cat pid`])
877 [RUN_OVS_VSCTL_TOGETHER(
879 [add-br br1], [set bridge br1 flood_vlans=0 other-config:x='""'],
880 [add-br br2], [set bridge br2 flood_vlans=1 other-config:x=y],
881 [add-br br3], [set bridge br3 flood_vlans=0,1 other-config:x=z],
882 [add-br br4], [set bridge br4 flood_vlans=2],
883 [add-br br5], [set bridge br5 flood_vlans=0,2],
884 [add-br br6], [set bridge br6 flood_vlans=1,2],
885 [add-br br7], [set bridge br7 flood_vlans=0,1,2])], [0], [
901 m4_define([VSCTL_CHECK_FIND],
902 [AT_CHECK([echo `ovs-vsctl --bare --no-wait -vreconnect:emer --db=unix:socket -- --columns=name find bridge '$1' | sort`], [0], [$2
905 # Arithmetic relational operators without keys.
906 VSCTL_CHECK_FIND([flood_vlans=0], [br1])
907 VSCTL_CHECK_FIND([flood_vlans=1], [br2])
908 VSCTL_CHECK_FIND([flood_vlans=0,2], [br5])
909 VSCTL_CHECK_FIND([flood_vlans=0,1,2], [br7])
910 VSCTL_CHECK_FIND([flood_vlans=3], [])
912 VSCTL_CHECK_FIND([flood_vlans!=0], [br0 br2 br3 br4 br5 br6 br7])
913 VSCTL_CHECK_FIND([flood_vlans!=1], [br0 br1 br3 br4 br5 br6 br7])
914 VSCTL_CHECK_FIND([flood_vlans!=0,2], [br0 br1 br2 br3 br4 br6 br7])
915 VSCTL_CHECK_FIND([flood_vlans!=0,1,2], [br0 br1 br2 br3 br4 br5 br6])
916 VSCTL_CHECK_FIND([flood_vlans!=3], [br0 br1 br2 br3 br4 br5 br6 br7])
918 VSCTL_CHECK_FIND([flood_vlans<2], [br0 br1 br2])
919 VSCTL_CHECK_FIND([flood_vlans<0,2], [br0 br1 br2 br3 br4])
920 VSCTL_CHECK_FIND([flood_vlans>1], [br3 br4 br5 br6 br7])
921 VSCTL_CHECK_FIND([flood_vlans>0,1], [br5 br6 br7])
922 VSCTL_CHECK_FIND([flood_vlans<=2], [br0 br1 br2 br4])
923 VSCTL_CHECK_FIND([flood_vlans<=0,2], [br0 br1 br2 br3 br4 br5])
924 VSCTL_CHECK_FIND([flood_vlans>=1], [br2 br3 br4 br5 br6 br7])
925 VSCTL_CHECK_FIND([flood_vlans>=0,1], [br3 br5 br6 br7])
927 # Set relational operators without keys.
928 VSCTL_CHECK_FIND([flood_vlans{=}0], [br1])
929 VSCTL_CHECK_FIND([flood_vlans{=}1], [br2])
930 VSCTL_CHECK_FIND([flood_vlans{=}0,2], [br5])
931 VSCTL_CHECK_FIND([flood_vlans{=}0,1,2], [br7])
932 VSCTL_CHECK_FIND([flood_vlans{=}3], [])
934 VSCTL_CHECK_FIND([flood_vlans{!=}0], [br0 br2 br3 br4 br5 br6 br7])
935 VSCTL_CHECK_FIND([flood_vlans{!=}1], [br0 br1 br3 br4 br5 br6 br7])
936 VSCTL_CHECK_FIND([flood_vlans{!=}0,2], [br0 br1 br2 br3 br4 br6 br7])
937 VSCTL_CHECK_FIND([flood_vlans{!=}0,1,2], [br0 br1 br2 br3 br4 br5 br6])
938 VSCTL_CHECK_FIND([flood_vlans{!=}3], [br0 br1 br2 br3 br4 br5 br6 br7])
940 VSCTL_CHECK_FIND([flood_vlans{<}[[]]], [])
941 VSCTL_CHECK_FIND([flood_vlans{<=}[[]]], [br0])
942 VSCTL_CHECK_FIND([flood_vlans{<}0], [br0])
943 VSCTL_CHECK_FIND([flood_vlans{<=}0], [br0 br1])
944 VSCTL_CHECK_FIND([flood_vlans{<}1,2], [br0 br2 br4])
945 VSCTL_CHECK_FIND([flood_vlans{<=}1,2], [br0 br2 br4 br6])
947 VSCTL_CHECK_FIND([flood_vlans{>}[[]]], [br1 br2 br3 br4 br5 br6 br7])
948 VSCTL_CHECK_FIND([flood_vlans{>=}[[]]], [br0 br1 br2 br3 br4 br5 br6 br7])
949 VSCTL_CHECK_FIND([flood_vlans{>}0], [br3 br5 br7])
950 VSCTL_CHECK_FIND([flood_vlans{>=}0], [br1 br3 br5 br7])
951 VSCTL_CHECK_FIND([flood_vlans{>}0,2], [br7])
952 VSCTL_CHECK_FIND([flood_vlans{>=}1,2], [br6 br7])
953 VSCTL_CHECK_FIND([flood_vlans{>=}0,2], [br5 br7])
955 # Arithmetic relational operators with keys.
956 VSCTL_CHECK_FIND([other-config:x=""], [br1])
957 VSCTL_CHECK_FIND([other-config:x=y], [br2])
958 VSCTL_CHECK_FIND([other-config:x=z], [br3])
960 VSCTL_CHECK_FIND([other-config:x!=""], [br2 br3])
961 VSCTL_CHECK_FIND([other-config:x!=y], [br1 br3])
962 VSCTL_CHECK_FIND([other-config:x!=z], [br1 br2])
964 VSCTL_CHECK_FIND([other-config:x>y], [br3])
965 VSCTL_CHECK_FIND([other-config:x>=y], [br2 br3])
966 VSCTL_CHECK_FIND([other-config:x<y], [br1])
967 VSCTL_CHECK_FIND([other-config:x<=y], [br1 br2])
969 # Set relational operators with keys.
970 VSCTL_CHECK_FIND([other-config:x{=}[[]]], [br0 br4 br5 br6 br7])
971 VSCTL_CHECK_FIND([other-config:x{=}""], [br1])
972 VSCTL_CHECK_FIND([other-config:x{=}y], [br2])
973 VSCTL_CHECK_FIND([other-config:x{=}z], [br3])
975 VSCTL_CHECK_FIND([other-config:x{!=}[[]]], [br1 br2 br3])
976 VSCTL_CHECK_FIND([other-config:x{!=}""], [br0 br2 br3 br4 br5 br6 br7])
977 VSCTL_CHECK_FIND([other-config:x{!=}y], [br0 br1 br3 br4 br5 br6 br7])
978 VSCTL_CHECK_FIND([other-config:x{!=}z], [br0 br1 br2 br4 br5 br6 br7])
980 VSCTL_CHECK_FIND([other-config:x{<=}[[]]], [br0 br4 br5 br6 br7])
981 VSCTL_CHECK_FIND([other-config:x{<=}x], [br0 br4 br5 br6 br7])
982 VSCTL_CHECK_FIND([other-config:x{<=}""], [br0 br1 br4 br5 br6 br7])
983 VSCTL_CHECK_FIND([other-config:x{<=}y], [br0 br2 br4 br5 br6 br7])
984 VSCTL_CHECK_FIND([other-config:x{<=}z], [br0 br3 br4 br5 br6 br7])
985 VSCTL_CHECK_FIND([other-config:x{<=}x,y,z], [br0 br2 br3 br4 br5 br6 br7])
987 VSCTL_CHECK_FIND([other-config:x{<}[[]]], [])
988 VSCTL_CHECK_FIND([other-config:x{<}x], [br0 br4 br5 br6 br7])
989 VSCTL_CHECK_FIND([other-config:x{<}""], [br0 br4 br5 br6 br7])
990 VSCTL_CHECK_FIND([other-config:x{<}y], [br0 br4 br5 br6 br7])
991 VSCTL_CHECK_FIND([other-config:x{<}z], [br0 br4 br5 br6 br7])
993 VSCTL_CHECK_FIND([other-config:x{>=}[[]]], [br0 br1 br2 br3 br4 br5 br6 br7])
994 VSCTL_CHECK_FIND([other-config:x{>=}x], [])
995 VSCTL_CHECK_FIND([other-config:x{>=}""], [br1])
996 VSCTL_CHECK_FIND([other-config:x{>=}y], [br2])
997 VSCTL_CHECK_FIND([other-config:x{>=}z], [br3])
999 VSCTL_CHECK_FIND([other-config:x{>}[[]]], [br1 br2 br3])
1000 VSCTL_CHECK_FIND([other-config:x{>}x], [])
1001 VSCTL_CHECK_FIND([other-config:x{>}""], [])
1002 VSCTL_CHECK_FIND([other-config:x{>}y], [])
1003 VSCTL_CHECK_FIND([other-config:x{>}z], [])
1007 AT_SETUP([database commands -- wait-until immediately true])
1008 AT_KEYWORDS([ovs-vsctl])
1010 AT_CHECK([RUN_OVS_VSCTL(
1012 [add-bond br0 bond0 eth0 eth1],
1013 [set port bond0 bond_updelay=500 other-config:abc=def])],
1014 [0], [], [], [OVS_VSCTL_CLEANUP])
1015 AT_CHECK([RUN_OVS_VSCTL([[wait-until Open_vSwitch . manager_options=[]]])],
1016 [0], [], [], [OVS_VSCTL_CLEANUP])
1017 AT_CHECK([RUN_OVS_VSCTL([[wait-until Open_vSwitch . bridges!=[]]])],
1018 [0], [], [], [OVS_VSCTL_CLEANUP])
1019 AT_CHECK([RUN_OVS_VSCTL([[wait-until Port bond0 other-config:abc=def]])],
1020 [0], [], [], [OVS_VSCTL_CLEANUP])
1021 AT_CHECK([RUN_OVS_VSCTL([[wait-until port bond0 'bond_updelay>50' 'other-config:abc>d' 'other-config:abc<e']])],
1022 [0], [], [], [OVS_VSCTL_CLEANUP])
1026 AT_SETUP([database commands -- wait-until must wait])
1027 AT_KEYWORDS([ovs-vsctl])
1031 # Start ovs-vsctls in background.
1032 (RUN_OVS_VSCTL([[wait-until o . bridges!=[] -- get bridge br10 other-config:abc]])) > stdout1 &
1033 (RUN_OVS_VSCTL([[wait-until bridge br1 -- get bridge br1 other-config:abc]])) > stdout2 &
1034 (RUN_OVS_VSCTL([[wait-until bridge br1 other-config={abc=def} -- get bridge br1 other-config]])) > stdout3 &
1035 (RUN_OVS_VSCTL([[wait-until port bond0 'bond_updelay>50' -- get port bond0 bond-updelay]])) > stdout4 &
1037 # Give the ovs-vsctls a chance to read the database
1040 AT_CHECK([RUN_OVS_VSCTL([add-br br10 -- set bridge br10 other-config:abc=quux])
1041 RUN_OVS_VSCTL([add-br br1 -- set bridge br1 other-config:abc=def -- add-bond br1 bond0 eth0 eth1 -- set port bond0 bond_updelay=500])],
1042 [0], [], [], [OVS_VSCTL_CLEANUP])
1044 # Wait for the ovs-vsctls to finish.
1048 AT_CHECK([cat stdout1], [0], [quux
1049 ], [], [OVS_VSCTL_CLEANUP])
1050 AT_CHECK([cat stdout2], [0], [def
1051 ], [], [OVS_VSCTL_CLEANUP])
1052 AT_CHECK([cat stdout3], [0], [{abc=def}
1053 ], [], [OVS_VSCTL_CLEANUP])
1054 AT_CHECK([cat stdout4], [0], [500
1055 ], [], [OVS_VSCTL_CLEANUP])
1060 AT_SETUP([--id option on create, get commands])
1061 AT_KEYWORDS([ovs-vsctl])
1063 AT_CHECK([RUN_OVS_VSCTL([add-br br0],
1064 [add-port br0 eth0],
1065 [add-port br0 eth1])])
1067 [RUN_OVS_VSCTL_TOGETHER(
1068 [set bridge br0 mirrors=@m],
1069 [--id=@eth0 get port eth0],
1070 [--id=@eth1 get port eth1],
1071 [--id=@m create mirror name=mymirror select-dst-port=@eth0 select-src-port=@eth0 output-port=@eth1])],
1072 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
1074 [${PERL} $srcdir/uuidfilt.pl stdout], [0], [dnl
1080 [], [OVS_VSCTL_CLEANUP])
1083 [list port eth0 eth1],
1085 [list bridge br0])],
1086 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
1088 [sed -n -e '/uuid/p' -e '/name/p' -e '/mirrors/p' -e '/select/p' -e '/output/p' < stdout | ${PERL} $srcdir/uuidfilt.pl], [0], [dnl
1098 select_dst_port : [<0>]
1099 select_src_port : [<0>]
1105 [], [OVS_VSCTL_CLEANUP])
1109 AT_SETUP([unreferenced record warnings])
1110 AT_KEYWORDS([ovs-vsctl])
1113 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer --db=unix:socket \
1114 -- create Bridge name=br0 | ${PERL} $srcdir/uuidfilt.pl],
1116 ], [db_ctl_base|WARN|applying "create" command to table Bridge without --id option will have no effect
1117 ], [OVS_VSCTL_CLEANUP])
1119 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer --db=unix:socket \
1120 -- --id=@br0 create Bridge name=br0 | ${PERL} $srcdir/uuidfilt.pl],
1122 ], [vsctl|WARN|row id "@br0" was created but no reference to it was inserted, so it will not actually appear in the database
1123 ], [OVS_VSCTL_CLEANUP])
1125 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer --db=unix:socket \
1126 -- --id=@eth0_iface create Interface name=eth0 \
1127 -- --id=@eth0 create Port name=eth0 interfaces=@eth0_iface \
1128 -- --id=@m0 create Mirror name=m0 output_port=@eth0 \
1129 -- --id=@br0 create Bridge name=br0 mirrors=@m0 \
1130 -- set Open_vSwitch . bridges=@br0 | ${PERL} $srcdir/uuidfilt.pl],
1135 ], [vsctl|WARN|row id "@eth0" was created but only a weak reference to it was inserted, so it will not actually appear in the database
1136 ], [OVS_VSCTL_CLEANUP])
1140 dnl This test really shows a bug -- "create" followed by "list" in
1141 dnl the same execution shows the wrong UUID on the "list" command.
1142 dnl The bug is documented in ovs-vsctl.8.
1143 AT_SETUP([created row UUID is wrong in same execution])
1144 AT_KEYWORDS([ovs-vsctl])
1146 AT_CHECK([RUN_OVS_VSCTL([--id=@br0 create Bridge name=br0 -- add Open_vSwitch . bridges @br0 -- list bridge])],
1147 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
1148 AT_CHECK([${PERL} $srcdir/uuidfilt.pl stdout], [0],
1155 datapath_version : ""
1161 mcast_snooping_enable: false
1173 ]], [ignore], [test ! -e pid || kill `cat pid`])
1177 dnl This test will create a linux-htb QoS record that
1178 dnl points to a few queues and use it on a1 and a2 port.
1179 dnl It also destroys all records from Qos and Queue table.
1180 AT_SETUP([--all option on destroy command])
1181 AT_KEYWORDS([ovs-vsctl])
1183 AT_CHECK([RUN_OVS_VSCTL(
1186 [add-port a a2])], [0], [], [], [OVS_VSCTL_CLEANUP])
1187 CHECK_BRIDGES([a, a, 0])
1188 CHECK_PORTS([a], [a1], [a2])
1189 CHECK_IFACES([a], [a1], [a2])
1190 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
1191 [set Port a1 qos=@newqos],
1192 [set Port a2 qos=@newqos],
1193 [--id=@newqos create QoS type=linux-htb other-config:max-rate=1000000000 queues=0=@q0,1=@q1],
1194 [--id=@q0 create Queue other-config:min-rate=100000000 other-config:max-rate=100000000],
1195 [--id=@q1 create Queue other-config:min-rate=500000000])], [0], [ignore], [], [OVS_VSCTL_CLEANUP])
1196 AT_CHECK([RUN_OVS_VSCTL(
1197 [--columns=other_config,type list Qos])], [0],
1198 [other_config : {max-rate="1000000000"}
1200 ], [], [OVS_VSCTL_CLEANUP])
1201 AT_CHECK([RUN_OVS_VSCTL(
1202 [--columns=other_config list Queue | sort | sed '/^$/d'])], [0],
1203 [other_config : {max-rate="100000000", min-rate="100000000"}
1204 other_config : {min-rate="500000000"}
1205 ], [], [OVS_VSCTL_CLEANUP])
1206 AT_CHECK([RUN_OVS_VSCTL(
1207 [clear Port a1 qos],
1208 [clear Port a2 qos])], [0], [], [], [OVS_VSCTL_CLEANUP])
1209 AT_CHECK([RUN_OVS_VSCTL(
1210 [--columns=qos list Port a1 a2])], [0],
1214 ]], [], [OVS_VSCTL_CLEANUP])
1215 AT_CHECK([RUN_OVS_VSCTL(
1216 [--all destroy Qos])], [0], [], [], [OVS_VSCTL_CLEANUP])
1217 AT_CHECK([RUN_OVS_VSCTL(
1218 [-- list Qos])], [0], [], [], [OVS_VSCTL_CLEANUP])
1219 AT_CHECK([RUN_OVS_VSCTL(
1220 [--all destroy Queue])], [0], [], [], [OVS_VSCTL_CLEANUP])
1221 AT_CHECK([RUN_OVS_VSCTL(
1222 [-- list Queue])], [0], [], [], [OVS_VSCTL_CLEANUP])
1226 dnl ----------------------------------------------------------------------
1227 AT_BANNER([ovs-vsctl add-port -- reserved port names])
1229 AT_SETUP([add-port -- reserved names 1])
1232 # Test creating all reserved port names
1243 # Try creating the port
1244 AT_CHECK([ovs-vsctl add-port br0 reserved_name], [0], [], [dnl
1245 ovs-vsctl: Error detected while setting up 'reserved_name'. See ovs-vswitchd log for details.
1248 OVS_WAIT_UNTIL([test `grep -- "|WARN|" ovs-vswitchd.log | wc -l` -ge 1])
1249 # Detect the warning log message
1250 AT_CHECK([sed -n "s/^.*\(|bridge|WARN|.*\)$/\1/p" ovs-vswitchd.log], [0], [dnl
1251 |bridge|WARN|could not create interface reserved_name, name is reserved
1253 # Delete the warning log message
1254 AT_CHECK([sed "/|bridge|WARN|/d" ovs-vswitchd.log > ovs-vswitchd.log], [0], [], [])
1256 AT_CHECK([ovs-vsctl del-port br0 reserved_name], [0], [], [])])
1260 AT_SETUP([add-port -- reserved names 2])
1261 # Creates all type of tunnel ports
1262 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=gre \
1263 options:remote_ip=1.1.1.1 ofport_request=1\
1264 -- add-port br0 p2 -- set Interface p2 type=gre64 \
1265 options:local_ip=2.2.2.2 options:remote_ip=1.1.1.1 \
1267 -- add-port br0 p3 -- set Interface p3 type=lisp \
1268 options:remote_ip=2.2.2.2 ofport_request=3 \
1269 -- add-port br0 p4 -- set Interface p4 type=vxlan \
1270 options:remote_ip=2.2.2.2 ofport_request=4 \
1271 -- add-port br0 p5 -- set Interface p5 type=geneve \
1272 options:remote_ip=2.2.2.2 ofport_request=5])
1274 # Test creating all reserved tunnel port names
1283 # Try creating the port
1284 AT_CHECK([ovs-vsctl add-port br0 reserved_name], [0], [], [dnl
1285 ovs-vsctl: Error detected while setting up 'reserved_name'. See ovs-vswitchd log for details.
1288 OVS_WAIT_UNTIL([test `grep -- "|WARN|" ovs-vswitchd.log | wc -l` -ge 1])
1289 # Detect the warning log message
1290 AT_CHECK([sed -n "s/^.*\(|bridge|WARN|.*\)$/\1/p" ovs-vswitchd.log], [0], [dnl
1291 |bridge|WARN|could not create interface reserved_name, name is reserved
1293 # Delete the warning log message
1294 AT_CHECK([sed "/|bridge|WARN|/d" ovs-vswitchd.log > ovs-vswitchd.log], [0], [], [])
1296 AT_CHECK([ovs-vsctl del-port br0 reserved_name], [0], [], [])])
1300 AT_SETUP([naming in db commands])
1303 dnl First check that the database commands can refer to row by database UUID.
1304 AT_CHECK([RUN_OVS_VSCTL([add-br br0])])
1305 uuid=`[]RUN_OVS_VSCTL(get port br0 _uuid)`
1306 AT_CHECK([RUN_OVS_VSCTL([get port $uuid name])], [0], ["br0"
1309 dnl Next check that, if a database row is given a name that has the same form
1310 dnl as the database UUIDs, the name can still be used to refer to rows.
1311 AT_CHECK([RUN_OVS_VSCTL([add-br 0fcd11a1-2ba8-4b38-a358-4bccf2bf3057])])
1312 AT_CHECK([RUN_OVS_VSCTL([get interface 0fcd11a1-2ba8-4b38-a358-4bccf2bf3057 type])], [0], [internal