Fix some syntax issues with IP command.
Was not building secondary tables properly. Also IPv6 host routes
were failing.
bug:5615697
Change-Id: I0d5ad2ed7d13e4d5bd8c2f8ce15fc0ccb36a4690
diff --git a/NatController.cpp b/NatController.cpp
index ce5b3f1..5f6a46a 100644
--- a/NatController.cpp
+++ b/NatController.cpp
@@ -74,8 +74,12 @@
return -1;
runCmd(IP_PATH, "rule flush");
+ runCmd(IP_PATH, "-6 rule flush");
runCmd(IP_PATH, "rule add from all lookup default prio 32767");
runCmd(IP_PATH, "rule add from all lookup main prio 32766");
+ runCmd(IP_PATH, "-6 rule add from all lookup default prio 32767");
+ runCmd(IP_PATH, "-6 rule add from all lookup main prio 32766");
+ runCmd(IP_PATH, "route flush cache");
natCount = 0;
return 0;
@@ -86,6 +90,14 @@
return true;
}
+const char *NatController::getVersion(const char *addr) {
+ if (strchr(addr, ':') != NULL) {
+ return "-6";
+ } else {
+ return "-4";
+ }
+}
+
// 0 1 2 3 4 5
// nat enable intface extface addrcnt nated-ipaddr/prelength
int NatController::enableNat(const int argc, char **argv) {
@@ -112,8 +124,8 @@
tableNumber = secondaryTableCtrl->findTableNumber(extIface);
if (tableNumber != -1) {
for(i = 0; i < addrCount && ret == 0; i++) {
- snprintf(cmd, sizeof(cmd), "rule add from %s table %d", argv[5+i],
- tableNumber + BASE_TABLE_NUMBER);
+ snprintf(cmd, sizeof(cmd), "%s rule add from %s table %d", getVersion(argv[5+i]),
+ argv[5+i], tableNumber + BASE_TABLE_NUMBER);
ret |= runCmd(IP_PATH, cmd);
if (ret) LOGE("IP rule %s got %d", cmd, ret);
@@ -122,6 +134,7 @@
ret |= runCmd(IP_PATH, cmd);
if (ret) LOGE("IP route %s got %d", cmd, ret);
}
+ runCmd(IP_PATH, "route flush cache");
}
if (ret != 0 || setForwardRules(true, intIface, extIface) != 0) {
@@ -131,10 +144,11 @@
tableNumber + BASE_TABLE_NUMBER);
runCmd(IP_PATH, cmd);
- snprintf(cmd, sizeof(cmd), "rule del from %s table %d", argv[5+i],
- tableNumber + BASE_TABLE_NUMBER);
+ snprintf(cmd, sizeof(cmd), "%s rule del from %s table %d", getVersion(argv[5+i]),
+ argv[5+i], tableNumber + BASE_TABLE_NUMBER);
runCmd(IP_PATH, cmd);
}
+ runCmd(IP_PATH, "route flush cache");
}
LOGE("Error setting forward rules");
errno = ENODEV;
@@ -239,7 +253,13 @@
// if the interface has gone down these will be gone already and give errors
// ignore them.
runCmd(IP_PATH, cmd);
+
+ snprintf(cmd, sizeof(cmd), "%s rule del from %s table %d", getVersion(argv[5+i]),
+ argv[5+i], tableNumber + BASE_TABLE_NUMBER);
+ runCmd(IP_PATH, cmd);
}
+
+ runCmd(IP_PATH, "route flush cache");
}
if (--natCount <= 0) {