pkg/exporter/bpfutil/pinned.go (42 lines of code) (raw):

package bpfutil import ( "fmt" "os" "github.com/cilium/ebpf" ) // MustPin pin a map, will remove old one default, prevent asynchrouny func MustPin(m *ebpf.Map, name string) error { if ok, err := IsMounted(); !ok || err != nil { err = Mount() if err != nil { return fmt.Errorf("mount bpf fs to %s failed:%s", BPFFSPath, err.Error()) } } _, err := os.Stat(inspMapPath) if os.IsNotExist(err) { err = os.Mkdir(inspMapPath, 0755) if err != nil { return fmt.Errorf("create pin path failed with %s", err) } } path := fmt.Sprintf("%s%s", inspMapPath, name) _, err = os.Stat(path) if !os.IsNotExist(err) { err = os.Remove(path) if err != nil { return fmt.Errorf("pin to %s failed with %s", path, err) } } err = m.Pin(path) if err != nil { return fmt.Errorf("pin to %s failed with %s", path, err) } return nil } func MustLoadPin(name string) (*ebpf.Map, error) { path := fmt.Sprintf("%s%s", inspMapPath, name) _, err := os.Stat(path) if os.IsNotExist(err) { return nil, fmt.Errorf("map %s not found with %s", path, err.Error()) } return ebpf.LoadPinnedMap(path, &ebpf.LoadPinOptions{ReadOnly: true}) }