Skip to content

Commit

Permalink
kfunc: Update kfuncs for kernel v6.11
Browse files Browse the repository at this point in the history
This commit does the following:
* Update the vmlinux blob to v6.11
* Add pages for new kfuncs
* Update cilium/ebpf to experimental version with decl tag support
* Use the kernels bpf_kfunc decl tag to detect missing kfuncs

Signed-off-by: Dylan Reimerink <[email protected]>
  • Loading branch information
dylandreimerink committed Sep 26, 2024
1 parent d4c53bc commit e9cdbf7
Show file tree
Hide file tree
Showing 50 changed files with 846 additions and 32 deletions.
1 change: 1 addition & 0 deletions .aspell.en.pws
Original file line number Diff line number Diff line change
Expand Up @@ -209,3 +209,4 @@ UID
GID
decl
inlining
backend
24 changes: 24 additions & 0 deletions data/feature-versions.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2062,3 +2062,27 @@
- name: bpf_arena_free_pages
version: v6.9
commit: 317460317a02a1af512697e6e964298dedd8a163
- name: bpf_iter_bits_destroy
version: v6.11
commit: 4665415975b0827e9646cab91c61d02a6b364d59
- name: bpf_iter_bits_new
version: v6.11
commit: 4665415975b0827e9646cab91c61d02a6b364d59
- name: bpf_iter_bits_next
version: v6.11
commit: 4665415975b0827e9646cab91c61d02a6b364d59
- name: bpf_xdp_flow_lookup
version: v6.11
commit: 391bb6594fd3a567efb1cd3efc8136c78c4c9e31
- name: hid_bpf_hw_output_report
version: v6.10
commit: 5599f80196612efde96dbe6ef18f6ecc0cb4ba19
- name: hid_bpf_input_report
version: v6.10
commit: 9be50ac30a83896a753ab9f64e941763bb7900be
- name: hid_bpf_try_input_report
version: v6.11
commit: 9acbb7ba4589d4715141d4e14230a828ddc95f3d
- name: bpf_sk_assign_tcp_reqsk
version: v6.11
commit: e472f88891abbc535a5e16a68a104073985f6061
33 changes: 33 additions & 0 deletions data/kfuncs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,12 @@ sets:
- name: bpf_wq_start
- name: bpf_preempt_disable
- name: bpf_preempt_enable
- name: bpf_iter_bits_new
flags: [KF_ITER_NEW]
- name: bpf_iter_bits_next
flags: [KF_ITER_NEXT, KF_RET_NULL]
- name: bpf_iter_bits_destroy
flags: [KF_ITER_DESTROY]
program_types:
- BPF_PROG_TYPE_UNSPEC

Expand Down Expand Up @@ -356,6 +362,17 @@ sets:
funcs:
- name: hid_bpf_get_data
flags: [KF_RET_NULL]
- name: hid_bpf_allocate_context
flags: [KF_ACQUIRE, KF_RET_NULL, KF_SLEEPABLE]
- name: hid_bpf_release_context
flags: [KF_RELEASE, KF_SLEEPABLE]
- name: hid_bpf_hw_request
flags: [KF_SLEEPABLE]
- name: hid_bpf_hw_output_report
flags: [KF_SLEEPABLE]
- name: hid_bpf_input_report
flags: [KF_SLEEPABLE]
- name: hid_bpf_try_input_report
program_types:
- BPF_PROG_TYPE_TRACING
- BPF_PROG_TYPE_LSM
Expand All @@ -368,6 +385,8 @@ sets:
- name: hid_bpf_release_context
flags: [KF_RELEASE]
- name: hid_bpf_hw_request
- name: hid_bpf_hw_output_report
- name: hid_bpf_input_report
program_types:
- BPF_PROG_TYPE_SYSCALL

Expand Down Expand Up @@ -410,3 +429,17 @@ sets:
flags: [KF_TRUSTED_ARGS, KF_SLEEPABLE]
program_types:
- BPF_PROG_TYPE_UNSPEC

bpf_kfunc_check_set_tcp_reqsk:
funcs:
- name: bpf_sk_assign_tcp_reqsk
flags: [KF_TRUSTED_ARGS]
program_types:
- BPF_PROG_TYPE_SCHED_CLS

