ia64/xen-unstable

view tools/examples/vif-common.sh @ 7827:60bf9aa39043

Have the vif scripts expect the offline event, not the remove event. With
the remove event, the script environment variable has disappeared, so we must
hook on the offline event instead. This fix was put into xen-backend.rules,
but not the vif scripts, so they were out of sync, and the interfaces were not
being properly closed down.

Signed-off-by: Ewan Mellor <ewan@xensource.com>
author emellor@leeni.uk.xensource.com
date Tue Nov 15 15:56:47 2005 +0100 (2005-11-15)
parents 6d981d34cf52
children 3867d93d86f7
line source
1 #
2 # Copyright (c) 2005 XenSource Ltd.
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of version 2.1 of the GNU Lesser General Public
6 # License as published by the Free Software Foundation.
7 #
8 # This library is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 # Lesser General Public License for more details.
12 #
13 # You should have received a copy of the GNU Lesser General Public
14 # License along with this library; if not, write to the Free Software
15 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 #
19 dir=$(dirname "$0")
20 . "$dir/xen-hotplug-common.sh"
21 . "$dir/xen-network-common.sh"
23 findCommand "$@"
25 if [ "$command" != "online" ] &&
26 [ "$command" != "offline" ] &&
27 [ "$command" != "add" ] &&
28 [ "$command" != "remove" ]
29 then
30 log err "Invalid command: $command"
31 exit 1
32 fi
34 case "$command" in
35 add | remove)
36 exit 0
37 ;;
38 esac
41 # Parameters may be read from the environment, the command line arguments, and
42 # the store, with overriding in that order. The environment is given by the
43 # driver, the command line is given by the Xend global configuration, and
44 # store details are given by the per-domain or per-device configuration.
46 evalVariables "$@"
48 ip=${ip:-}
49 ip=$(xenstore_read_default "$XENBUS_PATH/ip" "$ip")
51 # Check presence of compulsory args.
52 XENBUS_PATH="${XENBUS_PATH:?}"
53 vif="${vif:?}"
56 function frob_iptable()
57 {
58 if [ "$command" == "online" ]
59 then
60 local c="-A"
61 else
62 local c="-D"
63 fi
65 iptables "$c" FORWARD -m physdev --physdev-in "$vif" "$@" -j ACCEPT ||
66 fatal "iptables $c FORWARD -m physdev --physdev-in $vif $@ -j ACCEPT failed"
67 }
70 ##
71 # Add or remove the appropriate entries in the iptables. With antispoofing
72 # turned on, we have to explicitly allow packets to the interface, regardless
73 # of the ip setting. If ip is set, then we additionally restrict the packets
74 # to those coming from the specified networks, though we allow DHCP requests
75 # as well.
76 #
77 function handle_iptable()
78 {
79 # Check for a working iptables installation. Checking for the iptables
80 # binary is not sufficient, because the user may not have the appropriate
81 # modules installed. If iptables is not working, then there's no need to do
82 # anything with it, so we can just return.
83 if ! iptables -L >&/dev/null
84 then
85 return
86 fi
88 if [ "$ip" != "" ]
89 then
90 local addr
91 for addr in "$ip"
92 do
93 frob_iptable -s "$addr"
94 done
96 # Always allow the domain to talk to a DHCP server.
97 frob_iptable -p udp --sport 68 --dport 67
98 else
99 # No IP addresses have been specified, so allow anything.
100 frob_iptable
101 fi
102 }