mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
I have experienced that the vif-route script does not work as expected when deleting a virtual interface (Redhat FC5). Both of the commands "ifdown" and "ip route" cause an early vif-route script exit and therefore will cause skipping of the later script commands (such as cleaning up iptables entries for the default 'antispoof'). The vif-route script creates the following syslog error entry: "/etc/xen/scripts/vif-route failed; error detected." It appears that both of the problematic commands are actually redundant when destroying domains: 1. the interface is already gone (I assume because the domain frontend is gone already) --> ifdown does not do anything 2. the route is gone as well since the interface has disappeared --> ip route del does not do anything Executing those redundant commands with "do_without_error" ensures that the script completes and cleans up iptables rules. The attached RFC-patch only masks those commands when bringing down an interface, so that domain creation continues to fail in case of vif setup problems (intended behavior). Having the iptables cleanup called correctly by vif-route is important to keep the iptables rule-set clean, otherwise antispoof rules accumulate with every vif creation. Signed-off by: Reiner Sailer <sailer@us.ibm.com>
57 lines
1.5 KiB
Bash
Executable File
57 lines
1.5 KiB
Bash
Executable File
#!/bin/sh
|
|
#============================================================================
|
|
# /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).
|
|
#============================================================================
|
|
|
|
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
|
|
ipcmd='add'
|
|
cmdprefix=''
|
|
;;
|
|
offline)
|
|
do_without_error ifdown ${vif}
|
|
ipcmd='del'
|
|
cmdprefix='do_without_error'
|
|
;;
|
|
esac
|
|
|
|
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}
|
|
done
|
|
fi
|
|
|
|
handle_iptable
|
|
|
|
log debug "Successful vif-route $command for $vif."
|
|
if [ "$command" == "online" ]
|
|
then
|
|
success
|
|
fi
|