nf_ft_kfunc_set:
funcs:
- name: bpf_xdp_flow_lookup
flags: [KF_TRUSTED_ARGS, KF_RET_NULL]
program_types:
- BPF_PROG_TYPE_XDP
1 change: 1 addition & 0 deletions docs/linux/concepts/dynptrs.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ The following functions create or manipulate dynptrs:
* [`bpf_dynptr_clone`](../kfuncs/bpf_dynptr_clone.md) - Clones a dynptr. The new dynptr points to the same underlying data and has the same metadata as the original dynptr.

The following functions are not dynptr centric, but do require dynptrs in their arguments:

* [`bpf_ringbuf_submit_dynptr`](../helper-function/bpf_ringbuf_submit_dynptr.md) - Submits a dynptr to a ring buffer.
* [`bpf_ringbuf_discard_dynptr`](../helper-function/bpf_ringbuf_discard_dynptr.md) - Discards a dynptr from a ring buffer.
* [`bpf_user_ringbuf_drain`](../helper-function/bpf_user_ringbuf_drain.md) - Drains samples from a user ring buffer and invokes a callback for each sample, with a dynptr containing the sample data.
Expand Down
11 changes: 11 additions & 0 deletions docs/linux/kfuncs/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,10 @@
- [`bpf_iter_task_vma_new`](bpf_iter_task_vma_new.md)
- [`bpf_iter_task_vma_next`](bpf_iter_task_vma_next.md)
- [`bpf_iter_task_vma_destroy`](bpf_iter_task_vma_destroy.md)
- Kfuncs for bits
- [`bpf_iter_bits_new`](bpf_iter_bits_new.md)
- [`bpf_iter_bits_next`](bpf_iter_bits_next.md)
- [`bpf_iter_bits_destroy`](bpf_iter_bits_destroy.md)
- Kfuncs for open coded task cGroup iterators
- [`bpf_iter_css_task_new`](bpf_iter_css_task_new.md)
- [`bpf_iter_css_task_next`](bpf_iter_css_task_next.md)
Expand Down Expand Up @@ -160,6 +164,8 @@
- Foo over UDP KFuncs
- [`bpf_skb_set_fou_encap`](bpf_skb_set_fou_encap.md)
- [`bpf_skb_get_fou_encap`](bpf_skb_get_fou_encap.md)
- SYNCookie KFuncs
- [`bpf_sk_assign_tcp_reqsk`](bpf_sk_assign_tcp_reqsk.md)
- Connection tracking KFuncs
- [`bpf_ct_set_nat_info`](bpf_ct_set_nat_info.md)
- [`bpf_xdp_ct_alloc`](bpf_xdp_ct_alloc.md)
Expand All @@ -172,6 +178,8 @@
- [`bpf_ct_change_timeout`](bpf_ct_change_timeout.md)
- [`bpf_ct_set_status`](bpf_ct_set_status.md)
- [`bpf_ct_change_status`](bpf_ct_change_status.md)
- XDP KFuncs
- [`bpf_xdp_flow_lookup`](bpf_xdp_flow_lookup.md)
- XFRM KFuncs
- [`bpf_skb_get_xfrm_info`](bpf_skb_get_xfrm_info.md)
- [`bpf_skb_set_xfrm_info`](bpf_skb_set_xfrm_info.md)
Expand All @@ -183,6 +191,9 @@
- [`hid_bpf_allocate_context`](hid_bpf_allocate_context.md)
- [`hid_bpf_release_context`](hid_bpf_release_context.md)
- [`hid_bpf_hw_request`](hid_bpf_hw_request.md)
- [`hid_bpf_hw_output_report`](hid_bpf_hw_output_report.md)
- [`hid_bpf_input_report`](hid_bpf_input_report.md)
- [`hid_bpf_try_input_report`](hid_bpf_try_input_report.md)
- KProbe session Kfuncs
- [`bpf_session_cookie`](bpf_session_cookie.md)
- [`bpf_session_is_return`](bpf_session_is_return.md)
Expand Down
2 changes: 1 addition & 1 deletion docs/linux/kfuncs/bpf_crypto_decrypt.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ Decrypts provided buffer using IV data and the crypto context. Crypto context mu
Return 0 on success, or a negative error code on failure.

