]>
Commit | Line | Data |
---|---|---|
9a25910a TL |
1 | #! /bin/sh |
2 | # | |
3 | # Copyright (C) 2011, 2012 Nicira, Inc. | |
4 | # | |
5 | # Licensed under the Apache License, Version 2.0 (the "License"); | |
6 | # you may not use this file except in compliance with the License. | |
7 | # You may obtain a copy of the License at: | |
8 | # | |
9 | # http://www.apache.org/licenses/LICENSE-2.0 | |
10 | # | |
11 | # Unless required by applicable law or agreed to in writing, software | |
12 | # distributed under the License is distributed on an "AS IS" BASIS, | |
13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
14 | # See the License for the specific language governing permissions and | |
15 | # limitations under the License. | |
16 | # | |
17 | ### BEGIN INIT INFO | |
18 | # Provides: openvswitch-switch | |
19 | # Required-Start: $network $named $remote_fs $syslog | |
20 | # Required-Stop: $remote_fs | |
21 | # Default-Start: 2 3 4 5 | |
22 | # Default-Stop: 0 1 6 | |
23 | # Short-Description: Open vSwitch switch | |
24 | # Description: openvswitch-switch provides the userspace components and utilities for | |
25 | # the Open vSwitch kernel-based switch. | |
26 | ### END INIT INFO | |
27 | ||
28 | (test -x /usr/sbin/ovs-vswitchd && test -x /usr/sbin/ovsdb-server) || exit 0 | |
29 | ||
30 | . /lib/lsb/init-functions | |
31 | ||
32 | . /usr/share/openvswitch/scripts/ovs-lib | |
33 | test -e /etc/default/openvswitch-switch && . /etc/default/openvswitch-switch | |
34 | ||
35 | mkdir -p /run/openvswitch | |
36 | ||
37 | network_interfaces () { | |
38 | INTERFACES="/etc/network/interfaces" | |
39 | [ -e "${INTERFACES}" ] || return | |
40 | bridges=`ifquery --allow ovs --list` | |
41 | [ -n "${bridges}" ] && $1 --allow=ovs ${bridges} | |
42 | } | |
43 | ||
44 | load_kmod () { | |
45 | ovs_ctl load-kmod || exit $? | |
46 | } | |
47 | ||
48 | start () { | |
49 | if ovs_ctl load-kmod; then | |
50 | : | |
51 | else | |
52 | echo "Module has probably not been built for this kernel." | |
53 | echo "Please install Linux 3.3 or later with openvswitch kernel support." | |
54 | ||
55 | if test X"$OVS_MISSING_KMOD_OK" = Xyes; then | |
56 | # We're being invoked by the package postinst. Do not | |
57 | # fail package installation just because the kernel module | |
58 | # is not available. | |
59 | exit 0 | |
60 | fi | |
61 | fi | |
62 | set ovs_ctl ${1-start} --system-id=random | |
63 | if test X"$FORCE_COREFILES" != X; then | |
64 | set "$@" --force-corefiles="$FORCE_COREFILES" | |
65 | fi | |
66 | set "$@" $OVS_CTL_OPTS | |
67 | "$@" || exit $? | |
68 | if [ "$2" = "start" ] && [ "$READ_INTERFACES" != "no" ]; then | |
69 | network_interfaces ifup | |
70 | fi | |
71 | } | |
72 | ||
73 | stop () { | |
74 | [ "$READ_INTERFACES" != "no" ] && network_interfaces ifdown | |
75 | ovs_ctl stop | |
76 | } | |
77 | ||
78 | restart () { | |
79 | # OVS_FORCE_RELOAD_KMOD can be set by package postinst script. | |
80 | if [ "$1" = "--save-flows=yes" ] || \ | |
81 | [ "${OVS_FORCE_RELOAD_KMOD}" = "no" ]; then | |
82 | start restart | |
83 | elif [ "${OVS_FORCE_RELOAD_KMOD}" = "yes" ]; then | |
84 | depmod -a | |
85 | ||
86 | if [ -e /sys/module/openvswitch ]; then | |
87 | LOADED_SRCVERSION=`cat /sys/module/openvswitch/srcversion \ | |
88 | 2>/dev/null` | |
89 | LOADED_VERSION=`cat /sys/module/openvswitch/version \ | |
90 | 2>/dev/null` | |
91 | elif [ -e /sys/module/openvswitch_mod ]; then | |
92 | LOADED_SRCVERSION=`cat /sys/module/openvswitch_mod/srcversion \ | |
93 | 2>/dev/null` | |
94 | LOADED_VERSION=`cat /sys/module/openvswitch_mod/version \ | |
95 | 2>/dev/null` | |
96 | fi | |
97 | SRCVERSION=`modinfo -F srcversion openvswitch 2>/dev/null` | |
98 | VERSION=`modinfo -F version openvswitch 2>/dev/null` | |
99 | ||
100 | ovs_ctl_log "Package upgrading:\n"\ | |
101 | "Loaded version: ${LOADED_VERSION} ${LOADED_SRCVERSION}.\n"\ | |
102 | "Version on disk: ${VERSION} ${SRCVERSION}." | |
103 | ||
104 | # If the kernel module was previously loaded and it is different than | |
105 | # the kernel module on disk, then do a 'force-reload-kmod'. | |
106 | if [ -n "${LOADED_SRCVERSION}" ] && [ -n "${SRCVERSION}" ] && \ | |
107 | [ "${SRCVERSION}" != "${LOADED_SRCVERSION}" ]; then | |
108 | start force-reload-kmod | |
109 | else | |
110 | start restart | |
111 | fi | |
112 | else | |
113 | READ_INTERFACES="no" stop | |
114 | READ_INTERFACES="no" start | |
115 | fi | |
116 | } | |
117 | ||
118 | case $1 in | |
119 | start) | |
120 | start | |
121 | ;; | |
122 | stop | force-stop) | |
123 | stop | |
124 | ;; | |
125 | systemd-start) | |
126 | start | |
127 | ;; | |
128 | systemd-stop) | |
129 | stop | |
130 | ;; | |
131 | reload | force-reload) | |
132 | # The OVS daemons keep up-to-date. | |
133 | ;; | |
134 | restart) | |
135 | shift | |
136 | restart "$@" | |
137 | ;; | |
138 | status) | |
139 | ovs_ctl status | |
140 | exit $? | |
141 | ;; | |
142 | force-reload-kmod) | |
143 | start force-reload-kmod | |
144 | ;; | |
145 | load-kmod) | |
146 | load_kmod | |
147 | ;; | |
148 | *) | |
149 | echo "Usage: $0 {start|stop|restart|force-reload|status|force-stop|force-reload-kmod|load-kmod}" >&2 | |
150 | exit 1 | |
151 | ;; | |
152 | esac | |
153 | ||
154 | exit 0 |