in pkg/progs/loader.go [347:395]
func BpfGetMapInfoFromProgInfo(progFD int, numMaps uint32) ([]ebpf_maps.BpfMapInfo, []int, error) {
associatedMaps := make([]uint32, numMaps)
newBpfProgInfo := BpfProgInfo{
NrMapIDs: numMaps,
MapIDs: uint64(uintptr(unsafe.Pointer(&associatedMaps[0]))),
}
objInfo := BpfObjGetInfo{
bpf_fd: uint32(progFD),
info_len: uint32(unsafe.Sizeof(newBpfProgInfo)),
info: uintptr(unsafe.Pointer(&newBpfProgInfo)),
}
err := objInfo.BpfGetProgramInfoForFD()
if err != nil {
log.Errorf("failed to get program Info for FD - ", progFD)
return nil, nil, err
}
log.Infof("TYPE - %d", newBpfProgInfo.Type)
log.Infof("Prog Name - %s", unix.ByteSliceToString(newBpfProgInfo.Name[:]))
log.Infof("Maps linked - %d", newBpfProgInfo.NrMapIDs)
//Printing associated maps
loadedMaps := []ebpf_maps.BpfMapInfo{}
loadedMapsIDs := make([]int, 0)
for mapIdx := 0; mapIdx < len(associatedMaps); mapIdx++ {
log.Infof("MAP ID - %d", associatedMaps[mapIdx])
mapfd, err := utils.GetMapFDFromID(int(associatedMaps[mapIdx]))
if err != nil {
log.Errorf("failed to get map Info")
return nil, nil, err
}
log.Infof("Creating temporary map FD - %d", mapfd)
bpfMapInfo, err := ebpf_maps.GetBPFmapInfo(mapfd)
if err != nil {
log.Errorf("failed to get map Info for FD", mapfd)
return nil, nil, err
}
log.Infof("Closing map FD %d", mapfd)
unix.Close(mapfd)
loadedMaps = append(loadedMaps, bpfMapInfo)
loadedMapsIDs = append(loadedMapsIDs, int(associatedMaps[mapIdx]))
}
return loadedMaps, loadedMapsIDs, nil
}