我對bpf_object__pin_maps(bpf_obj, pin_dir)是否會鎖定地圖型別為BPF_MAP_TYPE_HASH_OF_MAPS的內部地圖感到困惑。因為這個函式以bpf_obj為引數,而且我們在這之前還沒有創建內部地圖。如果它沒有釘住內部地圖,那么我們該如何做呢?
uj5u.com熱心網友回復:
如果你的內部地圖與你的程式和外部地圖定義在同一個物件檔案中,我希望libbpf能同時創建并鎖定它們。
相反,如果它們還沒有被創建(因為你在作業流程中稍后創建了它們,例如用 bpftool 或從另一個物件檔案中創建),那么你仍然有可能在稍后將它們釘住。
使用libbpf,你可以通過檢索地圖的句柄來做到這一點,例如從結構bpf_object中使用bpf_object__find_map_by_name()或類似的函式:
LIBBPF_API struct bpf_map *
bpf_object__find_map_by_name(const struct bpf_object *obj。const char *name)。
然后你可以用bpf_map__pin()輕松地釘住它:
LIBBPF_API int bpf_map__pin(struct bpf_map *map, const char *path)。
使用bpftool,如果你已經加載了一個地圖,但還沒有釘住(由用戶空間應用程式中的檔案描述符或由eBPF程式參考),你可以使用下面的命令來釘住它:
# bpftool map pin <map> <pinned path>
注意,用bpftool創建地圖會自動釘住它,并要求你提供一個路徑:
code># bpftool map pin <map><pinned path>
# bpftool map create <pinned path> type <type> key <key size> value <value size>
entries <max entries> name <name>
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/307689.html
標籤:
