Add netd support for uid based routing for DNS
DNSProxyListener now supports bionic changes for marking DNS requests
for routing DNS requests with the uid routing rules
Change-Id: Iac9aa1bb14834be6da5e512405f23c6a72dc71ed
diff --git a/SecondaryTableController.cpp b/SecondaryTableController.cpp
index 222a0e0..89a307b 100644
--- a/SecondaryTableController.cpp
+++ b/SecondaryTableController.cpp
@@ -39,7 +39,7 @@
const char* SecondaryTableController::LOCAL_MANGLE_OUTPUT = "st_mangle_OUTPUT";
const char* SecondaryTableController::LOCAL_NAT_POSTROUTING = "st_nat_POSTROUTING";
-SecondaryTableController::SecondaryTableController() {
+SecondaryTableController::SecondaryTableController(UidMarkMap *map) : mUidMarkMap(map) {
int i;
for (i=0; i < INTERFACES_TRACKED; i++) {
mInterfaceTable[i][0] = 0;
@@ -301,10 +301,23 @@
int SecondaryTableController::setUidRule(const char *iface, int uid_start, int uid_end, bool add) {
int tableIndex = findTableNumber(iface);
if (tableIndex == -1) {
+ errno = EINVAL;
return -1;
}
- char tableIndex_str[11] = {0};
- snprintf(tableIndex_str, sizeof(tableIndex_str), "%d", tableIndex + BASE_TABLE_NUMBER);
+ int mark = tableIndex + BASE_TABLE_NUMBER;
+ if (add) {
+ if (!mUidMarkMap->add(uid_start, uid_end, mark)) {
+ errno = EINVAL;
+ return -1;
+ }
+ } else {
+ if (!mUidMarkMap->remove(uid_start, uid_end, mark)) {
+ errno = EINVAL;
+ return -1;
+ }
+ }
+ char mark_str[11] = {0};
+ snprintf(mark_str, sizeof(mark_str), "%d", mark);
char uid_str[24] = {0};
snprintf(uid_str, sizeof(uid_str), "%d-%d", uid_start, uid_end);
return execIptables(V4V6,
@@ -319,7 +332,7 @@
"-j",
"MARK",
"--set-mark",
- tableIndex_str,
+ mark_str,
NULL);
}