diff options
author | Maciej Żenczykowski <maze@google.com> | 2021-07-05 15:20:34 -0700 |
---|---|---|
committer | Maciej Żenczykowski <maze@google.com> | 2021-07-05 18:02:16 -0700 |
commit | 36c53ba91e54ac2786aa2bd4865970dc42dbe04d (patch) | |
tree | 3a8021a617e59df89614369eed5ea479ae040794 /progs | |
parent | df91d2b5b265849eb59fea3721a0d68f4f77edfe (diff) | |
download | bpf-36c53ba91e54ac2786aa2bd4865970dc42dbe04d.tar.gz |
bpf - struct bpf_map_def - add min/max kernel version.
This is also bpfloader v0.2.
Some newer map types (for example DEVMAP) are unusable
on older kernel versions.
Bug: 190519702
Test: atest, TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I085cc723ff1c19d8acc8972a391f894e16dd1875
Diffstat (limited to 'progs')
-rw-r--r-- | progs/include/bpf_helpers.h | 10 | ||||
-rw-r--r-- | progs/include/bpf_map_def.h | 9 |
2 files changed, 14 insertions, 5 deletions
diff --git a/progs/include/bpf_helpers.h b/progs/include/bpf_helpers.h index 6e5fe69..abd19c6 100644 --- a/progs/include/bpf_helpers.h +++ b/progs/include/bpf_helpers.h @@ -59,6 +59,10 @@ * implemented in the kernel sources. */ +#define KVER_NONE 0 +#define KVER(a, b, c) (((a) << 24) + ((b) << 16) + (c)) +#define KVER_INF 0xFFFFFFFFu + /* generic functions */ /* @@ -110,6 +114,8 @@ static int (*bpf_map_delete_elem_unsafe)(const struct bpf_map_def* map, .mode = (md), \ .bpfloader_min_ver = DEFAULT_BPFLOADER_MIN_VER, \ .bpfloader_max_ver = DEFAULT_BPFLOADER_MAX_VER, \ + .min_kver = KVER_NONE, \ + .max_kver = KVER_INF, \ }; \ \ static inline __always_inline __unused TypeOfValue* bpf_##the_map##_lookup_elem( \ @@ -147,10 +153,6 @@ static unsigned long long (*bpf_get_current_pid_tgid)(void) = (void*) BPF_FUNC_g static unsigned long long (*bpf_get_current_uid_gid)(void) = (void*) BPF_FUNC_get_current_uid_gid; static unsigned long long (*bpf_get_smp_processor_id)(void) = (void*) BPF_FUNC_get_smp_processor_id; -#define KVER_NONE 0 -#define KVER(a, b, c) (((a) << 24) + ((b) << 16) + (c)) -#define KVER_INF 0xFFFFFFFF - #define DEFINE_BPF_PROG_KVER_RANGE_OPT(SECTION_NAME, prog_uid, prog_gid, the_prog, min_kv, max_kv, \ opt) \ const struct bpf_prog_def SEC("progs") the_prog##_def = { \ diff --git a/progs/include/bpf_map_def.h b/progs/include/bpf_map_def.h index f51b1c4..647c813 100644 --- a/progs/include/bpf_map_def.h +++ b/progs/include/bpf_map_def.h @@ -141,10 +141,15 @@ struct bpf_map_def { // The following fields were added in version 0.1 unsigned int bpfloader_min_ver; // if missing, defaults to 0, ie. v0.0 unsigned int bpfloader_max_ver; // if missing, defaults to 0x10000, ie. v1.0 + + // The following fields were added in version 0.2 + // kernelVersion() must be >= min_kver and < max_kver + unsigned int min_kver; + unsigned int max_kver; }; // This needs to be updated whenever the above structure definition is expanded. -_Static_assert(sizeof(struct bpf_map_def) == 40, "sizeof struct bpf_map_def != 40"); +_Static_assert(sizeof(struct bpf_map_def) == 48, "sizeof struct bpf_map_def != 48"); _Static_assert(__alignof__(struct bpf_map_def) == 4, "__alignof__ struct bpf_map_def != 4"); _Static_assert(_Alignof(struct bpf_map_def) == 4, "_Alignof struct bpf_map_def != 4"); @@ -162,6 +167,8 @@ struct bpf_prog_def { // The following fields were added in version 0.1 unsigned int bpfloader_min_ver; // if missing, defaults to 0, ie. v0.0 unsigned int bpfloader_max_ver; // if missing, defaults to 0x10000, ie. v1.0 + + // No new fields in version 0.2 }; // This needs to be updated whenever the above structure definition is expanded. |