130 lines
3.8 KiB
Diff
130 lines
3.8 KiB
Diff
# HG changeset patch
|
|
# User Keir Fraser <keir.fraser@citrix.com>
|
|
# Date 1201185473 0
|
|
# Node ID 86c32269ba604f968c7abe5cf7360d7c00902ff8
|
|
# Parent 1190d50ce18c5a8237fc592d59cff8396bc435c5
|
|
network-nat: Fix NAT scripts.
|
|
Signed-off-by: Dan Magenheimer <dan.magenheimer@oracle.com>
|
|
|
|
Index: xen-3.2-testing/tools/examples/network-nat
|
|
===================================================================
|
|
--- xen-3.2-testing.orig/tools/examples/network-nat
|
|
+++ xen-3.2-testing/tools/examples/network-nat
|
|
@@ -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 @@ evalVariables "$@"
|
|
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
|
|
Index: xen-3.2-testing/tools/examples/vif-nat
|
|
===================================================================
|
|
--- xen-3.2-testing.orig/tools/examples/vif-nat
|
|
+++ xen-3.2-testing/tools/examples/vif-nat
|
|
@@ -28,15 +28,22 @@
|
|
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
|
|
}
|
|
Index: xen-3.2-testing/tools/examples/xen-network-common.sh
|
|
===================================================================
|
|
--- xen-3.2-testing.orig/tools/examples/xen-network-common.sh
|
|
+++ xen-3.2-testing/tools/examples/xen-network-common.sh
|
|
@@ -89,6 +89,11 @@ 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:
|
|
setup_bridge_port() {
|
|
local dev="$1"
|