Documentation ¶
Index ¶
- Constants
- func BPFMapTypeIsSupported(mapType MapType) (bool, error)
- func BPFProgramTypeIsSupported(progType BPFProgType) (bool, error)
- func GetBTFFDByID(id uint32) (int, error)
- func GetMapFDByID(id uint32) (int, error)
- func LibbpfVersionString() string
- func MajorVersion() int
- func MinorVersion() int
- func NumPossibleCPUs() (int, error)
- func SetLoggerCbs(cbs Callbacks)
- func SetStrictMode(mode LibbpfStrictMode)
- type AttachFlag
- type BPFAttachType
- type BPFCgroupIterOrder
- type BPFLink
- func (l *BPFLink) Destroy() error
- func (l *BPFLink) DestroyLegacy(linkType LinkType) error
- func (l *BPFLink) FileDescriptor() int
- func (l *BPFLink) GetFd() intdeprecated
- func (l *BPFLink) Pin(pinPath string) error
- func (l *BPFLink) Reader() (*BPFLinkReader, error)
- func (l *BPFLink) Unpin(pinPath string) error
- type BPFLinkLegacy
- type BPFLinkReader
- type BPFMap
- func (m *BPFMap) BTFKeyTypeID() uint32
- func (m *BPFMap) BTFValueTypeID() uint32
- func (m *BPFMap) DeleteKey(key unsafe.Pointer) error
- func (m *BPFMap) DeleteKeyBatch(keys unsafe.Pointer, count uint32) error
- func (m *BPFMap) FileDescriptor() int
- func (m *BPFMap) GetFd() intdeprecated
- func (m *BPFMap) GetMaxEntries() uint32deprecated
- func (m *BPFMap) GetModule() *Moduledeprecated
- func (m *BPFMap) GetName() stringdeprecated
- func (m *BPFMap) GetPinPath() stringdeprecated
- func (m *BPFMap) GetValue(key unsafe.Pointer) ([]byte, error)
- func (m *BPFMap) GetValueAndDeleteBatch(keys, startKey, nextKey unsafe.Pointer, count uint32) ([][]byte, error)
- func (m *BPFMap) GetValueBatch(keys unsafe.Pointer, startKey, nextKey unsafe.Pointer, count uint32) ([][]byte, error)
- func (m *BPFMap) GetValueFlags(key unsafe.Pointer, flags MapFlag) ([]byte, error)
- func (m *BPFMap) GetValueReadInto(key unsafe.Pointer, value *[]byte) errordeprecated
- func (m *BPFMap) IfIndex() uint32
- func (m *BPFMap) InitialValue() ([]byte, error)
- func (m *BPFMap) InnerMapInfo() (*BPFMapInfo, error)
- func (m *BPFMap) IsPinned() bool
- func (m *BPFMap) Iterator() *BPFMapIterator
- func (m *BPFMap) KeySize() int
- func (m *BPFMap) MapExtra() uint64
- func (m *BPFMap) MapFlags() MapFlag
- func (m *BPFMap) MaxEntries() uint32
- func (m *BPFMap) Module() *Module
- func (m *BPFMap) Name() string
- func (m *BPFMap) Pin(pinPath string) error
- func (m *BPFMap) PinPath() string
- func (m *BPFMap) Resize(maxEntries uint32) errordeprecated
- func (m *BPFMap) ReuseFD(fd int) error
- func (m *BPFMap) SetInitialValue(value unsafe.Pointer) error
- func (m *BPFMap) SetInnerMap(templateMapFD int) error
- func (m *BPFMap) SetMaxEntries(maxEntries uint32) error
- func (m *BPFMap) SetPinPath(pinPath string) error
- func (m *BPFMap) SetType(mapType MapType) error
- func (m *BPFMap) SetValueSize(size uint32) error
- func (m *BPFMap) Type() MapType
- func (m *BPFMap) Unpin(pinPath string) error
- func (m *BPFMap) Update(key, value unsafe.Pointer) error
- func (m *BPFMap) UpdateBatch(keys, values unsafe.Pointer, count uint32) error
- func (m *BPFMap) UpdateValueFlags(key, value unsafe.Pointer, flags MapFlag) error
- func (m *BPFMap) ValueSize() int
- type BPFMapCreateOpts
- type BPFMapInfo
- type BPFMapIterator
- type BPFMapLow
- func (m *BPFMapLow) DeleteKey(key unsafe.Pointer) error
- func (m *BPFMapLow) DeleteKeyBatch(keys unsafe.Pointer, count uint32) error
- func (m *BPFMapLow) FileDescriptor() int
- func (m *BPFMapLow) GetValue(key unsafe.Pointer) ([]byte, error)
- func (m *BPFMapLow) GetValueAndDeleteBatch(keys, startKey, nextKey unsafe.Pointer, count uint32) ([][]byte, error)
- func (m *BPFMapLow) GetValueBatch(keys unsafe.Pointer, startKey, nextKey unsafe.Pointer, count uint32) ([][]byte, error)
- func (m *BPFMapLow) GetValueFlags(key unsafe.Pointer, flags MapFlag) ([]byte, error)
- func (m *BPFMapLow) Iterator() *BPFMapIterator
- func (m *BPFMapLow) KeySize() int
- func (m *BPFMapLow) MaxEntries() uint32
- func (m *BPFMapLow) Name() string
- func (m *BPFMapLow) ReuseFD(fd int) error
- func (m *BPFMapLow) Type() MapType
- func (m *BPFMapLow) Update(key, value unsafe.Pointer) error
- func (m *BPFMapLow) UpdateBatch(keys, values unsafe.Pointer, count uint32) error
- func (m *BPFMapLow) UpdateValueFlags(key, value unsafe.Pointer, flags MapFlag) error
- func (m *BPFMapLow) ValueSize() int
- type BPFObjectIterator
- type BPFProg
- func (p *BPFProg) AttachCgroup(cgroupV2DirPath string) (*BPFLink, error)
- func (p *BPFProg) AttachCgroupLegacy(cgroupV2DirPath string, attachType BPFAttachType) (*BPFLink, error)
- func (p *BPFProg) AttachGeneric() (*BPFLink, error)
- func (p *BPFProg) AttachGenericFD(targetFd int, attachType BPFAttachType, flags AttachFlag) error
- func (p *BPFProg) AttachIter(opts IterOpts) (*BPFLink, error)
- func (p *BPFProg) AttachKprobe(kp string) (*BPFLink, error)
- func (p *BPFProg) AttachKretprobe(kp string) (*BPFLink, error)
- func (p *BPFProg) AttachLSM() (*BPFLink, error)
- func (p *BPFProg) AttachNetns(networkNamespacePath string) (*BPFLink, error)
- func (p *BPFProg) AttachPerfEvent(fd int) (*BPFLink, error)
- func (p *BPFProg) AttachRawTracepoint(tpEvent string) (*BPFLink, error)
- func (p *BPFProg) AttachTracepoint(category, name string) (*BPFLink, error)
- func (p *BPFProg) AttachURetprobe(pid int, path string, offset uint32) (*BPFLink, error)
- func (p *BPFProg) AttachUprobe(pid int, path string, offset uint32) (*BPFLink, error)
- func (p *BPFProg) AttachXDP(deviceName string) (*BPFLink, error)
- func (p *BPFProg) DetachCgroupLegacy(cgroupV2DirPath string, attachType BPFAttachType) error
- func (p *BPFProg) DetachGenericFD(targetFd int, attachType BPFAttachType) error
- func (p *BPFProg) FileDescriptor() int
- func (p *BPFProg) GetFd() intdeprecated
- func (p *BPFProg) GetModule() *Module
- func (p *BPFProg) GetName() stringdeprecated
- func (p *BPFProg) GetPinPath() stringdeprecated
- func (p *BPFProg) GetSectionName() stringdeprecated
- func (p *BPFProg) GetType() BPFProgType
- func (p *BPFProg) Name() string
- func (p *BPFProg) Pin(path string) error
- func (p *BPFProg) PinPath() string
- func (p *BPFProg) SectionName() string
- func (p *BPFProg) SetAttachTarget(attachProgFD int, attachFuncName string) error
- func (p *BPFProg) SetAttachType(attachType BPFAttachType)
- func (p *BPFProg) SetAutoload(autoload bool) error
- func (p *BPFProg) SetProgramType(progType BPFProgType)
- func (p *BPFProg) Unpin(path string) error
- type BPFProgType
- type Callbacks
- type IterOpts
- type LibbpfStrictMode
- type LinkType
- type MapFlag
- type MapType
- type Module
- func (m *Module) BPFLoadObject() error
- func (m *Module) Close()
- func (m *Module) GetMap(mapName string) (*BPFMap, error)
- func (m *Module) GetProgram(progName string) (*BPFProg, error)
- func (m *Module) InitGlobalVariable(name string, value interface{}) error
- func (m *Module) InitPerfBuf(mapName string, eventsChan chan []byte, lostChan chan uint64, pageCnt int) (*PerfBuffer, error)
- func (m *Module) InitRingBuf(mapName string, eventsChan chan []byte) (*RingBuffer, error)
- func (m *Module) Iterator() *BPFObjectIterator
- func (m *Module) TcHookInit() *TcHook
- type NewModuleArgs
- type PerfBuffer
- type RingBuffer
- type Symbol
- type TcAttachPoint
- type TcFlags
- type TcHook
- func (hook *TcHook) Attach(tcOpts *TcOpts) error
- func (hook *TcHook) Create() error
- func (hook *TcHook) Destroy() error
- func (hook *TcHook) Detach(tcOpts *TcOpts) error
- func (hook *TcHook) GetInterfaceIndex() int
- func (hook *TcHook) Query(tcOpts *TcOpts) error
- func (hook *TcHook) SetAttachPoint(attachPoint TcAttachPoint)
- func (hook *TcHook) SetInterfaceByIndex(ifaceIdx int)
- func (hook *TcHook) SetInterfaceByName(ifaceName string) error
- func (hook *TcHook) SetParent(a int, b int)
- type TcOpts
Constants ¶
const ( // libbpf print levels LibbpfWarnLevel = int(C.LIBBPF_WARN) LibbpfInfoLevel = int(C.LIBBPF_INFO) LibbpfDebugLevel = int(C.LIBBPF_DEBUG) )
Variables ¶
This section is empty.
Functions ¶
func BPFMapTypeIsSupported ¶
func BPFProgramTypeIsSupported ¶
func BPFProgramTypeIsSupported(progType BPFProgType) (bool, error)
func GetBTFFDByID ¶
GetBTFFDByID returns a file descriptor for the BTF with the given ID.
func GetMapFDByID ¶
GetMapFDByID returns a file descriptor for the map with the given ID.
func LibbpfVersionString ¶
func LibbpfVersionString() string
LibbpfVersionString returns the string representation of the libbpf version which libbpfgo is linked against
func MajorVersion ¶
func MajorVersion() int
MajorVersion returns the major semver version of libbpf.
func MinorVersion ¶
func MinorVersion() int
MinorVersion returns the minor semver version of libbpf.
func NumPossibleCPUs ¶
func SetLoggerCbs ¶
func SetLoggerCbs(cbs Callbacks)
SetLoggerCbs receives Callbacks type to be used to log libbpf outputs and to filter out those outputs
func SetStrictMode ¶
func SetStrictMode(mode LibbpfStrictMode)
Types ¶
type AttachFlag ¶
type AttachFlag uint32
const ( BPFFNone AttachFlag = 0 BPFFAllowOverride AttachFlag = C.BPF_F_ALLOW_OVERRIDE BPFFAllowMulti AttachFlag = C.BPF_F_ALLOW_MULTI BPFFReplace AttachFlag = C.BPF_F_REPLACE )
type BPFAttachType ¶
type BPFAttachType uint32
const ( BPFAttachTypeCgroupInetIngress BPFAttachType = iota BPFAttachTypeCgroupInetEgress BPFAttachTypeCgroupInetSockCreate BPFAttachTypeCgroupSockOps BPFAttachTypeSKSKBStreamParser BPFAttachTypeSKSKBStreamVerdict BPFAttachTypeCgroupDevice BPFAttachTypeSKMSGVerdict BPFAttachTypeCgroupInet4Bind BPFAttachTypeCgroupInet6Bind BPFAttachTypeCgroupInet4Connect BPFAttachTypeCgroupInet6Connect BPFAttachTypeCgroupInet4PostBind BPFAttachTypeCgroupInet6PostBind BPFAttachTypeCgroupUDP4SendMsg BPFAttachTypeCgroupUDP6SendMsg BPFAttachTypeLircMode2 BPFAttachTypeFlowDissector BPFAttachTypeCgroupSysctl BPFAttachTypeCgroupUDP4RecvMsg BPFAttachTypeCgroupUDP6RecvMsg BPFAttachTypeCgroupGetSockOpt BPFAttachTypeCgroupSetSockOpt BPFAttachTypeTraceRawTP BPFAttachTypeTraceFentry BPFAttachTypeTraceFexit BPFAttachTypeModifyReturn BPFAttachTypeLSMMac BPFAttachTypeTraceIter BPFAttachTypeCgroupInet4GetPeerName BPFAttachTypeCgroupInet6GetPeerName BPFAttachTypeCgroupInet4GetSockName BPFAttachTypeCgroupInet6GetSockName BPFAttachTypeXDPDevMap BPFAttachTypeCgroupInetSockRelease BPFAttachTypeXDPCPUMap BPFAttachTypeSKLookup BPFAttachTypeXDP BPFAttachTypeSKSKBVerdict BPFAttachTypeSKReusePortSelect BPFAttachTypeSKReusePortSelectorMigrate BPFAttachTypePerfEvent BPFAttachTypeTraceKprobeMulti )
type BPFCgroupIterOrder ¶
type BPFCgroupIterOrder uint32
const ( BPFIterOrderUnspec BPFCgroupIterOrder = iota BPFIterSelfOnly BPFIterDescendantsPre BPFIterDescendantsPost BPFIterAncestorsUp )
type BPFLink ¶
type BPFLink struct {
// contains filtered or unexported fields
}
func (*BPFLink) DestroyLegacy ¶
func (*BPFLink) FileDescriptor ¶
func (*BPFLink) Reader ¶
func (l *BPFLink) Reader() (*BPFLinkReader, error)
type BPFLinkLegacy ¶
type BPFLinkLegacy struct {
// contains filtered or unexported fields
}
type BPFLinkReader ¶
type BPFLinkReader struct {
// contains filtered or unexported fields
}
BPFLinkReader read data from a BPF link
func (*BPFLinkReader) Close ¶
func (i *BPFLinkReader) Close() error
type BPFMap ¶
type BPFMap struct {
// contains filtered or unexported fields
}
BPFMap is a wrapper around a libbpf bpf_map.
func (*BPFMap) BTFKeyTypeID ¶
func (*BPFMap) BTFValueTypeID ¶
func (*BPFMap) DeleteKey ¶
DeleteKey removes a specified key and its associated value from the BPFMap.
This function accepts an unsafe.Pointer that references the key to be removed from the map. All basic types, and structs are supported as keys.
NOTE: Slices and arrays are supported, but references should point to the first element in the slice or array, instead of the slice or array itself. This is crucial to prevent undefined behavior.
func (*BPFMap) DeleteKeyBatch ¶
DeleteKeyBatch allows for batch deletion of multiple elements in the map.
`count` number of keys will be deleted from the map. Passing an argument that greater than the number of keys in the map will cause the function to delete fewer keys than requested. See the comment in `BPFMapLow.GetValueBatch` for more context.
func (*BPFMap) FileDescriptor ¶
func (*BPFMap) GetMaxEntries
deprecated
func (*BPFMap) GetPinPath
deprecated
func (*BPFMap) GetValue ¶
GetValue retrieves the value associated with a given key in the BPFMap.
This function accepts an unsafe.Pointer to the key value to be searched in the map, and it returns the corresponding value as a slice of bytes. All basic types, and structs are supported as keys.
NOTE: Slices and arrays are supported, but references should point to the first element in the slice or array, instead of the slice or array itself. This is crucial to prevent undefined behavior.
For example:
key := []byte{'a', 'b', 'c'} keyPtr := unsafe.Pointer(&key[0]) bpfmap.GetValue(keyPtr)
func (*BPFMap) GetValueAndDeleteBatch ¶
func (m *BPFMap) GetValueAndDeleteBatch(keys, startKey, nextKey unsafe.Pointer, count uint32) ([][]byte, error)
GetValueAndDeleteBatch allows for batch lookup and deletion of elements where each element is deleted after being retrieved from the map.
The first argument, keys, is a pointer to an array or slice of keys which will be populated with the keys returned from this operation. It returns the associated values as a slice of slices of bytes.
This API allows for batch lookups and deletion of multiple keys, potentially in steps over multiple iterations. For example, you provide the last key seen (or nil) for the startKey, and the first key to start the next iteration with in nextKey. Once the first iteration is complete you can provide the last key seen in the previous iteration as the startKey for the next iteration and repeat until nextKey is nil.
The last argument, count, is the number of keys to lookup and delete. The kernel will update it with the count of the elements that were retrieved and deleted.
The API can return partial results even though an -1 is returned. In this case, errno will be set to `ENOENT` and the values slice and count will be filled in with the elements that were read. See the comment in `BPFMapLow.GetValueBatch` for more context.
func (*BPFMap) GetValueBatch ¶
func (m *BPFMap) GetValueBatch(keys unsafe.Pointer, startKey, nextKey unsafe.Pointer, count uint32) ([][]byte, error)
GetValueBatch allows for batch lookups of multiple keys from the map.
The first argument, keys, is a pointer to an array or slice of keys which will be populated with the keys returned from this operation. It returns the associated values as a slice of slices of bytes.
This API allows for batch lookups of multiple keys, potentially in steps over multiple iterations. For example, you provide the last key seen (or nil) for the startKey, and the first key to start the next iteration with in nextKey. Once the first iteration is complete you can provide the last key seen in the previous iteration as the startKey for the next iteration and repeat until nextKey is nil.
The last argument, count, is the number of keys to lookup. The kernel will update it with the count of the elements that were retrieved.
The API can return partial results even though an -1 is returned. In this case, errno will be set to `ENOENT` and the values slice and count will be filled in with the elements that were read. See the comment in `BPFMapLow.GetValueBatch` for more context.
func (*BPFMap) GetValueFlags ¶
func (*BPFMap) InitialValue ¶
func (*BPFMap) InnerMapInfo ¶
func (m *BPFMap) InnerMapInfo() (*BPFMapInfo, error)
InnerMap retrieves the inner map prototype information associated with a BPFMap that represents a map of maps.
NOTE: It must be called before the module is loaded, since it is a prototype destroyed right after the outer map is created.
Reference: https://lore.kernel.org/bpf/20200429002739.48006-4-andriin@fb.com/
func (*BPFMap) Iterator ¶
func (m *BPFMap) Iterator() *BPFMapIterator
func (*BPFMap) MaxEntries ¶
MaxEntries returns the capacity of the BPFMap.
For ring and perf buffer types, this returns the capacity in bytes.
func (*BPFMap) ReuseFD ¶
ReuseFD associates the BPFMap instance with the provided map file descriptor.
This function is useful for reusing a map that was previously created by a different process. By passing the file descriptor of the existing map, the current BPFMap instance becomes linked to that map.
NOTE: The function closes the current file descriptor associated with the BPFMap instance and replaces it with a duplicated descriptor pointing to the given fd. As a result, the instance original file descriptor becomes invalid, and all associated information is overwritten.
func (*BPFMap) SetInnerMap ¶
SetInnerMap configures the inner map prototype for a BPFMap that represents a map of maps.
This function accepts the file descriptor of another map, which will serve as a prototype.
NOTE: It must be called before the module is loaded.
func (*BPFMap) SetMaxEntries ¶
SetMaxEntries sets the capacity of the BPFMap to the given maxEntries value.
This function must be called after BPF module initialization and before loading the module with BPFLoadObject, enabling customization of the map capacity.
For ring and perf buffer types, maxEntries represents the capacity in bytes.
func (*BPFMap) SetPinPath ¶
func (*BPFMap) SetType ¶
SetType assigns a specific type to a BPFMap instance that is not yet associated with a file descriptor.
func (*BPFMap) SetValueSize ¶
SetValueSize sets the value size to a BPFMap instance that is not yet associated with a file descriptor.
func (*BPFMap) Update ¶
Update inserts or updates value in BPFMap that corresponds to a given key.
This function accepts unsafe.Pointer references to both the key and value. All basic types, and structs are supported.
NOTE: Slices and arrays are supported, but references should point to the first element in the slice or array, instead of the slice or array itself. This is crucial to prevent undefined behavior.
For example:
key := 1 value := []byte{'a', 'b', 'c'} keyPtr := unsafe.Pointer(&key) valuePtr := unsafe.Pointer(&value[0]) bpfmap.Update(keyPtr, valuePtr)
func (*BPFMap) UpdateBatch ¶
UpdateBatch updates multiple elements in the map by specified keys and their corresponding values.
The first argument, keys, is a pointer to an array or slice of keys which will be updated using the second argument, values. It returns the associated error if any occurred.
The last argument, count, is the number of keys to update. Passing an argument that greater than the number of keys in the map will cause the function to return a syscall.EPERM as an error.
func (*BPFMap) UpdateValueFlags ¶
type BPFMapCreateOpts ¶
type BPFMapCreateOpts struct { BTFFD uint32 BTFKeyTypeID uint32 BTFValueTypeID uint32 BTFVmlinuxValueTypeID uint32 InnerMapFD uint32 MapFlags uint32 MapExtra uint64 NumaNode uint32 MapIfIndex uint32 }
BPFMapCreateOpts mirrors the C structure bpf_map_create_opts.
type BPFMapInfo ¶
type BPFMapInfo struct { Type MapType ID uint32 KeySize uint32 ValueSize uint32 MaxEntries uint32 MapFlags uint32 Name string IfIndex uint32 BTFVmlinuxValueTypeID uint32 NetnsDev uint64 NetnsIno uint64 BTFID uint32 BTFKeyTypeID uint32 BTFValueTypeID uint32 MapExtra uint64 }
BPFMapInfo mirrors the C structure bpf_map_info.
func GetMapInfoByFD ¶
func GetMapInfoByFD(fd int) (*BPFMapInfo, error)
GetMapInfoByFD returns the BPFMapInfo for the map with the given file descriptor.
type BPFMapIterator ¶
type BPFMapIterator struct {
// contains filtered or unexported fields
}
BPFMapIterator iterates over keys in a BPF map.
func (*BPFMapIterator) Err ¶
func (it *BPFMapIterator) Err() error
Err returns the last error that ocurred while table.Iter or iter.Next.
func (*BPFMapIterator) Key ¶
func (it *BPFMapIterator) Key() []byte
Key returns the current key value of the iterator, if the most recent call to Next returned true. The slice is valid only until the next call to Next.
func (*BPFMapIterator) Next ¶
func (it *BPFMapIterator) Next() bool
Next advances the iterator to the next key in the map.
type BPFMapLow ¶
type BPFMapLow struct {
// contains filtered or unexported fields
}
BPFMapLow provides a low-level interface to BPF maps. Its methods follow the BPFMap naming convention.
func CreateMap ¶
func CreateMap(mapType MapType, mapName string, keySize, valueSize, maxEntries int, opts *BPFMapCreateOpts) (*BPFMapLow, error)
CreateMap creates a new BPF map with the given parameters.
func GetMapByID ¶
GetMapByID returns a BPFMapLow instance for the map with the given ID.
func (*BPFMapLow) DeleteKeyBatch ¶
func (*BPFMapLow) FileDescriptor ¶
func (*BPFMapLow) GetValueAndDeleteBatch ¶
func (*BPFMapLow) GetValueBatch ¶
func (*BPFMapLow) GetValueFlags ¶
func (*BPFMapLow) Iterator ¶
func (m *BPFMapLow) Iterator() *BPFMapIterator
func (*BPFMapLow) MaxEntries ¶
func (*BPFMapLow) UpdateBatch ¶
func (*BPFMapLow) UpdateValueFlags ¶
type BPFObjectIterator ¶
type BPFObjectIterator struct {
// contains filtered or unexported fields
}
BPFObjectProgramIterator iterates over maps in a BPF object
func (*BPFObjectIterator) NextMap ¶
func (it *BPFObjectIterator) NextMap() *BPFMap
func (*BPFObjectIterator) NextProgram ¶
func (it *BPFObjectIterator) NextProgram() *BPFProg
type BPFProg ¶
type BPFProg struct {
// contains filtered or unexported fields
}
func (*BPFProg) AttachCgroup ¶
AttachCgroup attaches the BPFProg to a cgroup described by given fd.
func (*BPFProg) AttachCgroupLegacy ¶
func (p *BPFProg) AttachCgroupLegacy(cgroupV2DirPath string, attachType BPFAttachType) (*BPFLink, error)
AttachCgroupLegacy attaches the BPFProg to a cgroup described by the given fd. It first tries to use the most recent attachment method and, if that does not work, instead of failing, it tries the legacy way: to attach the cgroup eBPF program without previously creating a link. This allows attaching cgroup eBPF ingress/egress in older kernels. Note: the first attempt error message is filtered out inside libbpf_print_fn() as it is actually a feature probe attempt as well.
Related kernel commit: https://github.com/torvalds/linux/commit/af6eea57437a
func (*BPFProg) AttachGeneric ¶
AttachGeneric is used to attach the BPF program using autodetection for the attach target. You can specify the destination in BPF code via the SEC() such as `SEC("fentry/some_kernel_func")`
func (*BPFProg) AttachGenericFD ¶
func (p *BPFProg) AttachGenericFD(targetFd int, attachType BPFAttachType, flags AttachFlag) error
AttachGenericFD attaches the BPFProgram to a targetFd at the specified attachType hook.
func (*BPFProg) AttachKprobe ¶
this API should be used for kernels > 4.17
func (*BPFProg) AttachKretprobe ¶
this API should be used for kernels > 4.17
func (*BPFProg) AttachNetns ¶
func (*BPFProg) AttachRawTracepoint ¶
func (*BPFProg) AttachTracepoint ¶
func (*BPFProg) AttachURetprobe ¶
AttachURetprobe attaches the BPFProgram to exit of the symbol in the library or binary at 'path' which can be relative or absolute. A pid can be provided to attach to, or -1 can be specified to attach to all processes
func (*BPFProg) AttachUprobe ¶
AttachUprobe attaches the BPFProgram to entry of the symbol in the library or binary at 'path' which can be relative or absolute. A pid can be provided to attach to, or -1 can be specified to attach to all processes
func (*BPFProg) DetachCgroupLegacy ¶
func (p *BPFProg) DetachCgroupLegacy(cgroupV2DirPath string, attachType BPFAttachType) error
DetachCgroupLegacy detaches the BPFProg from a cgroup described by the given fd. This is needed because in legacy attachment there is no BPFLink, just a fake one (kernel did not support it, nor libbpf). This function should be called by the (*BPFLink)->Destroy() function, since BPFLink is emulated (so users don´t need to distinguish between regular and legacy cgroup detachments).
func (*BPFProg) DetachGenericFD ¶
func (p *BPFProg) DetachGenericFD(targetFd int, attachType BPFAttachType) error
DetachGenericFD detaches the BPFProgram associated with the targetFd at the hook specified by attachType.
func (*BPFProg) FileDescriptor ¶
func (*BPFProg) GetPinPath
deprecated
func (*BPFProg) GetSectionName
deprecated
func (*BPFProg) GetType ¶
func (p *BPFProg) GetType() BPFProgType
func (*BPFProg) SectionName ¶
func (*BPFProg) SetAttachTarget ¶
SetAttachTarget can be used to specify the program and/or function to attach the BPF program to. To attach to a kernel function specify attachProgFD as 0
func (*BPFProg) SetAttachType ¶
func (p *BPFProg) SetAttachType(attachType BPFAttachType)
func (*BPFProg) SetAutoload ¶
func (*BPFProg) SetProgramType ¶
func (p *BPFProg) SetProgramType(progType BPFProgType)
type BPFProgType ¶
type BPFProgType uint32
BPFProgType is an enum as defined in https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/bpf.h
const ( BPFProgTypeUnspec BPFProgType = iota BPFProgTypeSocketFilter BPFProgTypeKprobe BPFProgTypeSchedCls BPFProgTypeSchedAct BPFProgTypeTracepoint BPFProgTypeXdp BPFProgTypePerfEvent BPFProgTypeCgroupSkb BPFProgTypeCgroupSock BPFProgTypeLwtIn BPFProgTypeLwtOut BPFProgTypeLwtXmit BPFProgTypeSockOps BPFProgTypeSkSkb BPFProgTypeCgroupDevice BPFProgTypeSkMsg BPFProgTypeRawTracepoint BPFProgTypeCgroupSockAddr BPFProgTypeLwtSeg6Local BPFProgTypeLircMode2 BPFProgTypeSkReuseport BPFProgTypeFlowDissector BPFProgTypeCgroupSysctl BPFProgTypeRawTracepointWritable BPFProgTypeCgroupSockopt BPFProgTypeTracing BPFProgTypeStructOps BPFProgTypeExt BPFProgTypeLsm BPFProgTypeSkLookup BPFProgTypeSyscall )
func (BPFProgType) String ¶
func (b BPFProgType) String() (str string)
func (BPFProgType) Value ¶
func (b BPFProgType) Value() uint64
type Callbacks ¶
type Callbacks struct { Log func(level int, msg string) LogFilters []func(libLevel int, msg string) bool }
Callbacks stores the callbacks to be used by libbpfgo
type LibbpfStrictMode ¶
type LibbpfStrictMode uint32
LibbpfStrictMode is an enum as defined in https://github.com/libbpf/libbpf/blob/2cd2d03f63242c048a896179398c68d2dbefe3d6/src/libbpf_legacy.h#L23
const ( LibbpfStrictModeAll LibbpfStrictMode = C.LIBBPF_STRICT_ALL LibbpfStrictModeNone LibbpfStrictMode = C.LIBBPF_STRICT_NONE LibbpfStrictModeCleanPtrs LibbpfStrictMode = C.LIBBPF_STRICT_CLEAN_PTRS LibbpfStrictModeDirectErrs LibbpfStrictMode = C.LIBBPF_STRICT_DIRECT_ERRS LibbpfStrictModeSecName LibbpfStrictMode = C.LIBBPF_STRICT_SEC_NAME LibbpfStrictModeNoObjectList LibbpfStrictMode = C.LIBBPF_STRICT_NO_OBJECT_LIST LibbpfStrictModeAutoRlimitMemlock LibbpfStrictMode = C.LIBBPF_STRICT_AUTO_RLIMIT_MEMLOCK LibbpfStrictModeMapDefinitions LibbpfStrictMode = C.LIBBPF_STRICT_MAP_DEFINITIONS )
func (LibbpfStrictMode) String ¶
func (b LibbpfStrictMode) String() (str string)
type MapType ¶
type MapType uint32
const ( MapTypeUnspec MapType = iota MapTypeHash MapTypeArray MapTypeProgArray MapTypePerfEventArray MapTypePerCPUHash MapTypePerCPUArray MapTypeStackTrace MapTypeCgroupArray MapTypeLRUHash MapTypeLRUPerCPUHash MapTypeLPMTrie MapTypeArrayOfMaps MapTypeHashOfMaps MapTypeDevMap MapTypeSockMap MapTypeCPUMap MapTypeXSKMap MapTypeSockHash MapTypeCgroupStorage MapTypeReusePortSockArray MapTypePerCPUCgroupStorage MapTypeQueue MapTypeStack MapTypeSKStorage MapTypeDevmapHash MapTypeStructOps MapTypeRingbuf MapTypeInodeStorage MapTypeTaskStorage MapTypeBloomFilter )
type Module ¶
type Module struct {
// contains filtered or unexported fields
}
func NewModuleFromBuffer ¶
func NewModuleFromBufferArgs ¶
func NewModuleFromBufferArgs(args NewModuleArgs) (*Module, error)
func NewModuleFromFile ¶
func NewModuleFromFileArgs ¶
func NewModuleFromFileArgs(args NewModuleArgs) (*Module, error)
func (*Module) BPFLoadObject ¶
func (*Module) InitGlobalVariable ¶
InitGlobalVariable sets global variables (defined in .data or .rodata) in bpf code. It must be called before the BPF object is loaded.
func (*Module) InitPerfBuf ¶
func (*Module) InitRingBuf ¶
func (m *Module) InitRingBuf(mapName string, eventsChan chan []byte) (*RingBuffer, error)
func (*Module) Iterator ¶
func (m *Module) Iterator() *BPFObjectIterator
func (*Module) TcHookInit ¶
type NewModuleArgs ¶
type PerfBuffer ¶
type PerfBuffer struct {
// contains filtered or unexported fields
}
func (*PerfBuffer) Close ¶
func (pb *PerfBuffer) Close()
func (*PerfBuffer) Poll ¶
func (pb *PerfBuffer) Poll(timeout int)
Poll will wait until timeout in milliseconds to gather data from the perf buffer.
func (*PerfBuffer) Start
deprecated
func (pb *PerfBuffer) Start()
Deprecated: use PerfBuffer.Poll() instead.
func (*PerfBuffer) Stop ¶
func (pb *PerfBuffer) Stop()
type RingBuffer ¶
type RingBuffer struct {
// contains filtered or unexported fields
}
func (*RingBuffer) Close ¶
func (rb *RingBuffer) Close()
func (*RingBuffer) Poll ¶
func (rb *RingBuffer) Poll(timeout int)
Poll will wait until timeout in milliseconds to gather data from the ring buffer.
func (*RingBuffer) Start
deprecated
func (rb *RingBuffer) Start()
Deprecated: use RingBuffer.Poll() instead.
func (*RingBuffer) Stop ¶
func (rb *RingBuffer) Stop()
type TcAttachPoint ¶
type TcAttachPoint uint32
const ( BPFTcIngress TcAttachPoint = C.BPF_TC_INGRESS BPFTcEgress TcAttachPoint = C.BPF_TC_EGRESS BPFTcIngressEgress TcAttachPoint = C.BPF_TC_INGRESS | C.BPF_TC_EGRESS BPFTcCustom TcAttachPoint = C.BPF_TC_CUSTOM )
type TcHook ¶
type TcHook struct {
// contains filtered or unexported fields
}
func (*TcHook) GetInterfaceIndex ¶
func (*TcHook) SetAttachPoint ¶
func (hook *TcHook) SetAttachPoint(attachPoint TcAttachPoint)
func (*TcHook) SetInterfaceByIndex ¶
func (*TcHook) SetInterfaceByName ¶
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
helpers
module
|
|
selftest
|
|
attachgenericfd
Module
|
|
global-variable
Module
|
|
iter
Module
|
|
iterators
Module
|
|
log-callbacks
Module
|
|
map-pin-info
Module
|
|
map-update
Module
|
|
module-attach-detach
Module
|
|
perfbuffers
Module
|
|
tracing
Module
|
|
tracing-by-offset
Module
|
|
uprobe
Module
|