<!-- [KFUNC_DEF] -->
`#!c int bpf_crypto_decrypt(struct bpf_crypto_ctx *ctx, const struct bpf_dynptr_kern *src, const struct bpf_dynptr_kern *dst, const struct bpf_dynptr_kern *siv)`
`#!c int bpf_crypto_decrypt(struct bpf_crypto_ctx *ctx, const struct bpf_dynptr *src, const struct bpf_dynptr *dst, const struct bpf_dynptr *siv__nullable)`
<!-- [/KFUNC_DEF] -->

## Usage
Expand Down
2 changes: 1 addition & 1 deletion docs/linux/kfuncs/bpf_crypto_encrypt.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ Encrypts provided buffer using IV data and the crypto context. Crypto context mu
Return 0 on success, or a negative error code on failure.

<!-- [KFUNC_DEF] -->
`#!c int bpf_crypto_encrypt(struct bpf_crypto_ctx *ctx, const struct bpf_dynptr_kern *src, const struct bpf_dynptr_kern *dst, const struct bpf_dynptr_kern *siv)`
`#!c int bpf_crypto_encrypt(struct bpf_crypto_ctx *ctx, const struct bpf_dynptr *src, const struct bpf_dynptr *dst, const struct bpf_dynptr *siv__nullable)`
<!-- [/KFUNC_DEF] -->

## Usage
Expand Down
2 changes: 1 addition & 1 deletion docs/linux/kfuncs/bpf_dynptr_adjust.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Adjusts the dynptr to reflect the new [start, end) interval.
It advances the offset of the dynptr by `start` bytes, and if end is less than the size of the dynptr, then this will trim the dynptr accordingly.

<!-- [KFUNC_DEF] -->
`#!c int bpf_dynptr_adjust(struct bpf_dynptr_kern *ptr, u32 start, u32 end)`
`#!c int bpf_dynptr_adjust(const struct bpf_dynptr *p, u32 start, u32 end)`
<!-- [/KFUNC_DEF] -->

