in pkg/utils/utils.go [55:85]
func PinObject(objFD uint32, pinPath string) error {
var log = logger.Get()
if pinPath == "" {
return nil
}
cPath := []byte(pinPath + "\x00")
pinAttr := BpfPin{
Fd: uint32(objFD),
Pathname: uintptr(unsafe.Pointer(&cPath[0])),
}
pinData := unsafe.Pointer(&pinAttr)
pinDataSize := unsafe.Sizeof(pinAttr)
log.Infof("Calling BPFsys for FD %d and Path %s", objFD, pinPath)
ret, _, errno := unix.Syscall(
unix.SYS_BPF,
uintptr(constdef.BPF_OBJ_PIN),
uintptr(pinData),
uintptr(int(pinDataSize)),
)
if errno < 0 {
log.Infof("Unable to pin map and ret %d and err %s", int(ret), errno)
return fmt.Errorf("Unable to pin map: %s", errno)
}
//TODO : might have to return FD for node agent
log.Infof("Pin done with fd : %d and errno %d", ret, errno)
return nil
}