From e50e55dd32135bb4a2664cc4e783475982aebc4d Mon Sep 17 00:00:00 2001 From: Motomu Utsumi Date: Wed, 23 Jul 2025 12:59:23 +0900 Subject: [PATCH] NetBpfLoad: Allow loadObject to load BPF object by libbpf Bug: 428792764 Flag: EXEMPT no-op Test: TH Test: ag/34714170 Change-Id: I70ad52c2df2fdbce1250b152444328daebb72be5 --- bpf/loader/NetBpfLoad.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/bpf/loader/NetBpfLoad.cpp b/bpf/loader/NetBpfLoad.cpp index f1dd911c0e..77756a86e8 100644 --- a/bpf/loader/NetBpfLoad.cpp +++ b/bpf/loader/NetBpfLoad.cpp @@ -1555,8 +1555,8 @@ static int pinProgs(const char* const elfPath, const struct bpf_object * obj, return 0; } -__unused static int loadProgByLibbpf(const char* const elfPath, const unsigned int bpfloader_ver, - const char* const prefix) { +static int loadProgByLibbpf(const char* const elfPath, const unsigned int bpfloader_ver, + const char* const prefix) { int ret; vector mapNames; vector md; @@ -1656,14 +1656,16 @@ static bool exists(const char* const path) { #define BPFROOT APEXROOT "/etc/bpf/mainline/" static int loadObject(const unsigned int bpfloader_ver, const char* const prefix, - const char* const fname) { + const char* const fname, const bool useLibbpf = false) { string progPath = string(BPFROOT) + fname; - int ret = loadProg(progPath.c_str(), bpfloader_ver, prefix); + int ret = useLibbpf ? loadProgByLibbpf(progPath.c_str(), bpfloader_ver, prefix) : + loadProg(progPath.c_str(), bpfloader_ver, prefix); if (ret) { - ALOGE("Failed to load object: %s, ret: %s", progPath.c_str(), std::strerror(-ret)); + ALOGE("Failed to load object: %s, ret: %s, libbpf: %d", + progPath.c_str(), std::strerror(-ret), useLibbpf); return 1; } - ALOGD("Loaded object: %s", progPath.c_str()); + ALOGD("Loaded object: %s, libbpf: %d", progPath.c_str(), useLibbpf); return 0; }