projects
/
project
/
odhcpd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Handle reload mechanism
[project/odhcpd.git]
/
src
/
config.c
diff --git
a/src/config.c
b/src/config.c
index
7700c7e
..
f6a5327
100644
(file)
--- a/
src/config.c
+++ b/
src/config.c
@@
-276,7
+276,7
@@
int config_parse_interface(void *data, size_t len, const char *name, bool overwr
const char *ifname = NULL;
#ifdef WITH_UBUS
const char *ifname = NULL;
#ifdef WITH_UBUS
- if (overwrite)
+ if (overwrite
|| !iface->ifname[0]
)
ifname = ubus_get_ifname(name);
#endif
if ((c = tb[IFACE_ATTR_IFNAME]))
ifname = ubus_get_ifname(name);
#endif
if ((c = tb[IFACE_ATTR_IFNAME]))
@@
-287,7
+287,9
@@
int config_parse_interface(void *data, size_t len, const char *name, bool overwr
if (!iface->ifname[0] && !ifname)
return -1;
if (!iface->ifname[0] && !ifname)
return -1;
- strncpy(iface->ifname, ifname, sizeof(iface->ifname) - 1);
+ if (ifname)
+ strncpy(iface->ifname, ifname, sizeof(iface->ifname) - 1);
+
iface->inuse = true;
if (overwrite)
iface->inuse = true;
if (overwrite)
@@
-486,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);
}
@@
-580,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);
}