ofproto: Fix potential leak during flow mods.
[sliver-openvswitch.git] / xenserver / etc_init.d_openvswitch
index c7d0736..9c0fe80 100755 (executable)
@@ -5,7 +5,7 @@
 # chkconfig: 2345 09 91
 # description: Manage Open vSwitch kernel modules and user-space daemons
 
-# Copyright (C) 2009, 2010, 2011 Nicira Networks, Inc.
+# Copyright (C) 2009, 2010, 2011 Nicira, Inc.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -43,8 +43,18 @@ case `cat /etc/xensource/network.conf` in
         ;;
 esac
 
+start_ovs_xapi_sync () {
+    if daemon_is_running ovs-xapi-sync; then
+       log_success_msg "ovs-xapi-sync is already running"
+    else
+       PYTHONPATH=/usr/share/openvswitch/python \
+            /usr/share/openvswitch/scripts/ovs-xapi-sync \
+            --log-file --pidfile --detach --monitor unix:/var/run/openvswitch/db.sock
+    fi
+}
+
 start () {
-    set $ovs_ctl ${1-start}
+    set ovs_ctl ${1-start}
     set "$@" --system-id="$INSTALLATION_UUID"
     set "$@" --system-type="$PRODUCT_BRAND"
     set "$@" --system-version="$PRODUCT_VERSION-$BUILD_NUMBER"
@@ -66,17 +76,12 @@ start () {
         touch /var/run/openvswitch.booted
         set "$@" --delete-bridges
     fi
+    set "$@" $OVS_CTL_OPTS
     "$@"
 
-    if daemon_is_running ovs-xapi-sync; then
-       log_success_msg "ovs-xapi-sync is already running"
-    else
-       PYTHONPATH=/usr/share/openvswitch/python \
-            /usr/share/openvswitch/scripts/ovs-xapi-sync \
-            --log-file --pidfile --detach --monitor unix:/var/run/openvswitch/db.sock
-    fi
+    start_ovs_xapi_sync
 
-    $ovs_ctl --protocol=gre enable-protocol
+    ovs_ctl --protocol=gre enable-protocol
 
     touch /var/lock/subsys/openvswitch
 }
@@ -91,15 +96,27 @@ force_reload_kmod () {
        action "Stopping HA daemon" ha_stop_daemon
        action "Starting HA daemon" ha_start_daemon
     fi
+
+    action "Stopping ovs-xapi-sync" stop_daemon ovs-xapi-sync
+    action "Starting ovs-xapi-sync" start_ovs_xapi_sync
 }
 
 stop () {
-    $ovs_ctl stop
+    ovs_ctl stop
     stop_daemon ovs-xapi-sync
     rm -f /var/lock/subsys/openvswitch
 }
 
-ovs_ctl=/usr/share/openvswitch/scripts/ovs-ctl
+restart () {
+    if [ "$1" = "--save-flows=yes" ]; then
+        stop_daemon ovs-xapi-sync
+        start restart
+    else
+        stop
+        start
+    fi
+}
+
 case $1 in
     start)
         start
@@ -108,22 +125,21 @@ case $1 in
         stop
         ;;
     restart)
-        stop
-        start
+        shift
+        restart "$@"
         ;;
     reload|force-reload)
         # The main OVS daemons keep up-to-date, but ovs-xapi-sync needs help.
-        pidfile=/var/run/openvswitch/ovs-xapi-sync.pid
-        if test -e "$pidfile"; then
-            pid=`cat "$pidfile"`
-            action "Configuring Open vSwitch external IDs" kill -HUP $pid
+        if daemon_is_running ovs-xapi-sync; then
+            action "Configuring Open vSwitch external IDs" \
+                ovs-appctl -t ovs-xapi-sync flush-cache
         fi
         ;;
     status)
-        $ovs_ctl status && daemon_status ovs-xapi-sync
+        ovs_ctl status && daemon_status ovs-xapi-sync
         ;;
     version)
-        $ovs_ctl version
+        ovs_ctl version
         ;;
     force-reload-kmod)
         force_reload_kmod