# HG changeset patch # User Keir Fraser # Date 1201185473 0 # Node ID 86c32269ba604f968c7abe5cf7360d7c00902ff8 # Parent 1190d50ce18c5a8237fc592d59cff8396bc435c5 network-nat: Fix NAT scripts. Signed-off-by: Dan Magenheimer 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"