]> git.proxmox.com Git - ovs.git/blame - utilities/ovs-ctl.in
ovn: Fix ACLs for child logical ports.
[ovs.git] / utilities / ovs-ctl.in
CommitLineData
43bb5f82 1#! /bin/sh
a7577088 2# Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Nicira, Inc.
43bb5f82
BP
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at:
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16case $0 in
17 */*) dir0=`echo "$0" | sed 's,/[^/]*$,,'` ;;
18 *) dir0=./ ;;
19esac
d422c118 20. "$dir0/ovs-lib" || exit 1
43bb5f82
BP
21
22for dir in "$sbindir" "$bindir" /sbin /bin /usr/sbin /usr/bin; do
23 case :$PATH: in
24 *:$dir:*) ;;
25 *) PATH=$PATH:$dir ;;
26 esac
27done
28
29## ----- ##
30## start ##
31## ----- ##
32
a6df8ea0
TG
33# Keep track of removed vports so we can reload them if needed
34removed_vports=""
35
36insert_mods () {
37 # Try loading openvswitch again.
38 action "Inserting openvswitch module" modprobe openvswitch
39
40 for vport in $removed_vports; do
41 # Don't treat failures to load vports as fatal error
42 action "Inserting $vport module" modprobe $vport || true
43 done
44}
45
0a69a5e4 46insert_mod_if_required () {
42165119
PB
47 # If this kernel has no module support, expect we're done.
48 if test ! -e /proc/modules
49 then
50 log_success_msg "Kernel has no loadable module support. Skipping modprobe"
51 return 0
52 fi
53
9b80f761
CW
54 # If openvswitch is already loaded then we're done.
55 test -e /sys/module/openvswitch -o -e /sys/module/openvswitch_mod && \
56 return 0
43bb5f82 57
9b80f761 58 # Load openvswitch. If that's successful then we're done.
a6df8ea0 59 insert_mods && return 0
43bb5f82
BP
60
61 # If the bridge module is loaded, then that might be blocking
9b80f761 62 # openvswitch. Try to unload it, if there are no bridges.
43bb5f82
BP
63 test -e /sys/module/bridge || return 1
64 bridges=`echo /sys/class/net/*/bridge | sed 's,/sys/class/net/,,g;s,/bridge,,g'`
65 if test "$bridges" != "*"; then
66 log_warning_msg "not removing bridge module because bridges exist ($bridges)"
67 return 1
68 fi
69 action "removing bridge module" rmmod bridge || return 1
70
9b80f761 71 # Try loading openvswitch again.
a6df8ea0 72 insert_mods
43bb5f82
BP
73}
74
75ovs_vsctl () {
fba6bd1d 76 ovs-vsctl --no-wait "$@"
43bb5f82
BP
77}
78
43bb5f82
BP
79set_system_ids () {
80 set ovs_vsctl set Open_vSwitch .
81
82 OVS_VERSION=`ovs-vswitchd --version | sed 's/.*) //;1q'`
83 set "$@" ovs-version="$OVS_VERSION"
84
85 case $SYSTEM_ID in
86 random)
87 id_file=$etcdir/system-id.conf
88 uuid_file=$etcdir/install_uuid.conf
89 if test -e "$id_file"; then
90 SYSTEM_ID=`cat "$id_file"`
91 elif test -e "$uuid_file"; then
92 # Migrate from old file name.
93 . "$uuid_file"
94 SYSTEM_ID=$INSTALLATION_UUID
95 echo "$SYSTEM_ID" > "$id_file"
96 elif SYSTEM_ID=`uuidgen`; then
97 echo "$SYSTEM_ID" > "$id_file"
98 else
99 log_failure_msg "missing uuidgen, could not generate system ID"
100 fi
101 ;;
102
103 '')
104 log_failure_msg "system ID not configured, please use --system-id"
105 ;;
106
107 *)
108 ;;
109 esac
110 set "$@" external-ids:system-id="\"$SYSTEM_ID\""
111
112 if test X"$SYSTEM_TYPE" != X; then
113 set "$@" system-type="\"$SYSTEM_TYPE\""
114 else
115 log_failure_msg "no default system type, please use --system-type"
116 fi
117
118 if test X"$SYSTEM_VERSION" != X; then
119 set "$@" system-version="\"$SYSTEM_VERSION\""
120 else
121 log_failure_msg "no default system version, please use --system-version"
122 fi
123
124 action "Configuring Open vSwitch system IDs" "$@" $extra_ids
125}
126
522839ab 127check_force_cores () {
43bb5f82 128 if test X"$FORCE_COREFILES" = Xyes; then
a5d873f4 129 ulimit -c 67108864
43bb5f82 130 fi
522839ab 131}
43bb5f82 132
54b21db7
TLSC
133del_transient_ports () {
134 for port in `ovs-vsctl --bare -- --columns=name find port other_config:transient=true`; do
135 ovs_vsctl -- del-port "$port"
136 done
137}
138
522839ab
JP
139start_ovsdb () {
140 check_force_cores
43bb5f82
BP
141
142 if daemon_is_running ovsdb-server; then
c707d418 143 log_success_msg "ovsdb-server is already running"
43bb5f82 144 else
c707d418 145 # Create initial database or upgrade database schema.
2db1b5d8 146 upgrade_db $DB_FILE $DB_SCHEMA || return 1
c707d418
JP
147
148 # Start ovsdb-server.
149 set ovsdb-server "$DB_FILE"
b4e8d170
BP
150 for db in $EXTRA_DBS; do
151 case $db in
152 /*) ;;
153 *) db=$dbdir/$db ;;
154 esac
155
156 if test ! -f "$db"; then
157 log_warning_msg "$db (from \$EXTRA_DBS) does not exist."
158 elif ovsdb-tool db-version "$db" >/dev/null; then
159 set "$@" "$db"
160 else
161 log_warning_msg "$db (from \$EXTRA_DBS) cannot be read as a database (see error message above)"
162 fi
163 done
c707d418
JP
164 set "$@" -vconsole:emer -vsyslog:err -vfile:info
165 set "$@" --remote=punix:"$DB_SOCK"
4206b80f
HM
166 set "$@" --private-key=db:Open_vSwitch,SSL,private_key
167 set "$@" --certificate=db:Open_vSwitch,SSL,certificate
168 set "$@" --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert
c707d418 169 start_daemon "$OVSDB_SERVER_PRIORITY" "$OVSDB_SERVER_WRAPPER" "$@" \
d0c06099 170 || return 1
43bb5f82 171
c707d418
JP
172 # Initialize database settings.
173 ovs_vsctl -- init -- set Open_vSwitch . db-version="$schemaver" \
174 || return 1
175 set_system_ids || return 1
176 if test X"$DELETE_BRIDGES" = Xyes; then
43bb5f82 177 for bridge in `ovs_vsctl list-br`; do
c6f4d298 178 ovs_vsctl del-br $bridge
43bb5f82 179 done
c707d418 180 fi
54b21db7
TLSC
181 if test X"$DELETE_TRANSIENT_PORTS" = Xyes; then
182 del_transient_ports
183 fi
43bb5f82 184 fi
522839ab
JP
185}
186
1259a0c4
GS
187add_managers () {
188 # Now that ovs-vswitchd has started and completed its initial
189 # configuration, tell ovsdb-server to conenct to the remote managers. We
190 # used to do this at ovsdb-server startup time, but waiting for
191 # ovs-vswitchd to finish configuring means that remote managers see less
192 # churn in the database at startup or restart. (For example, managers
193 # won't briefly see empty datapath-id or ofport columns for records that
194 # exist at startup.)
195 action "Enabling remote OVSDB managers" \
196 ovs-appctl -t ovsdb-server ovsdb-server/add-remote \
197 db:Open_vSwitch,Open_vSwitch,manager_options
198}
199
522839ab
JP
200start_forwarding () {
201 check_force_cores
202
203 insert_mod_if_required || return 1
43bb5f82
BP
204
205 if daemon_is_running ovs-vswitchd; then
c707d418 206 log_success_msg "ovs-vswitchd is already running"
43bb5f82 207 else
c707d418 208 # Increase the limit on the number of open file descriptors.
991d922c 209 # On Linux, ovs-vswitchd needs about three file descriptors
7a6cf343
AW
210 # per bridge and "n-handler-threads" file descriptors per bridge
211 # port, so this allows a very large number of bridges and ports.
212 MAXFD=65535
bfe4277e
TG
213 if [ $(ulimit -n) -lt $MAXFD ]; then
214 ulimit -n $MAXFD
215 fi
c707d418
JP
216
217 # Start ovs-vswitchd.
218 set ovs-vswitchd unix:"$DB_SOCK"
219 set "$@" -vconsole:emer -vsyslog:err -vfile:info
220 if test X"$MLOCKALL" != Xno; then
221 set "$@" --mlockall
222 fi
223 start_daemon "$OVS_VSWITCHD_PRIORITY" "$OVS_VSWITCHD_WRAPPER" "$@"
43bb5f82
BP
224 fi
225}
226
227## ---- ##
228## stop ##
229## ---- ##
230
522839ab
JP
231stop_ovsdb () {
232 stop_daemon ovsdb-server
233}
234
235stop_forwarding () {
43bb5f82 236 stop_daemon ovs-vswitchd
43bb5f82
BP
237}
238
239## ----------------- ##
240## force-reload-kmod ##
241## ----------------- ##
242
243internal_interfaces () {
244 # Outputs a list of internal interfaces:
245 #
246 # - There is an internal interface for every bridge, whether it
247 # has an Interface record or not and whether the Interface
248 # record's 'type' is properly set or not.
249 #
250 # - There is an internal interface for each Interface record whose
251 # 'type' is 'internal'.
252 #
253 # But ignore interfaces that don't really exist.
254 for d in `(ovs_vsctl --bare \
255 -- --columns=name find Interface type=internal \
c707d418 256 -- list-br) | sort -u`
43bb5f82
BP
257 do
258 if test -e "/sys/class/net/$d"; then
c707d418
JP
259 printf "%s " "$d"
260 fi
43bb5f82
BP
261 done
262}
263
16774462
GS
264ovs_save () {
265 bridges=`ovs_vsctl -- --real list-br`
266 if [ -n "${bridges}" ] && \
267 "$datadir/scripts/ovs-save" "$1" ${bridges} > "$2"; then
268 chmod +x "$2"
269 return 0
a4175433 270 fi
16774462
GS
271 [ -z "${bridges}" ] && return 0
272}
273
274save_ofports_if_required () {
a7577088
BP
275 # Save OpenFlow port numbers if we are upgrading from a pre-1.10 branch.
276 #
277 # (Versions 1.10 and later save OpenFlow port numbers without assistance,
278 # so we don't have to do anything for them.
16774462
GS
279 case `ovs-appctl version | sed 1q` in
280 "ovs-vswitchd (Open vSwitch) 1."[0-9].*)
281 action "Saving ofport values" ovs_save save-ofports \
737af96d 282 "${script_ofports}"
16774462 283 ;;
16774462 284 esac
a4175433
GS
285}
286
24605d4e
SH
287save_flows_if_required () {
288 if test X"$DELETE_BRIDGES" != Xyes; then
289 action "Saving flows" ovs_save save-flows "${script_flows}"
290 fi
291}
292
751d0ddb 293save_interfaces () {
a4175433
GS
294 "$datadir/scripts/ovs-save" save-interfaces ${ifaces} \
295 > "${script_interfaces}"
296}
297
16774462 298restore_ofports () {
737af96d 299 [ -x "${script_ofports}" ] && \
16774462
GS
300 action "Restoring ofport values" "${script_ofports}"
301}
302
407b1473
GS
303flow_restore_wait () {
304 ovs_vsctl set open_vswitch . other_config:flow-restore-wait="true"
305}
306
307flow_restore_complete () {
308 ovs_vsctl --if-exists remove open_vswitch . other_config \
309 flow-restore-wait="true"
310}
311
a4175433 312restore_flows () {
737af96d 313 [ -x "${script_flows}" ] && \
a4175433 314 action "Restoring saved flows" "${script_flows}"
751d0ddb
BP
315}
316
737af96d
GS
317restore_interfaces () {
318 [ ! -x "${script_interfaces}" ] && return 0
319 action "Restoring interface configuration" "${script_interfaces}"
320 rc=$?
321 if test $rc = 0; then
322 level=debug
323 else
324 level=err
325 fi
326 log="logger -p daemon.$level -t ovs-save"
a3a0a7a0 327 $log "interface restore script exited with status $rc:"
737af96d
GS
328 $log -f "$script_interfaces"
329}
43bb5f82 330
737af96d 331init_restore_scripts () {
a4175433 332 script_interfaces=`mktemp`
a4175433 333 script_flows=`mktemp`
16774462
GS
334 script_ofports=`mktemp`
335 trap 'rm -f "${script_interfaces}" "${script_flows}" "${script_ofports}"' 0
737af96d 336}
a4175433 337
737af96d
GS
338force_reload_kmod () {
339 ifaces=`internal_interfaces`
340 action "Detected internal interfaces: $ifaces" true
341
342 init_restore_scripts
24605d4e 343 save_flows_if_required
16774462 344 save_ofports_if_required
a4175433 345
522839ab
JP
346 # Restart the database first, since a large database may take a
347 # while to load, and we want to minimize forwarding disruption.
348 stop_ovsdb
349 start_ovsdb
350
16774462
GS
351 # Restore of ofports should happen before vswitchd is restarted.
352 restore_ofports
353
522839ab 354 stop_forwarding
43bb5f82 355
bb9f6963 356 if action "Saving interface configuration" save_interfaces; then
43bb5f82
BP
357 :
358 else
359 log_warning_msg "Failed to save configuration, not replacing kernel module"
522839ab 360 start_forwarding
1259a0c4 361 add_managers
43bb5f82
BP
362 exit 1
363 fi
a4175433
GS
364 chmod +x "$script_interfaces"
365
0311d4f4 366 for dp in `ovs-dpctl dump-dps`; do
de061b24 367 action "Removing datapath: $dp" ovs-dpctl del-dp "$dp"
43bb5f82
BP
368 done
369
a6df8ea0
TG
370 for vport in `awk '/^vport_/ { print $1 }' /proc/modules`; do
371 action "Removing $vport module" rmmod $vport
372 if ! grep -q $vport /proc/modules; then
373 removed_vports="$removed_vports $vport"
374 fi
375 done
376
9b80f761 377 # try both old and new names in case this is post upgrade
43bb5f82
BP
378 if test -e /sys/module/openvswitch_mod; then
379 action "Removing openvswitch module" rmmod openvswitch_mod
9b80f761
CW
380 elif test -e /sys/module/openvswitch; then
381 action "Removing openvswitch module" rmmod openvswitch
43bb5f82
BP
382 fi
383
407b1473
GS
384 # Start vswitchd by asking it to wait till flow restore is finished.
385 flow_restore_wait
522839ab 386 start_forwarding
43bb5f82 387
407b1473 388 # Restore saved flows and inform vswitchd that we are done.
a4175433 389 restore_flows
407b1473 390 flow_restore_complete
1259a0c4 391 add_managers
a4175433 392
737af96d 393 restore_interfaces
2dc7590d
BP
394
395 "$datadir/scripts/ovs-check-dead-ifs"
43bb5f82
BP
396}
397
a4175433
GS
398## ------- ##
399## restart ##
400## ------- ##
401
a3a0a7a0
GS
402save_interfaces_if_required () {
403 # Save interfaces if we are upgrading from a pre-1.10 branch.
404 case `ovs-appctl version | sed 1q` in
405 "ovs-vswitchd (Open vSwitch) 1."[0-9].*)
406 ifaces=`internal_interfaces`
407 action "Detected internal interfaces: $ifaces" true
408 if action "Saving interface configuration" save_interfaces; then
409 chmod +x "$script_interfaces"
410 fi
411 ;;
412 esac
413}
414
a4175433 415restart () {
03d589af 416 if daemon_is_running ovsdb-server && daemon_is_running ovs-vswitchd; then
a3a0a7a0
GS
417 init_restore_scripts
418 save_interfaces_if_required
24605d4e 419 save_flows_if_required
a3a0a7a0 420 save_ofports_if_required
03d589af 421 fi
a4175433
GS
422
423 # Restart the database first, since a large database may take a
424 # while to load, and we want to minimize forwarding disruption.
425 stop_ovsdb
426 start_ovsdb
427
a3a0a7a0
GS
428 # Restore of ofports, if required, should happen before vswitchd is
429 # restarted.
430 restore_ofports
431
a4175433 432 stop_forwarding
407b1473
GS
433
434 # Start vswitchd by asking it to wait till flow restore is finished.
435 flow_restore_wait
a4175433
GS
436 start_forwarding
437
407b1473 438 # Restore saved flows and inform vswitchd that we are done.
a3a0a7a0 439 restore_flows
407b1473 440 flow_restore_complete
1259a0c4 441 add_managers
a3a0a7a0
GS
442
443 # Restore the interfaces if required. Return true even if restore fails.
444 restore_interfaces || true
a4175433
GS
445}
446
b3a375f2
BP
447## --------------- ##
448## enable-protocol ##
449## --------------- ##
450
451enable_protocol () {
b053c7c1
BP
452 # Translate the protocol name to a number, because "iptables -n -L" prints
453 # some protocols by name (despite the -n) and therefore we need to look for
454 # both forms.
455 #
456 # (iptables -S output is more uniform but old iptables doesn't have it.)
457 protonum=`grep "^$PROTOCOL[ ]" /etc/protocols | awk '{print $2}'`
458 if expr X"$protonum" : X'[0-9]\{1,\}$' > /dev/null; then :; else
459 log_failure_msg "unknown protocol $PROTOCOL"
460 return 1
461 fi
462
b3a375f2 463 name=$PROTOCOL
b053c7c1
BP
464 match="(\$2 == \"$PROTOCOL\" || \$2 == $protonum)"
465 insert="iptables -I INPUT -p $PROTOCOL"
b3a375f2 466 if test X"$DPORT" != X; then
b3a375f2 467 name="$name to port $DPORT"
b053c7c1
BP
468 match="$match && /dpt:$DPORT/"
469 insert="$insert --dport $DPORT"
b3a375f2
BP
470 fi
471 if test X"$SPORT" != X; then
b3a375f2 472 name="$name from port $SPORT"
b053c7c1
BP
473 match="$match && /spt:$SPORT/"
474 insert="$insert --sport $SPORT"
b3a375f2 475 fi
b3a375f2
BP
476 insert="$insert -j ACCEPT"
477
b053c7c1
BP
478 if (iptables -n -L INPUT) >/dev/null 2>&1; then
479 if iptables -n -L INPUT | awk "$match { n++ } END { exit n == 0 }"
480 then
481 # There's already a rule for this protocol. Don't override it.
482 log_success_msg "iptables already has a rule for $name, not explicitly enabling"
483 else
484 action "Enabling $name with iptables" $insert
485 fi
b3a375f2 486 elif (iptables --version) >/dev/null 2>&1; then
b3a375f2 487 action "cannot list iptables rules, not adding a rule for $name"
2ae9d860
BP
488 else
489 action "iptables binary not installed, not adding a rule for $name"
b3a375f2
BP
490 fi
491}
492
43bb5f82
BP
493## ---- ##
494## main ##
495## ---- ##
496
497set_defaults () {
498 SYSTEM_ID=
499
500 DELETE_BRIDGES=no
54b21db7 501 DELETE_TRANSIENT_PORTS=no
43bb5f82
BP
502
503 DAEMON_CWD=/
504 FORCE_COREFILES=yes
505 MLOCKALL=yes
506 OVSDB_SERVER_PRIORITY=-10
507 OVS_VSWITCHD_PRIORITY=-10
d0c06099
BP
508 OVSDB_SERVER_WRAPPER=
509 OVS_VSWITCHD_WRAPPER=
43bb5f82 510
f973f2af 511 DB_FILE=$dbdir/conf.db
43bb5f82
BP
512 DB_SOCK=$rundir/db.sock
513 DB_SCHEMA=$datadir/vswitch.ovsschema
b4e8d170 514 EXTRA_DBS=
43bb5f82 515
b3a375f2
BP
516 PROTOCOL=gre
517 DPORT=
518 SPORT=
519
a685eb5a
GS
520 type_file=$etcdir/system-type.conf
521 version_file=$etcdir/system-version.conf
522
523 if test -e "$type_file" ; then
524 SYSTEM_TYPE=`cat $type_file`
525 SYSTEM_VERSION=`cat $version_file`
526 elif (lsb_release --id) >/dev/null 2>&1; then
43bb5f82
BP
527 SYSTEM_TYPE=`lsb_release --id -s`
528 system_release=`lsb_release --release -s`
529 system_codename=`lsb_release --codename -s`
530 SYSTEM_VERSION="${system_release}-${system_codename}"
531 else
532 SYSTEM_TYPE=unknown
533 SYSTEM_VERSION=unknown
534 fi
535}
536
537usage () {
538 set_defaults
539 cat <<EOF
540$0: controls Open vSwitch daemons
541usage: $0 [OPTIONS] COMMAND
542
543This program is intended to be invoked internally by Open vSwitch startup
544scripts. System administrators should not normally invoke it directly.
545
546Commands:
547 start start Open vSwitch daemons
548 stop stop Open vSwitch daemons
a4175433 549 restart stop and start Open vSwitch daemons
43bb5f82
BP
550 status check whether Open vSwitch daemons are running
551 version print versions of Open vSwitch daemons
da3db88f 552 load-kmod insert modules if not already present
43bb5f82
BP
553 force-reload-kmod save OVS network device state, stop OVS, unload kernel
554 module, reload kernel module, start OVS, restore state
b3a375f2 555 enable-protocol enable protocol specified in options with iptables
43bb5f82
BP
556 help display this help message
557
a4175433 558One of the following options is required for "start", "restart" and "force-reload-kmod":
43bb5f82
BP
559 --system-id=UUID set specific ID to uniquely identify this system
560 --system-id=random use a random but persistent UUID to identify this system
561
a4175433 562Other important options for "start", "restart" and "force-reload-kmod":
43bb5f82
BP
563 --system-type=TYPE set system type (e.g. "XenServer")
564 --system-version=VERSION set system version (e.g. "5.6.100-39265p")
565 --external-id="key=value"
566 add given key-value pair to Open_vSwitch external-ids
567 --delete-bridges delete all bridges just before starting ovs-vswitchd
568
a4175433 569Less important options for "start", "restart" and "force-reload-kmod":
9fc47ed7
BP
570 --daemon-cwd=DIR set working dir for OVS daemons (default: $DAEMON_CWD)
571 --no-force-corefiles do not force on core dumps for OVS daemons
572 --no-mlockall do not lock all of ovs-vswitchd into memory
573 --ovsdb-server-priority=NICE set ovsdb-server's niceness (default: $OVSDB_SERVER_PRIORITY)
574 --ovs-vswitchd-priority=NICE set ovs-vswitchd's niceness (default: $OVS_VSWITCHD_PRIORITY)
9fc47ed7 575
a4175433 576Debugging options for "start", "restart" and "force-reload-kmod":
d0c06099
BP
577 --ovsdb-server-wrapper=WRAPPER
578 --ovs-vswitchd-wrapper=WRAPPER
579 --ovs-vswitchd-wrapper=WRAPPER
580 run specified daemon under WRAPPER (either 'valgrind' or 'strace')
581
43bb5f82
BP
582File location options:
583 --db-file=FILE database file name (default: $DB_FILE)
584 --db-sock=SOCKET JSON-RPC socket name (default: $DB_SOCK)
585 --db-schema=FILE database schema file name (default: $DB_SCHEMA)
586
9fc47ed7 587Options for "enable-protocol":
b3a375f2
BP
588 --protocol=PROTOCOL protocol to enable with iptables (default: gre)
589 --sport=PORT source port to match (for tcp or udp protocol)
590 --dport=PORT ddestination port to match (for tcp or udp protocol)
591
43bb5f82
BP
592Other options:
593 -h, --help display this help message
594 -V, --version display version information
595
596Default directories with "configure" option and environment variable override:
f973f2af
BP
597 logs: @LOGDIR@ (--with-logdir, OVS_LOGDIR)
598 pidfiles and sockets: @RUNDIR@ (--with-rundir, OVS_RUNDIR)
599 conf.db: @DBDIR@ (--with-dbdir, OVS_DBDIR)
43bb5f82
BP
600 system configuration: @sysconfdir@ (--sysconfdir, OVS_SYSCONFDIR)
601 data files: @pkgdatadir@ (--pkgdatadir, OVS_PKGDATADIR)
602 user binaries: @bindir@ (--bindir, OVS_BINDIR)
603 system binaries: @sbindir@ (--sbindir, OVS_SBINDIR)
604
605Please report bugs to bugs@openvswitch.org (see REPORTING-BUGS for details).
606EOF
607
608 exit 0
609}
610
611set_option () {
612 var=`echo "$option" | tr abcdefghijklmnopqrstuvwxyz- ABCDEFGHIJKLMNOPQRSTUVWXYZ_`
613 eval set=\${$var+yes}
614 eval old_value=\$$var
615 if test X$set = X || \
616 (test $type = bool && \
617 test X"$old_value" != Xno && test X"$old_value" != Xyes); then
618 echo >&2 "$0: unknown option \"$arg\" (use --help for help)"
619 return
620 fi
621 eval $var=\$value
622}
623
9fc47ed7
BP
624daemons () {
625 echo ovsdb-server ovs-vswitchd
9fc47ed7
BP
626}
627
43bb5f82
BP
628set_defaults
629extra_ids=
630command=
631for arg
632do
633 case $arg in
634 -h | --help)
635 usage
636 ;;
637 -V | --version)
8a07709c 638 echo "$0 (Open vSwitch) $VERSION"
43bb5f82
BP
639 exit 0
640 ;;
641 --external-id=*)
642 value=`expr X"$arg" : 'X[^=]*=\(.*\)'`
643 case $value in
644 *=*)
645 extra_ids="$extra_ids external-ids:$value"
646 ;;
647 *)
648 echo >&2 "$0: --external-id argument not in the form \"key=value\""
649 exit 1
650 ;;
651 esac
652 ;;
653 --[a-z]*=*)
654 option=`expr X"$arg" : 'X--\([^=]*\)'`
655 value=`expr X"$arg" : 'X[^=]*=\(.*\)'`
656 type=string
657 set_option
658 ;;
659 --no-[a-z]*)
660 option=`expr X"$arg" : 'X--no-\(.*\)'`
661 value=no
662 type=bool
663 set_option
664 ;;
665 --[a-z]*)
666 option=`expr X"$arg" : 'X--\(.*\)'`
667 value=yes
668 type=bool
669 set_option
670 ;;
671 -*)
672 echo >&2 "$0: unknown option \"$arg\" (use --help for help)"
673 exit 1
674 ;;
675 *)
676 if test X"$command" = X; then
677 command=$arg
678 else
679 echo >&2 "$0: exactly one non-option argument required (use --help for help)"
680 exit 1
681 fi
682 ;;
683 esac
684done
685case $command in
686 start)
9fc789b9 687 start_ovsdb || exit 1
522839ab 688 start_forwarding
1259a0c4 689 add_managers
43bb5f82
BP
690 ;;
691 stop)
522839ab
JP
692 stop_forwarding
693 stop_ovsdb
43bb5f82 694 ;;
a4175433
GS
695 restart)
696 restart
697 ;;
43bb5f82 698 status)
9fc47ed7
BP
699 rc=0
700 for daemon in `daemons`; do
701 daemon_status $daemon || rc=$?
702 done
703 exit $rc
43bb5f82
BP
704 ;;
705 version)
9fc47ed7
BP
706 for daemon in `daemons`; do
707 $daemon --version
708 done
43bb5f82
BP
709 ;;
710 force-reload-kmod)
c707d418 711 force_reload_kmod
43bb5f82 712 ;;
da3db88f
SH
713 load-kmod)
714 insert_mod_if_required
715 ;;
b3a375f2
BP
716 enable-protocol)
717 enable_protocol
718 ;;
43bb5f82
BP
719 help)
720 usage
721 ;;
722 '')
723 echo >&2 "$0: missing command name (use --help for help)"
724 exit 1
725 ;;
726 *)
727 echo >&2 "$0: unknown command \"$command\" (use --help for help)"
728 exit 1
729 ;;
730esac