]> git.proxmox.com Git - ovs.git/blame - utilities/ovs-ctl.in
Update INSTALL.Fedora to mention Fedora 17 instead of Fedora 15
[ovs.git] / utilities / ovs-ctl.in
CommitLineData
43bb5f82 1#! /bin/sh
e0edde6f 2# Copyright (C) 2009, 2010, 2011, 2012 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
9fc47ed7 33insert_openvswitch_mod_if_required () {
9b80f761
CW
34 # If openvswitch is already loaded then we're done.
35 test -e /sys/module/openvswitch -o -e /sys/module/openvswitch_mod && \
36 return 0
43bb5f82 37
9b80f761
CW
38 # Load openvswitch. If that's successful then we're done.
39 action "Inserting openvswitch module" modprobe openvswitch && return 0
43bb5f82
BP
40
41 # If the bridge module is loaded, then that might be blocking
9b80f761 42 # openvswitch. Try to unload it, if there are no bridges.
43bb5f82
BP
43 test -e /sys/module/bridge || return 1
44 bridges=`echo /sys/class/net/*/bridge | sed 's,/sys/class/net/,,g;s,/bridge,,g'`
45 if test "$bridges" != "*"; then
46 log_warning_msg "not removing bridge module because bridges exist ($bridges)"
47 return 1
48 fi
49 action "removing bridge module" rmmod bridge || return 1
50
9b80f761
CW
51 # Try loading openvswitch again.
52 action "Inserting openvswitch module" modprobe openvswitch
43bb5f82
BP
53}
54
9fc47ed7 55insert_brcompat_mod_if_required () {
25874861 56 if test -e /sys/module/bridge; then
9b80f761 57 log_warning_msg "bridge module is loaded, not loading brcompat"
25874861
BP
58 return 1
59 fi
9b80f761
CW
60 test -e /sys/module/brcompat -o -e /sys/module/brcompat_mod && return 0
61 action "Inserting brcompat module" modprobe brcompat
9fc47ed7
BP
62}
63
da3db88f
SH
64insert_mod_if_required () {
65 insert_openvswitch_mod_if_required || return 1
66 if test X"$BRCOMPAT" = Xyes; then
024c78b8
BP
67 if insert_brcompat_mod_if_required; then
68 :
69 else
70 log_warning_msg "could not load brcompat module, disabling bridge compatibility"
71 BRCOMPAT=no
72 fi
da3db88f
SH
73 fi
74}
75
43bb5f82
BP
76ovs_vsctl () {
77 ovs-vsctl --no-wait --timeout=5 "$@"
78}
79
80ovsdb_tool () {
ea523221 81 ovsdb-tool -vconsole:off "$@"
43bb5f82
BP
82}
83
046d84c2
BP
84create_db () {
85 action "Creating empty database $DB_FILE" ovsdb_tool create "$DB_FILE" "$DB_SCHEMA"
86}
87
43bb5f82
BP
88upgrade_db () {
89 schemaver=`ovsdb_tool schema-version "$DB_SCHEMA"`
90 if test ! -e "$DB_FILE"; then
91 log_warning_msg "$DB_FILE does not exist"
92 install -d -m 755 -o root -g root `dirname $DB_FILE`
046d84c2 93 create_db
43bb5f82
BP
94 elif test X"`ovsdb_tool needs-conversion "$DB_FILE" "$DB_SCHEMA"`" != Xno; then
95 # Back up the old version.
96 version=`ovsdb_tool db-version "$DB_FILE"`
97 cksum=`ovsdb_tool db-cksum "$DB_FILE" | awk '{print $1}'`
65420cc6 98 backup=$DB_FILE.backup$version-$cksum
046d84c2 99 action "Backing up database to $backup" cp "$DB_FILE" "$backup" || return 1
43bb5f82
BP
100
101 # Compact database. This is important if the old schema did not enable
102 # garbage collection (i.e. if it did not have any tables with "isRoot":
103 # true) but the new schema does. In that situation the old database
104 # may contain a transaction that creates a record followed by a
105 # transaction that creates the first use of the record. Replaying that
106 # series of transactions against the new database schema (as "convert"
107 # does) would cause the record to be dropped by the first transaction,
108 # then the second transaction would cause a referential integrity
109 # failure (for a strong reference).
046d84c2
BP
110 #
111 # Errors might occur on an Open vSwitch downgrade if ovsdb-tool doesn't
112 # understand some feature of the schema used in the OVSDB version that
113 # we're downgrading from, so we don't give up on error.
65420cc6 114 action "Compacting database" ovsdb_tool compact "$DB_FILE"
43bb5f82
BP
115
116 # Upgrade or downgrade schema.
046d84c2
BP
117 if action "Converting database schema" ovsdb_tool convert "$DB_FILE" "$DB_SCHEMA"; then
118 :
119 else
120 log_warning_msg "Schema conversion failed, using empty database instead"
121 rm -f "$DB_FILE"
122 create_db
123 fi
43bb5f82
BP
124 fi
125}
126
127set_system_ids () {
128 set ovs_vsctl set Open_vSwitch .
129
130 OVS_VERSION=`ovs-vswitchd --version | sed 's/.*) //;1q'`
131 set "$@" ovs-version="$OVS_VERSION"
132
133 case $SYSTEM_ID in
134 random)
135 id_file=$etcdir/system-id.conf
136 uuid_file=$etcdir/install_uuid.conf
137 if test -e "$id_file"; then
138 SYSTEM_ID=`cat "$id_file"`
139 elif test -e "$uuid_file"; then
140 # Migrate from old file name.
141 . "$uuid_file"
142 SYSTEM_ID=$INSTALLATION_UUID
143 echo "$SYSTEM_ID" > "$id_file"
144 elif SYSTEM_ID=`uuidgen`; then
145 echo "$SYSTEM_ID" > "$id_file"
146 else
147 log_failure_msg "missing uuidgen, could not generate system ID"
148 fi
149 ;;
150
151 '')
152 log_failure_msg "system ID not configured, please use --system-id"
153 ;;
154
155 *)
156 ;;
157 esac
158 set "$@" external-ids:system-id="\"$SYSTEM_ID\""
159
160 if test X"$SYSTEM_TYPE" != X; then
161 set "$@" system-type="\"$SYSTEM_TYPE\""
162 else
163 log_failure_msg "no default system type, please use --system-type"
164 fi
165
166 if test X"$SYSTEM_VERSION" != X; then
167 set "$@" system-version="\"$SYSTEM_VERSION\""
168 else
169 log_failure_msg "no default system version, please use --system-version"
170 fi
171
172 action "Configuring Open vSwitch system IDs" "$@" $extra_ids
173}
174
522839ab 175check_force_cores () {
43bb5f82
BP
176 if test X"$FORCE_COREFILES" = Xyes; then
177 ulimit -Sc 67108864
178 fi
522839ab 179}
43bb5f82 180
522839ab
JP
181start_ovsdb () {
182 check_force_cores
43bb5f82
BP
183
184 if daemon_is_running ovsdb-server; then
c707d418 185 log_success_msg "ovsdb-server is already running"
43bb5f82 186 else
c707d418
JP
187 # Create initial database or upgrade database schema.
188 upgrade_db || return 1
189
190 # Start ovsdb-server.
191 set ovsdb-server "$DB_FILE"
b4e8d170
BP
192 for db in $EXTRA_DBS; do
193 case $db in
194 /*) ;;
195 *) db=$dbdir/$db ;;
196 esac
197
198 if test ! -f "$db"; then
199 log_warning_msg "$db (from \$EXTRA_DBS) does not exist."
200 elif ovsdb-tool db-version "$db" >/dev/null; then
201 set "$@" "$db"
202 else
203 log_warning_msg "$db (from \$EXTRA_DBS) cannot be read as a database (see error message above)"
204 fi
205 done
c707d418
JP
206 set "$@" -vconsole:emer -vsyslog:err -vfile:info
207 set "$@" --remote=punix:"$DB_SOCK"
b4e8d170 208 set "$@" --remote=db:Open_vSwitch,Open_vSwitch,manager_options
4206b80f
HM
209 set "$@" --private-key=db:Open_vSwitch,SSL,private_key
210 set "$@" --certificate=db:Open_vSwitch,SSL,certificate
211 set "$@" --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert
c707d418 212 start_daemon "$OVSDB_SERVER_PRIORITY" "$OVSDB_SERVER_WRAPPER" "$@" \
d0c06099 213 || return 1
43bb5f82 214
c707d418
JP
215 # Initialize database settings.
216 ovs_vsctl -- init -- set Open_vSwitch . db-version="$schemaver" \
217 || return 1
218 set_system_ids || return 1
219 if test X"$DELETE_BRIDGES" = Xyes; then
43bb5f82 220 for bridge in `ovs_vsctl list-br`; do
c707d418 221 ovs_vsctl del-br $bridge
43bb5f82 222 done
c707d418 223 fi
43bb5f82 224 fi
522839ab
JP
225}
226
227start_forwarding () {
228 check_force_cores
229
230 insert_mod_if_required || return 1
43bb5f82
BP
231
232 if daemon_is_running ovs-vswitchd; then
c707d418 233 log_success_msg "ovs-vswitchd is already running"
43bb5f82 234 else
c707d418
JP
235 # Increase the limit on the number of open file descriptors.
236 # ovs-vswitchd needs 16 per datapath, plus a few extra, so this
237 # should allow for 256 (or more) bridges.
238 ulimit -n 5000
239
240 # Start ovs-vswitchd.
241 set ovs-vswitchd unix:"$DB_SOCK"
242 set "$@" -vconsole:emer -vsyslog:err -vfile:info
243 if test X"$MLOCKALL" != Xno; then
244 set "$@" --mlockall
245 fi
246 start_daemon "$OVS_VSWITCHD_PRIORITY" "$OVS_VSWITCHD_WRAPPER" "$@"
43bb5f82 247 fi
9fc47ed7
BP
248
249 if daemon_is_running ovs-brcompatd; then
c707d418 250 log_success_msg "ovs-brcompatd is already running"
9fc47ed7
BP
251 elif test X"$BRCOMPAT" = Xyes; then
252 set ovs-brcompatd
c707d418
JP
253 set "$@" -vconsole:emer -vsyslog:err -vfile:info
254 start_daemon "$OVS_BRCOMPATD_PRIORITY" "$OVS_BRCOMPATD_WRAPPER" "$@"
9fc47ed7 255 fi
43bb5f82
BP
256}
257
258## ---- ##
259## stop ##
260## ---- ##
261
522839ab
JP
262stop_ovsdb () {
263 stop_daemon ovsdb-server
264}
265
266stop_forwarding () {
9fc47ed7 267 stop_daemon ovs-brcompatd
43bb5f82 268 stop_daemon ovs-vswitchd
43bb5f82
BP
269}
270
271## ----------------- ##
272## force-reload-kmod ##
273## ----------------- ##
274
275internal_interfaces () {
276 # Outputs a list of internal interfaces:
277 #
278 # - There is an internal interface for every bridge, whether it
279 # has an Interface record or not and whether the Interface
280 # record's 'type' is properly set or not.
281 #
282 # - There is an internal interface for each Interface record whose
283 # 'type' is 'internal'.
284 #
285 # But ignore interfaces that don't really exist.
286 for d in `(ovs_vsctl --bare \
287 -- --columns=name find Interface type=internal \
c707d418 288 -- list-br) | sort -u`
43bb5f82
BP
289 do
290 if test -e "/sys/class/net/$d"; then
c707d418
JP
291 printf "%s " "$d"
292 fi
43bb5f82
BP
293 done
294}
295
751d0ddb
BP
296save_interfaces () {
297 "$datadir/scripts/ovs-save" $ifaces > "$script"
298}
299
43bb5f82
BP
300force_reload_kmod () {
301 ifaces=`internal_interfaces`
302 action "Detected internal interfaces: $ifaces" true
303
522839ab
JP
304 # Restart the database first, since a large database may take a
305 # while to load, and we want to minimize forwarding disruption.
306 stop_ovsdb
307 start_ovsdb
308
309 stop_forwarding
43bb5f82
BP
310
311 script=`mktemp`
bb9f6963
BP
312 trap 'rm -f "$script"' 0 1 2 13 15
313 if action "Saving interface configuration" save_interfaces; then
43bb5f82
BP
314 :
315 else
316 log_warning_msg "Failed to save configuration, not replacing kernel module"
522839ab 317 start_forwarding
43bb5f82
BP
318 exit 1
319 fi
320 chmod +x "$script"
321
322 for dp in `ovs-dpctl dump-dps`; do
de061b24 323 action "Removing datapath: $dp" ovs-dpctl del-dp "$dp"
43bb5f82
BP
324 done
325
9b80f761 326 # try both old and new names in case this is post upgrade
9fc47ed7
BP
327 if test -e /sys/module/brcompat_mod; then
328 action "Removing brcompat module" rmmod brcompat_mod
9b80f761
CW
329 elif test -e /sys/module/brcompat; then
330 action "Removing brcompat module" rmmod brcompat
9fc47ed7 331 fi
43bb5f82
BP
332 if test -e /sys/module/openvswitch_mod; then
333 action "Removing openvswitch module" rmmod openvswitch_mod
9b80f761
CW
334 elif test -e /sys/module/openvswitch; then
335 action "Removing openvswitch module" rmmod openvswitch
43bb5f82
BP
336 fi
337
522839ab 338 start_forwarding
43bb5f82 339
bb9f6963
BP
340 action "Restoring interface configuration" "$script"
341 rc=$?
342 if test $rc = 0; then
343 level=debug
344 else
345 level=err
346 fi
347 log="logger -p daemon.$level -t ovs-save"
348 $log "force-reload-kmod interface restore script exited with status $rc:"
349 $log -f "$script"
2dc7590d
BP
350
351 "$datadir/scripts/ovs-check-dead-ifs"
43bb5f82
BP
352}
353
b3a375f2
BP
354## --------------- ##
355## enable-protocol ##
356## --------------- ##
357
358enable_protocol () {
b053c7c1
BP
359 # Translate the protocol name to a number, because "iptables -n -L" prints
360 # some protocols by name (despite the -n) and therefore we need to look for
361 # both forms.
362 #
363 # (iptables -S output is more uniform but old iptables doesn't have it.)
364 protonum=`grep "^$PROTOCOL[ ]" /etc/protocols | awk '{print $2}'`
365 if expr X"$protonum" : X'[0-9]\{1,\}$' > /dev/null; then :; else
366 log_failure_msg "unknown protocol $PROTOCOL"
367 return 1
368 fi
369
b3a375f2 370 name=$PROTOCOL
b053c7c1
BP
371 match="(\$2 == \"$PROTOCOL\" || \$2 == $protonum)"
372 insert="iptables -I INPUT -p $PROTOCOL"
b3a375f2 373 if test X"$DPORT" != X; then
b3a375f2 374 name="$name to port $DPORT"
b053c7c1
BP
375 match="$match && /dpt:$DPORT/"
376 insert="$insert --dport $DPORT"
b3a375f2
BP
377 fi
378 if test X"$SPORT" != X; then
b3a375f2 379 name="$name from port $SPORT"
b053c7c1
BP
380 match="$match && /spt:$SPORT/"
381 insert="$insert --sport $SPORT"
b3a375f2 382 fi
b3a375f2
BP
383 insert="$insert -j ACCEPT"
384
b053c7c1
BP
385 if (iptables -n -L INPUT) >/dev/null 2>&1; then
386 if iptables -n -L INPUT | awk "$match { n++ } END { exit n == 0 }"
387 then
388 # There's already a rule for this protocol. Don't override it.
389 log_success_msg "iptables already has a rule for $name, not explicitly enabling"
390 else
391 action "Enabling $name with iptables" $insert
392 fi
b3a375f2 393 elif (iptables --version) >/dev/null 2>&1; then
b3a375f2 394 action "cannot list iptables rules, not adding a rule for $name"
2ae9d860
BP
395 else
396 action "iptables binary not installed, not adding a rule for $name"
b3a375f2
BP
397 fi
398}
399
43bb5f82
BP
400## ---- ##
401## main ##
402## ---- ##
403
404set_defaults () {
405 SYSTEM_ID=
406
407 DELETE_BRIDGES=no
9fc47ed7 408 BRCOMPAT=no
43bb5f82
BP
409
410 DAEMON_CWD=/
411 FORCE_COREFILES=yes
412 MLOCKALL=yes
413 OVSDB_SERVER_PRIORITY=-10
414 OVS_VSWITCHD_PRIORITY=-10
9fc47ed7 415 OVS_BRCOMPATD_PRIORITY=-10
d0c06099
BP
416 OVSDB_SERVER_WRAPPER=
417 OVS_VSWITCHD_WRAPPER=
418 OVS_BRCOMPATD_WRAPPER=
43bb5f82 419
f973f2af 420 DB_FILE=$dbdir/conf.db
43bb5f82
BP
421 DB_SOCK=$rundir/db.sock
422 DB_SCHEMA=$datadir/vswitch.ovsschema
b4e8d170 423 EXTRA_DBS=
43bb5f82 424
b3a375f2
BP
425 PROTOCOL=gre
426 DPORT=
427 SPORT=
428
a685eb5a
GS
429 type_file=$etcdir/system-type.conf
430 version_file=$etcdir/system-version.conf
431
432 if test -e "$type_file" ; then
433 SYSTEM_TYPE=`cat $type_file`
434 SYSTEM_VERSION=`cat $version_file`
435 elif (lsb_release --id) >/dev/null 2>&1; then
43bb5f82
BP
436 SYSTEM_TYPE=`lsb_release --id -s`
437 system_release=`lsb_release --release -s`
438 system_codename=`lsb_release --codename -s`
439 SYSTEM_VERSION="${system_release}-${system_codename}"
440 else
441 SYSTEM_TYPE=unknown
442 SYSTEM_VERSION=unknown
443 fi
444}
445
446usage () {
447 set_defaults
448 cat <<EOF
449$0: controls Open vSwitch daemons
450usage: $0 [OPTIONS] COMMAND
451
452This program is intended to be invoked internally by Open vSwitch startup
453scripts. System administrators should not normally invoke it directly.
454
455Commands:
456 start start Open vSwitch daemons
457 stop stop Open vSwitch daemons
458 status check whether Open vSwitch daemons are running
459 version print versions of Open vSwitch daemons
da3db88f 460 load-kmod insert modules if not already present
43bb5f82
BP
461 force-reload-kmod save OVS network device state, stop OVS, unload kernel
462 module, reload kernel module, start OVS, restore state
b3a375f2 463 enable-protocol enable protocol specified in options with iptables
43bb5f82
BP
464 help display this help message
465
9fc47ed7 466One of the following options is required for "start" and "force-reload-kmod":
43bb5f82
BP
467 --system-id=UUID set specific ID to uniquely identify this system
468 --system-id=random use a random but persistent UUID to identify this system
469
9fc47ed7 470Other important options for "start" and "force-reload-kmod":
43bb5f82
BP
471 --system-type=TYPE set system type (e.g. "XenServer")
472 --system-version=VERSION set system version (e.g. "5.6.100-39265p")
473 --external-id="key=value"
474 add given key-value pair to Open_vSwitch external-ids
475 --delete-bridges delete all bridges just before starting ovs-vswitchd
476
9fc47ed7
BP
477Less important options for "start" and "force-reload-kmod":
478 --daemon-cwd=DIR set working dir for OVS daemons (default: $DAEMON_CWD)
479 --no-force-corefiles do not force on core dumps for OVS daemons
480 --no-mlockall do not lock all of ovs-vswitchd into memory
481 --ovsdb-server-priority=NICE set ovsdb-server's niceness (default: $OVSDB_SERVER_PRIORITY)
482 --ovs-vswitchd-priority=NICE set ovs-vswitchd's niceness (default: $OVS_VSWITCHD_PRIORITY)
483 --ovs-brcompatd-priority=NICE set ovs-brcompatd's niceness (default: $OVS_BRCOMPATD_PRIORITY)
484
d0c06099
BP
485Debugging options for "start" and "force-reload-kmod":
486 --ovsdb-server-wrapper=WRAPPER
487 --ovs-vswitchd-wrapper=WRAPPER
488 --ovs-vswitchd-wrapper=WRAPPER
489 run specified daemon under WRAPPER (either 'valgrind' or 'strace')
490
da3db88f 491Options for "start", "force-reload-kmod", "load-kmod", "status", and "version":
9fc47ed7 492 --brcompat enable Linux bridge compatibility module and daemon
43bb5f82
BP
493
494File location options:
495 --db-file=FILE database file name (default: $DB_FILE)
496 --db-sock=SOCKET JSON-RPC socket name (default: $DB_SOCK)
497 --db-schema=FILE database schema file name (default: $DB_SCHEMA)
498
9fc47ed7 499Options for "enable-protocol":
b3a375f2
BP
500 --protocol=PROTOCOL protocol to enable with iptables (default: gre)
501 --sport=PORT source port to match (for tcp or udp protocol)
502 --dport=PORT ddestination port to match (for tcp or udp protocol)
503
43bb5f82
BP
504Other options:
505 -h, --help display this help message
506 -V, --version display version information
507
508Default directories with "configure" option and environment variable override:
f973f2af
BP
509 logs: @LOGDIR@ (--with-logdir, OVS_LOGDIR)
510 pidfiles and sockets: @RUNDIR@ (--with-rundir, OVS_RUNDIR)
511 conf.db: @DBDIR@ (--with-dbdir, OVS_DBDIR)
43bb5f82
BP
512 system configuration: @sysconfdir@ (--sysconfdir, OVS_SYSCONFDIR)
513 data files: @pkgdatadir@ (--pkgdatadir, OVS_PKGDATADIR)
514 user binaries: @bindir@ (--bindir, OVS_BINDIR)
515 system binaries: @sbindir@ (--sbindir, OVS_SBINDIR)
516
517Please report bugs to bugs@openvswitch.org (see REPORTING-BUGS for details).
518EOF
519
520 exit 0
521}
522
523set_option () {
524 var=`echo "$option" | tr abcdefghijklmnopqrstuvwxyz- ABCDEFGHIJKLMNOPQRSTUVWXYZ_`
525 eval set=\${$var+yes}
526 eval old_value=\$$var
527 if test X$set = X || \
528 (test $type = bool && \
529 test X"$old_value" != Xno && test X"$old_value" != Xyes); then
530 echo >&2 "$0: unknown option \"$arg\" (use --help for help)"
531 return
532 fi
533 eval $var=\$value
534}
535
9fc47ed7
BP
536daemons () {
537 echo ovsdb-server ovs-vswitchd
538 if test X"$BRCOMPAT" = Xyes; then
539 echo ovs-brcompatd
540 fi
541}
542
43bb5f82
BP
543set_defaults
544extra_ids=
545command=
546for arg
547do
548 case $arg in
549 -h | --help)
550 usage
551 ;;
552 -V | --version)
8a07709c 553 echo "$0 (Open vSwitch) $VERSION"
43bb5f82
BP
554 exit 0
555 ;;
556 --external-id=*)
557 value=`expr X"$arg" : 'X[^=]*=\(.*\)'`
558 case $value in
559 *=*)
560 extra_ids="$extra_ids external-ids:$value"
561 ;;
562 *)
563 echo >&2 "$0: --external-id argument not in the form \"key=value\""
564 exit 1
565 ;;
566 esac
567 ;;
568 --[a-z]*=*)
569 option=`expr X"$arg" : 'X--\([^=]*\)'`
570 value=`expr X"$arg" : 'X[^=]*=\(.*\)'`
571 type=string
572 set_option
573 ;;
574 --no-[a-z]*)
575 option=`expr X"$arg" : 'X--no-\(.*\)'`
576 value=no
577 type=bool
578 set_option
579 ;;
580 --[a-z]*)
581 option=`expr X"$arg" : 'X--\(.*\)'`
582 value=yes
583 type=bool
584 set_option
585 ;;
586 -*)
587 echo >&2 "$0: unknown option \"$arg\" (use --help for help)"
588 exit 1
589 ;;
590 *)
591 if test X"$command" = X; then
592 command=$arg
593 else
594 echo >&2 "$0: exactly one non-option argument required (use --help for help)"
595 exit 1
596 fi
597 ;;
598 esac
599done
600case $command in
601 start)
522839ab
JP
602 start_ovsdb
603 start_forwarding
43bb5f82
BP
604 ;;
605 stop)
522839ab
JP
606 stop_forwarding
607 stop_ovsdb
43bb5f82
BP
608 ;;
609 status)
9fc47ed7
BP
610 rc=0
611 for daemon in `daemons`; do
612 daemon_status $daemon || rc=$?
613 done
614 exit $rc
43bb5f82
BP
615 ;;
616 version)
9fc47ed7
BP
617 for daemon in `daemons`; do
618 $daemon --version
619 done
43bb5f82
BP
620 ;;
621 force-reload-kmod)
c707d418 622 force_reload_kmod
43bb5f82 623 ;;
da3db88f
SH
624 load-kmod)
625 insert_mod_if_required
626 ;;
b3a375f2
BP
627 enable-protocol)
628 enable_protocol
629 ;;
43bb5f82
BP
630 help)
631 usage
632 ;;
633 '')
634 echo >&2 "$0: missing command name (use --help for help)"
635 exit 1
636 ;;
637 *)
638 echo >&2 "$0: unknown command \"$command\" (use --help for help)"
639 exit 1
640 ;;
641esac
642