X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=include%2Fbpf_api.h;h=89d3488d0741ba2c4ff234eecfdaf20333089d8e;hb=HEAD;hp=0f278f0c2614499fef3ce193993138ce39592308;hpb=0395711c52260c3a1cb0984948c3db56c69a073b;p=mirror_iproute2.git diff --git a/include/bpf_api.h b/include/bpf_api.h index 0f278f0c..82c47089 100644 --- a/include/bpf_api.h +++ b/include/bpf_api.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */ #ifndef __BPF_API__ #define __BPF_API__ @@ -18,6 +19,19 @@ #include "bpf_elf.h" +/** libbpf pin type. */ +enum libbpf_pin_type { + LIBBPF_PIN_NONE, + /* PIN_BY_NAME: pin maps by name (in /sys/fs/bpf by default) */ + LIBBPF_PIN_BY_NAME, +}; + +/** Type helper macros. */ + +#define __uint(name, val) int (*name)[val] +#define __type(name, val) typeof(val) *name +#define __array(name, val) typeof(val) *name[] + /** Misc macros. */ #ifndef __stringify @@ -72,6 +86,11 @@ __section(__stringify(ID) "/" __stringify(KEY)) #endif +#ifndef __section_xdp_entry +# define __section_xdp_entry \ + __section(ELF_SECTION_PROG) +#endif + #ifndef __section_cls_entry # define __section_cls_entry \ __section(ELF_SECTION_CLASSIFIER) @@ -82,6 +101,11 @@ __section(ELF_SECTION_ACTION) #endif +#ifndef __section_lwt_entry +# define __section_lwt_entry \ + __section(ELF_SECTION_PROG) +#endif + #ifndef __section_license # define __section_license \ __section(ELF_SECTION_LICENSE) @@ -99,51 +123,6 @@ char ____license[] __section_license = NAME #endif -#ifndef __BPF_MAP -# define __BPF_MAP(NAME, TYPE, ID, SIZE_KEY, SIZE_VALUE, PIN, MAX_ELEM) \ - struct bpf_elf_map __section_maps NAME = { \ - .type = (TYPE), \ - .id = (ID), \ - .size_key = (SIZE_KEY), \ - .size_value = (SIZE_VALUE), \ - .pinning = (PIN), \ - .max_elem = (MAX_ELEM), \ - } -#endif - -#ifndef BPF_HASH -# define BPF_HASH(NAME, ID, SIZE_KEY, SIZE_VALUE, PIN, MAX_ELEM) \ - __BPF_MAP(NAME, BPF_MAP_TYPE_HASH, ID, SIZE_KEY, SIZE_VALUE, \ - PIN, MAX_ELEM) -#endif - -#ifndef BPF_ARRAY -# define BPF_ARRAY(NAME, ID, SIZE_VALUE, PIN, MAX_ELEM) \ - __BPF_MAP(NAME, BPF_MAP_TYPE_ARRAY, ID, sizeof(uint32_t), \ - SIZE_VALUE, PIN, MAX_ELEM) -#endif - -#ifndef BPF_ARRAY2 -# define BPF_ARRAY2(NAME, ID, PIN, MAX_ELEM) \ - BPF_ARRAY(NAME, ID, sizeof(uint16_t), PIN, MAX_ELEM) -#endif - -#ifndef BPF_ARRAY4 -# define BPF_ARRAY4(NAME, ID, PIN, MAX_ELEM) \ - BPF_ARRAY(NAME, ID, sizeof(uint32_t), PIN, MAX_ELEM) -#endif - -#ifndef BPF_ARRAY8 -# define BPF_ARRAY8(NAME, ID, PIN, MAX_ELEM) \ - BPF_ARRAY(NAME, ID, sizeof(uint64_t), PIN, MAX_ELEM) -#endif - -#ifndef BPF_PROG_ARRAY -# define BPF_PROG_ARRAY(NAME, ID, PIN, MAX_ELEM) \ - __BPF_MAP(NAME, BPF_MAP_TYPE_PROG_ARRAY, ID, sizeof(uint32_t), \ - sizeof(uint32_t), PIN, MAX_ELEM) -#endif - /** Classifier helper */ #ifndef BPF_H_DEFAULT @@ -152,9 +131,14 @@ /** BPF helper functions for tc. Individual flags are in linux/bpf.h */ +#ifndef __BPF_FUNC +# define __BPF_FUNC(NAME, ...) \ + (* NAME)(__VA_ARGS__) __maybe_unused +#endif + #ifndef BPF_FUNC # define BPF_FUNC(NAME, ...) \ - (* NAME)(__VA_ARGS__) __maybe_unused = (void *) BPF_FUNC_##NAME + __BPF_FUNC(NAME, __VA_ARGS__) = (void *) BPF_FUNC_##NAME #endif /* Map access/manipulation */ @@ -192,10 +176,15 @@ static void BPF_FUNC(tail_call, struct __sk_buff *skb, void *map, /* System helpers */ static uint32_t BPF_FUNC(get_smp_processor_id); +static uint32_t BPF_FUNC(get_numa_node_id); /* Packet misc meta data */ static uint32_t BPF_FUNC(get_cgroup_classid, struct __sk_buff *skb); +static int BPF_FUNC(skb_under_cgroup, void *map, uint32_t index); + static uint32_t BPF_FUNC(get_route_realm, struct __sk_buff *skb); +static uint32_t BPF_FUNC(get_hash_recalc, struct __sk_buff *skb); +static uint32_t BPF_FUNC(set_hash_invalid, struct __sk_buff *skb); /* Packet redirection */ static int BPF_FUNC(redirect, int ifindex, uint32_t flags); @@ -214,6 +203,20 @@ static int BPF_FUNC(l4_csum_replace, struct __sk_buff *skb, uint32_t off, uint32_t from, uint32_t to, uint32_t flags); static int BPF_FUNC(csum_diff, const void *from, uint32_t from_size, const void *to, uint32_t to_size, uint32_t seed); +static int BPF_FUNC(csum_update, struct __sk_buff *skb, uint32_t wsum); + +static int BPF_FUNC(skb_change_type, struct __sk_buff *skb, uint32_t type); +static int BPF_FUNC(skb_change_proto, struct __sk_buff *skb, uint32_t proto, + uint32_t flags); +static int BPF_FUNC(skb_change_tail, struct __sk_buff *skb, uint32_t nlen, + uint32_t flags); + +static int BPF_FUNC(skb_pull_data, struct __sk_buff *skb, uint32_t len); + +/* Event notification */ +static int __BPF_FUNC(skb_event_output, struct __sk_buff *skb, void *map, + uint64_t index, const void *data, uint32_t size) = + (void *) BPF_FUNC_perf_event_output; /* Packet vlan encap/decap */ static int BPF_FUNC(skb_vlan_push, struct __sk_buff *skb, uint16_t proto,