public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] make kvm service script transfer dhclient settings correctly
@ 2007-09-15 17:09 Ferry Huberts
       [not found] ` <46EC11AE.9090408-NbsvJix5b8QAvxtiuMwx3w@public.gmane.org>
  0 siblings, 1 reply; 6+ messages in thread
From: Ferry Huberts @ 2007-09-15 17:09 UTC (permalink / raw)
  To: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f

[-- Attachment #1: Type: text/plain, Size: 3054 bytes --]

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


[-- Attachment #2: patch.diff --]
[-- Type: text/x-patch, Size: 391 bytes --]

--- 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


[-- Attachment #3: Type: text/plain, Size: 228 bytes --]

-------------------------------------------------------------------------
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/

[-- Attachment #4: Type: text/plain, Size: 186 bytes --]

_______________________________________________
kvm-devel mailing list
kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
https://lists.sourceforge.net/lists/listinfo/kvm-devel

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2007-09-16 18:28 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-09-15 17:09 [PATCH] make kvm service script transfer dhclient settings correctly Ferry Huberts
     [not found] ` <46EC11AE.9090408-NbsvJix5b8QAvxtiuMwx3w@public.gmane.org>
2007-09-16  9:18   ` Avi Kivity
     [not found]     ` <46ECF4E2.9000203-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-09-16  9:39       ` Ferry Huberts
     [not found]         ` <46ECF9DB.5020208-NbsvJix5b8QAvxtiuMwx3w@public.gmane.org>
2007-09-16  9:52           ` Avi Kivity
     [not found]             ` <46ECFCF8.2020002-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-09-16 18:28               ` Daniel P. Berrange
2007-09-16  9:55           ` Dor Laor

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox