<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7651.59">
<TITLE>[PATCH] DHCP Client Fix</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/plain format -->

<P><FONT SIZE=2>commit e6e505eae94ed721e123e177489291fc4544b7b8<BR>
Author: Justin Flammia &lt;jflammia@savantav.com&gt;<BR>
Date:&nbsp;&nbsp; Mon Oct 29 17:19:03 2007 -0400<BR>
<BR>
&nbsp;&nbsp;&nbsp; Found a bug in the way the DHCP Request packet is built, where the IP address<BR>
&nbsp;&nbsp;&nbsp; that is offered by the server is bound to prematurely. This patch is a fix of<BR>
&nbsp;&nbsp;&nbsp; that bug where the IP address offered by the DHCP server is not used until<BR>
&nbsp;&nbsp;&nbsp; after the DHCP ACK from the server is received.<BR>
<BR>
Signed-off-by: Justin Flammia &lt;jflammia@savantav.com&gt;<BR>
---<BR>
&nbsp;net/bootp.c |&nbsp;&nbsp; 11 +++++++----<BR>
&nbsp;1 files changed, 7 insertions(+), 4 deletions(-)<BR>
<BR>
diff --git a/net/bootp.c b/net/bootp.c<BR>
index 749d3e5..cfe6f8d 100644<BR>
--- a/net/bootp.c<BR>
+++ b/net/bootp.c<BR>
@@ -850,9 +850,9 @@ static void DhcpSendRequestPkt(Bootp_t *bp_offer)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bp-&gt;bp_hlen = HWL_ETHER;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bp-&gt;bp_hops = 0;<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bp-&gt;bp_secs = htons(get_timer(0) / CFG_HZ);<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetCopyIP(&amp;bp-&gt;bp_ciaddr, &amp;bp_offer-&gt;bp_ciaddr); /* both in network byte order */<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetCopyIP(&amp;bp-&gt;bp_yiaddr, &amp;bp_offer-&gt;bp_yiaddr);<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetCopyIP(&amp;bp-&gt;bp_siaddr, &amp;bp_offer-&gt;bp_siaddr);<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Do not set the client IP, your IP, or server IP yet, since it hasn't been ACK'ed by<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * the server yet */<BR>
+<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * RFC3046 requires Relay Agents to discard packets with<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * nonzero and offered giaddr<BR>
@@ -870,7 +870,9 @@ static void DhcpSendRequestPkt(Bootp_t *bp_offer)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * Copy options from OFFER packet if present<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetCopyIP(&amp;OfferedIP, &amp;bp-&gt;bp_yiaddr);<BR>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Copy offered IP into the parameters request list */<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NetCopyIP(&amp;OfferedIP, &amp;bp_offer-&gt;bp_yiaddr);<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extlen = DhcpExtended((u8 *)bp-&gt;bp_vend, DHCP_REQUEST, NetDHCPServerIP, OfferedIP);<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pktlen = BOOTP_SIZE - sizeof(bp-&gt;bp_vend) + extlen;<BR>
@@ -980,3 +982,4 @@ void DhcpRequest(void)<BR>
&nbsp;#endif<BR>
<BR>
&nbsp;#endif<BR>
+<BR>
--<BR>
1.5.0.6<BR>
</FONT>
</P>

</BODY>
</HTML>