in pkg/elfparser/elf.go [716:782]
func (b *bpfSDKClient) RecoverGlobalMaps() (map[string]ebpf_maps.BpfMap, error) {
_, err := os.Stat(constdef.BPF_DIR_MNT)
if err != nil {
log.Infof("BPF FS director is not present")
return nil, fmt.Errorf("BPF directory is not present %v", err)
}
loadedGlobalMaps := make(map[string]ebpf_maps.BpfMap)
var statfs syscall.Statfs_t
if err := syscall.Statfs(constdef.BPF_DIR_MNT, &statfs); err == nil && statfs.Type == unix.BPF_FS_MAGIC {
if err := filepath.Walk(constdef.MAP_BPF_FS, func(pinPath string, fsinfo os.FileInfo, err error) error {
if err != nil {
return err
}
if !fsinfo.IsDir() {
log.Infof("Dumping pinpaths - ", pinPath)
if IsMapGlobal(pinPath) {
log.Infof("Found global pinpaths - ", pinPath)
bpfMapInfo, err := b.mapApi.GetMapFromPinPath(pinPath)
if err != nil {
log.Errorf("error getting mapInfo for Global pin path, this shouldn't happen")
return err
}
mapID := bpfMapInfo.Id
log.Infof("Got ID %d", mapID)
//Get map name
mapName, _ := GetMapNameFromBPFPinPath(pinPath)
log.Infof("Adding ID %d to name %s", mapID, mapName)
recoveredBpfMap := ebpf_maps.BpfMap{}
//Fill BPF map
recoveredBpfMap.MapID = uint32(mapID)
//Fill New FD since old FDs will be deleted on recovery
mapFD, err := utils.GetMapFDFromID(int(mapID))
if err != nil {
log.Infof("Unable to GetFDfromID and ret %d and err %s", int(mapFD), err)
return fmt.Errorf("unable to get FD: %s", err)
}
recoveredBpfMap.MapFD = uint32(mapFD)
log.Infof("Recovered map Name %s and FD %d", mapName, mapFD)
sdkCache.Set(mapName, mapFD)
//Fill BPF map metadata
recoveredBpfMapMetaData := ebpf_maps.CreateEBPFMapInput{
Type: bpfMapInfo.Type,
KeySize: bpfMapInfo.KeySize,
ValueSize: bpfMapInfo.ValueSize,
MaxEntries: bpfMapInfo.MaxEntries,
Flags: bpfMapInfo.MapFlags,
Name: mapName,
}
recoveredBpfMap.MapMetaData = recoveredBpfMapMetaData
loadedGlobalMaps[pinPath] = recoveredBpfMap
}
}
return nil
}); err != nil {
log.Infof("Error walking bpf map directory:", err)
return nil, fmt.Errorf("error walking the bpfdirectory %v", err)
}
} else {
log.Infof("error checking BPF FS, please make sure it is mounted %v", err)
return nil, fmt.Errorf("error checking BPF FS, please make sure it is mounted")
}
return loadedGlobalMaps, nil
}