Refactor: Encapsulate permissions and interfaces into a Network class.

Currently, there's a lot of logic in NetworkController surrounding events such
as interface addition/removal, network creation/destruction and default network
change, because these events are interwined. For example, adding an interface
means also adding a corresponding default network rule if the interface is being
added to the current default network.

When we introduce VPNs into this mix, things will get hairy real quick for all
this logic in NetworkController.

In this refactor, we introduce an abstract base class Network which supports
adding and removing interfaces. The main concrete implementation of this is
PhysicalNetwork, which allows setting permissions and "default network" state.

Since we've moved network permissions into the above class, and user permissions
into NetworkController, PermissionsController is unused and has been removed.

Also fix a few bugs in RouteController:
+ Use uidEnd correctly.
+ Check for all error cases in inet_pton.
+ Check the return value of android_fork_execvp() correctly.
+ The "return cmd1() && cmd2()" pattern is wrong. Rewrite that code.

Also (non-functional changes):
+ Remove instantiations of RouteController. It has static methods only.
+ Reorder some blocks in CommandListener so that the most frequent commands are
  checked first.
+ Remove unused paramError() and clearNetworkPreference().
+ Change all return codes to int (negative errno) wherever applicable.
+ Add WARN_UNUSED_RESULT everywhere.
+ Cleanup some style in RouteController and NetworkController.
+ Use uid_t instead of unsigned for user IDs.
+ Add clearer log messages at the source of failures.
+ Add a check for when fwmark bits are set without corresponding mask bits.

Bug: 15409918

Change-Id: Ibba78b0850160f9f3d17d476f16331a6db0025d1
diff --git a/server/RouteController.h b/server/RouteController.h
index b826e08..a54adae 100644
--- a/server/RouteController.h
+++ b/server/RouteController.h
@@ -17,8 +17,11 @@
 #ifndef NETD_SERVER_ROUTE_CONTROLLER_H
 #define NETD_SERVER_ROUTE_CONTROLLER_H
 
+#include "NetdConstants.h"
 #include "Permission.h"
 
+#include <sys/types.h>
+
 class RouteController {
 public:
     // How the routing table number is determined for route modification requests.
@@ -30,21 +33,25 @@
 
     static const int ROUTE_TABLE_OFFSET_FROM_INDEX = 1000;
 
-    static void Init();
+    static int Init() WARN_UNUSED_RESULT;
 
-    static int addInterfaceToNetwork(unsigned netId, const char* interface, Permission permission);
+    static int addInterfaceToNetwork(unsigned netId, const char* interface,
+                                     Permission permission) WARN_UNUSED_RESULT;
     static int removeInterfaceFromNetwork(unsigned netId, const char* interface,
-                                          Permission permission);
-    static int modifyNetworkPermission(unsigned netId, const char* interface,
-                                       Permission oldPermission, Permission newPermission);
+                                          Permission permission) WARN_UNUSED_RESULT;
 
-    static int addToDefaultNetwork(const char* interface, Permission permission);
-    static int removeFromDefaultNetwork(const char* interface, Permission permission);
+    static int modifyNetworkPermission(unsigned netId, const char* interface,
+                                       Permission oldPermission,
+                                       Permission newPermission) WARN_UNUSED_RESULT;
+
+    static int addToDefaultNetwork(const char* interface, Permission permission) WARN_UNUSED_RESULT;
+    static int removeFromDefaultNetwork(const char* interface,
+                                        Permission permission) WARN_UNUSED_RESULT;
 
     static int addRoute(const char* interface, const char* destination, const char* nexthop,
-                        TableType tableType, unsigned uid);
+                        TableType tableType, uid_t uid) WARN_UNUSED_RESULT;
     static int removeRoute(const char* interface, const char* destination, const char* nexthop,
-                           TableType tableType, unsigned uid);
+                           TableType tableType, uid_t uid) WARN_UNUSED_RESULT;
 };
 
 #endif  // NETD_SERVER_ROUTE_CONTROLLER_H