bpf: sync bpf.h to tools/
authorRoman Gushchin <guro@fb.com>
Thu, 2 Aug 2018 21:27:25 +0000 (14:27 -0700)
committerDaniel Borkmann <daniel@iogearbox.net>
Thu, 2 Aug 2018 22:47:32 +0000 (00:47 +0200)
Sync cgroup storage related changes:
1) new BPF_MAP_TYPE_CGROUP_STORAGE map type
2) struct bpf_cgroup_sotrage_key definition
3) get_local_storage() helper

Signed-off-by: Roman Gushchin <guro@fb.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Martin KaFai Lau <kafai@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
tools/include/uapi/linux/bpf.h

index 0ebaaf7..dd5758d 100644 (file)
@@ -75,6 +75,11 @@ struct bpf_lpm_trie_key {
        __u8    data[0];        /* Arbitrary size */
 };
 
+struct bpf_cgroup_storage_key {
+       __u64   cgroup_inode_id;        /* cgroup inode id */
+       __u32   attach_type;            /* program attach type */
+};
+
 /* BPF syscall commands, see bpf(2) man-page for details. */
 enum bpf_cmd {
        BPF_MAP_CREATE,
@@ -120,6 +125,7 @@ enum bpf_map_type {
        BPF_MAP_TYPE_CPUMAP,
        BPF_MAP_TYPE_XSKMAP,
        BPF_MAP_TYPE_SOCKHASH,
+       BPF_MAP_TYPE_CGROUP_STORAGE,
 };
 
 enum bpf_prog_type {
@@ -2089,6 +2095,24 @@ union bpf_attr {
  *     Return
  *             A 64-bit integer containing the current cgroup id based
  *             on the cgroup within which the current task is running.
+ *
+ * void* get_local_storage(void *map, u64 flags)
+ *     Description
+ *             Get the pointer to the local storage area.
+ *             The type and the size of the local storage is defined
+ *             by the *map* argument.
+ *             The *flags* meaning is specific for each map type,
+ *             and has to be 0 for cgroup local storage.
+ *
+ *             Depending on the bpf program type, a local storage area
+ *             can be shared between multiple instances of the bpf program,
+ *             running simultaneously.
+ *
+ *             A user should care about the synchronization by himself.
+ *             For example, by using the BPF_STX_XADD instruction to alter
+ *             the shared data.
+ *     Return
+ *             Pointer to the local storage area.
  */
 #define __BPF_FUNC_MAPPER(FN)          \
        FN(unspec),                     \
@@ -2171,7 +2195,8 @@ union bpf_attr {
        FN(rc_repeat),                  \
        FN(rc_keydown),                 \
        FN(skb_cgroup_id),              \
-       FN(get_current_cgroup_id),
+       FN(get_current_cgroup_id),      \
+       FN(get_local_storage),
 
 /* integer value in 'imm' field of BPF_CALL instruction selects which helper
  * function eBPF program intends to call