On 04/26/2019 07:40 PM, David Ahern wrote: > On 4/20/19 1:06 PM, Lucas Siba wrote: >> From: Lucas Siba @ 2019-04-20 11:40 UTC >> To: netdev >> >> This patch updates the tc-bpf.8 example application for changes to the >> struct bpf_elf_map definition. In it's current form, things compile, but >> the resulting object file is rejected by the verifier when attempting to >> load it through tc. >> >> Signed-off-by: Lucas Siba <lucas.s...@gmail.com> >> --- >> man/man8/tc-bpf.8 | 13 ++++++++++++- >> 1 file changed, 12 insertions(+), 1 deletion(-) > > Daniel: you agree with this change?
Yeah, looks good. >> diff --git a/man/man8/tc-bpf.8 b/man/man8/tc-bpf.8 >> index b2f9344f..b6cfeab9 100644 >> --- a/man/man8/tc-bpf.8 >> +++ b/man/man8/tc-bpf.8 >> @@ -597,6 +597,8 @@ struct bpf_elf_map __section("maps") map_stats = { >> .size_key = sizeof(uint32_t), >> .size_value = sizeof(struct tuple), >> .max_elem = BPF_MAX_MARK, >> + .pinning = PIN_GLOBAL_NS, >> + .flags = 0, If 0 anyway, it doesn't need to be explicitly initialized. David can probably fix it up while applying. >> }; >> >> static inline void cls_update_stats(const struct __sk_buff *skb, >> @@ -709,13 +711,22 @@ in both examples was: >> #define likely(x) __builtin_expect(!!(x), 1) >> #define unlikely(x) __builtin_expect(!!(x), 0) >> >> -/* Used map structure */ >> +/* Object pinning settings */ >> +#define PIN_NONE 0 >> +#define PIN_OBJECT_NS 1 >> +#define PIN_GLOBAL_NS 2 >> + >> +/* ELF map definition */ >> struct bpf_elf_map { >> __u32 type; >> __u32 size_key; >> __u32 size_value; >> __u32 max_elem; >> + __u32 flags; >> __u32 id; >> + __u32 pinning; >> + __u32 inner_id; >> + __u32 inner_idx; >> }; >> >> /* Some used BPF function calls. */ >> -- >> In a future patch, it might be worth changing the man page to refer to >> "bpf_elf.h" and "uapi/linux/bpf.h" for the definition of structures and >> constants, as they may be changed again without the man page being updated. Yep, also tc-bpf.8 is super outdated in general unfortunately. :/ Thanks, Daniel