From 2ea512d8903ddb1fa64ace1667a369304b17308e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20R=C4=99korajski?= Date: Wed, 10 Apr 2013 14:38:38 +0200 Subject: [PATCH] - add support for openvswitch - rel 3 --- vif-openvswitch | 79 +++++++++++++++++++++++++++++++++++++++++++++++++ xen.spec | 5 +++- 2 files changed, 83 insertions(+), 1 deletion(-) create mode 100755 vif-openvswitch diff --git a/vif-openvswitch b/vif-openvswitch new file mode 100755 index 0000000..142b154 --- /dev/null +++ b/vif-openvswitch @@ -0,0 +1,79 @@ +#!/bin/bash +#============================================================================ +# ${XEN_SCRIPT_DIR}/vif-openvswitch +# +# Script for configuring a vif using Open vSwitch. +# +# Usage: +# vif-openvswitch (add|remove|online|offline) +# +# Environment vars: +# vif vif interface name (required). +# XENBUS_PATH path to this device's details in the XenStore (required). +# +# Read from the store: +# bridge bridge to add the vif to (optional). Defaults to searching for the +# bridge itself. +# +# up: +# Enslaves the vif interface to the bridge. +# +# down: +# Removes the vif interface from the bridge. +#============================================================================ + +dir=$(dirname "$0") +. "$dir/vif-common.sh" + +bridge=${bridge:-} +bridge=$(xenstore_read_default "$XENBUS_PATH/bridge" "$bridge") + +if [ -z "${bridge}" ]; then + bridge=$(ovs-vsctl list-br | head -n 1) + if [ -z "$bridge" ]; then + fatal "Could not find bridge, and none was specified" + fi +fi + +tag=${tag:-} + +# Domain on VLAN tagged bridge? +if ! ovs-vsctl br-exists ${bridge}; then + if [[ $bridge =~ \.[[:digit:]]{1,4}$ ]]; then + tag=${bridge##*.} + bridge=${bridge%.[0-9]*} + else + fatal "Could not find bridge device ${bridge}" + fi +fi + +if ! ovs-vsctl br-exists ${bridge}; then + fatal "Could not find bridge device ${bridge}" +fi + +case "$command" in + online|add) + ip link set dev "${vif}" up + if [ -z $tag ]; then + ovs-vsctl -- --may-exist add-port ${bridge} ${vif} + else + ovs-vsctl -- --may-exist add-port ${bridge} ${vif} tag=${tag} + fi + ;; + offline) + do_without_error ovs-vsctl -- --if-exists del-port ${bridge} ${vif} + do_without_error ip link set dev "${vif}" down + ;; +esac + +call_hooks vif post + +if [ -z "${tag}" ]; then + log debug "Successful vif-openvswitch $command for ${vif}, bridge ${bridge}." +else + log debug "Successful vif-openvswitch $command for ${vif}, bridge ${bridge}, tag ${tag}." +fi + +if [ "$command" == "online" ]; then + success +fi diff --git a/xen.spec b/xen.spec index 287ab6b..d3a7fd0 100644 --- a/xen.spec +++ b/xen.spec @@ -30,7 +30,7 @@ Summary: Xen - a virtual machine monitor Summary(pl.UTF-8): Xen - monitor maszyny wirtualnej Name: xen Version: 4.2.1 -Release: 2 +Release: 3 License: GPL v2, interface parts on BSD-like Group: Applications/System Source0: http://bits.xensource.com/oss-xen/release/%{version}/%{name}-%{version}.tar.gz @@ -75,6 +75,7 @@ Source55: xen.logrotate Source56: xen.tmpfiles Source57: xen.cfg Source58: xen.efi-boot-update +Source59: vif-openvswitch Patch0: %{name}-python_scripts.patch Patch1: %{name}-symbols.patch Patch2: %{name}-curses.patch @@ -467,6 +468,8 @@ sed -e's;@libdir@;%{_libdir};g' -e's;@target_cpu@;%{_target_cpu};g' \ mv $RPM_BUILD_ROOT/etc/xen/{x{m,l}example*,examples} +install %{SOURCE59} $RPM_BUILD_ROOT%{_sysconfdir}/xen/scripts/vif-openvswitch + # for %%doc install -d _doc for tool in blktap blktap2 pygrub xenmon ; do -- 2.44.0