OSDN Git Service

Merge "Add support for fwmark split tunneling"
[android-x86/system-netd.git] / ResolverController.cpp
index b079f81..e61fae7 100644 (file)
 
 #include <cutils/log.h>
 
-#include <linux/if.h>
-#include <resolv.h>
+#include <net/if.h>
+
+// NOTE: <resolv_iface.h> is a private C library header that provides
+//       declarations for _resolv_set_default_iface() and others.
+#include <resolv_iface.h>
 
 #include "ResolverController.h"
 
 int ResolverController::setDefaultInterface(const char* iface) {
     if (DBG) {
-        LOGD("setDefaultInterface iface = %s\n", iface);
+        ALOGD("setDefaultInterface iface = %s\n", iface);
     }
 
     _resolv_set_default_iface(iface);
@@ -34,19 +37,19 @@ int ResolverController::setDefaultInterface(const char* iface) {
     return 0;
 }
 
-int ResolverController::setInterfaceDnsServers(const char* iface, char** servers, int numservers) {
+int ResolverController::setInterfaceDnsServers(const char* iface, const char* domains,
+        const char** servers, int numservers) {
     if (DBG) {
-        LOGD("setInterfaceDnsServers iface = %s\n", iface);
+        ALOGD("setInterfaceDnsServers iface = %s\n", iface);
     }
-
-    _resolv_set_nameservers_for_iface(iface, servers, numservers);
+    _resolv_set_nameservers_for_iface(iface, servers, numservers, domains);
 
     return 0;
 }
 
 int ResolverController::setInterfaceAddress(const char* iface, struct in_addr* addr) {
     if (DBG) {
-        LOGD("setInterfaceAddress iface = %s\n", iface);
+        ALOGD("setInterfaceAddress iface = %s\n", iface);
     }
 
     _resolv_set_addr_of_iface(iface, addr);
@@ -56,7 +59,7 @@ int ResolverController::setInterfaceAddress(const char* iface, struct in_addr* a
 
 int ResolverController::flushDefaultDnsCache() {
     if (DBG) {
-        LOGD("flushDefaultDnsCache\n");
+        ALOGD("flushDefaultDnsCache\n");
     }
 
     _resolv_flush_cache_for_default_iface();
@@ -66,10 +69,57 @@ int ResolverController::flushDefaultDnsCache() {
 
 int ResolverController::flushInterfaceDnsCache(const char* iface) {
     if (DBG) {
-        LOGD("flushInterfaceDnsCache iface = %s\n", iface);
+        ALOGD("flushInterfaceDnsCache iface = %s\n", iface);
     }
 
     _resolv_flush_cache_for_iface(iface);
 
     return 0;
 }
+
+int ResolverController::setDnsInterfaceForPid(const char* iface, int pid) {
+    if (DBG) {
+        ALOGD("setDnsIfaceForPid iface = %s, pid = %d\n", iface, pid);
+    }
+
+    _resolv_set_iface_for_pid(iface, pid);
+
+    return 0;
+}
+
+int ResolverController::clearDnsInterfaceForPid(int pid) {
+    if (DBG) {
+        ALOGD("clearDnsIfaceForPid pid = %d\n", pid);
+    }
+
+    _resolv_clear_iface_for_pid(pid);
+
+    return 0;
+}
+
+int ResolverController::setDnsInterfaceForUidRange(const char* iface, int uid_start, int uid_end) {
+    if (DBG) {
+        ALOGD("setDnsIfaceForUidRange iface = %s, range = [%d,%d]\n", iface, uid_start, uid_end);
+    }
+
+    return _resolv_set_iface_for_uid_range(iface, uid_start, uid_end);
+}
+
+int ResolverController::clearDnsInterfaceForUidRange(int uid_start, int uid_end) {
+    if (DBG) {
+        ALOGD("clearDnsIfaceForUidRange range = [%d,%d]\n", uid_start, uid_end);
+    }
+
+    return _resolv_clear_iface_for_uid_range(uid_start, uid_end);
+}
+
+int ResolverController::clearDnsInterfaceMappings()
+{
+    if (DBG) {
+        ALOGD("clearInterfaceMappings\n");
+    }
+    _resolv_clear_iface_uid_range_mapping();
+    _resolv_clear_iface_pid_mapping();
+
+    return 0;
+}