~james-page/ubuntu/saucy/openvswitch/1.12-snapshot

« back to all changes in this revision

Viewing changes to .pc/bug-681880-3-Make-the-location-of-the-database-separately-configu.patch/utilities/ovs-ctl.in

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2012-08-07 16:00:53 UTC
  • mfrom: (5.1.25 sid)
  • Revision ID: package-import@ubuntu.com-20120807160053-nj4pgmkn6bp8t4md
Tags: 1.4.2+git20120612-9ubuntu1
* Merge from Debian unstable; remaining changes:
  - d/control: Disable openvswitch-datapath-dkms package.
* Dropped changes:
  - d/patches/kernel_3.5_support.patch: Superceded by 
    bug-684057-ovs-ctl-Add-support-for-newer-module-name.patch

Show diffs side-by-side

added added

removed removed

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