treewide: give file descriptors safe initial value
[project/odhcpd.git] / src / config.c
index 3a97e6598e4c625bba9b047b63ef6d5aec1afc09..399922b0ce7b77d29d2616a88f32462256297b28 100644 (file)
@@ -20,7 +20,7 @@
 #include "odhcpd.h"
 
 static struct blob_buf b;
-static int reload_pipe[2];
+static int reload_pipe[2] = { -1, -1 };
 
 static int lease_cmp(const void *k1, const void *k2, void *ptr);
 static void lease_update(struct vlist_tree *tree, struct vlist_node *node_new,
@@ -30,7 +30,10 @@ struct vlist_tree leases = VLIST_TREE_INIT(leases, lease_cmp, lease_update, true
 AVL_TREE(interfaces, avl_strcmp, false, NULL);
 struct config config = {.legacy = false, .main_dhcpv4 = false,
                        .dhcp_cb = NULL, .dhcp_statefile = NULL,
-                       .log_level = LOG_INFO};
+                       .log_level = LOG_WARNING};
+
+#define START_DEFAULT  100
+#define LIMIT_DEFAULT  150
 
 enum {
        IFACE_ATTR_INTERFACE,
@@ -210,6 +213,8 @@ static void set_interface_defaults(struct interface *iface)
 {
        iface->learn_routes = 1;
        iface->dhcpv4_leasetime = 43200;
+       iface->dhcpv4_start.s_addr = htonl(START_DEFAULT);
+       iface->dhcpv4_end.s_addr = htonl(START_DEFAULT + LIMIT_DEFAULT - 1);
        iface->dhcpv6_assignall = true;
        iface->dhcpv6_pd = true;
        iface->dhcpv6_na = true;
@@ -430,6 +435,11 @@ int config_parse_interface(void *data, size_t len, const char *name, bool overwr
 
                iface->name = strcpy(new_name, name);
                iface->avl.key = iface->name;
+               iface->router_event.uloop.fd = -1;
+               iface->dhcpv6_event.uloop.fd = -1;
+               iface->ndp_event.uloop.fd = -1;
+               iface->ndp_ping_fd = -1;
+               iface->dhcpv4_event.uloop.fd = -1;
                set_interface_defaults(iface);
 
                avl_insert(&interfaces, &iface->avl);
@@ -495,14 +505,16 @@ int config_parse_interface(void *data, size_t len, const char *name, bool overwr
 
        if ((c = tb[IFACE_ATTR_START])) {
                iface->dhcpv4_start.s_addr = htonl(blobmsg_get_u32(c));
+               iface->dhcpv4_end.s_addr = htonl(ntohl(iface->dhcpv4_start.s_addr) +
+                                                       LIMIT_DEFAULT - 1);
 
                if (config.main_dhcpv4 && config.legacy)
                        iface->dhcpv4 = MODE_SERVER;
        }
 
        if ((c = tb[IFACE_ATTR_LIMIT]))
-               iface->dhcpv4_end.s_addr = htonl(
-                               ntohl(iface->dhcpv4_start.s_addr) + blobmsg_get_u32(c));
+               iface->dhcpv4_end.s_addr = htonl(ntohl(iface->dhcpv4_start.s_addr) +
+                                                       blobmsg_get_u32(c) - 1);
 
        if ((c = tb[IFACE_ATTR_MASTER]))
                iface->master = blobmsg_get_bool(c);
@@ -789,11 +801,7 @@ static void lease_delete_assignments(struct lease *l, bool v6)
 
        list_for_each_entry_safe(a, tmp, &l->assignments, lease_list) {
                if (a->flags & flag)
-#ifdef DHCPV4_SUPPORT
-                       v6 ? dhcpv6_ia_free_assignment(a) : dhcpv4_free_assignment(a);
-#else
-                       dhcpv6_ia_free_assignment(a);
-#endif
+                       free_assignment(a);
        }
 }
 
@@ -871,14 +879,8 @@ static void lease_delete(struct lease *l)
 {
        struct dhcp_assignment *a;
 
-       list_for_each_entry(a, &l->assignments, lease_list) {
-               if (a->flags & OAF_DHCPV6)
-                       dhcpv6_ia_free_assignment(a);
-#ifdef DHCPV4_SUPPORT
-               else if (a->flags & OAF_DHCPV4)
-                       dhcpv4_free_assignment(a);
-#endif
-       }
+       list_for_each_entry(a, &l->assignments, lease_list)
+               free_assignment(a);
 
        free_lease(l);
 }
@@ -1085,7 +1087,7 @@ static void reload_cb(struct uloop_fd *u, _unused unsigned int events)
        odhcpd_reload();
 }
 
-static struct uloop_fd reload_fd = { .cb = reload_cb };
+static struct uloop_fd reload_fd = { .fd = -1, .cb = reload_cb };
 
 void odhcpd_run(void)
 {