X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fodhcpd.git;a=blobdiff_plain;f=src%2Fconfig.c;h=5174f2c7dde12c38c00938c7f7a7568a42dbb9b5;hp=e3bf78a96d55e7879fbf9b639eea3bebad2e9868;hb=0129f7926b9a0f993058dca9775e64021527eb32;hpb=bf4ebc0bf37c0a0dce6143f8db70b0bef40332d2 diff --git a/src/config.c b/src/config.c index e3bf78a..5174f2c 100644 --- a/src/config.c +++ b/src/config.c @@ -180,6 +180,12 @@ static struct interface* get_interface(const char *name) return NULL; } +static void set_interface_defaults(struct interface *iface) +{ + iface->managed = 1; + iface->learn_routes = 1; +} + static void clean_interface(struct interface *iface) { free(iface->dns); @@ -190,6 +196,7 @@ static void clean_interface(struct interface *iface) free(iface->dhcpv6_raw); free(iface->filter_class); memset(&iface->ra, 0, sizeof(*iface) - offsetof(struct interface, ra)); + set_interface_defaults(iface); } static void close_interface(struct interface *iface) @@ -357,9 +364,7 @@ int config_parse_interface(void *data, size_t len, const char *name, bool overwr strncpy(iface->name, name, sizeof(iface->name) - 1); - /* Default settings */ - iface->managed = 1; - iface->learn_routes = true; + set_interface_defaults(iface); list_add(&iface->head, &interfaces); overwrite = true; @@ -721,10 +726,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); }