shill: Ignore certan DNS search paths
Add a manager property to provide a list of DNS Search paths
that should be ignored when applying DHCP parameters. This
covers a list of DNS search suffixes that are popularly
provided, but are generally unlikely to provide any useful
results, therefore significantly reducing DNS lookup performance.
BUG=chromium-os:34495
TEST=Unit-tests + Manual: Add a domain to the default search list and make sure it is filtered from the "search" line in resolv.conf.
CQ-DEPENDS: I54bdd33a05bb704d8c3ff05f71e034fe42635e89
Change-Id: Id92b39f1ad0ae64b3ff50c7671cdf388d92a07af
Reviewed-on: https://gerrit.chromium.org/gerrit/33460
Reviewed-by: Christopher Wiley <wiley@chromium.org>
Reviewed-by: mukesh agrawal <quiche@chromium.org>
Commit-Ready: Paul Stewart <pstew@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
diff --git a/resolver.cc b/resolver.cc
index e10c587..6826ece 100644
--- a/resolver.cc
+++ b/resolver.cc
@@ -4,6 +4,7 @@
#include "shill/resolver.h"
+#include <algorithm>
#include <string>
#include <vector>
@@ -24,6 +25,7 @@
base::LazyInstance<Resolver> g_resolver = LAZY_INSTANCE_INITIALIZER;
} // namespace
+const char Resolver::kDefaultIgnoredSearchList[] = "gateway.2wire.net";
const char Resolver::kDefaultShortTimeoutTechnologies[] = "ethernet,wifi";
const char Resolver::kDefaultTimeoutOptions[] =
"options single-request timeout:1 attempts:3";
@@ -38,8 +40,8 @@
return g_resolver.Pointer();
}
-bool Resolver::SetDNSFromLists(const std::vector<std::string> &dns_servers,
- const std::vector<std::string> &domain_search,
+bool Resolver::SetDNSFromLists(const vector<string> &dns_servers,
+ const vector<string> &domain_search,
TimeoutParameters timeout) {
SLOG(Resolver, 2) << __func__;
@@ -57,8 +59,18 @@
lines.push_back("nameserver " + *iter);
}
- if (!domain_search.empty()) {
- lines.push_back("search " + JoinString(domain_search, ' '));
+ vector<string> filtered_domain_search;
+ for (iter = domain_search.begin();
+ iter != domain_search.end(); ++iter) {
+ if (std::find(ignored_search_list_.begin(),
+ ignored_search_list_.end(),
+ *iter) == ignored_search_list_.end()) {
+ filtered_domain_search.push_back(*iter);
+ }
+ }
+
+ if (!filtered_domain_search.empty()) {
+ lines.push_back("search " + JoinString(filtered_domain_search, ' '));
}
// Send queries one-at-a-time, rather than parallelizing IPv4