NetBpfLoad: Add method to prepare map load by libbpf
Bug: 428792764
Flag: EXEMPT no-op
Test: TH
Change-Id: I74bb7895756df19be0d095269a490d3da54787bd
diff --git a/bpf/loader/NetBpfLoad.cpp b/bpf/loader/NetBpfLoad.cpp
index 6b7a52f..ccc34d5 100644
--- a/bpf/loader/NetBpfLoad.cpp
+++ b/bpf/loader/NetBpfLoad.cpp
@@ -1394,6 +1394,46 @@
return 0;
}
+__unused static int prepareLoadMaps(const struct bpf_object* obj,
+ const vector<struct bpf_map_def>& md,
+ const vector<string>& mapNames,
+ const unsigned int bpfloader_ver) {
+ unsigned kvers = kernelVersion();
+
+ for (int i = 0; i < (int)mapNames.size(); i++) {
+ struct bpf_map* m = bpf_object__find_map_by_name(obj, mapNames[i].c_str());
+ if (!m) {
+ ALOGE("bpf_object does not contain map: %s", mapNames[i].c_str());
+ return -1;
+ }
+
+ if (bpfloader_ver < md[i].bpfloader_min_ver || bpfloader_ver >= md[i].bpfloader_max_ver) {
+ ALOGD("skipping map %s: bpfloader 0x%05x is outside required range [0x%05x, 0x%05x)",
+ mapNames[i].c_str(), bpfloader_ver,
+ md[i].bpfloader_min_ver, md[i].bpfloader_max_ver);
+ bpf_map__set_autocreate(m, false);
+ continue;
+ }
+
+ if (kvers < md[i].min_kver || kvers >= md[i].max_kver) {
+ ALOGD("skipping map %s: kernel version 0x%x is outside required range [0x%x, 0x%x)",
+ mapNames[i].c_str(), kvers, md[i].min_kver, md[i].max_kver);
+ bpf_map__set_autocreate(m, false);
+ continue;
+ }
+
+ if (!isMapTypeSupported(md[i].type)) {
+ ALOGD("skipping unsupported map type(%d): %s", md[i].type, mapNames[i].c_str());
+ bpf_map__set_autocreate(m, false);
+ continue;
+ }
+
+ bpf_map__set_type(m, sanitizeMapType(md[i].type));
+ bpf_map__set_map_flags(m, md[i].map_flags);
+ }
+ return 0;
+}
+
int loadProg(const char* const elfPath, const unsigned int bpfloader_ver,
const char* const prefix) {
vector<char> license;