From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ferry Huberts Subject: [PATCH] make kvm service script transfer dhclient settings correctly Date: Sat, 15 Sep 2007 19:09:02 +0200 Message-ID: <46EC11AE.9090408@hupie.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------020301020804050802070401" To: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org Errors-To: kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org List-Id: kvm.vger.kernel.org This is a multi-part message in MIME format. --------------020301020804050802070401 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Hi list, I mailed about this earlier (may 7th, 2007) but the issue is still there: the handling surrounding DHCP clients could be a bit improved... Currently every dhcp client gets killed after which a very basic dhcp client is started for the dst interface, which is not really inline with what the rest of the script does: the settings of the src interface are transferred to the dst interface. I wrote a new patch to bring the handling of the dhcp client inline with the reset of the script: - only the dhclient that is running on the src interface gets killed, - the commandline options of the killed dhcp client get reused for the new dhcp client (running on dst) - when no running dhcp client can be found on the src interface then a basic dhcp client is started. There is only one assumption in this script: the interface on which the dhcp client is running must be the last argument on the commandline of the dhcp client. I checked this assumption for Fedora 6 and 7 and it is met. The patch is against kvm-snapshot-20070914 (since kvm-39 does not allow insertion for me) Hope this patch is a bit more palatable for you than the previous one :-) Ferry --- kvm.org 2007-09-14 19:17:29.000000000 +0200 +++ kvm 2007-09-15 18:46:34.000000000 +0200 @@ -124,15 +124,15 @@ fi if [ $BOOTPROTO = "dhcp" ]; then + local dhclientcmd=`getdhclientcmdandkill ${src} ${dst}` ifdown ${src} >/dev/null 2>&1 || true ip link set ${src} up >/dev/null 2>&1 bond_link_up ${src} - pkill dhclient >/dev/null 2>&1 for ((i=0;i<3;i++)); do pgrep dhclient >/dev/null 2>&1 || i=4 sleep 1 done - dhclient ${dst} >/dev/null 2>&1 + ${dhclientcmd} >/dev/null 2>&1 else get_ip_info ${src} ifconfig ${src} 0.0.0.0 @@ -141,6 +141,44 @@ ip route add default via ${gateway} dev ${dst} fi } + +getdhclientcmdandkill () { + local src=$1 + local dst=$2 + + # get pids for all running dhclients + local pidlist=`pgrep dhclient` + + # get the commandline of the dhclient that is currently running on ${src} + local clientpid="" + local newcmdline="" + for i in ${pidlist} ; do + local cmdline_i=`ps -o args= ${i} | grep -E "[[:space:]]+${src}\$"` + if [ -n "${cmdline_i}" ] ; then + newcmdline=${cmdline_i} + clientpid=${i} + break + fi + done + + if [ -n "${newcmdline}" ] ; then + # we found a dhclient running on ${src}: adjust the command line so + # that it will run on ${dst} + echo "${newcmdline}" | sed -r "s#[[:space:]]+${src}\$# ${dst}#" + kill ${clientpid} >/dev/null 2>&1 + else + # we did not find a dhclient running on ${src} + + # see if there is a configfile for the pif and use it when available + cffile="/etc/dhclient-${pif}.conf" + cfoption="" + if [ -r ${cffile} ]; then + cfoption="-cf ${cffile}" + fi + echo "dhclient ${cfoption} ${dst}" + pkill dhclient >/dev/null 2>&1 + fi +} antispoofing () { iptables -P FORWARD DROP >/dev/null 2>&1 --------------020301020804050802070401 Content-Type: text/x-patch; name="patch.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="patch.diff" --- kvm 2007-06-07 17:13:47.000000000 +0200 +++ /etc/init.d/kvm 2007-07-05 21:06:43.000000000 +0200 @@ -132,7 +132,7 @@ pgrep dhclient >/dev/null 2>&1 || i=4 sleep 1 done - dhclient ${dst} >/dev/null 2>&1 + dhclient -cf /etc/dhclient-${pif}.conf ${dst} >/dev/null 2>&1 else get_ip_info ${src} ifconfig ${src} 0.0.0.0 --------------020301020804050802070401 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ --------------020301020804050802070401 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ kvm-devel mailing list kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/kvm-devel --------------020301020804050802070401--