tools/libpf: Add offsetof/container_of macro in bpf_helpers.h
authorYonghong Song <yhs@fb.com>
Sat, 9 May 2020 17:59:19 +0000 (10:59 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Sun, 10 May 2020 00:05:27 +0000 (17:05 -0700)
These two helpers will be used later in bpf_iter bpf program
bpf_iter_netlink.c. Put them in bpf_helpers.h since they could
be useful in other cases.

Signed-off-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Andrii Nakryiko <andriin@fb.com>
Link: https://lore.kernel.org/bpf/20200509175919.2477104-1-yhs@fb.com
tools/lib/bpf/bpf_helpers.h

index da00b87..f67dce2 100644 (file)
 #endif
 
 /*
+ * Helper macro to manipulate data structures
+ */
+#ifndef offsetof
+#define offsetof(TYPE, MEMBER)  ((size_t)&((TYPE *)0)->MEMBER)
+#endif
+#ifndef container_of
+#define container_of(ptr, type, member)                                \
+       ({                                                      \
+               void *__mptr = (void *)(ptr);                   \
+               ((type *)(__mptr - offsetof(type, member)));    \
+       })
+#endif
+
+/*
  * Helper structure used by eBPF C program
  * to describe BPF map attributes to libbpf loader
  */