netd: Replace iface with opaque netid in resolver.
Also ensure that UID mapping (for VPN) cannot be overridden by
android_getaddrinfofornet or per-PID preference.
Change-Id: I9ccfda2902cc0943e87c9bc346ad9a2578accdab
diff --git a/NatController.cpp b/NatController.cpp
index b2a0e64..dd5316a 100644
--- a/NatController.cpp
+++ b/NatController.cpp
@@ -32,6 +32,7 @@
#include <logwrap/logwrap.h>
#include "NatController.h"
+#include "NetworkController.h"
#include "SecondaryTableController.h"
#include "NetdConstants.h"
@@ -39,8 +40,8 @@
const char* NatController::LOCAL_NAT_POSTROUTING = "natctrl_nat_POSTROUTING";
const char* NatController::LOCAL_TETHER_COUNTERS_CHAIN = "natctrl_tether_counters";
-NatController::NatController(SecondaryTableController *ctrl) {
- secondaryTableCtrl = ctrl;
+NatController::NatController(SecondaryTableController *table_ctrl, NetworkController* net_ctrl) :
+ mSecondaryTableCtrl(table_ctrl), mNetCtrl(net_ctrl) {
}
NatController::~NatController() {
@@ -138,27 +139,25 @@
}
int NatController::routesOp(bool add, const char *intIface, const char *extIface, char **argv, int addrCount) {
- int tableNumber = secondaryTableCtrl->findTableNumber(extIface);
+ unsigned netId = mNetCtrl->getNetworkId(extIface);
int ret = 0;
- if (tableNumber != -1) {
- for (int i = 0; i < addrCount; i++) {
- if (add) {
- ret |= secondaryTableCtrl->modifyFromRule(tableNumber, ADD, argv[5+i]);
- ret |= secondaryTableCtrl->modifyLocalRoute(tableNumber, ADD, intIface, argv[5+i]);
- } else {
- ret |= secondaryTableCtrl->modifyLocalRoute(tableNumber, DEL, intIface, argv[5+i]);
- ret |= secondaryTableCtrl->modifyFromRule(tableNumber, DEL, argv[5+i]);
- }
+ for (int i = 0; i < addrCount; i++) {
+ if (add) {
+ ret |= mSecondaryTableCtrl->modifyFromRule(netId, ADD, argv[5+i]);
+ ret |= mSecondaryTableCtrl->modifyLocalRoute(netId, ADD, intIface, argv[5+i]);
+ } else {
+ ret |= mSecondaryTableCtrl->modifyLocalRoute(netId, DEL, intIface, argv[5+i]);
+ ret |= mSecondaryTableCtrl->modifyFromRule(netId, DEL, argv[5+i]);
}
- const char *cmd[] = {
- IP_PATH,
- "route",
- "flush",
- "cache"
- };
- runCmd(ARRAY_SIZE(cmd), cmd);
}
+ const char *cmd[] = {
+ IP_PATH,
+ "route",
+ "flush",
+ "cache"
+ };
+ runCmd(ARRAY_SIZE(cmd), cmd);
return ret;
}