summaryrefslogtreecommitdiffstats
path: root/server/main.cpp
diff options
context:
space:
mode:
authorJoel Fernandes <joelaf@google.com>2019-01-10 11:24:11 -0500
committerJoel Fernandes <joelaf@google.com>2019-01-11 08:59:46 -0500
commita03aced8b7c9dee7d71ae77cd9997d8725ab57a6 (patch)
tree428750571b7c5583fd18a76d399cfaa0ab4aa637 /server/main.cpp
parente45746650275e72427640a69b6ac7f38184e0655 (diff)
downloadplatform_system_netd-a03aced8b7c9dee7d71ae77cd9997d8725ab57a6.tar.gz
platform_system_netd-a03aced8b7c9dee7d71ae77cd9997d8725ab57a6.tar.bz2
platform_system_netd-a03aced8b7c9dee7d71ae77cd9997d8725ab57a6.zip
Make netd wait for BPF programs to get loaded
BPF programs are being loaded by bpfloader started by init. Since there is a possible race where bpfloader starts before netd starts, because make sure netd waits if bpfloader started too soon. Test: force bpfloader to start later and see netd wait. Bug: 112334572 Change-Id: I1cff053f228cc8ee852d5e2de79cafb5d42d6aff Signed-off-by: Joel Fernandes <joelaf@google.com>
Diffstat (limited to 'server/main.cpp')
-rw-r--r--server/main.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/server/main.cpp b/server/main.cpp
index b9ff33f0e..4b06ada1f 100644
--- a/server/main.cpp
+++ b/server/main.cpp
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+#include <chrono>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
@@ -31,6 +32,7 @@
#include "log/log.h"
+#include <android-base/properties.h>
#include <binder/IPCThreadState.h>
#include <binder/IServiceManager.h>
#include <binder/ProcessState.h>
@@ -90,6 +92,12 @@ int main() {
// Before we start any threads, populate the resolver stub pointers.
resolv_stub_init();
+ // Make sure BPF programs are loaded before doing anything
+ while (!android::base::WaitForProperty("bpf.progs_loaded", "1",
+ std::chrono::seconds(5))) {
+ ALOGD("netd waited 5s for bpf.progs_loaded, still waiting...");
+ }
+
NetlinkManager *nm = NetlinkManager::Instance();
if (nm == nullptr) {
ALOGE("Unable to create NetlinkManager");