# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1201185473 0
# Node ID 86c32269ba604f968c7abe5cf7360d7c00902ff8
# Parent 1190d50ce18c5a8237fc592d59cff8396bc435c5
network-nat: Fix NAT scripts.
Signed-off-by: Dan Magenheimer <dan.magenheimer@xxxxxxxxxx>
---
tools/examples/network-nat | 12 ++++++++--
tools/examples/vif-nat | 40 ++++++++++++++++++++++++++++++++---
tools/examples/xen-network-common.sh | 5 ++++
3 files changed, 52 insertions(+), 5 deletions(-)
diff -r 1190d50ce18c -r 86c32269ba60 tools/examples/network-nat
--- a/tools/examples/network-nat Thu Jan 24 14:35:52 2008 +0000
+++ b/tools/examples/network-nat Thu Jan 24 14:37:53 2008 +0000
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/bash -x
#============================================================================
# Default Xen network start/stop script when using NAT.
# Xend calls a network script when it starts.
@@ -27,7 +27,15 @@ netdev=${netdev:-eth0}
netdev=${netdev:-eth0}
# antispoofing not yet implemented
antispoof=${antispoof:-no}
-dhcp=${dhcp:-no}
+
+# turn on dhcp feature by default if dhcpd is installed
+if [ -f /etc/dhcpd.conf ]
+then
+ dhcp=${dhcp:-yes}
+else
+ dhcp=${dhcp:-no}
+fi
+
if [ "$dhcp" != 'no' ]
then
diff -r 1190d50ce18c -r 86c32269ba60 tools/examples/vif-nat
--- a/tools/examples/vif-nat Thu Jan 24 14:35:52 2008 +0000
+++ b/tools/examples/vif-nat Thu Jan 24 14:37:53 2008 +0000
@@ -28,15 +28,22 @@ dir=$(dirname "$0")
dir=$(dirname "$0")
. "$dir/vif-common.sh"
-dhcp=${dhcp:-no}
+# turn on dhcp feature by default if dhcpd is installed
+if [ -f /etc/dhcpd.conf ]
+then
+ dhcp=${dhcp:-yes}
+else
+ dhcp=${dhcp:-no}
+fi
if [ "$dhcp" != 'no' ]
then
dhcpd_conf_file=$(find_dhcpd_conf_file)
dhcpd_init_file=$(find_dhcpd_init_file)
- if [ -z "$dhcpd_conf_file" ] || [ -z "$dhcpd_init_file" ]
+ dhcpd_arg_file=$(find_dhcpd_arg_file)
+ if [ -z "$dhcpd_conf_file" ] || [ -z "$dhcpd_init_file" ] || [ -z
"$dhcpd_arg_file" ]
then
- echo 'Failed to find dhcpd configuration or init file.' >&2
+ echo 'Failed to find dhcpd configuration or init or args file.' >&2
exit 1
fi
fi
@@ -88,6 +95,31 @@ then
hostname="$hostname-$vifid"
fi
+dhcparg_remove_entry()
+{
+ local tmpfile=$(mktemp)
+ sed -e "s/$vif //" "$dhcpd_arg_file" >"$tmpfile"
+ if diff "$tmpfile" "$dhcpd_arg_file" >/dev/null
+ then
+ rm "$tmpfile"
+ else
+ mv "$tmpfile" "$dhcpd_arg_file"
+ fi
+}
+
+dhcparg_add_entry()
+{
+ dhcparg_remove_entry
+ local tmpfile=$(mktemp)
+ # handle Red Hat, SUSE, and Debian styles, with or without quotes
+ sed -e 's/^DHCPDARGS="*\([^"]*\)"*/DHCPDARGS="\1'"$vif "'"/' \
+ "$dhcpd_arg_file" >"$tmpfile" && mv "$tmpfile" "$dhcpd_arg_file"
+ sed -e 's/^DHCPD_INTERFACE="*\([^"]*\)"*/DHCPD_INTERFACE="\1'"$vif "'"/' \
+ "$dhcpd_arg_file" >"$tmpfile" && mv "$tmpfile" "$dhcpd_arg_file"
+ sed -e 's/^INTERFACES="*\([^"]*\)"*/INTERFACES="\1'"$vif "'"/' \
+ "$dhcpd_arg_file" >"$tmpfile" && mv "$tmpfile" "$dhcpd_arg_file"
+ rm -f "$tmpfile"
+}
dhcp_remove_entry()
{
@@ -99,6 +131,7 @@ dhcp_remove_entry()
else
mv "$tmpfile" "$dhcpd_conf_file"
fi
+ dhcparg_remove_entry
}
@@ -109,6 +142,7 @@ dhcp_up()
mac=$(xenstore_read "$XENBUS_PATH/mac")
echo >>"$dhcpd_conf_file" \
"host $hostname { hardware ethernet $mac; fixed-address $vif_ip; option
routers $router_ip; option host-name \"$hostname\"; }"
+ dhcparg_add_entry
release_lock "vif-nat-dhcp"
"$dhcpd_init_file" restart || true
}
diff -r 1190d50ce18c -r 86c32269ba60 tools/examples/xen-network-common.sh
--- a/tools/examples/xen-network-common.sh Thu Jan 24 14:35:52 2008 +0000
+++ b/tools/examples/xen-network-common.sh Thu Jan 24 14:37:53 2008 +0000
@@ -72,6 +72,11 @@ find_dhcpd_init_file()
find_dhcpd_init_file()
{
first_file -x /etc/init.d/{dhcp3-server,dhcp,dhcpd}
+}
+
+find_dhcpd_arg_file()
+{
+ first_file -f /etc/sysconfig/dhcpd /etc/defaults/dhcp
}
# configure interfaces which act as pure bridge ports:
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|