int dhcpv6_ia_setup_interface(struct interface *iface, bool enable)
{
- if (!enable && iface->ia_assignments.next) {
+ if (!enable) {
struct dhcp_assignment *c;
while (!list_empty(&iface->ia_assignments)) {
if (enable && iface->dhcpv6 == MODE_SERVER) {
struct dhcp_assignment *border;
- if (!iface->ia_assignments.next)
- INIT_LIST_HEAD(&iface->ia_assignments);
-
if (list_empty(&iface->ia_assignments)) {
- border = calloc(1, sizeof(*border));
+ border = alloc_assignment(0);
if (!border) {
- syslog(LOG_ERR, "Calloc failed for border on %s", iface->name);
+ syslog(LOG_ERR, "Failed to alloc border on %s", iface->name);
return -1;
}
ctxt.iface->dhcpv4 != MODE_SERVER)
continue;
- if (ctxt.iface->dhcpv6 == MODE_SERVER &&
- ctxt.iface->ia_assignments.next) {
+ if (ctxt.iface->dhcpv6 == MODE_SERVER) {
list_for_each_entry(ctxt.c, &ctxt.iface->ia_assignments, head) {
if (!(ctxt.c->flags & OAF_BOUND) || ctxt.c->managed_size < 0)
continue;
}
}
- if (ctxt.iface->dhcpv4 == MODE_SERVER &&
- ctxt.iface->dhcpv4_assignments.next) {
+ if (ctxt.iface->dhcpv4 == MODE_SERVER) {
struct dhcp_assignment *c;
+
list_for_each_entry(c, &ctxt.iface->dhcpv4_assignments, head) {
if (!(c->flags & OAF_BOUND))
continue;
while (!list_empty(&reassign)) {
c = list_first_entry(&reassign, struct dhcp_assignment, head);
- list_del(&c->head);
+ list_del_init(&c->head);
if (!assign_pd(iface, c)) {
c->assigned = 0;
list_add(&c->head, &iface->ia_assignments);
avl_for_each_element(&interfaces, iface, avl) {
struct dhcp_assignment *a, *n;
- if (iface->dhcpv6 != MODE_SERVER || iface->ia_assignments.next == NULL)
+ if (iface->dhcpv6 != MODE_SERVER)
continue;
list_for_each_entry_safe(a, n, &iface->ia_assignments, head) {
dhcpv6_ia_enum_addrs(iface, a, now, dhcpv6_log_ia_addr, &ctxt);
}
- syslog(LOG_WARNING, "DHCPV6 %s %s from %s on %s: %s %s", type, (is_pd) ? "IA_PD" : "IA_NA",
+ syslog(LOG_NOTICE, "DHCPV6 %s %s from %s on %s: %s %s", type, (is_pd) ? "IA_PD" : "IA_NA",
duidbuf, iface->name, status, leasebuf);
}
if ((!iface->no_dynamic_dhcp || (l && is_na)) &&
(iface->dhcpv6_pd || iface->dhcpv6_na)) {
/* Create new binding */
- a = calloc(1, sizeof(*a) + clid_len);
+ a = alloc_assignment(clid_len);
if (a) {
a->clid_len = clid_len;