Fix WiFi-Direct and Tethering.

A LocalNetwork object now always exists in the NetworkController, with a fixed
NetId that's guaranteed not to collide with NetIds created by the framework.

When routes are added on an interface tracked by the LocalNetwork, they are
added to a fixed "local_network" table.

When NAT is enabled, we add a special "iif -> oif" tethering rule.

Bug: 15413694
Bug: 15413741

Change-Id: I36effc438d5ac193a77174493bf196cb68a5b97a
diff --git a/server/NatController.h b/server/NatController.h
index e3cc394..9102f46 100644
--- a/server/NatController.h
+++ b/server/NatController.h
@@ -21,16 +21,13 @@
 #include <list>
 #include <string>
 
-class NetworkController;
-
 class NatController {
-
 public:
-    explicit NatController(NetworkController* net_ctrl);
+    NatController();
     virtual ~NatController();
 
-    int enableNat(const int argc, char **argv);
-    int disableNat(const int argc, char **argv);
+    int enableNat(const char* intIface, const char* extIface);
+    int disableNat(const char* intIface, const char* extIface);
     int setupIptablesHooks();
 
     static const char* LOCAL_FORWARD;
@@ -42,7 +39,6 @@
 
 private:
     int natCount;
-    NetworkController *mNetCtrl;
 
     bool checkTetherCountingRuleExist(const char *pair_name);
 
@@ -50,7 +46,6 @@
     int runCmd(int argc, const char **argv);
     int setForwardRules(bool set, const char *intIface, const char *extIface);
     int setTetherCountingRules(bool add, const char *intIface, const char *extIface);
-    int routesOp(bool add, const char *intIface, char **argv, int addrCount);
 };
 
 #endif