Mercurial > hg > dhcpcd
changeset 1582:491ccb10ff72 draft
Fix -r, --request address option
| author | Roy Marples <roy@marples.name> |
|---|---|
| date | Thu, 23 Dec 2010 22:18:56 +0000 |
| parents | f625328e6859 |
| children | 6ba877c9df39 |
| files | dhcp.c dhcpcd.c if-options.c |
| diffstat | 3 files changed, 13 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- a/dhcp.c Mon Dec 06 15:01:56 2010 +0000 +++ b/dhcp.c Thu Dec 23 22:18:56 2010 +0000 @@ -892,7 +892,6 @@ if (lease->addr.s_addr && lease->cookie == htonl(MAGIC_COOKIE)) { if (type == DHCP_DECLINE || - type == DHCP_DISCOVER || (type == DHCP_REQUEST && lease->addr.s_addr != iface->addr.s_addr)) { @@ -915,6 +914,9 @@ p += len; } + if (type == DHCP_DISCOVER && ifo->options & DHCPCD_REQUEST) + PUTADDR(DHO_IPADDRESS, ifo->req_addr); + if (type == DHCP_DISCOVER || type == DHCP_INFORM || type == DHCP_REQUEST)
--- a/dhcpcd.c Mon Dec 06 15:01:56 2010 +0000 +++ b/dhcpcd.c Thu Dec 23 22:18:56 2010 +0000 @@ -1107,9 +1107,6 @@ return; } - /* We don't want to read the old lease if we NAK an old test */ - nolease = iface->state->offer && options & DHCPCD_TEST; - iface->start_uptime = uptime(); free(iface->state->offer); iface->state->offer = NULL; @@ -1134,21 +1131,9 @@ delete_timeout(NULL, iface); return; } - if (ifo->req_addr.s_addr) { - iface->state->offer = - dhcp_message_new(&ifo->req_addr, &ifo->req_mask); - if (ifo->options & DHCPCD_REQUEST) - ifo->req_addr.s_addr = 0; - else { - iface->state->reason = "STATIC"; - iface->state->new = iface->state->offer; - iface->state->offer = NULL; - get_lease(&iface->state->lease, iface->state->new); - configure(iface); - start_inform(iface); - return; - } - } else if (!nolease) + /* We don't want to read the old lease if we NAK an old test */ + nolease = iface->state->offer && options & DHCPCD_TEST; + if (!nolease) iface->state->offer = read_lease(iface); if (iface->state->offer) { get_lease(&iface->state->lease, iface->state->offer); @@ -1207,6 +1192,10 @@ configure_interface(iface, argc, argv); if (!(options & DHCPCD_TEST)) run_script(iface); + /* We need to drop the leasefile so that start_interface + * doesn't load it. */ + if (ifs->options->options & DHCPCD_REQUEST) + unlink(iface->leasefile); if (ifs->options->options & DHCPCD_LINK) { switch (carrier_status(iface)) {
--- a/if-options.c Mon Dec 06 15:01:56 2010 +0000 +++ b/if-options.c Thu Dec 23 22:18:56 2010 +0000 @@ -420,14 +420,12 @@ ifo->options |= DHCPCD_QUIET; break; case 'r': - ifo->options |= DHCPCD_REQUEST; if (parse_addr(&ifo->req_addr, NULL, arg) != 0) return -1; + ifo->options |= DHCPCD_REQUEST; ifo->req_mask.s_addr = 0; break; case 's': - ifo->options |= DHCPCD_INFORM | DHCPCD_PERSISTENT; - ifo->options &= ~(DHCPCD_ARP | DHCPCD_STATIC); if (arg && *arg != '\0') { if (parse_addr(&ifo->req_addr, &ifo->req_mask, arg) != 0) @@ -436,6 +434,8 @@ ifo->req_addr.s_addr = 0; ifo->req_mask.s_addr = 0; } + ifo->options |= DHCPCD_INFORM | DHCPCD_PERSISTENT; + ifo->options &= ~(DHCPCD_ARP | DHCPCD_STATIC); break; case 't': ifo->timeout = atoint(arg);
