inet_ntop(AF_INET6, &addr, ipbuf, sizeof(ipbuf) - 1);
inet_ntop(AF_INET6, &addr, ipbuf, sizeof(ipbuf) - 1);
if (change) {
struct dhcpv6_assignment *c;
list_for_each_entry(c, &iface->ia_assignments, head)
if (change) {
struct dhcpv6_assignment *c;
list_for_each_entry(c, &iface->ia_assignments, head)
struct dhcpv6_assignment *first = NULL;
dhcpv6_for_each_option(start, end, otype, olen, odata) {
struct dhcpv6_assignment *first = NULL;
dhcpv6_for_each_option(start, end, otype, olen, odata) {
}
a->accept_reconf = accept_reconf;
apply_lease(iface, a, true);
}
a->accept_reconf = accept_reconf;
apply_lease(iface, a, true);
} else if (!assigned && a && a->managed_size == 0) { // Cleanup failed assignment
free_dhcpv6_assignment(a);
}
} else if (!assigned && a && a->managed_size == 0) { // Cleanup failed assignment
free_dhcpv6_assignment(a);
}
} else if (hdr->msg_type == DHCPV6_MSG_RELEASE) {
a->valid_until = 0;
apply_lease(iface, a, false);
} else if (hdr->msg_type == DHCPV6_MSG_RELEASE) {
a->valid_until = 0;
apply_lease(iface, a, false);
} else if (hdr->msg_type == DHCPV6_MSG_DECLINE && a->length == 128) {
a->clid_len = 0;
a->valid_until = now + 3600; // Block address for 1h
} else if (hdr->msg_type == DHCPV6_MSG_DECLINE && a->length == 128) {
a->clid_len = 0;
a->valid_until = now + 3600; // Block address for 1h
}
} else if (hdr->msg_type == DHCPV6_MSG_CONFIRM && ia_addr_present) {
// Send NOTONLINK for CONFIRM with addr present so that clients restart connection
}
} else if (hdr->msg_type == DHCPV6_MSG_CONFIRM && ia_addr_present) {
// Send NOTONLINK for CONFIRM with addr present so that clients restart connection