]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
We should send the IP address we decline and the server ID for release.
authorRoy Marples <roy@marples.name>
Fri, 17 Oct 2008 21:30:25 +0000 (21:30 +0000)
committerRoy Marples <roy@marples.name>
Fri, 17 Oct 2008 21:30:25 +0000 (21:30 +0000)
dhcp.c

diff --git a/dhcp.c b/dhcp.c
index 9c2670008157411c6a7083dee7c21eb65a85b6de..bd360885b630e6387af5332b83edb5d65ff60439 100644 (file)
--- a/dhcp.c
+++ b/dhcp.c
@@ -821,6 +821,24 @@ make_message(struct dhcp_message **message,
                p += iface->clientid[0] + 1;
        }
 
+       if (lease->addr.s_addr && !IN_LINKLOCAL(htonl(lease->addr.s_addr))) {
+               if (type == DHCP_DECLINE ||
+                   type == DHCP_DISCOVER ||
+                   (type == DHCP_REQUEST &&
+                    lease->addr.s_addr != iface->addr.s_addr))
+               {
+                       PUTADDR(DHO_IPADDRESS, lease->addr);
+                       if (lease->server.s_addr)
+                               PUTADDR(DHO_SERVERID, lease->server);
+               }
+       }
+
+       if (type == DHCP_RELEASE) {
+               if (lease->server.s_addr)
+                       PUTADDR(DHO_SERVERID, lease->server);
+       }
+
+
        if (type == DHCP_DISCOVER ||
            type == DHCP_INFORM ||
            type == DHCP_REQUEST)
@@ -851,15 +869,6 @@ make_message(struct dhcp_message **message,
 
 
                if (type != DHCP_INFORM) {
-                       if (lease->addr.s_addr &&
-                           lease->addr.s_addr != iface->addr.s_addr &&
-                           !IN_LINKLOCAL(ntohl(lease->addr.s_addr)))
-                       {
-                               PUTADDR(DHO_IPADDRESS, lease->addr);
-                               if (lease->server.s_addr)
-                                       PUTADDR(DHO_SERVERID, lease->server);
-                       }
-
                        if (ifo->leasetime != 0) {
                                *p++ = DHO_LEASETIME;
                                *p++ = 4;