## Usage
Expand Down
2 changes: 1 addition & 1 deletion docs/linux/kfuncs/bpf_dynptr_clone.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ Any writes to a dynptr will be reflected across all instances (by 'instance', th
Changing the view of the dynptr (for example advancing the offset or trimming the size) will only affect that dynptr and not affect any other instances.

<!-- [KFUNC_DEF] -->
`#!c int bpf_dynptr_clone(struct bpf_dynptr_kern *ptr, struct bpf_dynptr_kern *clone__uninit)`
`#!c int bpf_dynptr_clone(const struct bpf_dynptr *p, struct bpf_dynptr *clone__uninit)`
<!-- [/KFUNC_DEF] -->

## Usage
Expand Down
2 changes: 1 addition & 1 deletion docs/linux/kfuncs/bpf_dynptr_from_skb.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ For bpf program types that don't support writes on skb data, the dynptr is read-
For reads and writes through the [`bpf_dynptr_read()`](../helper-function/bpf_dynptr_read.md) and [`bpf_dynptr_write()`](../helper-function/bpf_dynptr_write.md) interfaces, reading and writing from/to data in the head as well as from/to non-linear paged buffers is supported. Data slices through the bpf_dynptr_data API are not supported; instead [`bpf_dynptr_slice()`](bpf_dynptr_slice.md) and [`bpf_dynptr_slice_rdwr()`](bpf_dynptr_slice_rdwr.md) should be used.

<!-- [KFUNC_DEF] -->
`#!c int bpf_dynptr_from_skb(struct sk_buff *skb, u64 flags, struct bpf_dynptr_kern *ptr__uninit)`
`#!c int bpf_dynptr_from_skb(struct __sk_buff *s, u64 flags, struct bpf_dynptr *ptr__uninit)`
<!-- [/KFUNC_DEF] -->

## Usage
Expand Down
2 changes: 1 addition & 1 deletion docs/linux/kfuncs/bpf_dynptr_from_xdp.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Get dynptrs whose underlying pointer points to a xdp_buff.
For reads and writes on the dynptr, this includes reading/writing from/to and across fragments. Data slices through the [`bpf_dynptr_data`](../helper-function/bpf_dynptr_data.md) API are not supported; instead [`bpf_dynptr_slice()`](bpf_dynptr_slice.md) and [`bpf_dynptr_slice_rdwr()`](bpf_dynptr_slice_rdwr.md) should be used.

<!-- [KFUNC_DEF] -->
`#!c int bpf_dynptr_from_xdp(struct xdp_buff *xdp, u64 flags, struct bpf_dynptr_kern *ptr__uninit)`
`#!c int bpf_dynptr_from_xdp(struct xdp_md *x, u64 flags, struct bpf_dynptr *ptr__uninit)`
<!-- [/KFUNC_DEF] -->

## Usage
Expand Down
2 changes: 1 addition & 1 deletion docs/linux/kfuncs/bpf_dynptr_is_null.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Returns true if the dynptr is `null` / invalid (determined by whether `ptr->data
the dynptr is a valid dynptr.

<!-- [KFUNC_DEF] -->
`#!c bool bpf_dynptr_is_null(struct bpf_dynptr_kern *ptr)`
`#!c bool bpf_dynptr_is_null(const struct bpf_dynptr *p)`
<!-- [/KFUNC_DEF] -->

## Usage
Expand Down
2 changes: 1 addition & 1 deletion docs/linux/kfuncs/bpf_dynptr_is_rdonly.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Returns true if the dynptr is read-only
`bpf_dynptr_is_rdonly` returns true if the dynptr is read-only, else false if the dynptr is read-writable. If the dynptr is null / invalid, false is returned by default.

<!-- [KFUNC_DEF] -->
`#!c bool bpf_dynptr_is_rdonly(struct bpf_dynptr_kern *ptr)`
`#!c bool bpf_dynptr_is_rdonly(const struct bpf_dynptr *p)`
<!-- [/KFUNC_DEF] -->

## Usage
Expand Down
2 changes: 1 addition & 1 deletion docs/linux/kfuncs/bpf_dynptr_size.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ Returns the number of usable bytes in a dynptr.
## Definition

<!-- [KFUNC_DEF] -->
`#!c __u32 bpf_dynptr_size(const struct bpf_dynptr_kern *ptr)`
`#!c __u32 bpf_dynptr_size(const struct bpf_dynptr *p)`
<!-- [/KFUNC_DEF] -->

## Usage
Expand Down
2 changes: 1 addition & 1 deletion docs/linux/kfuncs/bpf_dynptr_slice.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Get a pointer to dynptr data up to `len` bytes for read only access.
If the dynptr doesn't have continuous data up to `len` bytes, return NULL.

<!-- [KFUNC_DEF] -->
`#!c void *bpf_dynptr_slice(const struct bpf_dynptr_kern *ptr, u32 offset, void *buffer__opt, u32 buffer__szk)`
`#!c void *bpf_dynptr_slice(const struct bpf_dynptr *p, u32 offset, void *buffer__opt, u32 buffer__szk)`

!!! note
The pointer returned by the kfunc may be NULL. Hence, it forces the user to do a NULL check on the pointer returned
Expand Down
2 changes: 1 addition & 1 deletion docs/linux/kfuncs/bpf_dynptr_slice_rdwr.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Get a pointer to dynptr data up to `len` bytes for read write access.
If the dynptr doesn't have continuous data up to `len` bytes, or the dynptr is read only, return `NULL`.

<!-- [KFUNC_DEF] -->
`#!c void *bpf_dynptr_slice_rdwr(const struct bpf_dynptr_kern *ptr, u32 offset, void *buffer__opt, u32 buffer__szk)`
`#!c void *bpf_dynptr_slice_rdwr(const struct bpf_dynptr *p, u32 offset, void *buffer__opt, u32 buffer__szk)`

!!! note
The pointer returned by the kfunc may be NULL. Hence, it forces the user to do a NULL check on the pointer returned
Expand Down
2 changes: 1 addition & 1 deletion docs/linux/kfuncs/bpf_get_file_xattr.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ For security reasons, only `name__str` with prefix "user." is allowed.
0 on success, a negative value on error.

<!-- [KFUNC_DEF] -->
`#!c int bpf_get_file_xattr(struct file *file, const char *name__str, struct bpf_dynptr_kern *value_ptr)`
`#!c int bpf_get_file_xattr(struct file *file, const char *name__str, struct bpf_dynptr *value_p)`

!!! note
This function may sleep, and therefore can only be used from [sleepable programs](../syscall/BPF_PROG_LOAD.md/#bpf_f_sleepable).
Expand Down
2 changes: 1 addition & 1 deletion docs/linux/kfuncs/bpf_get_fsverity_digest.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ Get the `fs-verity` digest of a file.
## Definition

<!-- [KFUNC_DEF] -->
`#!c int bpf_get_fsverity_digest(struct file *file, struct bpf_dynptr_kern *digest_ptr)`
`#!c int bpf_get_fsverity_digest(struct file *file, struct bpf_dynptr *digest_p)`
<!-- [/KFUNC_DEF] -->

## Usage
Expand Down
57 changes: 57 additions & 0 deletions docs/linux/kfuncs/bpf_iter_bits_destroy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
---
title: "KFunc 'bpf_iter_bits_destroy'"
description: "This page documents the 'bpf_iter_bits_destroy' eBPF kfunc, including its definition, usage, program types that can use it, and examples."
---
# KFunc `bpf_iter_bits_destroy`

<!-- [FEATURE_TAG](bpf_iter_bits_destroy) -->
[:octicons-tag-24: v6.11](https://github.com/torvalds/linux/commit/4665415975b0827e9646cab91c61d02a6b364d59)
<!-- [/FEATURE_TAG] -->

Destroy a `bpf_iter_bits`

## Definition

Destroy the resource associated with the `bpf_iter_bits`.

**Parameters**

`it`: The `bpf_iter_bits` to be destroyed

<!-- [KFUNC_DEF] -->
`#!c void bpf_iter_bits_destroy(struct bpf_iter_bits *it)`
<!-- [/KFUNC_DEF] -->

## Usage

!!! example "Docs could be improved"
This part of the docs is incomplete, contributions are very welcome

### Program types

The following program types can make use of this kfunc:

<!-- [KFUNC_PROG_REF] -->
- [`BPF_PROG_TYPE_CGROUP_SKB`](../program-type/BPF_PROG_TYPE_CGROUP_SKB.md)
- [`BPF_PROG_TYPE_CGROUP_SOCK_ADDR`](../program-type/BPF_PROG_TYPE_CGROUP_SOCK_ADDR.md)
- [`BPF_PROG_TYPE_LSM`](../program-type/BPF_PROG_TYPE_LSM.md)
- [`BPF_PROG_TYPE_LWT_IN`](../program-type/BPF_PROG_TYPE_LWT_IN.md)
- [`BPF_PROG_TYPE_LWT_OUT`](../program-type/BPF_PROG_TYPE_LWT_OUT.md)
- [`BPF_PROG_TYPE_LWT_SEG6LOCAL`](../program-type/BPF_PROG_TYPE_LWT_SEG6LOCAL.md)
- [`BPF_PROG_TYPE_LWT_XMIT`](../program-type/BPF_PROG_TYPE_LWT_XMIT.md)
- [`BPF_PROG_TYPE_NETFILTER`](../program-type/BPF_PROG_TYPE_NETFILTER.md)
- [`BPF_PROG_TYPE_SCHED_ACT`](../program-type/BPF_PROG_TYPE_SCHED_ACT.md)
- [`BPF_PROG_TYPE_SCHED_CLS`](../program-type/BPF_PROG_TYPE_SCHED_CLS.md)
- [`BPF_PROG_TYPE_SK_SKB`](../program-type/BPF_PROG_TYPE_SK_SKB.md)
- [`BPF_PROG_TYPE_SOCKET_FILTER`](../program-type/BPF_PROG_TYPE_SOCKET_FILTER.md)
- [`BPF_PROG_TYPE_STRUCT_OPS`](../program-type/BPF_PROG_TYPE_STRUCT_OPS.md)
- [`BPF_PROG_TYPE_SYSCALL`](../program-type/BPF_PROG_TYPE_SYSCALL.md)
- [`BPF_PROG_TYPE_TRACING`](../program-type/BPF_PROG_TYPE_TRACING.md)
- [`BPF_PROG_TYPE_XDP`](../program-type/BPF_PROG_TYPE_XDP.md)
<!-- [/KFUNC_PROG_REF] -->

### Example

!!! example "Docs could be improved"
This part of the docs is incomplete, contributions are very welcome

65 changes: 65 additions & 0 deletions docs/linux/kfuncs/bpf_iter_bits_new.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
---
title: "KFunc 'bpf_iter_bits_new'"
description: "This page documents the 'bpf_iter_bits_new' eBPF kfunc, including its definition, usage, program types that can use it, and examples."
---
# KFunc `bpf_iter_bits_new`

<!-- [FEATURE_TAG](bpf_iter_bits_new) -->
[:octicons-tag-24: v6.11](https://github.com/torvalds/linux/commit/4665415975b0827e9646cab91c61d02a6b364d59)
<!-- [/FEATURE_TAG] -->

Initialize a new bits iterator for a given memory area

## Definition

This function initializes a new `bpf_iter_bits` structure for iterating over a memory area which is specified by the `unsafe_ptr__ign` and `nr_words`. It copies the data of the memory area to the newly created bpf_iter_bits `it` for subsequent iteration operations.

**Parameters**

`it`: The new bpf_iter_bits to be created

`unsafe_ptr__ign`: A pointer pointing to a memory area to be iterated over

`nr_words`: The size of the specified memory area, measured in 8-byte units. Due to the limitation of memalloc, it can't be greater than 512.

**Return**

On success, 0 is returned. On failure, `ERR` is returned.

<!-- [KFUNC_DEF] -->
`#!c int bpf_iter_bits_new(struct bpf_iter_bits *it, const u64 *unsafe_ptr__ign, u32 nr_words)`
<!-- [/KFUNC_DEF] -->

## Usage

!!! example "Docs could be improved"
This part of the docs is incomplete, contributions are very welcome

### Program types

The following program types can make use of this kfunc:

<!-- [KFUNC_PROG_REF] -->
- [`BPF_PROG_TYPE_CGROUP_SKB`](../program-type/BPF_PROG_TYPE_CGROUP_SKB.md)
- [`BPF_PROG_TYPE_CGROUP_SOCK_ADDR`](../program-type/BPF_PROG_TYPE_CGROUP_SOCK_ADDR.md)
- [`BPF_PROG_TYPE_LSM`](../program-type/BPF_PROG_TYPE_LSM.md)
- [`BPF_PROG_TYPE_LWT_IN`](../program-type/BPF_PROG_TYPE_LWT_IN.md)
- [`BPF_PROG_TYPE_LWT_OUT`](../program-type/BPF_PROG_TYPE_LWT_OUT.md)
- [`BPF_PROG_TYPE_LWT_SEG6LOCAL`](../program-type/BPF_PROG_TYPE_LWT_SEG6LOCAL.md)
- [`BPF_PROG_TYPE_LWT_XMIT`](../program-type/BPF_PROG_TYPE_LWT_XMIT.md)
- [`BPF_PROG_TYPE_NETFILTER`](../program-type/BPF_PROG_TYPE_NETFILTER.md)
- [`BPF_PROG_TYPE_SCHED_ACT`](../program-type/BPF_PROG_TYPE_SCHED_ACT.md)
- [`BPF_PROG_TYPE_SCHED_CLS`](../program-type/BPF_PROG_TYPE_SCHED_CLS.md)
- [`BPF_PROG_TYPE_SK_SKB`](../program-type/BPF_PROG_TYPE_SK_SKB.md)
- [`BPF_PROG_TYPE_SOCKET_FILTER`](../program-type/BPF_PROG_TYPE_SOCKET_FILTER.md)
- [`BPF_PROG_TYPE_STRUCT_OPS`](../program-type/BPF_PROG_TYPE_STRUCT_OPS.md)
- [`BPF_PROG_TYPE_SYSCALL`](../program-type/BPF_PROG_TYPE_SYSCALL.md)
- [`BPF_PROG_TYPE_TRACING`](../program-type/BPF_PROG_TYPE_TRACING.md)
- [`BPF_PROG_TYPE_XDP`](../program-type/BPF_PROG_TYPE_XDP.md)
<!-- [/KFUNC_PROG_REF] -->

### Example

!!! example "Docs could be improved"
This part of the docs is incomplete, contributions are very welcome

Loading

0 comments on commit e9cdbf7

Please sign in to comment.