From: Paul Donald <newt...@gmail.com> Now DNSSL Option 31 inherit the search list from an 'interface' also. ( A behaviour described in LuCI, but did not seem to exist before ).
ICMPv6 Option (DNS Search List Option lan lalala) Type: DNS Search List Option (31) Length: 4 (32 bytes) Reserved Lifetime: 1800 (30 minutes) Domain Names: lan Domain Names: lalala Padding For network config: config interface 'lan' ... list dns_search 'lalala' And dhcp config: config dhcp 'lan' ... list domain 'lan' Signed-off-by: Paul Donald <newt...@gmail.com> --- src/config.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/config.c b/src/config.c index 1cd4608..1b76cf6 100644 --- a/src/config.c +++ b/src/config.c @@ -59,6 +59,7 @@ enum { IFACE_ATTR_NDP, IFACE_ATTR_ROUTER, IFACE_ATTR_DNS, + IFACE_ATTR_DNS_SEARCH, IFACE_ATTR_DNS_SERVICE, IFACE_ATTR_DOMAIN, IFACE_ATTR_FILTER_CLASS, @@ -112,6 +113,7 @@ static const struct blobmsg_policy iface_attrs[IFACE_ATTR_MAX] = { [IFACE_ATTR_NDP] = { .name = "ndp", .type = BLOBMSG_TYPE_STRING }, [IFACE_ATTR_ROUTER] = { .name = "router", .type = BLOBMSG_TYPE_ARRAY }, [IFACE_ATTR_DNS] = { .name = "dns", .type = BLOBMSG_TYPE_ARRAY }, + [IFACE_ATTR_DNS_SEARCH] = { .name = "dns_search", .type = BLOBMSG_TYPE_ARRAY }, [IFACE_ATTR_DNS_SERVICE] = { .name = "dns_service", .type = BLOBMSG_TYPE_BOOL }, [IFACE_ATTR_DOMAIN] = { .name = "domain", .type = BLOBMSG_TYPE_ARRAY }, [IFACE_ATTR_FILTER_CLASS] = { .name = "filter_class", .type = BLOBMSG_TYPE_STRING }, @@ -810,7 +812,7 @@ int config_parse_interface(void *data, size_t len, const char *name, bool overwr if ((c = tb[IFACE_ATTR_DNS_SERVICE])) iface->dns_service = blobmsg_get_bool(c); - if ((c = tb[IFACE_ATTR_DOMAIN])) { + if ((c = tb[IFACE_ATTR_DOMAIN]) || (c = tb[IFACE_ATTR_DNS_SEARCH])) { struct blob_attr *cur; unsigned rem; @@ -829,10 +831,17 @@ int config_parse_interface(void *data, size_t len, const char *name, bool overwr if (domainlen > 0 && domain[domainlen - 1] == '.') domain[domainlen - 1] = 0; + syslog(LOG_DEBUG, "Found %s", (c = tb[IFACE_ATTR_DOMAIN]) ? + iface_attrs[IFACE_ATTR_DOMAIN].name : + iface_attrs[IFACE_ATTR_DNS_SEARCH].name); + syslog(LOG_DEBUG, "domain %s; length %d ", domain, domainlen); + len = dn_comp(domain, buf, sizeof(buf), NULL, NULL); if (len <= 0) { syslog(LOG_ERR, "Invalid %s value configured for interface '%s'", - iface_attrs[IFACE_ATTR_DOMAIN].name, iface->name); + (c = tb[IFACE_ATTR_DOMAIN]) ? + iface_attrs[IFACE_ATTR_DOMAIN].name : + iface_attrs[IFACE_ATTR_DNS_SEARCH].name, iface->name); continue; } @@ -1317,6 +1326,19 @@ void odhcpd_reload(void) } } + struct uci_package *network = NULL; + if (!uci_load(uci, "network", &network)) { + struct uci_element *e; + + /* 4. Interface settings */ + uci_foreach_element(&network->sections, e) { + struct uci_section* s = uci_to_section(e); + if (!strcmp(s->type, "interface")){ + set_interface(s); + } + } + } + if (config.dhcp_statefile) { char *path = strdup(config.dhcp_statefile); -- 2.44.0 _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel