summaryrefslogtreecommitdiff
path: root/src/service.c
diff options
context:
space:
mode:
authorSamuel Ortiz <sameo@linux.intel.com>2010-07-12 18:45:59 +0200
committerSamuel Ortiz <sameo@linux.intel.com>2010-07-12 20:44:27 +0200
commit57cecbcc89e3df31600b6a769be6255c5916529f (patch)
treec39e767ca0599e1b05b87a001478beda58e6d2eb /src/service.c
parent5c00b517f7dfcd8edef4819580fa21c38d19c2bc (diff)
downloadconnman-57cecbcc89e3df31600b6a769be6255c5916529f.tar.gz
connman-57cecbcc89e3df31600b6a769be6255c5916529f.tar.bz2
connman-57cecbcc89e3df31600b6a769be6255c5916529f.zip
No host route needed for nameservers on the same subnet
Diffstat (limited to 'src/service.c')
-rw-r--r--src/service.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/service.c b/src/service.c
index 93eaa5a1..057b2da3 100644
--- a/src/service.c
+++ b/src/service.c
@@ -384,10 +384,25 @@ void __connman_service_nameserver_add_routes(struct connman_service *service,
if (service->nameservers != NULL) {
int i;
- for (i = 0; service->nameservers[i]; i++)
+ /*
+ * We add nameservers host routes for nameservers that
+ * are not on our subnet. For those who are, the subnet
+ * route will be installed by the time the dns proxy code
+ * tries to reach them. The subnet route is installed
+ * when setting the interface IP address.
+ */
+ for (i = 0; service->nameservers[i]; i++) {
+ if (connman_inet_compare_subnet(index,
+ service->nameservers[i]))
+ continue;
+
connman_inet_add_host_route(index,
service->nameservers[i], gw);
+ }
} else if (service->nameserver != NULL) {
+ if (connman_inet_compare_subnet(index, service->nameserver))
+ return;
+
connman_inet_add_host_route(index, service->nameserver, gw);
}
}