History

bpf: add bpf_skb_cgroup_id helper

Add a new bpf_skb_cgroup_id() helper that allows to retrieve the cgroup id from the skb's socket. This is useful in particular to enable bpf_get_cgroup_classid()-like behavior for cgroup v1 in cgroup v2 by allowing ID based matching on egress. This can in particular be used in combination with applying policy e.g. from map lookups, and also complements the older bpf_skb_under_cgroup() interface. In user space the cgroup id for a given path can be retrieved through the f_handle as demonstrated in [0] recently. [0] https://lkml.org/lkml/2018/5/22/1190

Daniel Borkmann committed 8 years ago

Commit cb20b081 parent 09772d92 files · +45 −3Browse files

Showing the changes to include/uapi/linux (1 of 2 files). Show all

Unified · Split

include/uapi/linux/bpf.h+18−1
@@ -2054,6 +2054,22 @@ union bpf_attr { · 2053 unmodified lines
20542054 *
20552055 * Return
20562056 * 0
2057+ *
2058+ * uint64_t bpf_skb_cgroup_id(struct sk_buff *skb)
2059+ * Description
2060+ * Return the cgroup v2 id of the socket associated with the *skb*.
2061+ * This is roughly similar to the **bpf_get_cgroup_classid**\ ()
2062+ * helper for cgroup v1 by providing a tag resp. identifier that
2063+ * can be matched on or used for map lookups e.g. to implement
2064+ * policy. The cgroup v2 id of a given path in the hierarchy is
2065+ * exposed in user space through the f_handle API in order to get
2066+ * to the same 64-bit id.
2067+ *
2068+ * This helper can be used on TC egress path, but not on ingress,
2069+ * and is available only if the kernel was compiled with the
2070+ * **CONFIG_SOCK_CGROUP_DATA** configuration option.
2071+ * Return
2072+ * The id is returned or 0 in case the id could not be retrieved.
20572073 */
20582074 #define __BPF_FUNC_MAPPER(FN) \
20592075 FN(unspec), \
@@ -2134,7 +2150,8 @@ union bpf_attr { · 74 unmodified lines
21342150 FN(lwt_seg6_adjust_srh), \
21352151 FN(lwt_seg6_action), \
21362152 FN(rc_repeat), \
2137− FN(rc_keydown),
2153+ FN(rc_keydown), \
2154+ FN(skb_cgroup_id),
21382155
21392156 /* integer value in 'imm' field of BPF_CALL instruction selects which helper
21402157 * function eBPF program intends to call