diff options
| author | Ken Chen <cken@google.com> | 2021-03-22 11:37:17 +0800 |
|---|---|---|
| committer | Ken Chen <cken@google.com> | 2021-03-23 11:41:59 +0800 |
| commit | c929e8aca3eb6a8fd05c9630c9776e751430648a (patch) | |
| tree | 0c4628c82360dec48e9e86d50df1fedc7f53c3b6 /server/PhysicalNetwork.cpp | |
| parent | 3824ac96477f7432767f683b0d44c0356e6c7d5a (diff) | |
| download | platform_system_netd-c929e8aca3eb6a8fd05c9630c9776e751430648a.tar.gz platform_system_netd-c929e8aca3eb6a8fd05c9630c9776e751430648a.tar.bz2 platform_system_netd-c929e8aca3eb6a8fd05c9630c9776e751430648a.zip | |
Implement addUsers()/removeUsers() in derived classes
The implementation of addUsers() and removeUsers() are different between
virtual network, physical network, and others. Virtualize both functions
in base class and override them in derived classes for specialization.
Test: atest
Change-Id: Ie3baeb404d2cd9513efb95857de53b4b3079be0b
Diffstat (limited to 'server/PhysicalNetwork.cpp')
| -rw-r--r-- | server/PhysicalNetwork.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/server/PhysicalNetwork.cpp b/server/PhysicalNetwork.cpp index cac98750b..c3d666748 100644 --- a/server/PhysicalNetwork.cpp +++ b/server/PhysicalNetwork.cpp @@ -158,6 +158,35 @@ int PhysicalNetwork::removeAsDefault() { return 0; } +int PhysicalNetwork::addUsers(const UidRanges& uidRanges) { + if (hasInvalidUidRanges(uidRanges)) { + return -EINVAL; + } + + for (const std::string& interface : mInterfaces) { + int ret = RouteController::addUsersToPhysicalNetwork(mNetId, interface.c_str(), uidRanges); + if (ret) { + ALOGE("failed to add users on interface %s of netId %u", interface.c_str(), mNetId); + return ret; + } + } + mUidRanges.add(uidRanges); + return 0; +} + +int PhysicalNetwork::removeUsers(const UidRanges& uidRanges) { + for (const std::string& interface : mInterfaces) { + int ret = RouteController::removeUsersFromPhysicalNetwork(mNetId, interface.c_str(), + uidRanges); + if (ret) { + ALOGE("failed to remove users on interface %s of netId %u", interface.c_str(), mNetId); + return ret; + } + } + mUidRanges.remove(uidRanges); + return 0; +} + Network::Type PhysicalNetwork::getType() const { return PHYSICAL; } |
