diff --git a/go.mod b/go.mod index 3247603..1fd821a 100644 --- a/go.mod +++ b/go.mod @@ -2,10 +2,14 @@ module github.com/aquasecurity/libbpfgo go 1.21 -require github.com/stretchr/testify v1.9.0 +require ( + github.com/stretchr/testify v1.9.0 + kernel.org/pub/linux/libs/security/libcap/cap v1.2.70 +) require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect + kernel.org/pub/linux/libs/security/libcap/psx v1.2.70 // indirect ) diff --git a/go.sum b/go.sum index 60ce688..d6f4da4 100644 --- a/go.sum +++ b/go.sum @@ -8,3 +8,7 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +kernel.org/pub/linux/libs/security/libcap/cap v1.2.70 h1:QnLPkuDWWbD5C+3DUA2IUXai5TK6w2zff+MAGccqdsw= +kernel.org/pub/linux/libs/security/libcap/cap v1.2.70/go.mod h1:/iBwcj9nbLejQitYvUm9caurITQ6WyNHibJk6Q9fiS4= +kernel.org/pub/linux/libs/security/libcap/psx v1.2.70 h1:HsB2G/rEQiYyo1bGoQqHZ/Bvd6x1rERQTNdPr1FyWjI= +kernel.org/pub/linux/libs/security/libcap/psx v1.2.70/go.mod h1:+l6Ee2F59XiJ2I6WR5ObpC1utCQJZ/VLsEbQCD8RG24= diff --git a/helpers_test.go b/helpers_test.go index 311e2e4..9181126 100644 --- a/helpers_test.go +++ b/helpers_test.go @@ -1,56 +1,179 @@ package libbpfgo import ( + "errors" + "fmt" + "syscall" "testing" - "github.com/aquasecurity/libbpfgo/helpers" + "kernel.org/pub/linux/libs/security/libcap/cap" ) +// Reset only effective capabilites +func resetEffectiveCapabilities() error { + // current capability + existing := cap.GetProc() + + // Clear all effective capabilites + if err := existing.ClearFlag(cap.Effective); err != nil { + return fmt.Errorf("error cleaning effective capabilites %w", err) + } + + // set updated capabilitis to current process + if err := existing.SetProc(); err != nil { + return fmt.Errorf("error during update capabilites %w", err) + } + + return nil +} + +// Enforce effective capabilites only +func enforceEffectiveCapabilities(newCap []string) error { + existing := cap.GetProc() + + // create a new empty capabilities + enforce := cap.NewSet() + + // copy all/only permitted flags to new cap + enforce.FillFlag(cap.Permitted, existing, cap.Permitted) + + values := []cap.Value{} + + for _, name := range newCap { + value, err := cap.FromName(name) + if err != nil { + return fmt.Errorf("error getting capability %q: %w", name, err) + } + + values = append(values, value) + } + + // only set the given effetive capabilities + if err := enforce.SetFlag(cap.Effective, true, values...); err != nil { + return fmt.Errorf("error setting effective capabilities: %w", err) + } + + if err := enforce.SetProc(); err != nil { + return fmt.Errorf("failed to drop capabilities: %q -> %q: %w", existing, enforce, err) + } + + return nil +} + func TestFuncSupportbyType(t *testing.T) { tt := []struct { - progType BPFProgType - funcId helpers.BPFFunc - supported bool + progType BPFProgType + funcId BPFFunc + supported bool + capability []string + errMsg error }{ + // func available but not enough permission (permission denied) + { + progType: BPFProgTypeKprobe, + funcId: BPFFuncGetCurrentUidGid, + supported: false, + capability: []string{}, + errMsg: syscall.EPERM, + }, + // func available and enough permission + { + progType: BPFProgTypeKprobe, + funcId: BPFFuncGetCurrentUidGid, + supported: true, + capability: []string{"cap_bpf", "cap_perfmon"}, + errMsg: nil, + }, + // func unavailable and enough permission + // When the function is unavailable, BPF returns "Invalid Argument". + // Therefore, ignore the error and proceed with validation. + { + progType: BPFProgTypeSkLookup, + funcId: BPFFuncGetCurrentCgroupId, + supported: false, + capability: []string{"cap_sys_admin"}, + errMsg: syscall.EINVAL, + }, { - progType: BPFProgTypeKprobe, - funcId: helpers.BPFFuncMapLookupElem, - supported: true, + progType: BPFProgTypeSkLookup, + funcId: BPFFuncGetCurrentCgroupId, + supported: false, + capability: []string{}, + errMsg: syscall.EPERM, }, { - progType: BPFProgTypeKprobe, - funcId: helpers.BPFFuncLoop, - supported: true, + progType: BPFProgTypeKprobe, + funcId: BPFFuncKtimeGetNs, + supported: true, + capability: []string{"cap_bpf", "cap_perfmon"}, + errMsg: nil, }, { - progType: BPFProgTypeKprobe, - funcId: helpers.BPFFuncKtimeGetNs, - supported: true, + progType: BPFProgTypeKprobe, + funcId: BPFFuncKtimeGetNs, + supported: true, + capability: []string{"cap_sys_admin"}, + errMsg: nil, }, { - progType: BPFProgTypeKprobe, - funcId: helpers.BPFFuncSysBpf, - supported: false, + progType: BPFProgTypeKprobe, + funcId: BPFFuncSysBpf, + supported: false, + capability: []string{"cap_bpf", "cap_perfmon"}, + errMsg: syscall.EINVAL, }, { - progType: BPFProgTypeLsm, - funcId: helpers.BPFFuncGetCurrentCgroupId, - supported: false, + progType: BPFProgTypeSyscall, + funcId: BPFFuncGetCgroupClassid, + supported: false, + capability: []string{"cap_bpf"}, + errMsg: syscall.EINVAL, }, + // Not able to probe helpers for some types (even with permission) + // https://github.com/libbpf/libbpf/blob/c1a6c770c46c6e78ad6755bf596c23a4e6f6b216/src/libbpf_probes.c#L430-L441 { - progType: BPFProgTypeSkLookup, - funcId: helpers.BPFFuncGetCurrentCgroupId, - supported: true, + progType: BPFProgTypeLsm, + funcId: BPFFuncGetCurrentCgroupId, + supported: false, + capability: []string{"cap_bpf", "cap_perfmon"}, + errMsg: syscall.EOPNOTSUPP, }, { - progType: BPFProgTypeKprobe, - funcId: helpers.BPFFuncSockMapUpdate, - supported: false, + progType: BPFProgTypeLsm, + funcId: BPFFuncGetCurrentCgroupId, + supported: false, + capability: []string{}, + errMsg: syscall.EOPNOTSUPP, + }, + { + progType: BPFProgTypeKprobe, + funcId: BPFFuncSockMapUpdate, + supported: false, + capability: []string{"cap_sys_admin"}, + errMsg: syscall.EINVAL, }, } for _, tc := range tt { - support, _ := BPFHelperIsSupported(tc.progType, tc.funcId) + // reset all current effective capabilities + resetEffectiveCapabilities() + + if tc.capability != nil { + enforceEffectiveCapabilities(tc.capability) + } + + support, err := BPFHelperIsSupported(tc.progType, tc.funcId) + + if tc.errMsg == nil { + if err != nil { + t.Errorf("expected no error, got %v", err) + } + } else { + if !errors.Is(err, tc.errMsg) { + t.Errorf("expected error %v, got %v", tc.errMsg, err) + } + } + // This may fail if the bpf helper support for a specific program changes in future. if support != tc.supported { t.Errorf("expected %v, got %v", tc.supported, support) diff --git a/libbpfgo.go b/libbpfgo.go index ba6a82f..74da4ae 100644 --- a/libbpfgo.go +++ b/libbpfgo.go @@ -9,8 +9,6 @@ import "C" import ( "fmt" "syscall" - - "github.com/aquasecurity/libbpfgo/helpers" ) // @@ -98,10 +96,18 @@ func BPFMapTypeIsSupported(mapType MapType) (bool, error) { return supportedC == 1, nil } -func BPFHelperIsSupported(progType BPFProgType, funcId helpers.BPFFunc) (bool, error) { - supportedC := C.libbpf_probe_bpf_helper(C.enum_bpf_prog_type(int(progType)), C.enum_bpf_func_id(int(funcId)), nil) +// Probe bpf helper func for a given program type +// Note: BPF returns "Invalid Argument" when helper function is unavailable, just ignore the error. +func BPFHelperIsSupported(progType BPFProgType, funcId BPFFunc) (bool, error) { + supportedC, errno := C.libbpf_probe_bpf_helper(C.enum_bpf_prog_type(int(progType)), C.enum_bpf_func_id(int(funcId)), nil) + + if errno != nil { + return false, fmt.Errorf("operation failed for function `%s` with program type `%s`: %w", funcId, progType, errno) + } + + // helper not supported if supportedC < 0 { - return false, syscall.Errno(-supportedC) + return false, fmt.Errorf("operation failed for function `%s` with program type `%s`: %w", funcId, progType, syscall.Errno(-supportedC)) } return supportedC == 1, nil diff --git a/prog-common.go b/prog-common.go index 0e6b80c..ba80d1a 100644 --- a/prog-common.go +++ b/prog-common.go @@ -6,6 +6,665 @@ package libbpfgo */ import "C" +// BPFFunc is an enum as defined in https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/bpf.h +type BPFFunc uint32 + +const ( + BPFFuncUnspec BPFFunc = iota + BPFFuncMapLookupElem + BPFFuncMapUpdateElem + BPFFuncMapDeleteElem + BPFFuncProbeRead + BPFFuncKtimeGetNs + BPFFuncTracePrintk + BPFFuncGetPrandomU32 + BPFFuncGetSmpProcessorId + BPFFuncSkbStoreBytes + BPFFuncL3CsumReplace + BPFFuncL4CsumReplace + BPFFuncTailCall + BPFFuncCloneRedirect + BPFFuncGetCurrentPidTgid + BPFFuncGetCurrentUidGid + BPFFuncGetCurrentComm + BPFFuncGetCgroupClassid + BPFFuncSkbVlanPush + BPFFuncSkbVlanPop + BPFFuncSkbGetTunnelKey + BPFFuncSkbSetTunnelKey + BPFFuncPerfEventRead + BPFFuncRedirect + BPFFuncGetRouteRealm + BPFFuncPerfEventOutput + BPFFuncSkbLoadBytes + BPFFuncGetStackid + BPFFuncCsumDiff + BPFFuncSkbGetTunnelOpt + BPFFuncSkbSetTunnelOpt + BPFFuncSkbChangeProto + BPFFuncSkbChangeType + BPFFuncSkbUnderCgroup + BPFFuncGetHashRecalc + BPFFuncGetCurrentTask + BPFFuncProbeWriteUser + BPFFuncCurrentTaskUnderCgroup + BPFFuncSkbChangeTail + BPFFuncSkbPullData + BPFFuncCsumUpdate + BPFFuncSetHashInvalid + BPFFuncGetNumaNodeId + BPFFuncSkbChangeHead + BPFFuncXdpAdjustHead + BPFFuncProbeReadStr + BPFFuncGetSocketCookie + BPFFuncGetSocketUid + BPFFuncSetHash + BPFFuncSetsockopt + BPFFuncSkbAdjustRoom + BPFFuncRedirectMap + BPFFuncSkRedirectMap + BPFFuncSockMapUpdate + BPFFuncXdpAdjustMeta + BPFFuncPerfEventReadValue + BPFFuncPerfProgReadValue + BPFFuncGetsockopt + BPFFuncOverrideReturn + BPFFuncSockOpsCbFlagsSet + BPFFuncMsgRedirectMap + BPFFuncMsgApplyBytes + BPFFuncMsgCorkBytes + BPFFuncMsgPullData + BPFFuncBind + BPFFuncXdpAdjustTail + BPFFuncSkbGetXfrmState + BPFFuncGetStack + BPFFuncSkbLoadBytesRelative + BPFFuncFibLookup + BPFFuncSockHashUpdate + BPFFuncMsgRedirectHash + BPFFuncSkRedirectHash + BPFFuncLwtPushEncap + BPFFuncLwtSeg6StoreBytes + BPFFuncLwtSeg6AdjustSrh + BPFFuncLwtSeg6Action + BPFFuncRcRepeat + BPFFuncRcKeydown + BPFFuncSkbCgroupId + BPFFuncGetCurrentCgroupId + BPFFuncGetLocalStorage + BPFFuncSkSelectReuseport + BPFFuncSkbAncestorCgroupId + BPFFuncSkLookupTcp + BPFFuncSkLookupUdp + BPFFuncSkRelease + BPFFuncMapPushElem + BPFFuncMapPopElem + BPFFuncMapPeekElem + BPFFuncMsgPushData + BPFFuncMsgPopData + BPFFuncRcPointerRel + BPFFuncSpinLock + BPFFuncSpinUnlock + BPFFuncSkFullsock + BPFFuncTcpSock + BPFFuncSkbEcnSetCe + BPFFuncGetListenerSock + BPFFuncSkcLookupTcp + BPFFuncTcpCheckSyncookie + BPFFuncSysctlGetName + BPFFuncSysctlGetCurrentValue + BPFFuncSysctlGetNewValue + BPFFuncSysctlSetNewValue + BPFFuncStrtol + BPFFuncStrtoul + BPFFuncSkStorageGet + BPFFuncSkStorageDelete + BPFFuncSendSignal + BPFFuncTcpGenSyncookie + BPFFuncSkbOutput + BPFFuncProbeReadUser + BPFFuncProbeReadKernel + BPFFuncProbeReadUserStr + BPFFuncProbeReadKernelStr + BPFFuncTcpSendAck + BPFFuncSendSignalThread + BPFFuncJiffies64 + BPFFuncReadBranchRecords + BPFFuncGetNsCurrentPidTgid + BPFFuncXdpOutput + BPFFuncGetNetnsCookie + BPFFuncGetCurrentAncestorCgroupId + BPFFuncSkAssign + BPFFuncKtimeGetBootNs + BPFFuncSeqPrintf + BPFFuncSeqWrite + BPFFuncSkCgroupId + BPFFuncSkAncestorCgroupId + BPFFuncRingbufOutput + BPFFuncRingbufReserve + BPFFuncRingbufSubmit + BPFFuncRingbufDiscard + BPFFuncRingbufQuery + BPFFuncCsumLevel + BPFFuncSkcToTcp6Sock + BPFFuncSkcToTcpSock + BPFFuncSkcToTcpTimewaitSock + BPFFuncSkcToTcpRequestSock + BPFFuncSkcToUdp6Sock + BPFFuncGetTaskStack + BPFFuncLoadHdrOpt + BPFFuncStoreHdrOpt + BPFFuncReserveHdrOpt + BPFFuncInodeStorageGet + BPFFuncInodeStorageDelete + BPFFuncDPath + BPFFuncCopyFromUser + BPFFuncSnprintfBtf + BPFFuncSeqPrintfBtf + BPFFuncSkbCgroupClassid + BPFFuncRedirectNeigh + BPFFuncPerCpuPtr + BPFFuncThisCpuPtr + BPFFuncRedirectPeer + BPFFuncTaskStorageGet + BPFFuncTaskStorageDelete + BPFFuncGetCurrentTaskBtf + BPFFuncBprmOptsSet + BPFFuncKtimeGetCoarseNs + BPFFuncImaInodeHash + BPFFuncSockFromFile + BPFFuncCheckMtu + BPFFuncForEachMapElem + BPFFuncSnprintf + BPFFuncSysBpf + BPFFuncBtfFindByNameKind + BPFFuncSysClose + BPFFuncTimerInit + BPFFuncTimerSetCallback + BPFFuncTimerStart + BPFFuncTimerCancel + BPFFuncGetFuncIp + BPFFuncGetAttachCookie + BPFFuncTaskPtRegs + BPFFuncGetBranchSnapshot + BPFFuncTraceVprintk + BPFFuncSkcToUnixSock + BPFFuncKallsymsLookupName + BPFFuncFindVma + BPFFuncLoop + BPFFuncStrncmp + BPFFuncGetFuncArg + BPFFuncGetFuncRet + BPFFuncGetFuncArgCnt + BPFFuncGetRetval + BPFFuncSetRetval + BPFFuncXdpGetBuffLen + BPFFuncXdpLoadBytes + BPFFuncXdpStoreBytes + BPFFuncCopyFromUserTask + BPFFuncSkbSetTstamp + BPFFuncImaFileHash + BPFFuncKptrXchg + BPFFuncMapLookupPercpuElem + BPFFuncSkcToMptcpSock + BPFFuncDynptrFromMem + BPFFuncRingbufReserveDynptr + BPFFuncRingbufSubmitDynptr + BPFFuncRingbufDiscardDynptr + BPFFuncDynptrRead + BPFFuncDynptrWrite + BPFFuncDynptrData + BPFFuncTcpRawGenSyncookieIpv4 + BPFFuncTcpRawGenSyncookieIpv6 + BPFFuncTcpRawCheckSyncookieIpv4 + BPFFuncTcpRawCheckSyncookieIpv6 + BPFFuncKtimeGetTaiNs + BPFFuncUserRingbufDrain + BPFFuncCgrpStorageGet + BPFFuncCgrpStorageDelete +) + +func (b BPFFunc) Value() uint64 { + return uint64(b) +} + +func (b BPFFunc) String() string { + x := map[BPFFunc]string{ + BPFFuncUnspec: "unspec", + BPFFuncMapLookupElem: "map_lookup_elem", + BPFFuncMapUpdateElem: "map_update_elem", + BPFFuncMapDeleteElem: "map_delete_elem", + BPFFuncProbeRead: "probe_read", + BPFFuncKtimeGetNs: "ktime_get_ns", + BPFFuncTracePrintk: "trace_printk", + BPFFuncGetPrandomU32: "get_prandom_u32", + BPFFuncGetSmpProcessorId: "get_smp_processor_id", + BPFFuncSkbStoreBytes: "skb_store_bytes", + BPFFuncL3CsumReplace: "l3_csum_replace", + BPFFuncL4CsumReplace: "l4_csum_replace", + BPFFuncTailCall: "tail_call", + BPFFuncCloneRedirect: "clone_redirect", + BPFFuncGetCurrentPidTgid: "get_current_pid_tgid", + BPFFuncGetCurrentUidGid: "get_current_uid_gid", + BPFFuncGetCurrentComm: "get_current_comm", + BPFFuncGetCgroupClassid: "get_cgroup_classid", + BPFFuncSkbVlanPush: "skb_vlan_push", + BPFFuncSkbVlanPop: "skb_vlan_pop", + BPFFuncSkbGetTunnelKey: "skb_get_tunnel_key", + BPFFuncSkbSetTunnelKey: "skb_set_tunnel_key", + BPFFuncPerfEventRead: "perf_event_read", + BPFFuncRedirect: "redirect", + BPFFuncGetRouteRealm: "get_route_realm", + BPFFuncPerfEventOutput: "perf_event_output", + BPFFuncSkbLoadBytes: "skb_load_bytes", + BPFFuncGetStackid: "get_stackid", + BPFFuncCsumDiff: "csum_diff", + BPFFuncSkbGetTunnelOpt: "skb_get_tunnel_opt", + BPFFuncSkbSetTunnelOpt: "skb_set_tunnel_opt", + BPFFuncSkbChangeProto: "skb_change_proto", + BPFFuncSkbChangeType: "skb_change_type", + BPFFuncSkbUnderCgroup: "skb_under_cgroup", + BPFFuncGetHashRecalc: "get_hash_recalc", + BPFFuncGetCurrentTask: "get_current_task", + BPFFuncProbeWriteUser: "probe_write_user", + BPFFuncCurrentTaskUnderCgroup: "current_task_under_cgroup", + BPFFuncSkbChangeTail: "skb_change_tail", + BPFFuncSkbPullData: "skb_pull_data", + BPFFuncCsumUpdate: "csum_update", + BPFFuncSetHashInvalid: "set_hash_invalid", + BPFFuncGetNumaNodeId: "get_numa_node_id", + BPFFuncSkbChangeHead: "skb_change_head", + BPFFuncXdpAdjustHead: "xdp_adjust_head", + BPFFuncProbeReadStr: "probe_read_str", + BPFFuncGetSocketCookie: "get_socket_cookie", + BPFFuncGetSocketUid: "get_socket_uid", + BPFFuncSetHash: "set_hash", + BPFFuncSetsockopt: "setsockopt", + BPFFuncSkbAdjustRoom: "skb_adjust_room", + BPFFuncRedirectMap: "redirect_map", + BPFFuncSkRedirectMap: "sk_redirect_map", + BPFFuncSockMapUpdate: "sock_map_update", + BPFFuncXdpAdjustMeta: "xdp_adjust_meta", + BPFFuncPerfEventReadValue: "perf_event_read_value", + BPFFuncPerfProgReadValue: "perf_prog_read_value", + BPFFuncGetsockopt: "getsockopt", + BPFFuncOverrideReturn: "override_return", + BPFFuncSockOpsCbFlagsSet: "sock_ops_cb_flags_set", + BPFFuncMsgRedirectMap: "msg_redirect_map", + BPFFuncMsgApplyBytes: "msg_apply_bytes", + BPFFuncMsgCorkBytes: "msg_cork_bytes", + BPFFuncMsgPullData: "msg_pull_data", + BPFFuncBind: "bind", + BPFFuncXdpAdjustTail: "xdp_adjust_tail", + BPFFuncSkbGetXfrmState: "skb_get_xfrm_state", + BPFFuncGetStack: "get_stack", + BPFFuncSkbLoadBytesRelative: "skb_load_bytes_relative", + BPFFuncFibLookup: "fib_lookup", + BPFFuncSockHashUpdate: "sock_hash_update", + BPFFuncMsgRedirectHash: "msg_redirect_hash", + BPFFuncSkRedirectHash: "sk_redirect_hash", + BPFFuncLwtPushEncap: "lwt_push_encap", + BPFFuncLwtSeg6StoreBytes: "lwt_seg6_store_bytes", + BPFFuncLwtSeg6AdjustSrh: "lwt_seg6_adjust_srh", + BPFFuncLwtSeg6Action: "lwt_seg6_action", + BPFFuncRcRepeat: "rc_repeat", + BPFFuncRcKeydown: "rc_keydown", + BPFFuncSkbCgroupId: "skb_cgroup_id", + BPFFuncGetCurrentCgroupId: "get_current_cgroup_id", + BPFFuncGetLocalStorage: "get_local_storage", + BPFFuncSkSelectReuseport: "sk_select_reuseport", + BPFFuncSkbAncestorCgroupId: "skb_ancestor_cgroup_id", + BPFFuncSkLookupTcp: "sk_lookup_tcp", + BPFFuncSkLookupUdp: "sk_lookup_udp", + BPFFuncSkRelease: "sk_release", + BPFFuncMapPushElem: "map_push_elem", + BPFFuncMapPopElem: "map_pop_elem", + BPFFuncMapPeekElem: "map_peek_elem", + BPFFuncMsgPushData: "msg_push_data", + BPFFuncMsgPopData: "msg_pop_data", + BPFFuncRcPointerRel: "rc_pointer_rel", + BPFFuncSpinLock: "spin_lock", + BPFFuncSpinUnlock: "spin_unlock", + BPFFuncSkFullsock: "sk_fullsock", + BPFFuncTcpSock: "tcp_sock", + BPFFuncSkbEcnSetCe: "skb_ecn_set_ce", + BPFFuncGetListenerSock: "get_listener_sock", + BPFFuncSkcLookupTcp: "skc_lookup_tcp", + BPFFuncTcpCheckSyncookie: "tcp_check_syncookie", + BPFFuncSysctlGetName: "sysctl_get_name", + BPFFuncSysctlGetCurrentValue: "sysctl_get_current_value", + BPFFuncSysctlGetNewValue: "sysctl_get_new_value", + BPFFuncSysctlSetNewValue: "sysctl_set_new_value", + BPFFuncStrtol: "strtol", + BPFFuncStrtoul: "strtoul", + BPFFuncSkStorageGet: "sk_storage_get", + BPFFuncSkStorageDelete: "sk_storage_delete", + BPFFuncSendSignal: "send_signal", + BPFFuncTcpGenSyncookie: "tcp_gen_syncookie", + BPFFuncSkbOutput: "skb_output", + BPFFuncProbeReadUser: "probe_read_user", + BPFFuncProbeReadKernel: "probe_read_kernel", + BPFFuncProbeReadUserStr: "probe_read_user_str", + BPFFuncProbeReadKernelStr: "probe_read_kernel_str", + BPFFuncTcpSendAck: "tcp_send_ack", + BPFFuncSendSignalThread: "send_signal_thread", + BPFFuncJiffies64: "jiffies64", + BPFFuncReadBranchRecords: "read_branch_records", + BPFFuncGetNsCurrentPidTgid: "get_ns_current_pid_tgid", + BPFFuncXdpOutput: "xdp_output", + BPFFuncGetNetnsCookie: "get_netns_cookie", + BPFFuncGetCurrentAncestorCgroupId: "get_current_ancestor_cgroup_id", + BPFFuncSkAssign: "sk_assign", + BPFFuncKtimeGetBootNs: "ktime_get_boot_ns", + BPFFuncSeqPrintf: "seq_printf", + BPFFuncSeqWrite: "seq_write", + BPFFuncSkCgroupId: "sk_cgroup_id", + BPFFuncSkAncestorCgroupId: "sk_ancestor_cgroup_id", + BPFFuncRingbufOutput: "ringbuf_output", + BPFFuncRingbufReserve: "ringbuf_reserve", + BPFFuncRingbufSubmit: "ringbuf_submit", + BPFFuncRingbufDiscard: "ringbuf_discard", + BPFFuncRingbufQuery: "ringbuf_query", + BPFFuncCsumLevel: "csum_level", + BPFFuncSkcToTcp6Sock: "skc_to_tcp6_sock", + BPFFuncSkcToTcpSock: "skc_to_tcp_sock", + BPFFuncSkcToTcpTimewaitSock: "skc_to_tcp_timewait_sock", + BPFFuncSkcToTcpRequestSock: "skc_to_tcp_request_sock", + BPFFuncSkcToUdp6Sock: "skc_to_udp6_sock", + BPFFuncGetTaskStack: "get_task_stack", + BPFFuncLoadHdrOpt: "load_hdr_opt", + BPFFuncStoreHdrOpt: "store_hdr_opt", + BPFFuncReserveHdrOpt: "reserve_hdr_opt", + BPFFuncInodeStorageGet: "inode_storage_get", + BPFFuncInodeStorageDelete: "inode_storage_delete", + BPFFuncDPath: "d_path", + BPFFuncCopyFromUser: "copy_from_user", + BPFFuncSnprintfBtf: "snprintf_btf", + BPFFuncSeqPrintfBtf: "seq_printf_btf", + BPFFuncSkbCgroupClassid: "skb_cgroup_classid", + BPFFuncRedirectNeigh: "redirect_neigh", + BPFFuncPerCpuPtr: "per_cpu_ptr", + BPFFuncThisCpuPtr: "this_cpu_ptr", + BPFFuncRedirectPeer: "redirect_peer", + BPFFuncTaskStorageGet: "task_storage_get", + BPFFuncTaskStorageDelete: "task_storage_delete", + BPFFuncGetCurrentTaskBtf: "get_current_task_btf", + BPFFuncBprmOptsSet: "bprm_opts_set", + BPFFuncKtimeGetCoarseNs: "ktime_get_coarse_ns", + BPFFuncImaInodeHash: "ima_inode_hash", + BPFFuncSockFromFile: "sock_from_file", + BPFFuncCheckMtu: "check_mtu", + BPFFuncForEachMapElem: "for_each_map_elem", + BPFFuncSnprintf: "snprintf", + BPFFuncSysBpf: "sys_bpf", + BPFFuncBtfFindByNameKind: "btf_find_by_name_kind", + BPFFuncSysClose: "sys_close", + BPFFuncTimerInit: "timer_init", + BPFFuncTimerSetCallback: "timer_set_callback", + BPFFuncTimerStart: "timer_start", + BPFFuncTimerCancel: "timer_cancel", + BPFFuncGetFuncIp: "get_func_ip", + BPFFuncGetAttachCookie: "get_attach_cookie", + BPFFuncTaskPtRegs: "task_pt_regs", + BPFFuncGetBranchSnapshot: "get_branch_snapshot", + BPFFuncTraceVprintk: "trace_vprintk", + BPFFuncSkcToUnixSock: "skc_to_unix_sock", + BPFFuncKallsymsLookupName: "kallsyms_lookup_name", + BPFFuncFindVma: "find_vma", + BPFFuncLoop: "loop", + BPFFuncStrncmp: "strncmp", + BPFFuncGetFuncArg: "get_func_arg", + BPFFuncGetFuncRet: "get_func_ret", + BPFFuncGetFuncArgCnt: "get_func_arg_cnt", + BPFFuncGetRetval: "get_retval", + BPFFuncSetRetval: "set_retval", + BPFFuncXdpGetBuffLen: "xdp_get_buff_len", + BPFFuncXdpLoadBytes: "xdp_load_bytes", + BPFFuncXdpStoreBytes: "xdp_store_bytes", + BPFFuncCopyFromUserTask: "copy_from_user_task", + BPFFuncSkbSetTstamp: "skb_set_tstamp", + BPFFuncImaFileHash: "ima_file_hash", + BPFFuncKptrXchg: "kptr_xchg", + BPFFuncMapLookupPercpuElem: "map_lookup_percpu_elem", + BPFFuncSkcToMptcpSock: "skc_to_mptcp_sock", + BPFFuncDynptrFromMem: "dynptr_from_mem", + BPFFuncRingbufReserveDynptr: "ringbuf_reserve_dynptr", + BPFFuncRingbufSubmitDynptr: "ringbuf_submit_dynptr", + BPFFuncRingbufDiscardDynptr: "ringbuf_discard_dynptr", + BPFFuncDynptrRead: "dynptr_read", + BPFFuncDynptrWrite: "dynptr_write", + BPFFuncDynptrData: "dynptr_data", + BPFFuncTcpRawGenSyncookieIpv4: "tcp_raw_gen_syncookie_ipv4", + BPFFuncTcpRawGenSyncookieIpv6: "tcp_raw_gen_syncookie_ipv6", + BPFFuncTcpRawCheckSyncookieIpv4: "tcp_raw_check_syncookie_ipv4", + BPFFuncTcpRawCheckSyncookieIpv6: "tcp_raw_check_syncookie_ipv6", + BPFFuncKtimeGetTaiNs: "ktime_get_tai_ns", + BPFFuncUserRingbufDrain: "user_ringbuf_drain", + BPFFuncCgrpStorageGet: "cgrp_storage_get", + BPFFuncCgrpStorageDelete: "cgrp_storage_delete", + } + str, found := x[b] + if !found { + str = BPFFuncUnspec.String() + } + return str +} + +var bpfFuncsMap = map[uint64]BPFFunc{ + BPFFuncUnspec.Value(): BPFFuncUnspec, + BPFFuncMapLookupElem.Value(): BPFFuncMapLookupElem, + BPFFuncMapUpdateElem.Value(): BPFFuncMapUpdateElem, + BPFFuncMapDeleteElem.Value(): BPFFuncMapDeleteElem, + BPFFuncProbeRead.Value(): BPFFuncProbeRead, + BPFFuncKtimeGetNs.Value(): BPFFuncKtimeGetNs, + BPFFuncTracePrintk.Value(): BPFFuncTracePrintk, + BPFFuncGetPrandomU32.Value(): BPFFuncGetPrandomU32, + BPFFuncGetSmpProcessorId.Value(): BPFFuncGetSmpProcessorId, + BPFFuncSkbStoreBytes.Value(): BPFFuncSkbStoreBytes, + BPFFuncL3CsumReplace.Value(): BPFFuncL3CsumReplace, + BPFFuncL4CsumReplace.Value(): BPFFuncL4CsumReplace, + BPFFuncTailCall.Value(): BPFFuncTailCall, + BPFFuncCloneRedirect.Value(): BPFFuncCloneRedirect, + BPFFuncGetCurrentPidTgid.Value(): BPFFuncGetCurrentPidTgid, + BPFFuncGetCurrentUidGid.Value(): BPFFuncGetCurrentUidGid, + BPFFuncGetCurrentComm.Value(): BPFFuncGetCurrentComm, + BPFFuncGetCgroupClassid.Value(): BPFFuncGetCgroupClassid, + BPFFuncSkbVlanPush.Value(): BPFFuncSkbVlanPush, + BPFFuncSkbVlanPop.Value(): BPFFuncSkbVlanPop, + BPFFuncSkbGetTunnelKey.Value(): BPFFuncSkbGetTunnelKey, + BPFFuncSkbSetTunnelKey.Value(): BPFFuncSkbSetTunnelKey, + BPFFuncPerfEventRead.Value(): BPFFuncPerfEventRead, + BPFFuncRedirect.Value(): BPFFuncRedirect, + BPFFuncGetRouteRealm.Value(): BPFFuncGetRouteRealm, + BPFFuncPerfEventOutput.Value(): BPFFuncPerfEventOutput, + BPFFuncSkbLoadBytes.Value(): BPFFuncSkbLoadBytes, + BPFFuncGetStackid.Value(): BPFFuncGetStackid, + BPFFuncCsumDiff.Value(): BPFFuncCsumDiff, + BPFFuncSkbGetTunnelOpt.Value(): BPFFuncSkbGetTunnelOpt, + BPFFuncSkbSetTunnelOpt.Value(): BPFFuncSkbSetTunnelOpt, + BPFFuncSkbChangeProto.Value(): BPFFuncSkbChangeProto, + BPFFuncSkbChangeType.Value(): BPFFuncSkbChangeType, + BPFFuncSkbUnderCgroup.Value(): BPFFuncSkbUnderCgroup, + BPFFuncGetHashRecalc.Value(): BPFFuncGetHashRecalc, + BPFFuncGetCurrentTask.Value(): BPFFuncGetCurrentTask, + BPFFuncProbeWriteUser.Value(): BPFFuncProbeWriteUser, + BPFFuncCurrentTaskUnderCgroup.Value(): BPFFuncCurrentTaskUnderCgroup, + BPFFuncSkbChangeTail.Value(): BPFFuncSkbChangeTail, + BPFFuncSkbPullData.Value(): BPFFuncSkbPullData, + BPFFuncCsumUpdate.Value(): BPFFuncCsumUpdate, + BPFFuncSetHashInvalid.Value(): BPFFuncSetHashInvalid, + BPFFuncGetNumaNodeId.Value(): BPFFuncGetNumaNodeId, + BPFFuncSkbChangeHead.Value(): BPFFuncSkbChangeHead, + BPFFuncXdpAdjustHead.Value(): BPFFuncXdpAdjustHead, + BPFFuncProbeReadStr.Value(): BPFFuncProbeReadStr, + BPFFuncGetSocketCookie.Value(): BPFFuncGetSocketCookie, + BPFFuncGetSocketUid.Value(): BPFFuncGetSocketUid, + BPFFuncSetHash.Value(): BPFFuncSetHash, + BPFFuncSetsockopt.Value(): BPFFuncSetsockopt, + BPFFuncSkbAdjustRoom.Value(): BPFFuncSkbAdjustRoom, + BPFFuncRedirectMap.Value(): BPFFuncRedirectMap, + BPFFuncSkRedirectMap.Value(): BPFFuncSkRedirectMap, + BPFFuncSockMapUpdate.Value(): BPFFuncSockMapUpdate, + BPFFuncXdpAdjustMeta.Value(): BPFFuncXdpAdjustMeta, + BPFFuncPerfEventReadValue.Value(): BPFFuncPerfEventReadValue, + BPFFuncPerfProgReadValue.Value(): BPFFuncPerfProgReadValue, + BPFFuncGetsockopt.Value(): BPFFuncGetsockopt, + BPFFuncOverrideReturn.Value(): BPFFuncOverrideReturn, + BPFFuncSockOpsCbFlagsSet.Value(): BPFFuncSockOpsCbFlagsSet, + BPFFuncMsgRedirectMap.Value(): BPFFuncMsgRedirectMap, + BPFFuncMsgApplyBytes.Value(): BPFFuncMsgApplyBytes, + BPFFuncMsgCorkBytes.Value(): BPFFuncMsgCorkBytes, + BPFFuncMsgPullData.Value(): BPFFuncMsgPullData, + BPFFuncBind.Value(): BPFFuncBind, + BPFFuncXdpAdjustTail.Value(): BPFFuncXdpAdjustTail, + BPFFuncSkbGetXfrmState.Value(): BPFFuncSkbGetXfrmState, + BPFFuncGetStack.Value(): BPFFuncGetStack, + BPFFuncSkbLoadBytesRelative.Value(): BPFFuncSkbLoadBytesRelative, + BPFFuncFibLookup.Value(): BPFFuncFibLookup, + BPFFuncSockHashUpdate.Value(): BPFFuncSockHashUpdate, + BPFFuncMsgRedirectHash.Value(): BPFFuncMsgRedirectHash, + BPFFuncSkRedirectHash.Value(): BPFFuncSkRedirectHash, + BPFFuncLwtPushEncap.Value(): BPFFuncLwtPushEncap, + BPFFuncLwtSeg6StoreBytes.Value(): BPFFuncLwtSeg6StoreBytes, + BPFFuncLwtSeg6AdjustSrh.Value(): BPFFuncLwtSeg6AdjustSrh, + BPFFuncLwtSeg6Action.Value(): BPFFuncLwtSeg6Action, + BPFFuncRcRepeat.Value(): BPFFuncRcRepeat, + BPFFuncRcKeydown.Value(): BPFFuncRcKeydown, + BPFFuncSkbCgroupId.Value(): BPFFuncSkbCgroupId, + BPFFuncGetCurrentCgroupId.Value(): BPFFuncGetCurrentCgroupId, + BPFFuncGetLocalStorage.Value(): BPFFuncGetLocalStorage, + BPFFuncSkSelectReuseport.Value(): BPFFuncSkSelectReuseport, + BPFFuncSkbAncestorCgroupId.Value(): BPFFuncSkbAncestorCgroupId, + BPFFuncSkLookupTcp.Value(): BPFFuncSkLookupTcp, + BPFFuncSkLookupUdp.Value(): BPFFuncSkLookupUdp, + BPFFuncSkRelease.Value(): BPFFuncSkRelease, + BPFFuncMapPushElem.Value(): BPFFuncMapPushElem, + BPFFuncMapPopElem.Value(): BPFFuncMapPopElem, + BPFFuncMapPeekElem.Value(): BPFFuncMapPeekElem, + BPFFuncMsgPushData.Value(): BPFFuncMsgPushData, + BPFFuncMsgPopData.Value(): BPFFuncMsgPopData, + BPFFuncRcPointerRel.Value(): BPFFuncRcPointerRel, + BPFFuncSpinLock.Value(): BPFFuncSpinLock, + BPFFuncSpinUnlock.Value(): BPFFuncSpinUnlock, + BPFFuncSkFullsock.Value(): BPFFuncSkFullsock, + BPFFuncTcpSock.Value(): BPFFuncTcpSock, + BPFFuncSkbEcnSetCe.Value(): BPFFuncSkbEcnSetCe, + BPFFuncGetListenerSock.Value(): BPFFuncGetListenerSock, + BPFFuncSkcLookupTcp.Value(): BPFFuncSkcLookupTcp, + BPFFuncTcpCheckSyncookie.Value(): BPFFuncTcpCheckSyncookie, + BPFFuncSysctlGetName.Value(): BPFFuncSysctlGetName, + BPFFuncSysctlGetCurrentValue.Value(): BPFFuncSysctlGetCurrentValue, + BPFFuncSysctlGetNewValue.Value(): BPFFuncSysctlGetNewValue, + BPFFuncSysctlSetNewValue.Value(): BPFFuncSysctlSetNewValue, + BPFFuncStrtol.Value(): BPFFuncStrtol, + BPFFuncStrtoul.Value(): BPFFuncStrtoul, + BPFFuncSkStorageGet.Value(): BPFFuncSkStorageGet, + BPFFuncSkStorageDelete.Value(): BPFFuncSkStorageDelete, + BPFFuncSendSignal.Value(): BPFFuncSendSignal, + BPFFuncTcpGenSyncookie.Value(): BPFFuncTcpGenSyncookie, + BPFFuncSkbOutput.Value(): BPFFuncSkbOutput, + BPFFuncProbeReadUser.Value(): BPFFuncProbeReadUser, + BPFFuncProbeReadKernel.Value(): BPFFuncProbeReadKernel, + BPFFuncProbeReadUserStr.Value(): BPFFuncProbeReadUserStr, + BPFFuncProbeReadKernelStr.Value(): BPFFuncProbeReadKernelStr, + BPFFuncTcpSendAck.Value(): BPFFuncTcpSendAck, + BPFFuncSendSignalThread.Value(): BPFFuncSendSignalThread, + BPFFuncJiffies64.Value(): BPFFuncJiffies64, + BPFFuncReadBranchRecords.Value(): BPFFuncReadBranchRecords, + BPFFuncGetNsCurrentPidTgid.Value(): BPFFuncGetNsCurrentPidTgid, + BPFFuncXdpOutput.Value(): BPFFuncXdpOutput, + BPFFuncGetNetnsCookie.Value(): BPFFuncGetNetnsCookie, + BPFFuncGetCurrentAncestorCgroupId.Value(): BPFFuncGetCurrentAncestorCgroupId, + BPFFuncSkAssign.Value(): BPFFuncSkAssign, + BPFFuncKtimeGetBootNs.Value(): BPFFuncKtimeGetBootNs, + BPFFuncSeqPrintf.Value(): BPFFuncSeqPrintf, + BPFFuncSeqWrite.Value(): BPFFuncSeqWrite, + BPFFuncSkCgroupId.Value(): BPFFuncSkCgroupId, + BPFFuncSkAncestorCgroupId.Value(): BPFFuncSkAncestorCgroupId, + BPFFuncRingbufOutput.Value(): BPFFuncRingbufOutput, + BPFFuncRingbufReserve.Value(): BPFFuncRingbufReserve, + BPFFuncRingbufSubmit.Value(): BPFFuncRingbufSubmit, + BPFFuncRingbufDiscard.Value(): BPFFuncRingbufDiscard, + BPFFuncRingbufQuery.Value(): BPFFuncRingbufQuery, + BPFFuncCsumLevel.Value(): BPFFuncCsumLevel, + BPFFuncSkcToTcp6Sock.Value(): BPFFuncSkcToTcp6Sock, + BPFFuncSkcToTcpSock.Value(): BPFFuncSkcToTcpSock, + BPFFuncSkcToTcpTimewaitSock.Value(): BPFFuncSkcToTcpTimewaitSock, + BPFFuncSkcToTcpRequestSock.Value(): BPFFuncSkcToTcpRequestSock, + BPFFuncSkcToUdp6Sock.Value(): BPFFuncSkcToUdp6Sock, + BPFFuncGetTaskStack.Value(): BPFFuncGetTaskStack, + BPFFuncLoadHdrOpt.Value(): BPFFuncLoadHdrOpt, + BPFFuncStoreHdrOpt.Value(): BPFFuncStoreHdrOpt, + BPFFuncReserveHdrOpt.Value(): BPFFuncReserveHdrOpt, + BPFFuncInodeStorageGet.Value(): BPFFuncInodeStorageGet, + BPFFuncInodeStorageDelete.Value(): BPFFuncInodeStorageDelete, + BPFFuncDPath.Value(): BPFFuncDPath, + BPFFuncCopyFromUser.Value(): BPFFuncCopyFromUser, + BPFFuncSnprintfBtf.Value(): BPFFuncSnprintfBtf, + BPFFuncSeqPrintfBtf.Value(): BPFFuncSeqPrintfBtf, + BPFFuncSkbCgroupClassid.Value(): BPFFuncSkbCgroupClassid, + BPFFuncRedirectNeigh.Value(): BPFFuncRedirectNeigh, + BPFFuncPerCpuPtr.Value(): BPFFuncPerCpuPtr, + BPFFuncThisCpuPtr.Value(): BPFFuncThisCpuPtr, + BPFFuncRedirectPeer.Value(): BPFFuncRedirectPeer, + BPFFuncTaskStorageGet.Value(): BPFFuncTaskStorageGet, + BPFFuncTaskStorageDelete.Value(): BPFFuncTaskStorageDelete, + BPFFuncGetCurrentTaskBtf.Value(): BPFFuncGetCurrentTaskBtf, + BPFFuncBprmOptsSet.Value(): BPFFuncBprmOptsSet, + BPFFuncKtimeGetCoarseNs.Value(): BPFFuncKtimeGetCoarseNs, + BPFFuncImaInodeHash.Value(): BPFFuncImaInodeHash, + BPFFuncSockFromFile.Value(): BPFFuncSockFromFile, + BPFFuncCheckMtu.Value(): BPFFuncCheckMtu, + BPFFuncForEachMapElem.Value(): BPFFuncForEachMapElem, + BPFFuncSnprintf.Value(): BPFFuncSnprintf, + BPFFuncSysBpf.Value(): BPFFuncSysBpf, + BPFFuncBtfFindByNameKind.Value(): BPFFuncBtfFindByNameKind, + BPFFuncSysClose.Value(): BPFFuncSysClose, + BPFFuncTimerInit.Value(): BPFFuncTimerInit, + BPFFuncTimerSetCallback.Value(): BPFFuncTimerSetCallback, + BPFFuncTimerStart.Value(): BPFFuncTimerStart, + BPFFuncTimerCancel.Value(): BPFFuncTimerCancel, + BPFFuncGetFuncIp.Value(): BPFFuncGetFuncIp, + BPFFuncGetAttachCookie.Value(): BPFFuncGetAttachCookie, + BPFFuncTaskPtRegs.Value(): BPFFuncTaskPtRegs, + BPFFuncGetBranchSnapshot.Value(): BPFFuncGetBranchSnapshot, + BPFFuncTraceVprintk.Value(): BPFFuncTraceVprintk, + BPFFuncSkcToUnixSock.Value(): BPFFuncSkcToUnixSock, + BPFFuncKallsymsLookupName.Value(): BPFFuncKallsymsLookupName, + BPFFuncFindVma.Value(): BPFFuncFindVma, + BPFFuncLoop.Value(): BPFFuncLoop, + BPFFuncStrncmp.Value(): BPFFuncStrncmp, + BPFFuncGetFuncArg.Value(): BPFFuncGetFuncArg, + BPFFuncGetFuncRet.Value(): BPFFuncGetFuncRet, + BPFFuncGetFuncArgCnt.Value(): BPFFuncGetFuncArgCnt, + BPFFuncGetRetval.Value(): BPFFuncGetRetval, + BPFFuncSetRetval.Value(): BPFFuncSetRetval, + BPFFuncXdpGetBuffLen.Value(): BPFFuncXdpGetBuffLen, + BPFFuncXdpLoadBytes.Value(): BPFFuncXdpLoadBytes, + BPFFuncXdpStoreBytes.Value(): BPFFuncXdpStoreBytes, + BPFFuncCopyFromUserTask.Value(): BPFFuncCopyFromUserTask, + BPFFuncSkbSetTstamp.Value(): BPFFuncSkbSetTstamp, + BPFFuncImaFileHash.Value(): BPFFuncImaFileHash, + BPFFuncKptrXchg.Value(): BPFFuncKptrXchg, + BPFFuncMapLookupPercpuElem.Value(): BPFFuncMapLookupPercpuElem, + BPFFuncSkcToMptcpSock.Value(): BPFFuncSkcToMptcpSock, + BPFFuncDynptrFromMem.Value(): BPFFuncDynptrFromMem, + BPFFuncRingbufReserveDynptr.Value(): BPFFuncRingbufReserveDynptr, + BPFFuncRingbufSubmitDynptr.Value(): BPFFuncRingbufSubmitDynptr, + BPFFuncRingbufDiscardDynptr.Value(): BPFFuncRingbufDiscardDynptr, + BPFFuncDynptrRead.Value(): BPFFuncDynptrRead, + BPFFuncDynptrWrite.Value(): BPFFuncDynptrWrite, + BPFFuncDynptrData.Value(): BPFFuncDynptrData, + BPFFuncTcpRawGenSyncookieIpv4.Value(): BPFFuncTcpRawGenSyncookieIpv4, + BPFFuncTcpRawGenSyncookieIpv6.Value(): BPFFuncTcpRawGenSyncookieIpv6, + BPFFuncTcpRawCheckSyncookieIpv4.Value(): BPFFuncTcpRawCheckSyncookieIpv4, + BPFFuncTcpRawCheckSyncookieIpv6.Value(): BPFFuncTcpRawCheckSyncookieIpv6, + BPFFuncKtimeGetTaiNs.Value(): BPFFuncKtimeGetTaiNs, + BPFFuncUserRingbufDrain.Value(): BPFFuncUserRingbufDrain, + BPFFuncCgrpStorageGet.Value(): BPFFuncCgrpStorageGet, + BPFFuncCgrpStorageDelete.Value(): BPFFuncCgrpStorageDelete, +} + // // BPFProgType //