|
@@ -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
|