NetBpfLoad: support 'done' finalization step

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I9bb97549838980fb4c9a26bfcc4689aac0e73a97
diff --git a/netbpfload/NetBpfLoad.cpp b/netbpfload/NetBpfLoad.cpp
index 20432f5..ccb6acb 100644
--- a/netbpfload/NetBpfLoad.cpp
+++ b/netbpfload/NetBpfLoad.cpp
@@ -228,9 +228,7 @@
     return !access("/metadata/gsi/dsu/booted", F_OK);
 }
 
-static int main(char** argv, char * const envp[]) {
-    base::InitLogging(argv, &base::KernelLogger);
-
+static int doLoad(char** argv, char * const envp[]) {
     const int device_api_level = android_get_device_api_level();
     const bool isAtLeastT = (device_api_level >= __ANDROID_API_T__);
     const bool isAtLeastU = (device_api_level >= __ANDROID_API_U__);
@@ -425,6 +423,17 @@
 }  // namespace bpf
 }  // namespace android
 
-int main(int __unused argc, char** argv, char * const envp[]) {
-    return android::bpf::main(argv, envp);
+int main(int argc, char** argv, char * const envp[]) {
+    android::base::InitLogging(argv, &android::base::KernelLogger);
+
+    if (argc == 2 && !strcmp(argv[1], "done")) {
+        // we're being re-exec'ed from platform bpfloader to 'finalize' things
+        if (!android::base::SetProperty("bpf.progs_loaded", "1")) {
+            ALOGE("Failed to set bpf.progs_loaded property to 1.");
+            return 125;
+        }
+        return 0;
+    }
+
+    return android::bpf::doLoad(argv, envp);
 }