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);