summaryrefslogtreecommitdiffstats
path: root/dhcp.c
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2008-10-17 21:30:25 +0000
committerRoy Marples <roy@marples.name>2008-10-17 21:30:25 +0000
commit08a40a313fd57ceaded511764d4781fea6e513a7 (patch)
tree20b17b1f00bfee97d18a4a288a551fbf0c7f6bdc /dhcp.c
parenta6fa5cfde80f408434f47700525f1f4ba9cf225c (diff)
downloaddhcpcd-08a40a313fd57ceaded511764d4781fea6e513a7.tar.xz
We should send the IP address we decline and the server ID for release.
Diffstat (limited to 'dhcp.c')
-rw-r--r--dhcp.c27
1 files changed, 18 insertions, 9 deletions
diff --git a/dhcp.c b/dhcp.c
index 9c267000..bd360885 100644
--- 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;