From: Sam Hartman Date: Fri, 24 Aug 2007 21:17:45 +0000 (-0400) Subject: * Add qemu-dm-sipb written by andersk to get us the domain ID in qemu-ifup X-Git-Tag: sipb-xen-dom0/2^0 X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-xen-config.git/commitdiff_plain/352aac8182b59d0375801fe8d1789da68325841b * Add qemu-dm-sipb written by andersk to get us the domain ID in qemu-ifup * Add vif-sipbroute, a version of vif-route that does better netwwork isolation and has initial but useless ipv6 support. This version also uses arpspoof to take over an address for domain migrations. * Add init script to enable rp_filter, proxy_arp and forwarding for the network config. svn path=/trunk/packages/sipb-xen-dom0/sipb-xen-dom0/; revision=87 --- diff --git a/debian/changelog b/debian/changelog index a3d8ae8..0540b2b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,13 @@ +sipb-xen-dom0 (2) unstable; urgency=low + + * Add qemu-dm-sipb written by andersk to get us the domain ID in qemu-ifup + * Add vif-sipbroute, a version of vif-route that does better netwwork + isolation and has initial but useless ipv6 support. This version also + uses arpspoof to take over an address for domain migrations. + * Add init script to enable rp_filter, proxy_arp and forwarding for the network config. + + -- Sam Hartman Fri, 24 Aug 2007 17:17:23 -0400 + sipb-xen-dom0 (1) unstable; urgency=low * First version diff --git a/debian/sipb-xen-dom0.init b/debian/sipb-xen-dom0.init new file mode 100644 index 0000000..439b320 --- /dev/null +++ b/debian/sipb-xen-dom0.init @@ -0,0 +1,12 @@ +#!/bin/sh +set -e + +case $1 in + start) + for foo in all default; do + echo 1 >/proc/sys/net/ipv4/conf/$foo/rp_filter + echo 1 >/proc/sys/net/ipv4/conf/$foo/proxy_arp + done + echo 1>/proc/sys/net/ipv4/ip_forward + ;; + esac diff --git a/files/etc/xen/scripts/vif-sipbroute b/files/etc/xen/scripts/vif-sipbroute new file mode 100755 index 0000000..be2b93e --- /dev/null +++ b/files/etc/xen/scripts/vif-sipbroute @@ -0,0 +1,82 @@ +#!/bin/bash + + + + +#============================================================================ +# /etc/xen/vif-route +# +# Script for configuring a vif in routed mode. +# The hotplugging system will call this script if it is specified either in +# the device configuration given to Xend, or the default Xend configuration +# in /etc/xen/xend-config.sxp. If the script is specified in neither of those +# places, then vif-bridge is the default. +# +# Usage: +# vif-route (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: +# ip list of IP networks for the vif, space-separated (default given in +# this script). +# V6PREFIX prefix of v6 address to use +# Note that the v6 support is kind of broken because there's not really a way to populate the v6 prefix +# This script will set up proxy arp for any ip addresses that are being routed + +#============================================================================ + +dir=$(dirname "$0") +. "$dir/vif-common.sh" + +main_ip=$(dom0_ip) + +case "$command" in + online) + ifconfig ${vif} ${main_ip} netmask 255.255.255.255 up + echo 1 >/proc/sys/net/ipv4/conf/${vif}/proxy_arp + echo 1 >/proc/sys/net/ipv4/conf/${vif}/rp_filter + ipcmd='add' + cmdprefix='' + ;; + offline) + do_without_error ifdown ${vif} + if [ -f /var/run/radvd/radvd.pid.${vif} ] ; then + do_without_error kill `cat /var/run/radvd/radvd.pid.${vif}` + fi + ipcmd='del' + cmdprefix='do_without_error' + ;; +esac + +v6prefix=${v6prefix:-} +v6prefix=$(xenstore_read_default "$XENBUS_PATH/v6prefix" "$v6prefix") + +if [ "${ip}" ] ; then + # If we've been given a list of IP addresses, then add routes from dom0 to + # the guest using those addresses. + for addr in ${ip} ; do + ${cmdprefix} ip route ${ipcmd} ${addr} dev ${vif} src ${main_ip} + arpspoof -i eth0 ${addr}& + sleep 5 + kill %arpspoof + done +fi + +if [ x${v6prefix} != x ] ; then + sed -e "s/@interface@/${vif}/" -e "s+@prefix@+${v6prefix}+" /etc/xen/radvd.conf.template >/var/run/radvd.conf.${vif} + ${cmdprefix} ip -6 addr ${ipcmd} fe80::/64 scope link dev ${vif} + if [ $1 = online ] ; then + radvd -u radvd -C /var/run/radvd.conf.${vif} -p /var/run/radvd/radvd.pid.${vif} + fi + ${cmdprefix} ip -6 route ${ipcmd} ${v6prefix} dev ${vif} + fi + +handle_iptable + +log debug "Successful vif-route $command for $vif." +if [ "$command" == "online" ] +then + success +fi diff --git a/files/usr/sbin/qemu-dm-sipb b/files/usr/sbin/qemu-dm-sipb new file mode 100755 index 0000000..378dfc8 --- /dev/null +++ b/files/usr/sbin/qemu-dm-sipb @@ -0,0 +1,16 @@ +#!/bin/sh +domid= +for i; do + if [ "$domid" = "_NEXT_" ]; then + domid=$i + break + elif [ "$i" = "-d" ]; then + domid=_NEXT_ + fi +done +export domid +echo 'BEGIN qemu-dm-sipb LOG' >> /tmp/log +echo "$0 $@" >> /tmp/log +env >> /tmp/log +echo 'END qemu-dm-sipb LOG' >> /tmp/log +exec "$ROOT/bin/qemu-dm" "$@"