Add UID range support to VPNs.

This adds the necessary routing rules.

Future CLs will add the ability to select the right netId for connect(),
setNetworkForSocket(), DNS resolutions, etc.

Bug: 15409918
Change-Id: I88a67660d49cecda834dd72ab947fbfed250f09d
diff --git a/server/NetworkController.cpp b/server/NetworkController.cpp
index 8a51bcb..0ce82c3 100644
--- a/server/NetworkController.cpp
+++ b/server/NetworkController.cpp
@@ -302,6 +302,32 @@
     return 0;
 }
 
+int NetworkController::addUsersToNetwork(unsigned netId, const UidRanges& uidRanges) {
+    android::RWLock::AutoWLock lock(mRWLock);
+    auto iter = mVirtualNetworks.find(netId);
+    if (iter == mVirtualNetworks.end()) {
+        ALOGE("invalid netId %u", netId);
+        return -EINVAL;
+    }
+    if (int ret = iter->second->addUsers(uidRanges)) {
+        return ret;
+    }
+    return 0;
+}
+
+int NetworkController::removeUsersFromNetwork(unsigned netId, const UidRanges& uidRanges) {
+    android::RWLock::AutoWLock lock(mRWLock);
+    auto iter = mVirtualNetworks.find(netId);
+    if (iter == mVirtualNetworks.end()) {
+        ALOGE("invalid netId %u", netId);
+        return -EINVAL;
+    }
+    if (int ret = iter->second->removeUsers(uidRanges)) {
+        return ret;
+    }
+    return 0;
+}
+
 int NetworkController::addRoute(unsigned netId, const char* interface, const char* destination,
                                 const char* nexthop, bool legacy, uid_t uid) {
     return modifyRoute(netId, interface, destination, nexthop, true, legacy, uid);