func BpfGetMapInfoFromProgInfo()

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
}