X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fodhcpd.git;a=blobdiff_plain;f=src%2Fdhcpv6-ia.c;h=c8473a7cdd6c6bb6949076ffc11c1a79496994db;hp=a7fbd12830753c70552afe0192ffc40e34abe978;hb=eaff6fa14161d58af63bda2e5d56bed2593ad0d0;hpb=d12c7b8c39bc0f727bde5aa34595e9a581891dca diff --git a/src/dhcpv6-ia.c b/src/dhcpv6-ia.c index a7fbd12..c8473a7 100644 --- a/src/dhcpv6-ia.c +++ b/src/dhcpv6-ia.c @@ -460,6 +460,7 @@ static bool assign_pd(struct interface *iface, struct dhcpv6_assignment *assign) iaidbuf, assign->iaid, assign->length); ustream_write_pending(&assign->managed_sock.stream); assign->managed_size = -1; + assign->valid_until = odhcpd_time() + 15; list_add(&assign->head, &iface->ia_assignments); } @@ -1130,7 +1131,7 @@ ssize_t dhcpv6_handle_ia(uint8_t *buf, size_t buflen, struct interface *iface, // Was only a solicitation: mark binding for removal if (assigned && hdr->msg_type == DHCPV6_MSG_SOLICIT) { - a->valid_until = now + 15; + a->valid_until = 0; } else if (assigned && hdr->msg_type == DHCPV6_MSG_REQUEST) { if (hostname_len > 0) { a->hostname = realloc(a->hostname, hostname_len + 1); @@ -1142,7 +1143,7 @@ ssize_t dhcpv6_handle_ia(uint8_t *buf, size_t buflen, struct interface *iface, a->accept_reconf = accept_reconf; apply_lease(iface, a, true); update_state = true; - } else if (!assigned && a) { // Cleanup failed assignment + } else if (!assigned && a && a->managed_size == 0) { // Cleanup failed assignment free_dhcpv6_assignment(a); } } else if (hdr->msg_type == DHCPV6_MSG_RENEW ||