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 AT_CHECK([kill -l `cat status`], [0], [ALRM
165 dnl Without --retry, we should retry for passive connections.
167 [ovs-vsctl --db=punix:foo --timeout=1 -vreconnect:emer -vPATTERN:console:'%c|%p|%m' -- init
170 AT_CHECK([grep -c 'terminating with signal' stderr], [0], [1
172 AT_CHECK([kill -l `cat status`], [0], [ALRM
176 dnl ----------------------------------------------------------------------
177 AT_BANNER([ovs-vsctl unit tests -- real bridges])
180 AT_KEYWORDS([ovs-vsctl])
182 AT_CHECK([RUN_OVS_VSCTL([add-br a])], [0], [], [], [OVS_VSCTL_CLEANUP])
183 CHECK_BRIDGES([a, a, 0])
189 AT_SETUP([add-br a, add-br a])
190 AT_KEYWORDS([ovs-vsctl])
192 AT_CHECK([RUN_OVS_VSCTL([add-br a])], [0], [], [], [OVS_VSCTL_CLEANUP])
193 AT_CHECK([RUN_OVS_VSCTL([add-br a])], [1], [],
194 [ovs-vsctl: cannot create a bridge named a because a bridge named a already exists
195 ], [OVS_VSCTL_CLEANUP])
199 AT_SETUP([add-br a, add-br b])
200 AT_KEYWORDS([ovs-vsctl])
202 AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b])], [0], [], [],
204 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br a b 9])], [1], [],
205 [ovs-vsctl: "--may-exist add-br a b 9" but a is not a VLAN bridge
208 CHECK_BRIDGES([a, a, 0], [b, b, 0])
216 AT_SETUP([add-br a, add-br b, del-br a])
217 AT_KEYWORDS([ovs-vsctl])
219 AT_CHECK([RUN_OVS_VSCTL([add-br a], [add-br b], [del-br a])], [0], [], [],
221 CHECK_BRIDGES([b, b, 0])
227 AT_SETUP([add-br a, del-br a, add-br a])
228 AT_KEYWORDS([ovs-vsctl])
230 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
234 [set Interface a other_config:key=value],
235 [get Interface a other_config:key])], [0], [
240 ], [], [OVS_VSCTL_CLEANUP])
241 CHECK_BRIDGES([a, a, 0])
247 AT_SETUP([add-br a, add-port a a1, add-port a a2])
248 AT_KEYWORDS([ovs-vsctl])
250 AT_CHECK([RUN_OVS_VSCTL(
252 [--if-exists del-br b],
254 [add-port a a2])], [0], [], [], [OVS_VSCTL_CLEANUP])
255 CHECK_BRIDGES([a, a, 0])
256 CHECK_PORTS([a], [a1], [a2])
257 CHECK_IFACES([a], [a1], [a2])
261 AT_SETUP([add-br a, add-port a a1, add-port a a1])
262 AT_KEYWORDS([ovs-vsctl])
264 AT_CHECK([RUN_OVS_VSCTL(
266 [add-port a a1])], [0], [], [], [OVS_VSCTL_CLEANUP])
267 AT_CHECK([RUN_OVS_VSCTL([add-port a a1])], [1], [],
268 [ovs-vsctl: cannot create a port named a1 because a port named a1 already exists on bridge a
269 ], [OVS_VSCTL_CLEANUP])
273 AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-br a])
274 AT_KEYWORDS([ovs-vsctl])
276 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
281 [--if-exists del-port b b2],
288 ], [], [OVS_VSCTL_CLEANUP])
289 CHECK_BRIDGES([b, b, 0])
290 CHECK_PORTS([b], [b1])
291 CHECK_IFACES([b], [b1])
295 AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3])
296 AT_KEYWORDS([ovs-vsctl])
298 AT_CHECK([RUN_OVS_VSCTL(
300 [add-bond a bond0 a1 a2 a3])], [0], [], [], [OVS_VSCTL_CLEANUP])
301 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-bond a bond0 a3 a1 a2])], [0], [], [],
303 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-bond a bond0 a2 a1])], [1], [],
304 [ovs-vsctl: "--may-exist add-bond a bond0 a2 a1" but bond0 actually has interface(s) a1, a2, a3
307 CHECK_BRIDGES([a, a, 0])
308 CHECK_PORTS([a], [bond0])
309 CHECK_IFACES([a], [a1], [a2], [a3])
313 AT_SETUP([add-br a b, add-port a a1, add-port b b1, del-port a a1])
314 AT_KEYWORDS([ovs-vsctl])
316 AT_CHECK([RUN_OVS_VSCTL(
319 [add-port a a1 tag=9],
321 [--may-exist add-port b b1],
322 [del-port a a1])], [0], [9
323 ], [], [OVS_VSCTL_CLEANUP])
324 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-port b b1])], [0], [], [],
326 AT_CHECK([RUN_OVS_VSCTL([del-port a])], [1], [],
327 [ovs-vsctl: cannot delete port a because it is the local port for bridge a (deleting this port requires deleting the entire bridge)
330 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-port a b1])], [1], [],
331 [ovs-vsctl: "--may-exist add-port a b1" but b1 is actually attached to bridge b
334 CHECK_BRIDGES([a, a, 0], [b, b, 0])
337 CHECK_PORTS([b], [b1])
338 CHECK_IFACES([b], [b1])
342 AT_SETUP([add-br a, add-bond a bond0 a1 a2 a3, del-port bond0])
343 AT_KEYWORDS([ovs-vsctl])
345 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
347 [add-bond a bond0 a1 a2 a3 tag=9],
348 [get Port bond0 tag],
349 [del-port bond0])], [0], [
353 ], [], [OVS_VSCTL_CLEANUP])
354 CHECK_BRIDGES([a, a, 0])
359 AT_SETUP([external IDs])
360 AT_KEYWORDS([ovs-vsctl])
362 AT_CHECK([RUN_OVS_VSCTL_ONELINE(
365 [add-bond a bond0 a2 a3],
366 [br-set-external-id a key0 value0],
367 [set port a1 external-ids:key1=value1],
368 [set interface a2 external-ids:key2=value2],
369 [set interface a2 external-ids:key3=value3],
370 [set interface a3 external-ids:key4=value4],
371 [br-get-external-id a],
372 [br-get-external-id a key0],
373 [br-get-external-id a key1],
374 [br-set-external-id a key0 othervalue],
375 [br-get-external-id a],
376 [br-set-external-id a key0],
377 [br-get-external-id a],
378 [get port a1 external-ids],
379 [get interface a2 external-ids],
380 [get interface a3 external-ids])], [0], [
396 {"key2"="value2", "key3"="value3"}
398 ], [], [OVS_VSCTL_CLEANUP])
399 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
400 [br-get-external-id a],
401 [get port a1 external-ids],
402 [get interface a2 external-ids],
403 [get interface a3 external-ids])], [0],
406 {"key2"="value2", "key3"="value3"}
408 ], [], [OVS_VSCTL_CLEANUP])
409 CHECK_BRIDGES([a, a, 0])
410 CHECK_PORTS([a], [a1], [bond0])
411 CHECK_IFACES([a], [a1], [a2], [a3])
415 AT_SETUP([controllers])
416 AT_KEYWORDS([controller ovs-vsctl])
418 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
421 [get-controller br0],
422 [set-controller br0 tcp:4.5.6.7],
423 [get-controller br0],
425 [del-controller br0],
426 [get-controller br0],
428 [set-controller br0 tcp:8.9.10.11 tcp:5.4.3.2],
429 [get-controller br0])], [0], [
436 tcp:5.4.3.2\ntcp:8.9.10.11
437 ], [], [OVS_VSCTL_CLEANUP])
441 dnl ----------------------------------------------------------------------
442 dnl OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([VLAN])
443 m4_define([OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF],
447 [--may-exist add-br xenbr0],
448 [add-port xenbr0 eth0],
449 [--may-exist add-port xenbr0 eth0],
450 [add-br xapi1 xenbr0 $1],
451 [--may-exist add-br xapi1 xenbr0 $1],
452 [add-port xapi1 eth0.$1])],
453 [0], [], [], [OVS_VSCTL_CLEANUP])])
455 dnl OVS_VSCTL_FAKE_BRIDGE_TESTS([VLAN])
456 m4_define([OVS_VSCTL_FAKE_BRIDGE_TESTS], [
457 AT_BANNER([ovs-vsctl unit tests -- fake bridges (VLAN $1)])
459 AT_SETUP([simple fake bridge (VLAN $1)])
460 AT_KEYWORDS([ovs-vsctl fake-bridge])
462 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
463 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1])], [1], [],
464 [ovs-vsctl: "--may-exist add-br xapi1" but xapi1 is a VLAN bridge for VLAN $1
465 ], [OVS_VSCTL_CLEANUP])
466 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1 xxx $1])], [1], [],
467 [ovs-vsctl: "--may-exist add-br xapi1 xxx $1" but xapi1 has the wrong parent xenbr0
468 ], [OVS_VSCTL_CLEANUP])
469 AT_CHECK([RUN_OVS_VSCTL([--may-exist add-br xapi1 xenbr0 10])], [1], [],
470 [ovs-vsctl: "--may-exist add-br xapi1 xenbr0 10" but xapi1 is a VLAN bridge for the wrong VLAN $1
471 ], [OVS_VSCTL_CLEANUP])
472 CHECK_BRIDGES([xapi1, xenbr0, $1], [xenbr0, xenbr0, 0])
473 CHECK_PORTS([xenbr0], [eth0])
474 CHECK_IFACES([xenbr0], [eth0])
475 CHECK_PORTS([xapi1], [eth0.$1])
476 CHECK_IFACES([xapi1], [eth0.$1])
480 AT_SETUP([list bridges -- real and fake (VLAN $1)])
481 AT_KEYWORDS([ovs-vsctl fake-bridge])
483 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
484 AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- list-br])], [0],
486 ], [], [OVS_VSCTL_CLEANUP])
487 AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- --real list-br])], [0],
489 ], [], [OVS_VSCTL_CLEANUP])
490 AT_CHECK([RUN_OVS_VSCTL_ONELINE([-- --fake list-br])], [0],
492 ], [], [OVS_VSCTL_CLEANUP])
496 AT_SETUP([simple fake bridge + del-br fake bridge (VLAN $1)])
497 AT_KEYWORDS([ovs-vsctl fake-bridge])
499 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
500 AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])], [0], [], [], [OVS_VSCTL_CLEANUP])
501 CHECK_BRIDGES([xenbr0, xenbr0, 0])
502 CHECK_PORTS([xenbr0], [eth0])
503 CHECK_IFACES([xenbr0], [eth0])
507 AT_SETUP([simple fake bridge + del-br real bridge (VLAN $1)])
508 AT_KEYWORDS([ovs-vsctl fake-bridge])
510 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
511 AT_CHECK([RUN_OVS_VSCTL([del-br xenbr0])], [0], [], [], [OVS_VSCTL_CLEANUP])
516 AT_SETUP([simple fake bridge + external IDs (VLAN $1)])
517 AT_KEYWORDS([ovs-vsctl fake-bridge])
519 OVS_VSCTL_SETUP_SIMPLE_FAKE_CONF([$1])
520 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
521 [br-set-external-id xenbr0 key0 value0],
522 [br-set-external-id xapi1 key1 value1],
523 [br-get-external-id xenbr0],
524 [br-get-external-id xenbr0 key0],
525 [br-get-external-id xapi1],
526 [br-get-external-id xapi1 key1])], [0], [
532 ], [], [OVS_VSCTL_CLEANUP])
533 CHECK_BRIDGES([xapi1, xenbr0, $1], [xenbr0, xenbr0, 0])
534 CHECK_PORTS([xenbr0], [eth0])
535 CHECK_IFACES([xenbr0], [eth0])
536 CHECK_PORTS([xapi1], [eth0.$1])
537 CHECK_IFACES([xapi1], [eth0.$1])
540 ]) # OVS_VSCTL_FAKE_BRIDGE_TESTS
542 OVS_VSCTL_FAKE_BRIDGE_TESTS([9])
543 OVS_VSCTL_FAKE_BRIDGE_TESTS([0])
545 dnl OVS_VSCTL_SETUP_BOND_FAKE_CONF([VLAN])
546 m4_define([OVS_VSCTL_SETUP_BOND_FAKE_CONF],
550 [add-bond xapi1 bond0 eth0 eth1],
551 [add-br xapi2 xapi1 $1],
552 [add-port xapi2 bond0.$1])],
553 [0], [], [], [OVS_VSCTL_CLEANUP])])
555 AT_SETUP([fake bridge on bond])
556 AT_KEYWORDS([ovs-vsctl fake-bridge])
558 OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
559 CHECK_BRIDGES([xapi1, xapi1, 0], [xapi2, xapi1, 11])
560 CHECK_PORTS([xapi1], [bond0])
561 CHECK_IFACES([xapi1], [eth0], [eth1])
562 CHECK_PORTS([xapi2], [bond0.11])
563 CHECK_IFACES([xapi2], [bond0.11])
567 AT_SETUP([fake bridge on bond + del-br fake bridge])
568 AT_KEYWORDS([ovs-vsctl fake-bridge])
570 OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
571 AT_CHECK([RUN_OVS_VSCTL_ONELINE([del-br xapi2])], [0], [
572 ], [], [OVS_VSCTL_CLEANUP])
573 CHECK_BRIDGES([xapi1, xapi1, 0])
574 CHECK_PORTS([xapi1], [bond0])
575 CHECK_IFACES([xapi1], [eth0], [eth1])
579 AT_SETUP([fake bridge on bond + del-br real bridge])
580 AT_KEYWORDS([ovs-vsctl fake-bridge])
582 OVS_VSCTL_SETUP_BOND_FAKE_CONF([11])
583 AT_CHECK([RUN_OVS_VSCTL([del-br xapi1])])
588 dnl ----------------------------------------------------------------------
589 AT_BANNER([ovs-vsctl unit tests -- manager commands])
592 AT_KEYWORDS([manager ovs-vsctl])
594 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
597 [set-manager tcp:4.5.6.7],
599 [set-manager tcp:8.9.10.11 tcp:5.4.3.2],
602 [get-manager])], [0], [
607 tcp:5.4.3.2\ntcp:8.9.10.11
610 ], [], [OVS_VSCTL_CLEANUP])
614 dnl ----------------------------------------------------------------------
615 AT_BANNER([ovs-vsctl unit tests -- database commands])
617 AT_SETUP([database commands -- positive checks])
618 AT_KEYWORDS([ovs-vsctl])
621 [RUN_OVS_VSCTL_TOGETHER([--id=@br0 create b name=br0],
622 [set o . bridges=@br0])],
623 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
625 AT_CHECK([RUN_OVS_VSCTL([list b], [get b br0 _uuid])],
626 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
628 AT_CHECK([${PERL} $srcdir/uuidfilt.pl out1 out2], [0],
650 ]], [ignore], [test ! -e pid || kill `cat pid`])
652 [RUN_OVS_VSCTL([--columns=fail_mode,name,datapath_type list b])],
657 ]], [ignore], [test ! -e pid || kill `cat pid`])
659 [RUN_OVS_VSCTL([--columns=fail_mode,name,datapath_type find b])],
664 ]], [ignore], [test ! -e pid || kill `cat pid`])
666 RUN_OVS_VSCTL_TOGETHER([--id=@br1 create b name=br1 datapath_type="foo"],
667 [--id=@br2 create b name=br2 external-ids:bar=quux],
668 [add o . bridges @br1 @br2])],
669 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
671 [RUN_OVS_VSCTL([--columns=name find b datapath_type!=foo])], [0], [stdout],
672 [ignore], [test ! -e pid || kill `cat pid`])
673 AT_CHECK([sed -n '/./p' stdout | sort], [0],
680 'other_config:datapath_id="0123456789ab"' \
681 'other_config:hwaddr="00:11:22:33:44:55"' \
682 'external-ids={"uuids"="9c45f225-a7cf-439d-976d-83db6271fda1"}' -- \
683 add bridge br0 external_ids '"roles"="local; remote; cloud"'])],
684 [0], [], [], [OVS_VSCTL_CLEANUP])
685 AT_CHECK([RUN_OVS_VSCTL_ONELINE([get bridge br0 other_config external-ids])],
686 [0], [{datapath_id="0123456789ab", hwaddr="00:11:22:33:44:55"}\n{roles="local; remote; cloud", uuids="9c45f225-a7cf-439d-976d-83db6271fda1"}
687 ], [], [OVS_VSCTL_CLEANUP])
688 AT_CHECK([RUN_OVS_VSCTL([get bridge br0 other_config:hwaddr -- --if-exists get bridge br0 other-config:nonexistent])],
689 [0], ["00:11:22:33:44:55"
691 ], [], [OVS_VSCTL_CLEANUP])
692 AT_CHECK([RUN_OVS_VSCTL([remove br br0 other_config hwaddr 'datapath_id=""' -- get br br0 other_config])],
693 [0], [{datapath_id="0123456789ab"}
694 ], [], [OVS_VSCTL_CLEANUP])
695 AT_CHECK([RUN_OVS_VSCTL([remove br br0 other_config 'datapath_id="0123456789ab"' -- get br br0 other_config])],
697 ], [], [OVS_VSCTL_CLEANUP])
698 AT_CHECK([RUN_OVS_VSCTL([clear br br0 external-ids -- get br br0 external_ids])],
700 ], [], [OVS_VSCTL_CLEANUP])
701 AT_CHECK([RUN_OVS_VSCTL_TOGETHER([destroy b br0],
704 [clear o . bridges])],
705 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
706 AT_CHECK([RUN_OVS_VSCTL([list b])],
707 [0], [], [], [OVS_VSCTL_CLEANUP])
708 AT_CHECK([RUN_OVS_VSCTL([--if-exists get b x datapath_id])],
709 [0], [], [], [OVS_VSCTL_CLEANUP])
710 AT_CHECK([RUN_OVS_VSCTL([--if-exists list b x])],
711 [0], [], [], [OVS_VSCTL_CLEANUP])
712 AT_CHECK([RUN_OVS_VSCTL([--if-exists set controller x connection_mode=standalone])],
713 [0], [], [], [OVS_VSCTL_CLEANUP])
715 [RUN_OVS_VSCTL([--if-exists remove netflow x targets '"1.2.3.4:567"'])],
716 [0], [], [], [OVS_VSCTL_CLEANUP])
718 [RUN_OVS_VSCTL([--if-exists clear netflow x targets])],
719 [0], [], [], [OVS_VSCTL_CLEANUP])
723 AT_SETUP([database commands -- negative checks])
724 AT_KEYWORDS([ovs-vsctl])
727 AT_CHECK([ovs-vsctl --may-exist],
728 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
729 ], [OVS_VSCTL_CLEANUP])
730 AT_CHECK([ovs-vsctl --may-exist --],
731 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
732 ], [OVS_VSCTL_CLEANUP])
733 AT_CHECK([ovs-vsctl -- --may-exist],
734 [1], [ignore], [ovs-vsctl: missing command name (use --help for help)
735 ], [OVS_VSCTL_CLEANUP])
737 AT_CHECK([RUN_OVS_VSCTL([add-br br0])],
738 [0], [ignore], [], [OVS_VSCTL_CLEANUP])
739 AT_CHECK([RUN_OVS_VSCTL([add-br br1])],
740 [0], [ignore], [], [OVS_VSCTL_CLEANUP])
741 AT_CHECK([RUN_OVS_VSCTL([set-controller br1 tcp:127.0.0.1])],
742 [0], [ignore], [], [OVS_VSCTL_CLEANUP])
744 RUN_OVS_VSCTL_TOGETHER([--id=@n create netflow targets='"1.2.3.4:567"'],
745 [set bridge br0 netflow=@n])],
746 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
747 cp stdout netflow-uuid
748 AT_CHECK([RUN_OVS_VSCTL([list netflow `cat netflow-uuid`])],
749 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
750 AT_CHECK([${PERL} $srcdir/uuidfilt.pl netflow-uuid stdout], [0],
755 add_id_to_interface : false
759 targets : ["1.2.3.4:567"]
760 ]], [ignore], [test ! -e pid || kill `cat pid`])
761 AT_CHECK([RUN_OVS_VSCTL([list interx x])],
762 [1], [], [ovs-vsctl: unknown table "interx"
763 ], [OVS_VSCTL_CLEANUP])
764 AT_CHECK([RUN_OVS_VSCTL([list b x])],
765 [1], [], [ovs-vsctl: no row "x" in table Bridge
766 ], [OVS_VSCTL_CLEANUP])
767 AT_CHECK([RUN_OVS_VSCTL([get b x datapath_id])],
768 [1], [], [ovs-vsctl: no row "x" in table Bridge
769 ], [OVS_VSCTL_CLEANUP])
770 AT_CHECK([RUN_OVS_VSCTL([get b br0 d])],
771 [1], [], [ovs-vsctl: Bridge contains more than one column whose name matches "d"
772 ], [OVS_VSCTL_CLEANUP])
773 AT_CHECK([RUN_OVS_VSCTL([get b br0 x])],
774 [1], [], [ovs-vsctl: Bridge does not contain a column whose name matches "x"
775 ], [OVS_VSCTL_CLEANUP])
776 AT_CHECK([RUN_OVS_VSCTL([get b br0 :y=z])],
777 [1], [], [ovs-vsctl: :y=z: missing column name
778 ], [OVS_VSCTL_CLEANUP])
779 AT_CHECK([RUN_OVS_VSCTL([get b br0 datapath_id:y=z])],
780 [1], [], [ovs-vsctl: datapath_id:y=z: trailing garbage "=z" in argument
781 ], [OVS_VSCTL_CLEANUP])
782 AT_CHECK([RUN_OVS_VSCTL([set b br0 'datapath_id:y>=z'])],
783 [1], [], [ovs-vsctl: datapath_id:y>=z: argument does not end in "=" followed by a value.
784 ], [OVS_VSCTL_CLEANUP])
785 AT_CHECK([RUN_OVS_VSCTL([set controller x connection_mode=standalone])],
786 [1], [], [ovs-vsctl: no row "x" in table Controller
787 ], [OVS_VSCTL_CLEANUP])
788 AT_CHECK([RUN_OVS_VSCTL([wait-until b br0 datapath_id:y,z])],
789 [1], [], [ovs-vsctl: datapath_id:y,z: argument does not end in "=", "!=", "<", ">", "<=", ">=", "{=}", "{!=}", "{<}", "{>}", "{<=}", or "{>=}" followed by a value.
790 ], [OVS_VSCTL_CLEANUP])
791 AT_CHECK([RUN_OVS_VSCTL([get b br0 datapath_id::])],
792 [1], [], [ovs-vsctl: datapath_id::: trailing garbage ":" in argument
793 ], [OVS_VSCTL_CLEANUP])
794 AT_CHECK([RUN_OVS_VSCTL([get b br0 datapath_id:x])],
795 [1], [], [ovs-vsctl: cannot specify key to get for non-map column datapath_id
796 ], [OVS_VSCTL_CLEANUP])
797 AT_CHECK([RUN_OVS_VSCTL([get b br0 external_ids:x])],
798 [1], [], [ovs-vsctl: no key "x" in Bridge record "br0" column external_ids
799 ], [OVS_VSCTL_CLEANUP])
800 AT_CHECK([RUN_OVS_VSCTL([set b br0 flood_vlans=-1])],
801 [1], [], [ovs-vsctl: constraint violation: -1 is not in the valid range 0 to 4095 (inclusive)
802 ], [OVS_VSCTL_CLEANUP])
803 AT_CHECK([RUN_OVS_VSCTL([set b br0 flood_vlans=4096])],
804 [1], [], [ovs-vsctl: constraint violation: 4096 is not in the valid range 0 to 4095 (inclusive)
805 ], [OVS_VSCTL_CLEANUP])
806 AT_CHECK([RUN_OVS_VSCTL([set c br1 'connection-mode=xyz'])],
807 [1], [], [[ovs-vsctl: constraint violation: xyz is not one of the allowed values ([in-band, out-of-band])
808 ]], [OVS_VSCTL_CLEANUP])
809 AT_CHECK([RUN_OVS_VSCTL([set c br1 connection-mode:x=y])],
810 [1], [], [ovs-vsctl: cannot specify key to set for non-map column connection_mode
811 ], [OVS_VSCTL_CLEANUP])
812 AT_CHECK([RUN_OVS_VSCTL([add b br1 datapath_id x y])],
813 [1], [], [ovs-vsctl: "add" operation would put 2 values in column datapath_id of table Bridge but the maximum number is 1
814 ], [OVS_VSCTL_CLEANUP])
815 AT_CHECK([RUN_OVS_VSCTL([remove netflow `cat netflow-uuid` targets '"1.2.3.4:567"'])],
816 [1], [], [ovs-vsctl: "remove" operation would put 0 values in column targets of table NetFlow but the minimum number is 1
817 ], [OVS_VSCTL_CLEANUP])
818 AT_CHECK([RUN_OVS_VSCTL([remove netflow x targets '"1.2.3.4:567"'])],
819 [1], [], [ovs-vsctl: no row "x" in table NetFlow
820 ], [OVS_VSCTL_CLEANUP])
821 AT_CHECK([RUN_OVS_VSCTL([clear netflow x targets])],
822 [1], [], [ovs-vsctl: no row "x" in table NetFlow
823 ], [OVS_VSCTL_CLEANUP])
824 AT_CHECK([RUN_OVS_VSCTL([clear netflow `cat netflow-uuid` targets])],
825 [1], [], [ovs-vsctl: "clear" operation cannot be applied to column targets of table NetFlow, which is not allowed to be empty
826 ], [OVS_VSCTL_CLEANUP])
827 AT_CHECK([RUN_OVS_VSCTL([destroy b br2])],
828 [1], [], [ovs-vsctl: no row "br2" in table Bridge
829 ], [OVS_VSCTL_CLEANUP])
830 AT_CHECK([RUN_OVS_VSCTL([add in br1 name x])],
831 [1], [], [ovs-vsctl: cannot modify read-only column name in table Interface
832 ], [OVS_VSCTL_CLEANUP])
833 AT_CHECK([RUN_OVS_VSCTL([set port br1 name br2])],
834 [1], [], [ovs-vsctl: cannot modify read-only column name in table Port
835 ], [OVS_VSCTL_CLEANUP])
836 AT_CHECK([RUN_OVS_VSCTL([remove b br1 name br1])],
837 [1], [], [ovs-vsctl: cannot modify read-only column name in table Bridge
838 ], [OVS_VSCTL_CLEANUP])
839 AT_CHECK([RUN_OVS_VSCTL([clear b br1 name])],
840 [1], [], [ovs-vsctl: cannot modify read-only column name in table Bridge
841 ], [OVS_VSCTL_CLEANUP])
845 AT_SETUP([database commands -- conditions])
846 AT_KEYWORDS([ovs-vsctl])
847 ON_EXIT([kill `cat pid`])
850 [RUN_OVS_VSCTL_TOGETHER(
852 [add-br br1], [set bridge br1 flood_vlans=0 other-config:x='""'],
853 [add-br br2], [set bridge br2 flood_vlans=1 other-config:x=y],
854 [add-br br3], [set bridge br3 flood_vlans=0,1 other-config:x=z],
855 [add-br br4], [set bridge br4 flood_vlans=2],
856 [add-br br5], [set bridge br5 flood_vlans=0,2],
857 [add-br br6], [set bridge br6 flood_vlans=1,2],
858 [add-br br7], [set bridge br7 flood_vlans=0,1,2])], [0], [
874 m4_define([VSCTL_CHECK_FIND],
875 [AT_CHECK([echo `ovs-vsctl --bare --no-wait -vreconnect:emer --db=unix:socket -- --columns=name find bridge '$1' | sort`], [0], [$2
878 # Arithmetic relational operators without keys.
879 VSCTL_CHECK_FIND([flood_vlans=0], [br1])
880 VSCTL_CHECK_FIND([flood_vlans=1], [br2])
881 VSCTL_CHECK_FIND([flood_vlans=0,2], [br5])
882 VSCTL_CHECK_FIND([flood_vlans=0,1,2], [br7])
883 VSCTL_CHECK_FIND([flood_vlans=3], [])
885 VSCTL_CHECK_FIND([flood_vlans!=0], [br0 br2 br3 br4 br5 br6 br7])
886 VSCTL_CHECK_FIND([flood_vlans!=1], [br0 br1 br3 br4 br5 br6 br7])
887 VSCTL_CHECK_FIND([flood_vlans!=0,2], [br0 br1 br2 br3 br4 br6 br7])
888 VSCTL_CHECK_FIND([flood_vlans!=0,1,2], [br0 br1 br2 br3 br4 br5 br6])
889 VSCTL_CHECK_FIND([flood_vlans!=3], [br0 br1 br2 br3 br4 br5 br6 br7])
891 VSCTL_CHECK_FIND([flood_vlans<2], [br0 br1 br2])
892 VSCTL_CHECK_FIND([flood_vlans<0,2], [br0 br1 br2 br3 br4])
893 VSCTL_CHECK_FIND([flood_vlans>1], [br3 br4 br5 br6 br7])
894 VSCTL_CHECK_FIND([flood_vlans>0,1], [br5 br6 br7])
895 VSCTL_CHECK_FIND([flood_vlans<=2], [br0 br1 br2 br4])
896 VSCTL_CHECK_FIND([flood_vlans<=0,2], [br0 br1 br2 br3 br4 br5])
897 VSCTL_CHECK_FIND([flood_vlans>=1], [br2 br3 br4 br5 br6 br7])
898 VSCTL_CHECK_FIND([flood_vlans>=0,1], [br3 br5 br6 br7])
900 # Set relational operators without keys.
901 VSCTL_CHECK_FIND([flood_vlans{=}0], [br1])
902 VSCTL_CHECK_FIND([flood_vlans{=}1], [br2])
903 VSCTL_CHECK_FIND([flood_vlans{=}0,2], [br5])
904 VSCTL_CHECK_FIND([flood_vlans{=}0,1,2], [br7])
905 VSCTL_CHECK_FIND([flood_vlans{=}3], [])
907 VSCTL_CHECK_FIND([flood_vlans{!=}0], [br0 br2 br3 br4 br5 br6 br7])
908 VSCTL_CHECK_FIND([flood_vlans{!=}1], [br0 br1 br3 br4 br5 br6 br7])
909 VSCTL_CHECK_FIND([flood_vlans{!=}0,2], [br0 br1 br2 br3 br4 br6 br7])
910 VSCTL_CHECK_FIND([flood_vlans{!=}0,1,2], [br0 br1 br2 br3 br4 br5 br6])
911 VSCTL_CHECK_FIND([flood_vlans{!=}3], [br0 br1 br2 br3 br4 br5 br6 br7])
913 VSCTL_CHECK_FIND([flood_vlans{<}[[]]], [])
914 VSCTL_CHECK_FIND([flood_vlans{<=}[[]]], [br0])
915 VSCTL_CHECK_FIND([flood_vlans{<}0], [br0])
916 VSCTL_CHECK_FIND([flood_vlans{<=}0], [br0 br1])
917 VSCTL_CHECK_FIND([flood_vlans{<}1,2], [br0 br2 br4])
918 VSCTL_CHECK_FIND([flood_vlans{<=}1,2], [br0 br2 br4 br6])
920 VSCTL_CHECK_FIND([flood_vlans{>}[[]]], [br1 br2 br3 br4 br5 br6 br7])
921 VSCTL_CHECK_FIND([flood_vlans{>=}[[]]], [br0 br1 br2 br3 br4 br5 br6 br7])
922 VSCTL_CHECK_FIND([flood_vlans{>}0], [br3 br5 br7])
923 VSCTL_CHECK_FIND([flood_vlans{>=}0], [br1 br3 br5 br7])
924 VSCTL_CHECK_FIND([flood_vlans{>}0,2], [br7])
925 VSCTL_CHECK_FIND([flood_vlans{>=}1,2], [br6 br7])
926 VSCTL_CHECK_FIND([flood_vlans{>=}0,2], [br5 br7])
928 # Arithmetic relational operators with keys.
929 VSCTL_CHECK_FIND([other-config:x=""], [br1])
930 VSCTL_CHECK_FIND([other-config:x=y], [br2])
931 VSCTL_CHECK_FIND([other-config:x=z], [br3])
933 VSCTL_CHECK_FIND([other-config:x!=""], [br2 br3])
934 VSCTL_CHECK_FIND([other-config:x!=y], [br1 br3])
935 VSCTL_CHECK_FIND([other-config:x!=z], [br1 br2])
937 VSCTL_CHECK_FIND([other-config:x>y], [br3])
938 VSCTL_CHECK_FIND([other-config:x>=y], [br2 br3])
939 VSCTL_CHECK_FIND([other-config:x<y], [br1])
940 VSCTL_CHECK_FIND([other-config:x<=y], [br1 br2])
942 # Set relational operators with keys.
943 VSCTL_CHECK_FIND([other-config:x{=}[[]]], [br0 br4 br5 br6 br7])
944 VSCTL_CHECK_FIND([other-config:x{=}""], [br1])
945 VSCTL_CHECK_FIND([other-config:x{=}y], [br2])
946 VSCTL_CHECK_FIND([other-config:x{=}z], [br3])
948 VSCTL_CHECK_FIND([other-config:x{!=}[[]]], [br1 br2 br3])
949 VSCTL_CHECK_FIND([other-config:x{!=}""], [br0 br2 br3 br4 br5 br6 br7])
950 VSCTL_CHECK_FIND([other-config:x{!=}y], [br0 br1 br3 br4 br5 br6 br7])
951 VSCTL_CHECK_FIND([other-config:x{!=}z], [br0 br1 br2 br4 br5 br6 br7])
953 VSCTL_CHECK_FIND([other-config:x{<=}[[]]], [br0 br4 br5 br6 br7])
954 VSCTL_CHECK_FIND([other-config:x{<=}x], [br0 br4 br5 br6 br7])
955 VSCTL_CHECK_FIND([other-config:x{<=}""], [br0 br1 br4 br5 br6 br7])
956 VSCTL_CHECK_FIND([other-config:x{<=}y], [br0 br2 br4 br5 br6 br7])
957 VSCTL_CHECK_FIND([other-config:x{<=}z], [br0 br3 br4 br5 br6 br7])
958 VSCTL_CHECK_FIND([other-config:x{<=}x,y,z], [br0 br2 br3 br4 br5 br6 br7])
960 VSCTL_CHECK_FIND([other-config:x{<}[[]]], [])
961 VSCTL_CHECK_FIND([other-config:x{<}x], [br0 br4 br5 br6 br7])
962 VSCTL_CHECK_FIND([other-config:x{<}""], [br0 br4 br5 br6 br7])
963 VSCTL_CHECK_FIND([other-config:x{<}y], [br0 br4 br5 br6 br7])
964 VSCTL_CHECK_FIND([other-config:x{<}z], [br0 br4 br5 br6 br7])
966 VSCTL_CHECK_FIND([other-config:x{>=}[[]]], [br0 br1 br2 br3 br4 br5 br6 br7])
967 VSCTL_CHECK_FIND([other-config:x{>=}x], [])
968 VSCTL_CHECK_FIND([other-config:x{>=}""], [br1])
969 VSCTL_CHECK_FIND([other-config:x{>=}y], [br2])
970 VSCTL_CHECK_FIND([other-config:x{>=}z], [br3])
972 VSCTL_CHECK_FIND([other-config:x{>}[[]]], [br1 br2 br3])
973 VSCTL_CHECK_FIND([other-config:x{>}x], [])
974 VSCTL_CHECK_FIND([other-config:x{>}""], [])
975 VSCTL_CHECK_FIND([other-config:x{>}y], [])
976 VSCTL_CHECK_FIND([other-config:x{>}z], [])
980 AT_SETUP([database commands -- wait-until immediately true])
981 AT_KEYWORDS([ovs-vsctl])
983 AT_CHECK([RUN_OVS_VSCTL(
985 [add-bond br0 bond0 eth0 eth1],
986 [set port bond0 bond_updelay=500 other-config:abc=def])],
987 [0], [], [], [OVS_VSCTL_CLEANUP])
988 AT_CHECK([RUN_OVS_VSCTL([[wait-until Open_vSwitch . manager_options=[]]])],
989 [0], [], [], [OVS_VSCTL_CLEANUP])
990 AT_CHECK([RUN_OVS_VSCTL([[wait-until Open_vSwitch . bridges!=[]]])],
991 [0], [], [], [OVS_VSCTL_CLEANUP])
992 AT_CHECK([RUN_OVS_VSCTL([[wait-until Port bond0 other-config:abc=def]])],
993 [0], [], [], [OVS_VSCTL_CLEANUP])
994 AT_CHECK([RUN_OVS_VSCTL([[wait-until port bond0 'bond_updelay>50' 'other-config:abc>d' 'other-config:abc<e']])],
995 [0], [], [], [OVS_VSCTL_CLEANUP])
999 AT_SETUP([database commands -- wait-until must wait])
1000 AT_KEYWORDS([ovs-vsctl])
1004 # Start ovs-vsctls in background.
1005 (RUN_OVS_VSCTL([[wait-until o . bridges!=[] -- get bridge br10 other-config:abc]])) > stdout1 &
1006 (RUN_OVS_VSCTL([[wait-until bridge br1 -- get bridge br1 other-config:abc]])) > stdout2 &
1007 (RUN_OVS_VSCTL([[wait-until b br1 other-config={abc=def} -- get bridge br1 other-config]])) > stdout3 &
1008 (RUN_OVS_VSCTL([[wait-until port bond0 'bond_updelay>50' -- get port bond0 bond-updelay]])) > stdout4 &
1010 # Give the ovs-vsctls a chance to read the database
1013 AT_CHECK([RUN_OVS_VSCTL([add-br br10 -- set bridge br10 other-config:abc=quux])
1014 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])],
1015 [0], [], [], [OVS_VSCTL_CLEANUP])
1017 # Wait for the ovs-vsctls to finish.
1021 AT_CHECK([cat stdout1], [0], [quux
1022 ], [], [OVS_VSCTL_CLEANUP])
1023 AT_CHECK([cat stdout2], [0], [def
1024 ], [], [OVS_VSCTL_CLEANUP])
1025 AT_CHECK([cat stdout3], [0], [{abc=def}
1026 ], [], [OVS_VSCTL_CLEANUP])
1027 AT_CHECK([cat stdout4], [0], [500
1028 ], [], [OVS_VSCTL_CLEANUP])
1033 AT_SETUP([--id option on create, get commands])
1034 AT_KEYWORDS([ovs-vsctl])
1036 AT_CHECK([RUN_OVS_VSCTL([add-br br0],
1037 [add-port br0 eth0],
1038 [add-port br0 eth1])])
1040 [RUN_OVS_VSCTL_TOGETHER(
1041 [set bridge br0 mirrors=@m],
1042 [--id=@eth0 get port eth0],
1043 [--id=@eth1 get port eth1],
1044 [--id=@m create mirror name=mymirror select-dst-port=@eth0 select-src-port=@eth0 output-port=@eth1])],
1045 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
1047 [${PERL} $srcdir/uuidfilt.pl stdout], [0], [dnl
1053 [], [OVS_VSCTL_CLEANUP])
1056 [list port eth0 eth1],
1058 [list bridge br0])],
1059 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
1061 [sed -n -e '/uuid/p' -e '/name/p' -e '/mirrors/p' -e '/select/p' -e '/output/p' < stdout | ${PERL} $srcdir/uuidfilt.pl], [0], [dnl
1071 select_dst_port : [<0>]
1072 select_src_port : [<0>]
1078 [], [OVS_VSCTL_CLEANUP])
1082 AT_SETUP([unreferenced record warnings])
1083 AT_KEYWORDS([ovs-vsctl])
1086 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer --db=unix:socket \
1087 -- create Bridge name=br0 | ${PERL} $srcdir/uuidfilt.pl],
1089 ], [vsctl|WARN|applying "create" command to table Bridge without --id option will have no effect
1090 ], [OVS_VSCTL_CLEANUP])
1092 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer --db=unix:socket \
1093 -- --id=@br0 create Bridge name=br0 | ${PERL} $srcdir/uuidfilt.pl],
1095 ], [vsctl|WARN|row id "@br0" was created but no reference to it was inserted, so it will not actually appear in the database
1096 ], [OVS_VSCTL_CLEANUP])
1098 [ovs-vsctl -vPATTERN:console:'%c|%p|%m' --no-wait -vreconnect:emer --db=unix:socket \
1099 -- --id=@eth0_iface create Interface name=eth0 \
1100 -- --id=@eth0 create Port name=eth0 interfaces=@eth0_iface \
1101 -- --id=@m0 create Mirror name=m0 output_port=@eth0 \
1102 -- --id=@br0 create Bridge name=br0 mirrors=@m0 \
1103 -- set Open_vSwitch . bridges=@br0 | ${PERL} $srcdir/uuidfilt.pl],
1108 ], [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
1109 ], [OVS_VSCTL_CLEANUP])
1113 dnl This test really shows a bug -- "create" followed by "list" in
1114 dnl the same execution shows the wrong UUID on the "list" command.
1115 dnl The bug is documented in ovs-vsctl.8.
1116 AT_SETUP([created row UUID is wrong in same execution])
1117 AT_KEYWORDS([ovs-vsctl])
1119 AT_CHECK([RUN_OVS_VSCTL([--id=@br0 create Bridge name=br0 -- add Open_vSwitch . bridges @br0 -- list b])],
1120 [0], [stdout], [], [OVS_VSCTL_CLEANUP])
1121 AT_CHECK([${PERL} $srcdir/uuidfilt.pl stdout], [0],
1141 ]], [ignore], [test ! -e pid || kill `cat pid`])
1145 dnl This test will create a linux-htb QoS record that
1146 dnl points to a few queues and use it on a1 and a2 port.
1147 dnl It also destroys all records from Qos and Queue table.
1148 AT_SETUP([--all option on destroy command])
1149 AT_KEYWORDS([ovs-vsctl])
1151 AT_CHECK([RUN_OVS_VSCTL(
1154 [add-port a a2])], [0], [], [], [OVS_VSCTL_CLEANUP])
1155 CHECK_BRIDGES([a, a, 0])
1156 CHECK_PORTS([a], [a1], [a2])
1157 CHECK_IFACES([a], [a1], [a2])
1158 AT_CHECK([RUN_OVS_VSCTL_TOGETHER(
1159 [set Port a1 qos=@newqos],
1160 [set Port a2 qos=@newqos],
1161 [--id=@newqos create QoS type=linux-htb other-config:max-rate=1000000000 queues=0=@q0,1=@q1],
1162 [--id=@q0 create Queue other-config:min-rate=100000000 other-config:max-rate=100000000],
1163 [--id=@q1 create Queue other-config:min-rate=500000000])], [0], [ignore], [], [OVS_VSCTL_CLEANUP])
1164 AT_CHECK([RUN_OVS_VSCTL(
1165 [--columns=other_config,type list Qos])], [0],
1166 [other_config : {max-rate="1000000000"}
1168 ], [], [OVS_VSCTL_CLEANUP])
1169 AT_CHECK([RUN_OVS_VSCTL(
1170 [--columns=other_config list Queue | sort | xargs echo])], [0],
1171 [other_config : {max-rate=100000000, min-rate=100000000} other_config : {min-rate=500000000}
1172 ], [], [OVS_VSCTL_CLEANUP])
1173 AT_CHECK([RUN_OVS_VSCTL(
1174 [clear Port a1 qos],
1175 [clear Port a2 qos])], [0], [], [], [OVS_VSCTL_CLEANUP])
1176 AT_CHECK([RUN_OVS_VSCTL(
1177 [--columns=qos list Port a1 a2])], [0],
1181 ]], [], [OVS_VSCTL_CLEANUP])
1182 AT_CHECK([RUN_OVS_VSCTL(
1183 [--all destroy Qos])], [0], [], [], [OVS_VSCTL_CLEANUP])
1184 AT_CHECK([RUN_OVS_VSCTL(
1185 [-- list Qos])], [0], [], [], [OVS_VSCTL_CLEANUP])
1186 AT_CHECK([RUN_OVS_VSCTL(
1187 [--all destroy Queue])], [0], [], [], [OVS_VSCTL_CLEANUP])
1188 AT_CHECK([RUN_OVS_VSCTL(
1189 [-- list Queue])], [0], [], [], [OVS_VSCTL_CLEANUP])
1193 dnl ----------------------------------------------------------------------
1194 AT_BANNER([ovs-vsctl add-port -- reserved port names])
1196 AT_SETUP([add-port -- reserved names 1])
1199 # Test creating all reserved port names
1209 # Try creating the port
1210 AT_CHECK([ovs-vsctl add-port br0 reserved_name], [0], [], [])
1211 # Detect the warning log message
1212 AT_CHECK([sed -n "s/^.*\(|bridge|WARN|.*\)$/\1/p" ovs-vswitchd.log], [0], [dnl
1213 |bridge|WARN|could not create interface reserved_name, name is reserved
1215 # Delete the warning log message
1216 AT_CHECK([sed "/|bridge|WARN|/d" ovs-vswitchd.log > ovs-vswitchd.log], [0], [], [])
1218 AT_CHECK([ovs-vsctl del-port br0 reserved_name], [0], [], [])])
1222 AT_SETUP([add-port -- reserved names 2])
1223 # Creates all type of tunnel ports
1224 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=gre \
1225 options:remote_ip=1.1.1.1 ofport_request=1\
1226 -- add-port br0 p2 -- set Interface p2 type=gre64 \
1227 options:local_ip=2.2.2.2 options:remote_ip=1.1.1.1 \
1229 -- add-port br0 p3 -- set Interface p3 type=lisp \
1230 options:remote_ip=2.2.2.2 ofport_request=3 \
1231 -- add-port br0 p4 -- set Interface p4 type=vxlan \
1232 options:remote_ip=2.2.2.2 ofport_request=4])
1234 # Test creating all reserved tunnel port names
1242 # Try creating the port
1243 AT_CHECK([ovs-vsctl add-port br0 reserved_name], [0], [], [])
1244 # Detect the warning log message
1245 AT_CHECK([sed -n "s/^.*\(|bridge|WARN|.*\)$/\1/p" ovs-vswitchd.log], [0], [dnl
1246 |bridge|WARN|could not create interface reserved_name, name is reserved
1248 # Delete the warning log message
1249 AT_CHECK([sed "/|bridge|WARN|/d" ovs-vswitchd.log > ovs-vswitchd.log], [0], [], [])
1251 AT_CHECK([ovs-vsctl del-port br0 reserved_name], [0], [], [])])