X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fodhcpd.git;a=blobdiff_plain;f=src%2Fconfig.c;h=ba513757202acac8830842a60b86a55d8b791f2f;hp=daf583b5e2bbda7fa045ae9c6e8c658354c36b4c;hb=08a93676f4d3d13fa417a1f109b40d6c577dfb76;hpb=c24782ada0932c25fd4063d4102670c79bbcf917 diff --git a/src/config.c b/src/config.c index daf583b..ba51375 100644 --- a/src/config.c +++ b/src/config.c @@ -162,6 +162,15 @@ static int mkdir_p(char *dir, mode_t mask) return ret; } +static void free_lease(struct lease *l) +{ + if (l->head.next) + list_del(&l->head); + + free(l->duid); + free(l); +} + static struct interface* get_interface(const char *name) { struct interface *c; @@ -323,10 +332,9 @@ static int set_lease(struct uci_section *s) return 0; err: - if (lease) { - free(lease->duid); - free(lease); - } + if (lease) + free_lease(lease); + return -1; } @@ -607,12 +615,8 @@ void odhcpd_reload(void) { struct uci_context *uci = uci_alloc_context(); - while (!list_empty(&leases)) { - struct lease *l = list_first_entry(&leases, struct lease, head); - list_del(&l->head); - free(l->duid); - free(l); - } + while (!list_empty(&leases)) + free_lease(list_first_entry(&leases, struct lease, head)); struct interface *master = NULL, *i, *n; @@ -717,10 +721,10 @@ void odhcpd_reload(void) i->ndp = (master && master->ndp == RELAYD_RELAY) ? RELAYD_RELAY : RELAYD_DISABLED; - setup_router_interface(i, true); - setup_dhcpv6_interface(i, true); - setup_ndp_interface(i, true); - setup_dhcpv4_interface(i, true); + setup_router_interface(i, !i->ignore || i->ra != RELAYD_DISABLED); + setup_dhcpv6_interface(i, !i->ignore || i->dhcpv6 != RELAYD_DISABLED); + setup_ndp_interface(i, !i->ignore || i->ndp != RELAYD_DISABLED); + setup_dhcpv4_interface(i, !i->ignore || i->dhcpv4 != RELAYD_DISABLED); } else { close_interface(i); }