summaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
authorCory Wright <cory.wright@rackspace.com>2011-05-13 14:21:55 +0000
committerCory Wright <cory.wright@rackspace.com>2011-05-13 14:21:55 +0000
commita7c25a19a9a2fdf89fc9ecd3992ded936923af18 (patch)
treea59153dd0f5fe10517462bfb3a4e88bf93328de9 /plugins
parent30341658e5332d3902f7f202bd5c291d00e2f99f (diff)
downloadnova-a7c25a19a9a2fdf89fc9ecd3992ded936923af18.tar.gz
nova-a7c25a19a9a2fdf89fc9ecd3992ded936923af18.tar.xz
nova-a7c25a19a9a2fdf89fc9ecd3992ded936923af18.zip
Add init script and sysconfig file for openvswitch-nova
Diffstat (limited to 'plugins')
-rwxr-xr-xplugins/xenserver/networking/etc/init.d/openvswitch-nova96
-rw-r--r--plugins/xenserver/networking/etc/sysconfig/openvswitch-nova1
-rwxr-xr-xplugins/xenserver/networking/etc/xensource/scripts/ovs_configure_base_flows.py35
3 files changed, 116 insertions, 16 deletions
diff --git a/plugins/xenserver/networking/etc/init.d/openvswitch-nova b/plugins/xenserver/networking/etc/init.d/openvswitch-nova
new file mode 100755
index 000000000..e4dbdf4af
--- /dev/null
+++ b/plugins/xenserver/networking/etc/init.d/openvswitch-nova
@@ -0,0 +1,96 @@
+#!/bin/bash
+#
+# openvswitch-nova
+#
+# chkconfig: 2345 10 89
+# description: Apply initial OVS flows for Nova
+
+# Copyright 2011 OpenStack LLC.
+# Copyright (C) 2009, 2010, 2011 Nicira Networks, Inc.
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+# source function library
+if [ -f /etc/init.d/functions ]; then
+ . /etc/init.d/functions
+elif [ -f /etc/rc.d/init.d/functions ]; then
+ . /etc/rc.d/init.d/functions
+elif [ -f /lib/lsb/init-functions ]; then
+ . /lib/lsb/init-functions
+else
+ echo "$0: missing LSB shell function library" >&2
+ exit 1
+fi
+
+OVS_CONFIGURE_BASE_FLOWS=/etc/xensource/scripts/ovs_configure_base_flows.py
+
+if test -e /etc/sysconfig/openvswitch-nova; then
+ . /etc/sysconfig/openvswitch-nova
+else
+ echo "$0: missing configuration file: /etc/sysconfig/openvswitch-nova"
+ exit 1
+fi
+
+if test -e /etc/xensource/network.conf; then
+ NETWORK_MODE=$(cat /etc/xensource/network.conf)
+fi
+
+case ${NETWORK_MODE:=openvswitch} in
+ vswitch|openvswitch)
+ ;;
+ bridge)
+ exit 0
+ ;;
+ *)
+ echo "Open vSwitch disabled (/etc/xensource/network.conf is invalid)" >&2
+ exit 0
+ ;;
+esac
+
+function run_ovs_conf_base_flows {
+ # expected format: DEVICE_BRIDGES="eth0:xenbr0 eth1:xenbr1"
+ for pair in $DEVICE_BRIDGES; do
+ # below in $info, physical device is [0], bridge name is [1]
+ info=${pair//:/ }
+ /usr/bin/python $OVS_CONFIGURE_BASE_FLOWS $1 ${info[0]} ${info[1]}
+ done
+}
+
+function start {
+ run_ovs_conf_base_flows online
+}
+
+function stop {
+ run_ovs_conf_base_flows offline
+}
+
+function restart {
+ run_ovs_conf_base_flows reset
+}
+
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ restart)
+ restart
+ ;;
+ *)
+ echo "usage: openvswitch-nova [start|stop|restart]"
+ exit 1
+ ;;
+esac
diff --git a/plugins/xenserver/networking/etc/sysconfig/openvswitch-nova b/plugins/xenserver/networking/etc/sysconfig/openvswitch-nova
new file mode 100644
index 000000000..829782fb6
--- /dev/null
+++ b/plugins/xenserver/networking/etc/sysconfig/openvswitch-nova
@@ -0,0 +1 @@
+#DEVICE_BRIDGES="eth0:xenbr0 eth1:xenbr1"
diff --git a/plugins/xenserver/networking/etc/xensource/scripts/ovs_configure_base_flows.py b/plugins/xenserver/networking/etc/xensource/scripts/ovs_configure_base_flows.py
index 82d0b9e31..0186a3c8b 100755
--- a/plugins/xenserver/networking/etc/xensource/scripts/ovs_configure_base_flows.py
+++ b/plugins/xenserver/networking/etc/xensource/scripts/ovs_configure_base_flows.py
@@ -27,32 +27,35 @@ import sys
from novalib import execute, execute_get_output
-def main(phys_dev_name, bridge_name):
- pnic_ofport = execute_get_output('/usr/bin/ovs-vsctl', 'get', 'Interface',
- phys_dev_name, 'ofport')
+def main(command, phys_dev_name, bridge_name):
ovs_ofctl = lambda *rule: execute('/usr/bin/ovs-ofctl', *rule)
- # clear all flows
+ # always clear all flows first
ovs_ofctl('del-flows', bridge_name)
- # these flows are lower priority than all VM-specific flows.
+ if command in ('online', 'reset'):
+ pnic_ofport = execute_get_output('/usr/bin/ovs-vsctl', 'get', 'Interface',
+ phys_dev_name, 'ofport')
- # allow all traffic from the physical NIC, as it is trusted (i.e., from a
- # filtered vif, or from the physical infrastructure
- ovs_ofctl('add-flow', bridge_name,
- "priority=2,in_port=%s,actions=normal" % pnic_ofport)
+ # these flows are lower priority than all VM-specific flows.
- # default drop
- ovs_ofctl('add-flow', bridge_name, 'priority=1,actions=drop')
+ # allow all traffic from the physical NIC, as it is trusted (i.e., from a
+ # filtered vif, or from the physical infrastructure
+ ovs_ofctl('add-flow', bridge_name,
+ "priority=2,in_port=%s,actions=normal" % pnic_ofport)
+
+ # default drop
+ ovs_ofctl('add-flow', bridge_name, 'priority=1,actions=drop')
if __name__ == "__main__":
- if len(sys.argv) != 3:
+ if len(sys.argv) != 4 or sys.argv[1] not in ('online', 'offline', 'reset'):
+ print sys.argv
script_name = os.path.basename(sys.argv[0])
print "This script configures base ovs flows."
- print "usage: %s phys-dev-name bridge-name" % script_name
- print " ex: %s eth0 xenbr0" % script_name
+ print "usage: %s [online|offline|reset] phys-dev-name bridge-name" % script_name
+ print " ex: %s online eth0 xenbr0" % script_name
sys.exit(1)
else:
- phys_dev_name, bridge_name = sys.argv[1:3]
- main(phys_dev_name, bridge_name)
+ command, phys_dev_name, bridge_name = sys.argv[1:4]
+ main(command, phys_dev_name, bridge_name)