treewide: init assignment lists head
[oweals/odhcpd.git] / src / dhcpv6-ia.c
index 007b90428b890699f20227766321f2cb4168b1b3..9559b9655a9ce4e26d49cbedd0429687919da02c 100644 (file)
@@ -62,7 +62,7 @@ int dhcpv6_ia_init(void)
 
 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)) {
@@ -74,14 +74,11 @@ int dhcpv6_ia_setup_interface(struct interface *iface, bool enable)
        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;
                        }
 
@@ -326,8 +323,7 @@ void dhcpv6_ia_write_statefile(void)
                                        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;
@@ -355,9 +351,9 @@ void dhcpv6_ia_write_statefile(void)
                                }
                        }
 
-                       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;
@@ -723,7 +719,7 @@ static void handle_addrlist_change(struct netevent_handler_info *info)
 
        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);
@@ -771,7 +767,7 @@ static void valid_until_cb(struct uloop_timeout *event)
        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) {
@@ -1072,7 +1068,7 @@ static void dhcpv6_log(uint8_t msgtype, struct interface *iface, time_t now,
                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);
 }
 
@@ -1241,7 +1237,7 @@ ssize_t dhcpv6_ia_handle_IAs(uint8_t *buf, size_t buflen, struct interface *ifac
                                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;