netd: HAL implmentation
Implement Netd HAL server and register service.
OEM network create and destroy
Test: ran VtsHalNetNetdV1_0TargetTest, netd_unit_test, netd_integration_test
Bug: 36682246
CRs-fixed: 2070022
Change-Id: I35681f0fbffbe09bf6db0ad25a276844ea997398
(cherry picked from commit 9560bedd6ce334d64d4e9e9331d00f90f5103e0e)
diff --git a/server/NetworkController.cpp b/server/NetworkController.cpp
index b90976b..ecb4cee 100644
--- a/server/NetworkController.cpp
+++ b/server/NetworkController.cpp
@@ -321,14 +321,14 @@
return network && network->getType() == Network::VIRTUAL;
}
-int NetworkController::createPhysicalNetwork(unsigned netId, Permission permission) {
+int NetworkController::createPhysicalNetworkLocked(unsigned netId, Permission permission) {
if (!((MIN_NET_ID <= netId && netId <= MAX_NET_ID) ||
(MIN_OEM_ID <= netId && netId <= MAX_OEM_ID))) {
ALOGE("invalid netId %u", netId);
return -EINVAL;
}
- if (isValidNetwork(netId)) {
+ if (isValidNetworkLocked(netId)) {
ALOGE("duplicate netId %u", netId);
return -EEXIST;
}
@@ -340,11 +340,41 @@
return ret;
}
- android::RWLock::AutoWLock lock(mRWLock);
mNetworks[netId] = physicalNetwork;
return 0;
}
+int NetworkController::createPhysicalNetwork(unsigned netId, Permission permission) {
+ android::RWLock::AutoWLock lock(mRWLock);
+ return createPhysicalNetworkLocked(netId, permission);
+}
+
+int NetworkController::createPhysicalOemNetwork(Permission permission, unsigned *pNetId) {
+ if (pNetId == NULL) {
+ return -EINVAL;
+ }
+
+ android::RWLock::AutoWLock lock(mRWLock);
+ for (*pNetId = MIN_OEM_ID; *pNetId <= MAX_OEM_ID; (*pNetId)++) {
+ if (!isValidNetworkLocked(*pNetId)) {
+ break;
+ }
+ }
+
+ if (*pNetId > MAX_OEM_ID) {
+ ALOGE("No free network ID");
+ *pNetId = 0;
+ return -ENONET;
+ }
+
+ int ret = createPhysicalNetworkLocked(*pNetId, permission);
+ if (ret) {
+ *pNetId = 0;
+ }
+
+ return ret;
+}
+
int NetworkController::createVirtualNetwork(unsigned netId, bool hasDns, bool secure) {
if (!(MIN_NET_ID <= netId && netId <= MAX_NET_ID)) {
ALOGE("invalid netId %u", netId);
@@ -564,9 +594,13 @@
dw.decIndent();
}
+bool NetworkController::isValidNetworkLocked(unsigned netId) const {
+ return getNetworkLocked(netId);
+}
+
bool NetworkController::isValidNetwork(unsigned netId) const {
android::RWLock::AutoRLock lock(mRWLock);
- return getNetworkLocked(netId);
+ return isValidNetworkLocked(netId);
}
Network* NetworkController::getNetworkLocked(unsigned netId) const {