summaryrefslogtreecommitdiff
path: root/vendor/github.com/cilium/ebpf/internal/sys
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/cilium/ebpf/internal/sys')
-rw-r--r--vendor/github.com/cilium/ebpf/internal/sys/doc.go6
-rw-r--r--vendor/github.com/cilium/ebpf/internal/sys/fd.go96
-rw-r--r--vendor/github.com/cilium/ebpf/internal/sys/ptr.go38
-rw-r--r--vendor/github.com/cilium/ebpf/internal/sys/ptr_32_be.go15
-rw-r--r--vendor/github.com/cilium/ebpf/internal/sys/ptr_32_le.go15
-rw-r--r--vendor/github.com/cilium/ebpf/internal/sys/ptr_64.go14
-rw-r--r--vendor/github.com/cilium/ebpf/internal/sys/syscall.go126
-rw-r--r--vendor/github.com/cilium/ebpf/internal/sys/types.go1052
8 files changed, 1362 insertions, 0 deletions
diff --git a/vendor/github.com/cilium/ebpf/internal/sys/doc.go b/vendor/github.com/cilium/ebpf/internal/sys/doc.go
new file mode 100644
index 000000000..dfe174448
--- /dev/null
+++ b/vendor/github.com/cilium/ebpf/internal/sys/doc.go
@@ -0,0 +1,6 @@
+// Package sys contains bindings for the BPF syscall.
+package sys
+
+// Regenerate types.go by invoking go generate in the current directory.
+
+//go:generate go run github.com/cilium/ebpf/internal/cmd/gentypes ../../btf/testdata/vmlinux.btf.gz
diff --git a/vendor/github.com/cilium/ebpf/internal/sys/fd.go b/vendor/github.com/cilium/ebpf/internal/sys/fd.go
new file mode 100644
index 000000000..65517d45e
--- /dev/null
+++ b/vendor/github.com/cilium/ebpf/internal/sys/fd.go
@@ -0,0 +1,96 @@
+package sys
+
+import (
+ "fmt"
+ "math"
+ "os"
+ "runtime"
+ "strconv"
+
+ "github.com/cilium/ebpf/internal/unix"
+)
+
+var ErrClosedFd = unix.EBADF
+
+type FD struct {
+ raw int
+}
+
+func newFD(value int) *FD {
+ fd := &FD{value}
+ runtime.SetFinalizer(fd, (*FD).Close)
+ return fd
+}
+
+// NewFD wraps a raw fd with a finalizer.
+//
+// You must not use the raw fd after calling this function, since the underlying
+// file descriptor number may change. This is because the BPF UAPI assumes that
+// zero is not a valid fd value.
+func NewFD(value int) (*FD, error) {
+ if value < 0 {
+ return nil, fmt.Errorf("invalid fd %d", value)
+ }
+
+ fd := newFD(value)
+ if value != 0 {
+ return fd, nil
+ }
+
+ dup, err := fd.Dup()
+ _ = fd.Close()
+ return dup, err
+}
+
+func (fd *FD) String() string {
+ return strconv.FormatInt(int64(fd.raw), 10)
+}
+
+func (fd *FD) Int() int {
+ return fd.raw
+}
+
+func (fd *FD) Uint() uint32 {
+ if fd.raw < 0 || int64(fd.raw) > math.MaxUint32 {
+ // Best effort: this is the number most likely to be an invalid file
+ // descriptor. It is equal to -1 (on two's complement arches).
+ return math.MaxUint32
+ }
+ return uint32(fd.raw)
+}
+
+func (fd *FD) Close() error {
+ if fd.raw < 0 {
+ return nil
+ }
+
+ value := int(fd.raw)
+ fd.raw = -1
+
+ fd.Forget()
+ return unix.Close(value)
+}
+
+func (fd *FD) Forget() {
+ runtime.SetFinalizer(fd, nil)
+}
+
+func (fd *FD) Dup() (*FD, error) {
+ if fd.raw < 0 {
+ return nil, ErrClosedFd
+ }
+
+ // Always require the fd to be larger than zero: the BPF API treats the value
+ // as "no argument provided".
+ dup, err := unix.FcntlInt(uintptr(fd.raw), unix.F_DUPFD_CLOEXEC, 1)
+ if err != nil {
+ return nil, fmt.Errorf("can't dup fd: %v", err)
+ }
+
+ return newFD(dup), nil
+}
+
+func (fd *FD) File(name string) *os.File {
+ fd.Forget()
+ return os.NewFile(uintptr(fd.raw), name)
+}
diff --git a/vendor/github.com/cilium/ebpf/internal/sys/ptr.go b/vendor/github.com/cilium/ebpf/internal/sys/ptr.go
new file mode 100644
index 000000000..a22100688
--- /dev/null
+++ b/vendor/github.com/cilium/ebpf/internal/sys/ptr.go
@@ -0,0 +1,38 @@
+package sys
+
+import (
+ "unsafe"
+
+ "github.com/cilium/ebpf/internal/unix"
+)
+
+// NewPointer creates a 64-bit pointer from an unsafe Pointer.
+func NewPointer(ptr unsafe.Pointer) Pointer {
+ return Pointer{ptr: ptr}
+}
+
+// NewSlicePointer creates a 64-bit pointer from a byte slice.
+func NewSlicePointer(buf []byte) Pointer {
+ if len(buf) == 0 {
+ return Pointer{}
+ }
+
+ return Pointer{ptr: unsafe.Pointer(&buf[0])}
+}
+
+// NewSlicePointer creates a 64-bit pointer from a byte slice.
+//
+// Useful to assign both the pointer and the length in one go.
+func NewSlicePointerLen(buf []byte) (Pointer, uint32) {
+ return NewSlicePointer(buf), uint32(len(buf))
+}
+
+// NewStringPointer creates a 64-bit pointer from a string.
+func NewStringPointer(str string) Pointer {
+ p, err := unix.BytePtrFromString(str)
+ if err != nil {
+ return Pointer{}
+ }
+
+ return Pointer{ptr: unsafe.Pointer(p)}
+}
diff --git a/vendor/github.com/cilium/ebpf/internal/sys/ptr_32_be.go b/vendor/github.com/cilium/ebpf/internal/sys/ptr_32_be.go
new file mode 100644
index 000000000..df903d780
--- /dev/null
+++ b/vendor/github.com/cilium/ebpf/internal/sys/ptr_32_be.go
@@ -0,0 +1,15 @@
+//go:build armbe || mips || mips64p32
+// +build armbe mips mips64p32
+
+package sys
+
+import (
+ "unsafe"
+)
+
+// Pointer wraps an unsafe.Pointer to be 64bit to
+// conform to the syscall specification.
+type Pointer struct {
+ pad uint32
+ ptr unsafe.Pointer
+}
diff --git a/vendor/github.com/cilium/ebpf/internal/sys/ptr_32_le.go b/vendor/github.com/cilium/ebpf/internal/sys/ptr_32_le.go
new file mode 100644
index 000000000..a6a51edb6
--- /dev/null
+++ b/vendor/github.com/cilium/ebpf/internal/sys/ptr_32_le.go
@@ -0,0 +1,15 @@
+//go:build 386 || amd64p32 || arm || mipsle || mips64p32le
+// +build 386 amd64p32 arm mipsle mips64p32le
+
+package sys
+
+import (
+ "unsafe"
+)
+
+// Pointer wraps an unsafe.Pointer to be 64bit to
+// conform to the syscall specification.
+type Pointer struct {
+ ptr unsafe.Pointer
+ pad uint32
+}
diff --git a/vendor/github.com/cilium/ebpf/internal/sys/ptr_64.go b/vendor/github.com/cilium/ebpf/internal/sys/ptr_64.go
new file mode 100644
index 000000000..7c0279e48
--- /dev/null
+++ b/vendor/github.com/cilium/ebpf/internal/sys/ptr_64.go
@@ -0,0 +1,14 @@
+//go:build !386 && !amd64p32 && !arm && !mipsle && !mips64p32le && !armbe && !mips && !mips64p32
+// +build !386,!amd64p32,!arm,!mipsle,!mips64p32le,!armbe,!mips,!mips64p32
+
+package sys
+
+import (
+ "unsafe"
+)
+
+// Pointer wraps an unsafe.Pointer to be 64bit to
+// conform to the syscall specification.
+type Pointer struct {
+ ptr unsafe.Pointer
+}
diff --git a/vendor/github.com/cilium/ebpf/internal/sys/syscall.go b/vendor/github.com/cilium/ebpf/internal/sys/syscall.go
new file mode 100644
index 000000000..2a5935dc9
--- /dev/null
+++ b/vendor/github.com/cilium/ebpf/internal/sys/syscall.go
@@ -0,0 +1,126 @@
+package sys
+
+import (
+ "runtime"
+ "syscall"
+ "unsafe"
+
+ "github.com/cilium/ebpf/internal/unix"
+)
+
+// BPF wraps SYS_BPF.
+//
+// Any pointers contained in attr must use the Pointer type from this package.
+func BPF(cmd Cmd, attr unsafe.Pointer, size uintptr) (uintptr, error) {
+ for {
+ r1, _, errNo := unix.Syscall(unix.SYS_BPF, uintptr(cmd), uintptr(attr), size)
+ runtime.KeepAlive(attr)
+
+ // As of ~4.20 the verifier can be interrupted by a signal,
+ // and returns EAGAIN in that case.
+ if errNo == unix.EAGAIN && cmd == BPF_PROG_LOAD {
+ continue
+ }
+
+ var err error
+ if errNo != 0 {
+ err = wrappedErrno{errNo}
+ }
+
+ return r1, err
+ }
+}
+
+// Info is implemented by all structs that can be passed to the ObjInfo syscall.
+//
+// MapInfo
+// ProgInfo
+// LinkInfo
+// BtfInfo
+type Info interface {
+ info() (unsafe.Pointer, uint32)
+}
+
+var _ Info = (*MapInfo)(nil)
+
+func (i *MapInfo) info() (unsafe.Pointer, uint32) {
+ return unsafe.Pointer(i), uint32(unsafe.Sizeof(*i))
+}
+
+var _ Info = (*ProgInfo)(nil)
+
+func (i *ProgInfo) info() (unsafe.Pointer, uint32) {
+ return unsafe.Pointer(i), uint32(unsafe.Sizeof(*i))
+}
+
+var _ Info = (*LinkInfo)(nil)
+
+func (i *LinkInfo) info() (unsafe.Pointer, uint32) {
+ return unsafe.Pointer(i), uint32(unsafe.Sizeof(*i))
+}
+
+var _ Info = (*BtfInfo)(nil)
+
+func (i *BtfInfo) info() (unsafe.Pointer, uint32) {
+ return unsafe.Pointer(i), uint32(unsafe.Sizeof(*i))
+}
+
+// ObjInfo retrieves information about a BPF Fd.
+//
+// info may be one of MapInfo, ProgInfo, LinkInfo and BtfInfo.
+func ObjInfo(fd *FD, info Info) error {
+ ptr, len := info.info()
+ err := ObjGetInfoByFd(&ObjGetInfoByFdAttr{
+ BpfFd: fd.Uint(),
+ InfoLen: len,
+ Info: NewPointer(ptr),
+ })
+ runtime.KeepAlive(fd)
+ return err
+}
+
+// BPFObjName is a null-terminated string made up of
+// 'A-Za-z0-9_' characters.
+type ObjName [unix.BPF_OBJ_NAME_LEN]byte
+
+// NewObjName truncates the result if it is too long.
+func NewObjName(name string) ObjName {
+ var result ObjName
+ copy(result[:unix.BPF_OBJ_NAME_LEN-1], name)
+ return result
+}
+
+// LinkID uniquely identifies a bpf_link.
+type LinkID uint32
+
+// BTFID uniquely identifies a BTF blob loaded into the kernel.
+type BTFID uint32
+
+// wrappedErrno wraps syscall.Errno to prevent direct comparisons with
+// syscall.E* or unix.E* constants.
+//
+// You should never export an error of this type.
+type wrappedErrno struct {
+ syscall.Errno
+}
+
+func (we wrappedErrno) Unwrap() error {
+ return we.Errno
+}
+
+type syscallError struct {
+ error
+ errno syscall.Errno
+}
+
+func Error(err error, errno syscall.Errno) error {
+ return &syscallError{err, errno}
+}
+
+func (se *syscallError) Is(target error) bool {
+ return target == se.error
+}
+
+func (se *syscallError) Unwrap() error {
+ return se.errno
+}
diff --git a/vendor/github.com/cilium/ebpf/internal/sys/types.go b/vendor/github.com/cilium/ebpf/internal/sys/types.go
new file mode 100644
index 000000000..291e3a619
--- /dev/null
+++ b/vendor/github.com/cilium/ebpf/internal/sys/types.go
@@ -0,0 +1,1052 @@
+// Code generated by internal/cmd/gentypes; DO NOT EDIT.
+
+package sys
+
+import (
+ "unsafe"
+)
+
+type AdjRoomMode int32
+
+const (
+ BPF_ADJ_ROOM_NET AdjRoomMode = 0
+ BPF_ADJ_ROOM_MAC AdjRoomMode = 1
+)
+
+type AttachType int32
+
+const (
+ BPF_CGROUP_INET_INGRESS AttachType = 0
+ BPF_CGROUP_INET_EGRESS AttachType = 1
+ BPF_CGROUP_INET_SOCK_CREATE AttachType = 2
+ BPF_CGROUP_SOCK_OPS AttachType = 3
+ BPF_SK_SKB_STREAM_PARSER AttachType = 4
+ BPF_SK_SKB_STREAM_VERDICT AttachType = 5
+ BPF_CGROUP_DEVICE AttachType = 6
+ BPF_SK_MSG_VERDICT AttachType = 7
+ BPF_CGROUP_INET4_BIND AttachType = 8
+ BPF_CGROUP_INET6_BIND AttachType = 9
+ BPF_CGROUP_INET4_CONNECT AttachType = 10
+ BPF_CGROUP_INET6_CONNECT AttachType = 11
+ BPF_CGROUP_INET4_POST_BIND AttachType = 12
+ BPF_CGROUP_INET6_POST_BIND AttachType = 13
+ BPF_CGROUP_UDP4_SENDMSG AttachType = 14
+ BPF_CGROUP_UDP6_SENDMSG AttachType = 15
+ BPF_LIRC_MODE2 AttachType = 16
+ BPF_FLOW_DISSECTOR AttachType = 17
+ BPF_CGROUP_SYSCTL AttachType = 18
+ BPF_CGROUP_UDP4_RECVMSG AttachType = 19
+ BPF_CGROUP_UDP6_RECVMSG AttachType = 20
+ BPF_CGROUP_GETSOCKOPT AttachType = 21
+ BPF_CGROUP_SETSOCKOPT AttachType = 22
+ BPF_TRACE_RAW_TP AttachType = 23
+ BPF_TRACE_FENTRY AttachType = 24
+ BPF_TRACE_FEXIT AttachType = 25
+ BPF_MODIFY_RETURN AttachType = 26
+ BPF_LSM_MAC AttachType = 27
+ BPF_TRACE_ITER AttachType = 28
+ BPF_CGROUP_INET4_GETPEERNAME AttachType = 29
+ BPF_CGROUP_INET6_GETPEERNAME AttachType = 30
+ BPF_CGROUP_INET4_GETSOCKNAME AttachType = 31
+ BPF_CGROUP_INET6_GETSOCKNAME AttachType = 32
+ BPF_XDP_DEVMAP AttachType = 33
+ BPF_CGROUP_INET_SOCK_RELEASE AttachType = 34
+ BPF_XDP_CPUMAP AttachType = 35
+ BPF_SK_LOOKUP AttachType = 36
+ BPF_XDP AttachType = 37
+ BPF_SK_SKB_VERDICT AttachType = 38
+ BPF_SK_REUSEPORT_SELECT AttachType = 39
+ BPF_SK_REUSEPORT_SELECT_OR_MIGRATE AttachType = 40
+ BPF_PERF_EVENT AttachType = 41
+ BPF_TRACE_KPROBE_MULTI AttachType = 42
+ __MAX_BPF_ATTACH_TYPE AttachType = 43
+)
+
+type Cmd int32
+
+const (
+ BPF_MAP_CREATE Cmd = 0
+ BPF_MAP_LOOKUP_ELEM Cmd = 1
+ BPF_MAP_UPDATE_ELEM Cmd = 2
+ BPF_MAP_DELETE_ELEM Cmd = 3
+ BPF_MAP_GET_NEXT_KEY Cmd = 4
+ BPF_PROG_LOAD Cmd = 5
+ BPF_OBJ_PIN Cmd = 6
+ BPF_OBJ_GET Cmd = 7
+ BPF_PROG_ATTACH Cmd = 8
+ BPF_PROG_DETACH Cmd = 9
+ BPF_PROG_TEST_RUN Cmd = 10
+ BPF_PROG_RUN Cmd = 10
+ BPF_PROG_GET_NEXT_ID Cmd = 11
+ BPF_MAP_GET_NEXT_ID Cmd = 12
+ BPF_PROG_GET_FD_BY_ID Cmd = 13
+ BPF_MAP_GET_FD_BY_ID Cmd = 14
+ BPF_OBJ_GET_INFO_BY_FD Cmd = 15
+ BPF_PROG_QUERY Cmd = 16
+ BPF_RAW_TRACEPOINT_OPEN Cmd = 17
+ BPF_BTF_LOAD Cmd = 18
+ BPF_BTF_GET_FD_BY_ID Cmd = 19
+ BPF_TASK_FD_QUERY Cmd = 20
+ BPF_MAP_LOOKUP_AND_DELETE_ELEM Cmd = 21
+ BPF_MAP_FREEZE Cmd = 22
+ BPF_BTF_GET_NEXT_ID Cmd = 23
+ BPF_MAP_LOOKUP_BATCH Cmd = 24
+ BPF_MAP_LOOKUP_AND_DELETE_BATCH Cmd = 25
+ BPF_MAP_UPDATE_BATCH Cmd = 26
+ BPF_MAP_DELETE_BATCH Cmd = 27
+ BPF_LINK_CREATE Cmd = 28
+ BPF_LINK_UPDATE Cmd = 29
+ BPF_LINK_GET_FD_BY_ID Cmd = 30
+ BPF_LINK_GET_NEXT_ID Cmd = 31
+ BPF_ENABLE_STATS Cmd = 32
+ BPF_ITER_CREATE Cmd = 33
+ BPF_LINK_DETACH Cmd = 34
+ BPF_PROG_BIND_MAP Cmd = 35
+)
+
+type FunctionId int32
+
+const (
+ BPF_FUNC_unspec FunctionId = 0
+ BPF_FUNC_map_lookup_elem FunctionId = 1
+ BPF_FUNC_map_update_elem FunctionId = 2
+ BPF_FUNC_map_delete_elem FunctionId = 3
+ BPF_FUNC_probe_read FunctionId = 4
+ BPF_FUNC_ktime_get_ns FunctionId = 5
+ BPF_FUNC_trace_printk FunctionId = 6
+ BPF_FUNC_get_prandom_u32 FunctionId = 7
+ BPF_FUNC_get_smp_processor_id FunctionId = 8
+ BPF_FUNC_skb_store_bytes FunctionId = 9
+ BPF_FUNC_l3_csum_replace FunctionId = 10
+ BPF_FUNC_l4_csum_replace FunctionId = 11
+ BPF_FUNC_tail_call FunctionId = 12
+ BPF_FUNC_clone_redirect FunctionId = 13
+ BPF_FUNC_get_current_pid_tgid FunctionId = 14
+ BPF_FUNC_get_current_uid_gid FunctionId = 15
+ BPF_FUNC_get_current_comm FunctionId = 16
+ BPF_FUNC_get_cgroup_classid FunctionId = 17
+ BPF_FUNC_skb_vlan_push FunctionId = 18
+ BPF_FUNC_skb_vlan_pop FunctionId = 19
+ BPF_FUNC_skb_get_tunnel_key FunctionId = 20
+ BPF_FUNC_skb_set_tunnel_key FunctionId = 21
+ BPF_FUNC_perf_event_read FunctionId = 22
+ BPF_FUNC_redirect FunctionId = 23
+ BPF_FUNC_get_route_realm FunctionId = 24
+ BPF_FUNC_perf_event_output FunctionId = 25
+ BPF_FUNC_skb_load_bytes FunctionId = 26
+ BPF_FUNC_get_stackid FunctionId = 27
+ BPF_FUNC_csum_diff FunctionId = 28
+ BPF_FUNC_skb_get_tunnel_opt FunctionId = 29
+ BPF_FUNC_skb_set_tunnel_opt FunctionId = 30
+ BPF_FUNC_skb_change_proto FunctionId = 31
+ BPF_FUNC_skb_change_type FunctionId = 32
+ BPF_FUNC_skb_under_cgroup FunctionId = 33
+ BPF_FUNC_get_hash_recalc FunctionId = 34
+ BPF_FUNC_get_current_task FunctionId = 35
+ BPF_FUNC_probe_write_user FunctionId = 36
+ BPF_FUNC_current_task_under_cgroup FunctionId = 37
+ BPF_FUNC_skb_change_tail FunctionId = 38
+ BPF_FUNC_skb_pull_data FunctionId = 39
+ BPF_FUNC_csum_update FunctionId = 40
+ BPF_FUNC_set_hash_invalid FunctionId = 41
+ BPF_FUNC_get_numa_node_id FunctionId = 42
+ BPF_FUNC_skb_change_head FunctionId = 43
+ BPF_FUNC_xdp_adjust_head FunctionId = 44
+ BPF_FUNC_probe_read_str FunctionId = 45
+ BPF_FUNC_get_socket_cookie FunctionId = 46
+ BPF_FUNC_get_socket_uid FunctionId = 47
+ BPF_FUNC_set_hash FunctionId = 48
+ BPF_FUNC_setsockopt FunctionId = 49
+ BPF_FUNC_skb_adjust_room FunctionId = 50
+ BPF_FUNC_redirect_map FunctionId = 51
+ BPF_FUNC_sk_redirect_map FunctionId = 52
+ BPF_FUNC_sock_map_update FunctionId = 53
+ BPF_FUNC_xdp_adjust_meta FunctionId = 54
+ BPF_FUNC_perf_event_read_value FunctionId = 55
+ BPF_FUNC_perf_prog_read_value FunctionId = 56
+ BPF_FUNC_getsockopt FunctionId = 57
+ BPF_FUNC_override_return FunctionId = 58
+ BPF_FUNC_sock_ops_cb_flags_set FunctionId = 59
+ BPF_FUNC_msg_redirect_map FunctionId = 60
+ BPF_FUNC_msg_apply_bytes FunctionId = 61
+ BPF_FUNC_msg_cork_bytes FunctionId = 62
+ BPF_FUNC_msg_pull_data FunctionId = 63
+ BPF_FUNC_bind FunctionId = 64
+ BPF_FUNC_xdp_adjust_tail FunctionId = 65
+ BPF_FUNC_skb_get_xfrm_state FunctionId = 66
+ BPF_FUNC_get_stack FunctionId = 67
+ BPF_FUNC_skb_load_bytes_relative FunctionId = 68
+ BPF_FUNC_fib_lookup FunctionId = 69
+ BPF_FUNC_sock_hash_update FunctionId = 70
+ BPF_FUNC_msg_redirect_hash FunctionId = 71
+ BPF_FUNC_sk_redirect_hash FunctionId = 72
+ BPF_FUNC_lwt_push_encap FunctionId = 73
+ BPF_FUNC_lwt_seg6_store_bytes FunctionId = 74
+ BPF_FUNC_lwt_seg6_adjust_srh FunctionId = 75
+ BPF_FUNC_lwt_seg6_action FunctionId = 76
+ BPF_FUNC_rc_repeat FunctionId = 77
+ BPF_FUNC_rc_keydown FunctionId = 78
+ BPF_FUNC_skb_cgroup_id FunctionId = 79
+ BPF_FUNC_get_current_cgroup_id FunctionId = 80
+ BPF_FUNC_get_local_storage FunctionId = 81
+ BPF_FUNC_sk_select_reuseport FunctionId = 82
+ BPF_FUNC_skb_ancestor_cgroup_id FunctionId = 83
+ BPF_FUNC_sk_lookup_tcp FunctionId = 84
+ BPF_FUNC_sk_lookup_udp FunctionId = 85
+ BPF_FUNC_sk_release FunctionId = 86
+ BPF_FUNC_map_push_elem FunctionId = 87
+ BPF_FUNC_map_pop_elem FunctionId = 88
+ BPF_FUNC_map_peek_elem FunctionId = 89
+ BPF_FUNC_msg_push_data FunctionId = 90
+ BPF_FUNC_msg_pop_data FunctionId = 91
+ BPF_FUNC_rc_pointer_rel FunctionId = 92
+ BPF_FUNC_spin_lock FunctionId = 93
+ BPF_FUNC_spin_unlock FunctionId = 94
+ BPF_FUNC_sk_fullsock FunctionId = 95
+ BPF_FUNC_tcp_sock FunctionId = 96
+ BPF_FUNC_skb_ecn_set_ce FunctionId = 97
+ BPF_FUNC_get_listener_sock FunctionId = 98
+ BPF_FUNC_skc_lookup_tcp FunctionId = 99
+ BPF_FUNC_tcp_check_syncookie FunctionId = 100
+ BPF_FUNC_sysctl_get_name FunctionId = 101
+ BPF_FUNC_sysctl_get_current_value FunctionId = 102
+ BPF_FUNC_sysctl_get_new_value FunctionId = 103
+ BPF_FUNC_sysctl_set_new_value FunctionId = 104
+ BPF_FUNC_strtol FunctionId = 105
+ BPF_FUNC_strtoul FunctionId = 106
+ BPF_FUNC_sk_storage_get FunctionId = 107
+ BPF_FUNC_sk_storage_delete FunctionId = 108
+ BPF_FUNC_send_signal FunctionId = 109
+ BPF_FUNC_tcp_gen_syncookie FunctionId = 110
+ BPF_FUNC_skb_output FunctionId = 111
+ BPF_FUNC_probe_read_user FunctionId = 112
+ BPF_FUNC_probe_read_kernel FunctionId = 113
+ BPF_FUNC_probe_read_user_str FunctionId = 114
+ BPF_FUNC_probe_read_kernel_str FunctionId = 115
+ BPF_FUNC_tcp_send_ack FunctionId = 116
+ BPF_FUNC_send_signal_thread FunctionId = 117
+ BPF_FUNC_jiffies64 FunctionId = 118
+ BPF_FUNC_read_branch_records FunctionId = 119
+ BPF_FUNC_get_ns_current_pid_tgid FunctionId = 120
+ BPF_FUNC_xdp_output FunctionId = 121
+ BPF_FUNC_get_netns_cookie FunctionId = 122
+ BPF_FUNC_get_current_ancestor_cgroup_id FunctionId = 123
+ BPF_FUNC_sk_assign FunctionId = 124
+ BPF_FUNC_ktime_get_boot_ns FunctionId = 125
+ BPF_FUNC_seq_printf FunctionId = 126
+ BPF_FUNC_seq_write FunctionId = 127
+ BPF_FUNC_sk_cgroup_id FunctionId = 128
+ BPF_FUNC_sk_ancestor_cgroup_id FunctionId = 129
+ BPF_FUNC_ringbuf_output FunctionId = 130
+ BPF_FUNC_ringbuf_reserve FunctionId = 131
+ BPF_FUNC_ringbuf_submit FunctionId = 132
+ BPF_FUNC_ringbuf_discard FunctionId = 133
+ BPF_FUNC_ringbuf_query FunctionId = 134
+ BPF_FUNC_csum_level FunctionId = 135
+ BPF_FUNC_skc_to_tcp6_sock FunctionId = 136
+ BPF_FUNC_skc_to_tcp_sock FunctionId = 137
+ BPF_FUNC_skc_to_tcp_timewait_sock FunctionId = 138
+ BPF_FUNC_skc_to_tcp_request_sock FunctionId = 139
+ BPF_FUNC_skc_to_udp6_sock FunctionId = 140
+ BPF_FUNC_get_task_stack FunctionId = 141
+ BPF_FUNC_load_hdr_opt FunctionId = 142
+ BPF_FUNC_store_hdr_opt FunctionId = 143
+ BPF_FUNC_reserve_hdr_opt FunctionId = 144
+ BPF_FUNC_inode_storage_get FunctionId = 145
+ BPF_FUNC_inode_storage_delete FunctionId = 146
+ BPF_FUNC_d_path FunctionId = 147
+ BPF_FUNC_copy_from_user FunctionId = 148
+ BPF_FUNC_snprintf_btf FunctionId = 149
+ BPF_FUNC_seq_printf_btf FunctionId = 150
+ BPF_FUNC_skb_cgroup_classid FunctionId = 151
+ BPF_FUNC_redirect_neigh FunctionId = 152
+ BPF_FUNC_per_cpu_ptr FunctionId = 153
+ BPF_FUNC_this_cpu_ptr FunctionId = 154
+ BPF_FUNC_redirect_peer FunctionId = 155
+ BPF_FUNC_task_storage_get FunctionId = 156
+ BPF_FUNC_task_storage_delete FunctionId = 157
+ BPF_FUNC_get_current_task_btf FunctionId = 158
+ BPF_FUNC_bprm_opts_set FunctionId = 159
+ BPF_FUNC_ktime_get_coarse_ns FunctionId = 160
+ BPF_FUNC_ima_inode_hash FunctionId = 161
+ BPF_FUNC_sock_from_file FunctionId = 162
+ BPF_FUNC_check_mtu FunctionId = 163
+ BPF_FUNC_for_each_map_elem FunctionId = 164
+ BPF_FUNC_snprintf FunctionId = 165
+ BPF_FUNC_sys_bpf FunctionId = 166
+ BPF_FUNC_btf_find_by_name_kind FunctionId = 167
+ BPF_FUNC_sys_close FunctionId = 168
+ BPF_FUNC_timer_init FunctionId = 169
+ BPF_FUNC_timer_set_callback FunctionId = 170
+ BPF_FUNC_timer_start FunctionId = 171
+ BPF_FUNC_timer_cancel FunctionId = 172
+ BPF_FUNC_get_func_ip FunctionId = 173
+ BPF_FUNC_get_attach_cookie FunctionId = 174
+ BPF_FUNC_task_pt_regs FunctionId = 175
+ BPF_FUNC_get_branch_snapshot FunctionId = 176
+ BPF_FUNC_trace_vprintk FunctionId = 177
+ BPF_FUNC_skc_to_unix_sock FunctionId = 178
+ BPF_FUNC_kallsyms_lookup_name FunctionId = 179
+ BPF_FUNC_find_vma FunctionId = 180
+ BPF_FUNC_loop FunctionId = 181
+ BPF_FUNC_strncmp FunctionId = 182
+ BPF_FUNC_get_func_arg FunctionId = 183
+ BPF_FUNC_get_func_ret FunctionId = 184
+ BPF_FUNC_get_func_arg_cnt FunctionId = 185
+ BPF_FUNC_get_retval FunctionId = 186
+ BPF_FUNC_set_retval FunctionId = 187
+ BPF_FUNC_xdp_get_buff_len FunctionId = 188
+ BPF_FUNC_xdp_load_bytes FunctionId = 189
+ BPF_FUNC_xdp_store_bytes FunctionId = 190
+ BPF_FUNC_copy_from_user_task FunctionId = 191
+ BPF_FUNC_skb_set_tstamp FunctionId = 192
+ BPF_FUNC_ima_file_hash FunctionId = 193
+ __BPF_FUNC_MAX_ID FunctionId = 194
+)
+
+type HdrStartOff int32
+
+const (
+ BPF_HDR_START_MAC HdrStartOff = 0
+ BPF_HDR_START_NET HdrStartOff = 1
+)
+
+type LinkType int32
+
+const (
+ BPF_LINK_TYPE_UNSPEC LinkType = 0
+ BPF_LINK_TYPE_RAW_TRACEPOINT LinkType = 1
+ BPF_LINK_TYPE_TRACING LinkType = 2
+ BPF_LINK_TYPE_CGROUP LinkType = 3
+ BPF_LINK_TYPE_ITER LinkType = 4
+ BPF_LINK_TYPE_NETNS LinkType = 5
+ BPF_LINK_TYPE_XDP LinkType = 6
+ BPF_LINK_TYPE_PERF_EVENT LinkType = 7
+ BPF_LINK_TYPE_KPROBE_MULTI LinkType = 8
+ MAX_BPF_LINK_TYPE LinkType = 9
+)
+
+type MapType int32
+
+const (
+ BPF_MAP_TYPE_UNSPEC MapType = 0
+ BPF_MAP_TYPE_HASH MapType = 1
+ BPF_MAP_TYPE_ARRAY MapType = 2
+ BPF_MAP_TYPE_PROG_ARRAY MapType = 3
+ BPF_MAP_TYPE_PERF_EVENT_ARRAY MapType = 4
+ BPF_MAP_TYPE_PERCPU_HASH MapType = 5
+ BPF_MAP_TYPE_PERCPU_ARRAY MapType = 6
+ BPF_MAP_TYPE_STACK_TRACE MapType = 7
+ BPF_MAP_TYPE_CGROUP_ARRAY MapType = 8
+ BPF_MAP_TYPE_LRU_HASH MapType = 9
+ BPF_MAP_TYPE_LRU_PERCPU_HASH MapType = 10
+ BPF_MAP_TYPE_LPM_TRIE MapType = 11
+ BPF_MAP_TYPE_ARRAY_OF_MAPS MapType = 12
+ BPF_MAP_TYPE_HASH_OF_MAPS MapType = 13
+ BPF_MAP_TYPE_DEVMAP MapType = 14
+ BPF_MAP_TYPE_SOCKMAP MapType = 15
+ BPF_MAP_TYPE_CPUMAP MapType = 16
+ BPF_MAP_TYPE_XSKMAP MapType = 17
+ BPF_MAP_TYPE_SOCKHASH MapType = 18
+ BPF_MAP_TYPE_CGROUP_STORAGE MapType = 19
+ BPF_MAP_TYPE_REUSEPORT_SOCKARRAY MapType = 20
+ BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE MapType = 21
+ BPF_MAP_TYPE_QUEUE MapType = 22
+ BPF_MAP_TYPE_STACK MapType = 23
+ BPF_MAP_TYPE_SK_STORAGE MapType = 24
+ BPF_MAP_TYPE_DEVMAP_HASH MapType = 25
+ BPF_MAP_TYPE_STRUCT_OPS MapType = 26
+ BPF_MAP_TYPE_RINGBUF MapType = 27
+ BPF_MAP_TYPE_INODE_STORAGE MapType = 28
+ BPF_MAP_TYPE_TASK_STORAGE MapType = 29
+ BPF_MAP_TYPE_BLOOM_FILTER MapType = 30
+)
+
+type ProgType int32
+
+const (
+ BPF_PROG_TYPE_UNSPEC ProgType = 0
+ BPF_PROG_TYPE_SOCKET_FILTER ProgType = 1
+ BPF_PROG_TYPE_KPROBE ProgType = 2
+ BPF_PROG_TYPE_SCHED_CLS ProgType = 3
+ BPF_PROG_TYPE_SCHED_ACT ProgType = 4
+ BPF_PROG_TYPE_TRACEPOINT ProgType = 5
+ BPF_PROG_TYPE_XDP ProgType = 6
+ BPF_PROG_TYPE_PERF_EVENT ProgType = 7
+ BPF_PROG_TYPE_CGROUP_SKB ProgType = 8
+ BPF_PROG_TYPE_CGROUP_SOCK ProgType = 9
+ BPF_PROG_TYPE_LWT_IN ProgType = 10
+ BPF_PROG_TYPE_LWT_OUT ProgType = 11
+ BPF_PROG_TYPE_LWT_XMIT ProgType = 12
+ BPF_PROG_TYPE_SOCK_OPS ProgType = 13
+ BPF_PROG_TYPE_SK_SKB ProgType = 14
+ BPF_PROG_TYPE_CGROUP_DEVICE ProgType = 15
+ BPF_PROG_TYPE_SK_MSG ProgType = 16
+ BPF_PROG_TYPE_RAW_TRACEPOINT ProgType = 17
+ BPF_PROG_TYPE_CGROUP_SOCK_ADDR ProgType = 18
+ BPF_PROG_TYPE_LWT_SEG6LOCAL ProgType = 19
+ BPF_PROG_TYPE_LIRC_MODE2 ProgType = 20
+ BPF_PROG_TYPE_SK_REUSEPORT ProgType = 21
+ BPF_PROG_TYPE_FLOW_DISSECTOR ProgType = 22
+ BPF_PROG_TYPE_CGROUP_SYSCTL ProgType = 23
+ BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE ProgType = 24
+ BPF_PROG_TYPE_CGROUP_SOCKOPT ProgType = 25
+ BPF_PROG_TYPE_TRACING ProgType = 26
+ BPF_PROG_TYPE_STRUCT_OPS ProgType = 27
+ BPF_PROG_TYPE_EXT ProgType = 28
+ BPF_PROG_TYPE_LSM ProgType = 29
+ BPF_PROG_TYPE_SK_LOOKUP ProgType = 30
+ BPF_PROG_TYPE_SYSCALL ProgType = 31
+)
+
+type RetCode int32
+
+const (
+ BPF_OK RetCode = 0
+ BPF_DROP RetCode = 2
+ BPF_REDIRECT RetCode = 7
+ BPF_LWT_REROUTE RetCode = 128
+)
+
+type SkAction int32
+
+const (
+ SK_DROP SkAction = 0
+ SK_PASS SkAction = 1
+)
+
+type StackBuildIdStatus int32
+
+const (
+ BPF_STACK_BUILD_ID_EMPTY StackBuildIdStatus = 0
+ BPF_STACK_BUILD_ID_VALID StackBuildIdStatus = 1
+ BPF_STACK_BUILD_ID_IP StackBuildIdStatus = 2
+)
+
+type StatsType int32
+
+const (
+ BPF_STATS_RUN_TIME StatsType = 0
+)
+
+type XdpAction int32
+
+const (
+ XDP_ABORTED XdpAction = 0
+ XDP_DROP XdpAction = 1
+ XDP_PASS XdpAction = 2
+ XDP_TX XdpAction = 3
+ XDP_REDIRECT XdpAction = 4
+)
+
+type BtfInfo struct {
+ Btf Pointer
+ BtfSize uint32
+ Id BTFID
+ Name Pointer
+ NameLen uint32
+ KernelBtf uint32
+}
+
+type FuncInfo struct {
+ InsnOff uint32
+ TypeId uint32
+}
+
+type LineInfo struct {
+ InsnOff uint32
+ FileNameOff uint32
+ LineOff uint32
+ LineCol uint32
+}
+
+type LinkInfo struct {
+ Type LinkType
+ Id LinkID
+ ProgId uint32
+ _ [4]byte
+ Extra [16]uint8
+}
+
+type MapInfo struct {
+ Type uint32
+ Id uint32
+ KeySize uint32
+ ValueSize uint32
+ MaxEntries uint32
+ MapFlags uint32
+ Name ObjName
+ Ifindex uint32
+ BtfVmlinuxValueTypeId uint32
+ NetnsDev uint64
+ NetnsIno uint64
+ BtfId uint32
+ BtfKeyTypeId uint32
+ BtfValueTypeId uint32
+ _ [4]byte
+ MapExtra uint64
+}
+
+type ProgInfo struct {
+ Type uint32
+ Id uint32
+ Tag [8]uint8
+ JitedProgLen uint32
+ XlatedProgLen uint32
+ JitedProgInsns uint64
+ XlatedProgInsns Pointer
+ LoadTime uint64
+ CreatedByUid uint32
+ NrMapIds uint32
+ MapIds Pointer
+ Name ObjName
+ Ifindex uint32
+ _ [4]byte /* unsupported bitfield */
+ NetnsDev uint64
+ NetnsIno uint64
+ NrJitedKsyms uint32
+ NrJitedFuncLens uint32
+ JitedKsyms uint64
+ JitedFuncLens uint64
+ BtfId uint32
+ FuncInfoRecSize uint32
+ FuncInfo uint64
+ NrFuncInfo uint32
+ NrLineInfo uint32
+ LineInfo uint64
+ JitedLineInfo uint64
+ NrJitedLineInfo uint32
+ LineInfoRecSize uint32
+ JitedLineInfoRecSize uint32
+ NrProgTags uint32
+ ProgTags uint64
+ RunTimeNs uint64
+ RunCnt uint64
+ RecursionMisses uint64
+ VerifiedInsns uint32
+ _ [4]byte
+}
+
+type SkLookup struct {
+ Cookie uint64
+ Family uint32
+ Protocol uint32
+ RemoteIp4 [4]uint8
+ RemoteIp6 [16]uint8
+ RemotePort uint16
+ _ [2]byte
+ LocalIp4 [4]uint8
+ LocalIp6 [16]uint8
+ LocalPort uint32
+ IngressIfindex uint32
+ _ [4]byte
+}
+
+type XdpMd struct {
+ Data uint32
+ DataEnd uint32
+ DataMeta uint32
+ IngressIfindex uint32
+ RxQueueIndex uint32
+ EgressIfindex uint32
+}
+
+type BtfGetFdByIdAttr struct{ Id uint32 }
+
+func BtfGetFdById(attr *BtfGetFdByIdAttr) (*FD, error) {
+ fd, err := BPF(BPF_BTF_GET_FD_BY_ID, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ if err != nil {
+ return nil, err
+ }
+ return NewFD(int(fd))
+}
+
+type BtfGetNextIdAttr struct {
+ Id BTFID
+ NextId BTFID
+}
+
+func BtfGetNextId(attr *BtfGetNextIdAttr) error {
+ _, err := BPF(BPF_BTF_GET_NEXT_ID, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ return err
+}
+
+type BtfLoadAttr struct {
+ Btf Pointer
+ BtfLogBuf Pointer
+ BtfSize uint32
+ BtfLogSize uint32
+ BtfLogLevel uint32
+ _ [4]byte
+}
+
+func BtfLoad(attr *BtfLoadAttr) (*FD, error) {
+ fd, err := BPF(BPF_BTF_LOAD, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ if err != nil {
+ return nil, err
+ }
+ return NewFD(int(fd))
+}
+
+type EnableStatsAttr struct{ Type uint32 }
+
+func EnableStats(attr *EnableStatsAttr) (*FD, error) {
+ fd, err := BPF(BPF_ENABLE_STATS, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ if err != nil {
+ return nil, err
+ }
+ return NewFD(int(fd))
+}
+
+type IterCreateAttr struct {
+ LinkFd uint32
+ Flags uint32
+}
+
+func IterCreate(attr *IterCreateAttr) (*FD, error) {
+ fd, err := BPF(BPF_ITER_CREATE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ if err != nil {
+ return nil, err
+ }
+ return NewFD(int(fd))
+}
+
+type LinkCreateAttr struct {
+ ProgFd uint32
+ TargetFd uint32
+ AttachType AttachType
+ Flags uint32
+ TargetBtfId uint32
+ _ [28]byte
+}
+
+func LinkCreate(attr *LinkCreateAttr) (*FD, error) {
+ fd, err := BPF(BPF_LINK_CREATE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ if err != nil {
+ return nil, err
+ }
+ return NewFD(int(fd))
+}
+
+type LinkCreateIterAttr struct {
+ ProgFd uint32
+ TargetFd uint32
+ AttachType AttachType
+ Flags uint32
+ IterInfo Pointer
+ IterInfoLen uint32
+ _ [20]byte
+}
+
+func LinkCreateIter(attr *LinkCreateIterAttr) (*FD, error) {
+ fd, err := BPF(BPF_LINK_CREATE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ if err != nil {
+ return nil, err
+ }
+ return NewFD(int(fd))
+}
+
+type LinkCreatePerfEventAttr struct {
+ ProgFd uint32
+ TargetFd uint32
+ AttachType AttachType
+ Flags uint32
+ BpfCookie uint64
+ _ [24]byte
+}
+
+func LinkCreatePerfEvent(attr *LinkCreatePerfEventAttr) (*FD, error) {
+ fd, err := BPF(BPF_LINK_CREATE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ if err != nil {
+ return nil, err
+ }
+ return NewFD(int(fd))
+}
+
+type LinkUpdateAttr struct {
+ LinkFd uint32
+ NewProgFd uint32
+ Flags uint32
+ OldProgFd uint32
+}
+
+func LinkUpdate(attr *LinkUpdateAttr) error {
+ _, err := BPF(BPF_LINK_UPDATE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ return err
+}
+
+type MapCreateAttr struct {
+ MapType MapType
+ KeySize uint32
+ ValueSize uint32
+ MaxEntries uint32
+ MapFlags uint32
+ InnerMapFd uint32
+ NumaNode uint32
+ MapName ObjName
+ MapIfindex uint32
+ BtfFd uint32
+ BtfKeyTypeId uint32
+ BtfValueTypeId uint32
+ BtfVmlinuxValueTypeId uint32
+ MapExtra uint64
+}
+
+func MapCreate(attr *MapCreateAttr) (*FD, error) {
+ fd, err := BPF(BPF_MAP_CREATE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ if err != nil {
+ return nil, err
+ }
+ return NewFD(int(fd))
+}
+
+type MapDeleteBatchAttr struct {
+ InBatch Pointer
+ OutBatch Pointer
+ Keys Pointer
+ Values Pointer
+ Count uint32
+ MapFd uint32
+ ElemFlags uint64
+ Flags uint64
+}
+
+func MapDeleteBatch(attr *MapDeleteBatchAttr) error {
+ _, err := BPF(BPF_MAP_DELETE_BATCH, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ return err
+}
+
+type MapDeleteElemAttr struct {
+ MapFd uint32
+ _ [4]byte
+ Key Pointer
+ Value Pointer
+ Flags uint64
+}
+
+func MapDeleteElem(attr *MapDeleteElemAttr) error {
+ _, err := BPF(BPF_MAP_DELETE_ELEM, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ return err
+}
+
+type MapFreezeAttr struct{ MapFd uint32 }
+
+func MapFreeze(attr *MapFreezeAttr) error {
+ _, err := BPF(BPF_MAP_FREEZE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ return err
+}
+
+type MapGetFdByIdAttr struct{ Id uint32 }
+
+func MapGetFdById(attr *MapGetFdByIdAttr) (*FD, error) {
+ fd, err := BPF(BPF_MAP_GET_FD_BY_ID, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ if err != nil {
+ return nil, err
+ }
+ return NewFD(int(fd))
+}
+
+type MapGetNextIdAttr struct {
+ Id uint32
+ NextId uint32
+}
+
+func MapGetNextId(attr *MapGetNextIdAttr) error {
+ _, err := BPF(BPF_MAP_GET_NEXT_ID, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ return err
+}
+
+type MapGetNextKeyAttr struct {
+ MapFd uint32
+ _ [4]byte
+ Key Pointer
+ NextKey Pointer
+}
+
+func MapGetNextKey(attr *MapGetNextKeyAttr) error {
+ _, err := BPF(BPF_MAP_GET_NEXT_KEY, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ return err
+}
+
+type MapLookupAndDeleteBatchAttr struct {
+ InBatch Pointer
+ OutBatch Pointer
+ Keys Pointer
+ Values Pointer
+ Count uint32
+ MapFd uint32
+ ElemFlags uint64
+ Flags uint64
+}
+
+func MapLookupAndDeleteBatch(attr *MapLookupAndDeleteBatchAttr) error {
+ _, err := BPF(BPF_MAP_LOOKUP_AND_DELETE_BATCH, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ return err
+}
+
+type MapLookupAndDeleteElemAttr struct {
+ MapFd uint32
+ _ [4]byte
+ Key Pointer
+ Value Pointer
+ Flags uint64
+}
+
+func MapLookupAndDeleteElem(attr *MapLookupAndDeleteElemAttr) error {
+ _, err := BPF(BPF_MAP_LOOKUP_AND_DELETE_ELEM, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ return err
+}
+
+type MapLookupBatchAttr struct {
+ InBatch Pointer
+ OutBatch Pointer
+ Keys Pointer
+ Values Pointer
+ Count uint32
+ MapFd uint32
+ ElemFlags uint64
+ Flags uint64
+}
+
+func MapLookupBatch(attr *MapLookupBatchAttr) error {
+ _, err := BPF(BPF_MAP_LOOKUP_BATCH, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ return err
+}
+
+type MapLookupElemAttr struct {
+ MapFd uint32
+ _ [4]byte
+ Key Pointer
+ Value Pointer
+ Flags uint64
+}
+
+func MapLookupElem(attr *MapLookupElemAttr) error {
+ _, err := BPF(BPF_MAP_LOOKUP_ELEM, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ return err
+}
+
+type MapUpdateBatchAttr struct {
+ InBatch Pointer
+ OutBatch Pointer
+ Keys Pointer
+ Values Pointer
+ Count uint32
+ MapFd uint32
+ ElemFlags uint64
+ Flags uint64
+}
+
+func MapUpdateBatch(attr *MapUpdateBatchAttr) error {
+ _, err := BPF(BPF_MAP_UPDATE_BATCH, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ return err
+}
+
+type MapUpdateElemAttr struct {
+ MapFd uint32
+ _ [4]byte
+ Key Pointer
+ Value Pointer
+ Flags uint64
+}
+
+func MapUpdateElem(attr *MapUpdateElemAttr) error {
+ _, err := BPF(BPF_MAP_UPDATE_ELEM, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ return err
+}
+
+type ObjGetAttr struct {
+ Pathname Pointer
+ BpfFd uint32
+ FileFlags uint32
+}
+
+func ObjGet(attr *ObjGetAttr) (*FD, error) {
+ fd, err := BPF(BPF_OBJ_GET, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ if err != nil {
+ return nil, err
+ }
+ return NewFD(int(fd))
+}
+
+type ObjGetInfoByFdAttr struct {
+ BpfFd uint32
+ InfoLen uint32
+ Info Pointer
+}
+
+func ObjGetInfoByFd(attr *ObjGetInfoByFdAttr) error {
+ _, err := BPF(BPF_OBJ_GET_INFO_BY_FD, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ return err
+}
+
+type ObjPinAttr struct {
+ Pathname Pointer
+ BpfFd uint32
+ FileFlags uint32
+}
+
+func ObjPin(attr *ObjPinAttr) error {
+ _, err := BPF(BPF_OBJ_PIN, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ return err
+}
+
+type ProgAttachAttr struct {
+ TargetFd uint32
+ AttachBpfFd uint32
+ AttachType uint32
+ AttachFlags uint32
+ ReplaceBpfFd uint32
+}
+
+func ProgAttach(attr *ProgAttachAttr) error {
+ _, err := BPF(BPF_PROG_ATTACH, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ return err
+}
+
+type ProgBindMapAttr struct {
+ ProgFd uint32
+ MapFd uint32
+ Flags uint32
+}
+
+func ProgBindMap(attr *ProgBindMapAttr) error {
+ _, err := BPF(BPF_PROG_BIND_MAP, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ return err
+}
+
+type ProgDetachAttr struct {
+ TargetFd uint32
+ AttachBpfFd uint32
+ AttachType uint32
+}
+
+func ProgDetach(attr *ProgDetachAttr) error {
+ _, err := BPF(BPF_PROG_DETACH, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ return err
+}
+
+type ProgGetFdByIdAttr struct{ Id uint32 }
+
+func ProgGetFdById(attr *ProgGetFdByIdAttr) (*FD, error) {
+ fd, err := BPF(BPF_PROG_GET_FD_BY_ID, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ if err != nil {
+ return nil, err
+ }
+ return NewFD(int(fd))
+}
+
+type ProgGetNextIdAttr struct {
+ Id uint32
+ NextId uint32
+}
+
+func ProgGetNextId(attr *ProgGetNextIdAttr) error {
+ _, err := BPF(BPF_PROG_GET_NEXT_ID, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ return err
+}
+
+type ProgLoadAttr struct {
+ ProgType ProgType
+ InsnCnt uint32
+ Insns Pointer
+ License Pointer
+ LogLevel uint32
+ LogSize uint32
+ LogBuf Pointer
+ KernVersion uint32
+ ProgFlags uint32
+ ProgName ObjName
+ ProgIfindex uint32
+ ExpectedAttachType AttachType
+ ProgBtfFd uint32
+ FuncInfoRecSize uint32
+ FuncInfo Pointer
+ FuncInfoCnt uint32
+ LineInfoRecSize uint32
+ LineInfo Pointer
+ LineInfoCnt uint32
+ AttachBtfId uint32
+ AttachProgFd uint32
+ CoreReloCnt uint32
+ FdArray Pointer
+ CoreRelos Pointer
+ CoreReloRecSize uint32
+ _ [4]byte
+}
+
+func ProgLoad(attr *ProgLoadAttr) (*FD, error) {
+ fd, err := BPF(BPF_PROG_LOAD, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ if err != nil {
+ return nil, err
+ }
+ return NewFD(int(fd))
+}
+
+type ProgRunAttr struct {
+ ProgFd uint32
+ Retval uint32
+ DataSizeIn uint32
+ DataSizeOut uint32
+ DataIn Pointer
+ DataOut Pointer
+ Repeat uint32
+ Duration uint32
+ CtxSizeIn uint32
+ CtxSizeOut uint32
+ CtxIn Pointer
+ CtxOut Pointer
+ Flags uint32
+ Cpu uint32
+ BatchSize uint32
+ _ [4]byte
+}
+
+func ProgRun(attr *ProgRunAttr) error {
+ _, err := BPF(BPF_PROG_TEST_RUN, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ return err
+}
+
+type RawTracepointOpenAttr struct {
+ Name Pointer
+ ProgFd uint32
+ _ [4]byte
+}
+
+func RawTracepointOpen(attr *RawTracepointOpenAttr) (*FD, error) {
+ fd, err := BPF(BPF_RAW_TRACEPOINT_OPEN, unsafe.Pointer(attr), unsafe.Sizeof(*attr))
+ if err != nil {
+ return nil, err
+ }
+ return NewFD(int(fd))
+}
+
+type CgroupLinkInfo struct {
+ CgroupId uint64
+ AttachType AttachType
+ _ [4]byte
+}
+
+type IterLinkInfo struct {
+ TargetName Pointer
+ TargetNameLen uint32
+}
+
+type NetNsLinkInfo struct {
+ NetnsIno uint32
+ AttachType AttachType
+}
+
+type RawTracepointLinkInfo struct {
+ TpName Pointer
+ TpNameLen uint32
+ _ [4]byte
+}
+
+type TracingLinkInfo struct {
+ AttachType AttachType
+ TargetObjId uint32
+ TargetBtfId uint32
+}
+
+type XDPLinkInfo struct{ Ifindex uint32 }