Add bpf_sysctl_get_name() helper to copy sysctl name (/proc/sys/ entry) into provided by BPF_PROG_TYPE_CGROUP_SYSCTL program buffer. By default full name (w/o /proc/sys/) is copied, e.g. "net/ipv4/tcp_mem". If BPF_F_SYSCTL_BASE_NAME flag is set, only base name will be copied, e.g. "tcp_mem". Documentation for the new helper is provided in bpf.h UAPI.
Showing the changes to include/uapi/linux (1 of 2 files). Show all
Unified · Split
| @@ -2506,6 +2506,22 @@ union bpf_attr { · 2505 unmodified lines | ||
| 2506 | 2506 | * Return |
| 2507 | 2507 | * 0 if iph and th are a valid SYN cookie ACK, or a negative error |
| 2508 | 2508 | * otherwise. |
| 2509 | + * | |
| 2510 | + * int bpf_sysctl_get_name(struct bpf_sysctl *ctx, char *buf, size_t buf_len, u64 flags) | |
| 2511 | + * Description | |
| 2512 | + * Get name of sysctl in /proc/sys/ and copy it into provided by | |
| 2513 | + * program buffer *buf* of size *buf_len*. | |
| 2514 | + * | |
| 2515 | + * The buffer is always NUL terminated, unless it's zero-sized. | |
| 2516 | + * | |
| 2517 | + * If *flags* is zero, full name (e.g. "net/ipv4/tcp_mem") is | |
| 2518 | + * copied. Use **BPF_F_SYSCTL_BASE_NAME** flag to copy base name | |
| 2519 | + * only (e.g. "tcp_mem"). | |
| 2520 | + * Return | |
| 2521 | + * Number of character copied (not including the trailing NUL). | |
| 2522 | + * | |
| 2523 | + * **-E2BIG** if the buffer wasn't big enough (*buf* will contain | |
| 2524 | + * truncated name in this case). | |
| 2509 | 2525 | */ |
| 2510 | 2526 | #define __BPF_FUNC_MAPPER(FN) \ |
| 2511 | 2527 | FN(unspec), \ |
| @@ -2608,7 +2624,8 @@ union bpf_attr { · 96 unmodified lines | ||
| 2608 | 2624 | FN(skb_ecn_set_ce), \ |
| 2609 | 2625 | FN(get_listener_sock), \ |
| 2610 | 2626 | FN(skc_lookup_tcp), \ |
| 2611 | − FN(tcp_check_syncookie), | |
| 2627 | + FN(tcp_check_syncookie), \ | |
| 2628 | + FN(sysctl_get_name), | |
| 2612 | 2629 | |
| 2613 | 2630 | /* integer value in 'imm' field of BPF_CALL instruction selects which helper |
| 2614 | 2631 | * function eBPF program intends to call |
| @@ -2681,6 +2698,9 @@ enum bpf_func_id { · 66 unmodified lines | ||
| 2681 | 2698 | BPF_ADJ_ROOM_ENCAP_L2_MASK) \ |
| 2682 | 2699 | << BPF_ADJ_ROOM_ENCAP_L2_SHIFT) |
| 2683 | 2700 | |
| 2701 | +/* BPF_FUNC_sysctl_get_name flags. */ | |
| 2702 | +#define BPF_F_SYSCTL_BASE_NAME (1ULL << 0) | |
| 2703 | + | |
| 2684 | 2704 | /* Mode for BPF_FUNC_skb_adjust_room helper. */ |
| 2685 | 2705 | enum bpf_adj_room_mode { |
| 2686 | 2706 | BPF_ADJ_ROOM_NET, |