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;
return 0;
err:
- if (lease) {
- free(lease->duid);
- free(lease);
- }
+ if (lease)
+ free_lease(lease);
+
return -1;
}
{
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;
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);
}