NetBpfLoad: gently enable mainline
Only the non-CRITICAL test@mainline.o is loaded from netbpfload
on T and U < QPR3, everything else is loaded by platform bpfloader
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Ic07a57cf93851d3a1411b62c97d8ce057507360b
diff --git a/netd/BpfHandler.cpp b/netd/BpfHandler.cpp
index f08ac44..06873fa 100644
--- a/netd/BpfHandler.cpp
+++ b/netd/BpfHandler.cpp
@@ -170,19 +170,25 @@
android::bpf::waitForProgsLoaded();
}
- if (false && !mainlineNetBpfLoadDone()) {
+ if (!mainlineNetBpfLoadDone()) {
+ const bool enforce_mainline = false; // TODO: flip to true
+
// We're on < U QPR3 & it's the first time netd is starting up (unless crashlooping)
//
// On U QPR3+ netbpfload is guaranteed to run before the platform bpfloader,
// so waitForProgsLoaded() implies mainlineNetBpfLoadDone().
if (!base::SetProperty("ctl.start", "mdnsd_netbpfload")) {
ALOGE("Failed to set property ctl.start=mdnsd_netbpfload, see dmesg for reason.");
- abort();
+ if (enforce_mainline) abort();
}
- ALOGI("Waiting for Networking BPF programs");
- waitForNetProgsLoaded();
- ALOGI("Networking BPF programs are loaded");
+ if (enforce_mainline) {
+ ALOGI("Waiting for Networking BPF programs");
+ waitForNetProgsLoaded();
+ ALOGI("Networking BPF programs are loaded");
+ } else {
+ ALOGI("Started mdnsd_netbpfload asynchronously.");
+ }
}
ALOGI("BPF programs are loaded");