Handle reload mechanism
authorSteven Barth <steven@midlink.org>
Tue, 15 Oct 2013 21:35:25 +0000 (23:35 +0200)
committerSteven Barth <steven@midlink.org>
Tue, 15 Oct 2013 21:35:25 +0000 (23:35 +0200)
src/config.c
src/odhcpd.h
src/ubus.c

index a5bcf26..f6a5327 100644 (file)
@@ -488,9 +488,16 @@ static int set_interface(struct uci_section *s)
 
 
 static volatile int do_reload = false;
 
 
 static volatile int do_reload = false;
+void odhcpd_reload(void)
+{
+       uloop_cancelled = true;
+       do_reload = true;
+}
+
+
 static void set_stop(int signal)
 {
 static void set_stop(int signal)
 {
-       uloop_end();
+       uloop_cancelled = true;
        do_reload = (signal == SIGHUP);
 }
 
        do_reload = (signal == SIGHUP);
 }
 
@@ -582,6 +589,7 @@ void odhcpd_run(void)
                                setup_dhcpv6_interface(i, true);
                                setup_ndp_interface(i, true);
                                setup_dhcpv4_interface(i, true);
                                setup_dhcpv6_interface(i, true);
                                setup_ndp_interface(i, true);
                                setup_dhcpv4_interface(i, true);
+                               i->inuse = false;
                        } else {
                                close_interface(i);
                        }
                        } else {
                                close_interface(i);
                        }
index 090b07b..5ae6a39 100644 (file)
@@ -206,3 +206,5 @@ int setup_router_interface(struct interface *iface, bool enable);
 int setup_dhcpv6_interface(struct interface *iface, bool enable);
 int setup_ndp_interface(struct interface *iface, bool enable);
 int setup_dhcpv4_interface(struct interface *iface, bool enable);
 int setup_dhcpv6_interface(struct interface *iface, bool enable);
 int setup_ndp_interface(struct interface *iface, bool enable);
 int setup_dhcpv4_interface(struct interface *iface, bool enable);
+
+void odhcpd_reload(void);
index bf1d072..2876eb9 100644 (file)
@@ -182,7 +182,7 @@ static void handle_dump(_unused struct ubus_request *req, _unused int type, stru
 
        free(dump);
        dump = blob_memdup(tb[DUMP_ATTR_INTERFACE]);
 
        free(dump);
        dump = blob_memdup(tb[DUMP_ATTR_INTERFACE]);
-       raise(SIGHUP);
+       odhcpd_reload();
 }
 
 
 }