source: trunk/packages/sipb-xen-dom0/files/etc/xen/scripts/vif-sipbroute @ 986

Last change on this file since 986 was 95, checked in by hartmans, 17 years ago
  • Add qemu-ifup script that depends on the device model script and invokes vif-sipbroute. As a consequence, we don't really support bridged hvms any more. It's not clear how to get enough information out of qemu to do this.
  • Call arpspoof with 18.181.0.1's address. This is unfortunate in two ways. First, if we renumber we'll need to update the script. Second, it is possible that someone on 18.181 besides the router may have an address cached. Unfortunately, it doesn't work right if we don't send the spoofed arp directly to the router.
  • Property svn:executable set to *
File size: 2.7 KB
Line 
1#!/bin/bash
2
3
4
5
6
7#============================================================================
8# /etc/xen/vif-route
9#
10# Script for configuring a vif in routed mode.
11# The hotplugging system will call this script if it is specified either in
12# the device configuration given to Xend, or the default Xend configuration
13# in /etc/xen/xend-config.sxp.  If the script is specified in neither of those
14# places, then vif-bridge is the default.
15#
16# Usage:
17# vif-route (add|remove|online|offline)
18#
19# Environment vars:
20# vif         vif interface name (required).
21# XENBUS_PATH path to this device's details in the XenStore (required).
22# Read from the store:
23# ip      list of IP networks for the vif, space-separated (default given in
24#         this script).
25# V6PREFIX  prefix of v6 address to use
26# Note that the v6 support is kind of broken because there's not really a way to populate the v6 prefix
27# This script will set up proxy arp  for any ip addresses that are being routed
28# type read to determine if the device is ioemu
29
30#============================================================================
31
32dir=$(dirname "$0")
33. "$dir/vif-common.sh"
34
35main_ip=$(dom0_ip)
36dev=${dev:-${vif}}
37
38case "$command" in
39    online)
40        ifconfig ${dev} ${main_ip} netmask 255.255.255.255 up
41        echo 1 >/proc/sys/net/ipv4/conf/${dev}/proxy_arp
42        echo 1 >/proc/sys/net/ipv4/conf/${dev}/rp_filter
43        ipcmd='add'
44        cmdprefix=''
45        ;;
46    offline)
47        do_without_error ifdown ${vif}
48        if [ -f /var/run/radvd/radvd.pid.${vif} ] ; then
49            do_without_error kill `cat /var/run/radvd/radvd.pid.${vif}`
50            fi
51        ipcmd='del'
52        cmdprefix='do_without_error'
53        ;;
54esac
55
56v6prefix=${v6prefix:-}
57v6prefix=$(xenstore_read_default "$XENBUS_PATH/v6prefix" "$v6prefix")
58vif_type=$(xenstore_read_default "$XENBUS_PATH/type" "viffront")
59if [  ${vif_type} != "ioemu"  -o  x${qemu_online} = xyes ] ; then
60    if [ "${ip}" ] ; then
61    # If we've been given a list of IP addresses, then add routes from dom0 to
62    # the guest using those addresses.
63        for addr in ${ip} ; do
64            ${cmdprefix} ip route ${ipcmd} ${addr} dev ${dev} src ${main_ip}
65            arpspoof -i eth0 -t 18.181.0.1 ${addr}&
66            sleep 5
67            kill %arpspoof
68        done
69    fi
70
71    if [ x${v6prefix} != x ] ; then
72        sed -e "s/@interface@/${dev}/" -e "s+@prefix@+${v6prefix}+" /etc/xen/radvd.conf.template >/var/run/radvd.conf.${vif}
73        ${cmdprefix} ip -6 addr  ${ipcmd}  fe80::/64 scope link  dev ${dev} 
74        if [ $1 = online ] ; then
75            radvd  -u radvd -C /var/run/radvd.conf.${vif} -p /var/run/radvd/radvd.pid.${vif}
76        fi
77        ${cmdprefix} ip -6 route ${ipcmd} ${v6prefix} dev ${dev} 
78    fi
79fi
80
81handle_iptable
82
83log debug "Successful vif-route $command for $vif."
84if [ "$command" == "online" ]
85then
86  success
87fi
Note: See TracBrowser for help on using the repository browser.