Avoid inserting duplicate iptables rules when restarting vswitch.
[openvswitch] / xenserver / etc_init.d_openvswitch
1 #!/bin/sh
2 #
3 # openvswitch
4 #
5 # chkconfig: 2345 09 91
6 # description: Manage Open vSwitch kernel modules and user-space daemons
7
8 # Copyright (C) 2009, 2010, 2011 Nicira Networks, Inc.
9 #
10 # Licensed under the Apache License, Version 2.0 (the "License");
11 # you may not use this file except in compliance with the License.
12 # You may obtain a copy of the License at:
13 #
14 #     http://www.apache.org/licenses/LICENSE-2.0
15 #
16 # Unless required by applicable law or agreed to in writing, software
17 # distributed under the License is distributed on an "AS IS" BASIS,
18 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19 # See the License for the specific language governing permissions and
20 # limitations under the License.
21 ### BEGIN INIT INFO
22 # Provides:          openvswitch-switch
23 # Required-Start:
24 # Required-Stop:
25 # Default-Start:     2 3 4 5
26 # Default-Stop:      0 1 6
27 # Short-Description: Open vSwitch switch
28 ### END INIT INFO
29
30 . /usr/share/openvswitch/scripts/ovs-lib.sh || exit 1
31 . /etc/xensource-inventory
32 test -e /etc/sysconfig/openvswitch && . /etc/sysconfig/openvswitch
33
34 case `cat /etc/xensource/network.conf` in
35     vswitch|openvswitch)
36         ;;
37     bridge)
38         exit 0
39         ;;
40     *)
41         echo "Open vSwitch disabled (/etc/xensource/network.conf is invalid)" >&2
42         exit 0
43         ;;
44 esac
45
46 start () {
47     set $ovs_ctl ${1-start}
48     set "$@" --system-id="$INSTALLATION_UUID"
49     set "$@" --system-type="$PRODUCT_BRAND"
50     set "$@" --system-version="$PRODUCT_VERSION-$BUILD_NUMBER"
51     set "$@" --external-id=xs-system-uuid="$INSTALLATION_UUID"
52     set "$@" --daemon-cwd=/var/xen/openvswitch
53     if test X"$FORCE_COREFILES" != X; then
54         set "$@" --force-corefiles="$FORCE_COREFILES"
55     fi
56     if test X"$OVSDB_SERVER_PRIORITY" != X; then
57         set "$@" --ovsdb-server-priority="$OVSDB_SERVER_PRIORITY"
58     fi
59     if test X"$VSWITCHD_PRIORITY" != X; then
60         set "$@" --ovs-vswitchd-priority="$VSWITCHD_PRIORITY"
61     fi
62     if test X"$VSWITCHD_MLOCKALL" != X; then
63         set "$@" --mlockall="$VSWITCHD_MLOCKALL"
64     fi
65     if test ! -e /var/run/openvswitch.booted; then
66         touch /var/run/openvswitch.booted
67         set "$@" --delete-bridges
68     fi
69     "$@"
70
71     if daemon_is_running ovs-xapi-sync; then
72         log_success_msg "ovs-xapi-sync is already running"
73     else
74         PYTHONPATH=/usr/share/openvswitch/python \
75             /usr/share/openvswitch/scripts/ovs-xapi-sync \
76             --pidfile --detach --monitor unix:/var/run/openvswitch/db.sock
77     fi
78
79     $ovs_ctl --protocol=gre enable-protocol
80
81     touch /var/lock/subsys/openvswitch
82 }
83
84 stop () {
85     $ovs_ctl stop
86     stop_daemon ovs-xapi-sync
87     rm -f /var/lock/subsys/openvswitch
88 }
89
90 ovs_ctl=/usr/share/openvswitch/scripts/ovs-ctl
91 case $1 in
92     start)
93         start
94         ;;
95     stop)
96         stop
97         ;;
98     restart)
99         stop
100         start
101         ;;
102     reload|force-reload)
103         # The main OVS daemons keep up-to-date, but ovs-xapi-sync needs help.
104         pidfile=/var/run/openvswitch/ovs-xapi-sync.pid
105         if test -e "$pidfile"; then
106             pid=`cat "$pidfile"`
107             action "Configuring Open vSwitch external IDs" kill -HUP $pid
108         fi
109         ;;
110     status)
111         $ovs_ctl status && daemon_status ovs-xapi-sync
112         ;;
113     version)
114         $ovs_ctl version
115         ;;
116     force-reload-kmod)
117         start force-reload-kmod
118         ;;
119     help)
120         printf "openvswitch [start|stop|restart|reload|force-reload|status|version]\n"
121         ;;
122     *)
123         printf "Unknown command: $1\n"
124         exit 1
125         ;;
126 esac