in pkg/elfparser/elf.go [179:228]
func (e *elfLoader) loadMap(parsedMapData []ebpf_maps.CreateEBPFMapInput) (map[string]ebpf_maps.BpfMap, error) {
programmedMaps := make(map[string]ebpf_maps.BpfMap)
log.Infof("Total maps found - %d", len(parsedMapData))
for index := 0; index < len(parsedMapData); index++ {
log.Infof("Loading maps")
loadedMaps := parsedMapData[index]
//Get Pinning info
mapNameStr := loadedMaps.Name
if len(e.customizedPinPath) != 0 {
mapNameStr = e.customizedPinPath + "_" + mapNameStr
}
pinPath := constdef.MAP_BPF_FS + mapNameStr
loadedMaps.PinOptions.PinPath = pinPath
bpfMap, err := (e.bpfMapApi).CreateBPFMap(loadedMaps)
if err != nil {
log.Errorf("failed to create map %v", err)
return nil, err
}
//Fill ID
if loadedMaps.PinOptions.Type == constdef.PIN_NONE.Index() {
mapInfo, err := (e.bpfMapApi).GetBPFmapInfo(bpfMap.MapFD)
if err != nil {
return nil, fmt.Errorf("failed to get map info '%s'", mapNameStr)
}
bpfMap.MapID = uint32(mapInfo.Id)
} else {
mapInfo, err := (e.bpfMapApi).GetMapFromPinPath(pinPath)
if err != nil {
return nil, fmt.Errorf("map '%s' doesn't exist", mapNameStr)
}
mapID := uint32(mapInfo.Id)
bpfMap.MapID = mapID
}
programmedMaps[loadedMaps.Name] = bpfMap
if IsMapGlobal(pinPath) {
//Add to global cache
sdkCache.Set(loadedMaps.Name, int(bpfMap.MapFD))
log.Infof("Added map Name %s and FD %d to SDK cache", loadedMaps.Name, bpfMap.MapFD)
}
}
return programmedMaps, nil
}