From 13798dc9682439082a1dc92cb5f5e80f77f6631d Mon Sep 17 00:00:00 2001 From: grantseltzer Date: Wed, 6 Apr 2022 16:22:33 -0400 Subject: [PATCH] Add APIs for setting attach targets so they're not just implied by SEC and name labels Signed-off-by: grantseltzer --- libbpfgo.go | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/libbpfgo.go b/libbpfgo.go index 0dd90917..4055cd01 100644 --- a/libbpfgo.go +++ b/libbpfgo.go @@ -928,7 +928,7 @@ func (p *BPFProg) GetPinPath() string { type BPFProgType uint32 const ( - BPFProgTypeUnspec uint32 = iota + BPFProgTypeUnspec BPFProgType = iota BPFProgTypeSocketFilter BPFProgTypeKprobe BPFProgTypeSchedCls @@ -962,6 +962,54 @@ const ( BPFProgTypeSyscall ) +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 +) + func (p *BPFProg) GetType() uint32 { return C.bpf_program__get_type(p.prog) } @@ -997,7 +1045,7 @@ func (p *BPFProg) AttachGeneric() (*BPFLink, error) { return bpfLink, nil } -func (p *BPFProg) SetAttachType(attachProgFD int, attachFuncName string) error { +func (p *BPFProg) SetAttachTarget(attachProgFD int, attachFuncName string) error { cs := C.CString(attachFuncName) errC := C.bpf_program__set_attach_target(p.prog, C.int(attachProgFD), cs) C.free(unsafe.Pointer(cs)) @@ -1007,6 +1055,14 @@ func (p *BPFProg) SetAttachType(attachProgFD int, attachFuncName string) error { return nil } +func (p *BPFProg) SetProgramType(progType BPFProgType) { + C.bpf_program__set_type(p.prog, C.enum_bpf_prog_type(int(progType))) +} + +func (p *BPFProg) SetAttachType(attachType BPFAttachType) { + C.bpf_program__set_expected_attach_type(p.prog, C.enum_bpf_attach_type(int(attachType))) +} + func (p *BPFProg) AttachTracepoint(category, name string) (*BPFLink, error) { tpCategory := C.CString(category) tpName := C.CString(name)