]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
Re-apply lease info if different - fixes occasional release being broadcast.
authorRoy Marples <roy@marples.name>
Thu, 19 Nov 2009 21:53:25 +0000 (21:53 +0000)
committerRoy Marples <roy@marples.name>
Thu, 19 Nov 2009 21:53:25 +0000 (21:53 +0000)
Ensure we use a new xid when releasing.

dhcpcd.c

index 20caf86c26c6e033a1a044c43530fa54bb2d1e64..7d0523999e1fa087df3268a5c6fc315ca5a9f24c 100644 (file)
--- a/dhcpcd.c
+++ b/dhcpcd.c
@@ -572,7 +572,12 @@ handle_dhcp(struct interface *iface, struct dhcp_message **dhcpp)
                state->offer = dhcp;
                *dhcpp = NULL;
        }
+
        lease->frominfo = 0;
+       lease->addr.s_addr = dhcp->yiaddr;
+       lease->server.s_addr = INADDR_ANY;
+       if (type != 0)
+               get_option_addr(&lease->server, dhcp, DHO_SERVERID);
 
        delete_timeout(NULL, iface);
        /* We now have an offer, so close the DHCP sockets.
@@ -710,6 +715,7 @@ send_release(struct interface *iface)
                syslog(LOG_INFO, "%s: releasing lease of %s",
                    iface->name, inet_ntoa(iface->state->lease.addr));
                open_sockets(iface);
+               iface->state->xid = arc4random();
                send_message(iface, DHCP_RELEASE, NULL);
                drop_config(iface, "RELEASE");
        }