Implement support for bypassable VPNs.

Bypassable VPNs grab all traffic by default (just like secure VPNs), but:
+ They allow all apps to choose other networks using the multinetwork APIs.
  If these other networks are insecure ("untrusted"), they will enforce that the
  app holds the necessary permissions, such as CHANGE_NETWORK_STATE.
+ They support consistent routing. If an app has an existing connection over
  some other network when the bypassable VPN comes up, it's not interrupted.

Bug: 15347374
Change-Id: Iaee9c6f6fa8103215738570d2b65d3fcf10343f3
diff --git a/server/RouteController.h b/server/RouteController.h
index 1d6075d..aa2d8c9 100644
--- a/server/RouteController.h
+++ b/server/RouteController.h
@@ -47,18 +47,18 @@
     static int removeInterfaceFromPhysicalNetwork(unsigned netId, const char* interface,
                                                   Permission permission) WARN_UNUSED_RESULT;
 
-    static int addInterfaceToVirtualNetwork(unsigned netId, const char* interface,
+    static int addInterfaceToVirtualNetwork(unsigned netId, const char* interface, bool secure,
                                             const UidRanges& uidRanges) WARN_UNUSED_RESULT;
-    static int removeInterfaceFromVirtualNetwork(unsigned netId, const char* interface,
+    static int removeInterfaceFromVirtualNetwork(unsigned netId, const char* interface, bool secure,
                                                  const UidRanges& uidRanges) WARN_UNUSED_RESULT;
 
     static int modifyPhysicalNetworkPermission(unsigned netId, const char* interface,
                                                Permission oldPermission,
                                                Permission newPermission) WARN_UNUSED_RESULT;
 
-    static int addUsersToVirtualNetwork(unsigned netId, const char* interface,
+    static int addUsersToVirtualNetwork(unsigned netId, const char* interface, bool secure,
                                         const UidRanges& uidRanges) WARN_UNUSED_RESULT;
-    static int removeUsersFromVirtualNetwork(unsigned netId, const char* interface,
+    static int removeUsersFromVirtualNetwork(unsigned netId, const char* interface, bool secure,
                                              const UidRanges& uidRanges) WARN_UNUSED_RESULT;
 
     static int addInterfaceToDefaultNetwork(const char* interface,