diff options
Diffstat (limited to 'network/openvswitch/xen/network-openvswitch')
-rw-r--r-- | network/openvswitch/xen/network-openvswitch | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/network/openvswitch/xen/network-openvswitch b/network/openvswitch/xen/network-openvswitch new file mode 100644 index 0000000000..45cda0b195 --- /dev/null +++ b/network/openvswitch/xen/network-openvswitch @@ -0,0 +1,124 @@ +#!/bin/bash +#============================================================================ +# Default Xen network start/stop script. +# Xend calls a network script when it starts. +# The script name to use is defined in ${XEN_CONFIG_DIR}/xend-config.sxp +# in the network-script field. +# +# This script creates a virtual switch (default ${netdev}) and adds a +# device (defaults to eth0) to it. The interface that this Open vSwitch +# is created on should not have a working IP address and will be used as +# a switch for Xen domU's. +# +# Usage: +# network-openvswitch (start|stop|status) {VAR=VAL}* +# +# Vars: +# bridge The bridge to use (default xenvs0). +# netdev The interface to add to the bridge (default eth0). This +# device should not be configured with an IP address. If so +# this script will tear down the interface and bring it back up +# without an IP address. +# +# start: +# Creates the bridge as bridge +# Enslaves netdev to bridge +# +# stop: +# Removes netdev from the bridge +# Deletes bridge +# +# status: +# Print addresses, interfaces +# +#============================================================================ + +dir=$(dirname "$0") +. "$dir/logging.sh" +. "$dir/xen-script-common.sh" +. "$dir/xen-network-common.sh" +. "$dir/locking.sh" + +findCommand "$@" +evalVariables "$@" + +netdev=${netdev:-eth0} +bridge=${bridge:-ovs0} + +addr=`ip addr show dev ${netdev} | egrep '^ *inet' | sed -e 's/ *inet //' -e 's/ .*//'` +if [ -n "$addr" ]; then + echo "Invalid device: ${netdev} is up and has a valid IP address!" >&2 + exit 1 +fi + +show_status () { + local dev=$1 + local bridge=$2 + + echo '============================================================' + echo 'vSwitch interfaces' + ovs-vsctl list-ifaces ${bridge} + echo ' ' + echo 'vSwitch ports' + ovs-vsctl list-ports ${bridge} + echo '============================================================' +} + +op_start () { + if [ "${bridge}" = "null" ] ; then + return + fi + + ifconfig "${netdev}" down + ifconfig "${netdev}" 0.0.0.0 up + ovs-vsctl -- --may-exist add-br ${bridge} + ifconfig "${bridge}" 0.0.0.0 up + ovs-vsctl -- --may-exist add-port ${bridge} ${netdev} + + # Remove any stale ports from last time virtual switch was running. + # Open vSwitch has the habit of remembering port settings between + # runs. + for port in $(ovs-vsctl list-ports ${bridge}) + do + if [ "${port}" != "${netdev}" ] + then + ifconfig "${port}" down + ovs-vsctl del-port ${port} + fi + done +} + +op_stop () { + if [ "${bridge}" = "null" ]; then + return + fi + + # Remove all ports from virtual switch. + for port in $(ovs-vsctl list-ports ${bridge}) + do + ifconfig "${port}" down + ovs-vsctl del-port ${port} + done + + ifconfig "${bridge}" down + ovs-vsctl -- --if-exists del-br ${bridge} +} + +case "$command" in + start) + op_start + ;; + + stop) + op_stop + ;; + + status) + show_status ${netdev} ${bridge} + ;; + + *) + echo "Unknown command: $command" >&2 + echo 'Valid commands are: start, stop, status' >&2 + exit 1 +esac |