Setting routes to nameservers need special setup if the
nameservers are behind point-to-point link, the gateway
must not be set in this case.
---
src/service.c | 31 +++++++++++++++++++++++--------
1 files changed, 23 insertions(+), 8 deletions(-)
diff --git a/src/service.c b/src/service.c
index 120b41a..89fd705 100644
--- a/src/service.c
+++ b/src/service.c
@@ -961,6 +961,28 @@ void __connman_service_nameserver_clear(struct
connman_service *service)
update_nameservers(service);
}
+static void add_nameserver_route(int family, int index, char *nameserver,
+ const char *gw)
+{
+ switch (family) {
+ case AF_INET:
+ if (connman_inet_compare_subnet(index, nameserver) == TRUE)
+ break;
+
+ if (connman_inet_add_host_route(index, nameserver, gw) < 0)
+ /* For P-t-P link the above route add will fail */
+ connman_inet_add_host_route(index, nameserver, NULL);
+ break;
+
+ case AF_INET6:
+ if (connman_inet_add_ipv6_host_route(index, nameserver,
+ gw) < 0)
+ connman_inet_add_ipv6_host_route(index, nameserver,
+ NULL);
+ break;
+ }
+}
+
static void nameserver_add_routes(int index, char **nameservers,
const char *gw)
{
@@ -981,14 +1003,7 @@ static void nameserver_add_routes(int index, char
**nameservers,
else
family = addr->ai_family;
- if (family == AF_INET) {
- if (connman_inet_compare_subnet(index,
- nameservers[i]) != TRUE)
- connman_inet_add_host_route(index,
- nameservers[i], gw);
- } else if (family == AF_INET6)
- connman_inet_add_ipv6_host_route(index,
- nameservers[i], gw);
+ add_nameserver_route(family, index, nameservers[i], gw);
freeaddrinfo(addr);
}
--
1.7.5.4
_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman