X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fnetifd.git;a=blobdiff_plain;f=interface-ip.c;h=a5efad510210f46dd82e6a2684dd0911c5781a05;hp=c0a1bb961665033c700e0659159f726f3fd72411;hb=b314737e9a0f0df710ba5e8691882cd7d42faaf5;hpb=5e5cd11724f6cf86edc5796e6b805573c767f757 diff --git a/interface-ip.c b/interface-ip.c index c0a1bb9..a5efad5 100644 --- a/interface-ip.c +++ b/interface-ip.c @@ -97,6 +97,8 @@ interface_add_dns_server(struct interface *iface, const char *str) return; add: + D(INTERFACE, "Add IPv%c DNS server: %s\n", + s->af == AF_INET6 ? '6' : '4', str); list_add_tail(&s->list, &iface->proto_dns_servers); } @@ -117,6 +119,38 @@ interface_add_dns_server_list(struct interface *iface, struct blob_attr *list) } } +void +interface_add_dns_search_domain(struct interface *iface, const char *str) +{ + struct dns_search_domain *s; + int len = strlen(str); + + s = calloc(1, sizeof(*s) + len + 1); + if (!s) + return; + + D(INTERFACE, "Add DNS search domain: %s\n", str); + memcpy(s->name, str, len); + list_add_tail(&s->list, &iface->proto_dns_search); +} + +void +interface_add_dns_search_list(struct interface *iface, struct blob_attr *list) +{ + struct blob_attr *cur; + int rem; + + blobmsg_for_each_attr(cur, list, rem) { + if (blobmsg_type(cur) != BLOBMSG_TYPE_STRING) + continue; + + if (!blobmsg_check_attr(cur, NULL)) + continue; + + interface_add_dns_server(iface, blobmsg_data(cur)); + } +} + static void interface_clear_dns_servers(struct interface *iface) { @@ -194,6 +228,21 @@ interface_write_resolv_conf(void) } void +interface_ip_update_start(struct interface *iface) +{ + interface_clear_dns(iface); + vlist_update(&iface->proto_route); + vlist_update(&iface->proto_addr); +} + +void +interface_ip_update_complete(struct interface *iface) +{ + vlist_flush(&iface->proto_route); + vlist_flush(&iface->proto_addr); +} + +void interface_ip_init(struct interface *iface) { vlist_init(&iface->proto_route, route_cmp, interface_update_proto_route,