xref: /linux-6.15/include/linux/bpf-cgroup.h (revision f294b37e)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
230070984SDaniel Mack #ifndef _BPF_CGROUP_H
330070984SDaniel Mack #define _BPF_CGROUP_H
430070984SDaniel Mack 
58bad74f9SRoman Gushchin #include <linux/bpf.h>
6f292b87dSRoman Gushchin #include <linux/errno.h>
730070984SDaniel Mack #include <linux/jump_label.h>
8aa0ad5b0SRoman Gushchin #include <linux/percpu.h>
9de9cbbaaSRoman Gushchin #include <linux/rbtree.h>
1030070984SDaniel Mack #include <uapi/linux/bpf.h>
1130070984SDaniel Mack 
1230070984SDaniel Mack struct sock;
134fbac77dSAndrey Ignatov struct sockaddr;
1430070984SDaniel Mack struct cgroup;
1530070984SDaniel Mack struct sk_buff;
16de9cbbaaSRoman Gushchin struct bpf_map;
17de9cbbaaSRoman Gushchin struct bpf_prog;
1840304b2aSLawrence Brakmo struct bpf_sock_ops_kern;
19de9cbbaaSRoman Gushchin struct bpf_cgroup_storage;
2030070984SDaniel Mack 
2130070984SDaniel Mack #ifdef CONFIG_CGROUP_BPF
2230070984SDaniel Mack 
2330070984SDaniel Mack extern struct static_key_false cgroup_bpf_enabled_key;
2430070984SDaniel Mack #define cgroup_bpf_enabled static_branch_unlikely(&cgroup_bpf_enabled_key)
2530070984SDaniel Mack 
26*f294b37eSRoman Gushchin DECLARE_PER_CPU(struct bpf_cgroup_storage*,
27*f294b37eSRoman Gushchin 		bpf_cgroup_storage[MAX_BPF_CGROUP_STORAGE_TYPE]);
288bad74f9SRoman Gushchin 
298bad74f9SRoman Gushchin #define for_each_cgroup_storage_type(stype) \
308bad74f9SRoman Gushchin 	for (stype = 0; stype < MAX_BPF_CGROUP_STORAGE_TYPE; stype++)
31aa0ad5b0SRoman Gushchin 
32de9cbbaaSRoman Gushchin struct bpf_cgroup_storage_map;
33de9cbbaaSRoman Gushchin 
34de9cbbaaSRoman Gushchin struct bpf_storage_buffer {
35de9cbbaaSRoman Gushchin 	struct rcu_head rcu;
36de9cbbaaSRoman Gushchin 	char data[0];
37de9cbbaaSRoman Gushchin };
38de9cbbaaSRoman Gushchin 
39de9cbbaaSRoman Gushchin struct bpf_cgroup_storage {
40de9cbbaaSRoman Gushchin 	struct bpf_storage_buffer *buf;
41de9cbbaaSRoman Gushchin 	struct bpf_cgroup_storage_map *map;
42de9cbbaaSRoman Gushchin 	struct bpf_cgroup_storage_key key;
43de9cbbaaSRoman Gushchin 	struct list_head list;
44de9cbbaaSRoman Gushchin 	struct rb_node node;
45de9cbbaaSRoman Gushchin 	struct rcu_head rcu;
46de9cbbaaSRoman Gushchin };
47de9cbbaaSRoman Gushchin 
48324bda9eSAlexei Starovoitov struct bpf_prog_list {
49324bda9eSAlexei Starovoitov 	struct list_head node;
50324bda9eSAlexei Starovoitov 	struct bpf_prog *prog;
518bad74f9SRoman Gushchin 	struct bpf_cgroup_storage *storage[MAX_BPF_CGROUP_STORAGE_TYPE];
52324bda9eSAlexei Starovoitov };
53324bda9eSAlexei Starovoitov 
54324bda9eSAlexei Starovoitov struct bpf_prog_array;
55324bda9eSAlexei Starovoitov 
5630070984SDaniel Mack struct cgroup_bpf {
57324bda9eSAlexei Starovoitov 	/* array of effective progs in this cgroup */
58324bda9eSAlexei Starovoitov 	struct bpf_prog_array __rcu *effective[MAX_BPF_ATTACH_TYPE];
59324bda9eSAlexei Starovoitov 
60324bda9eSAlexei Starovoitov 	/* attached progs to this cgroup and attach flags
61324bda9eSAlexei Starovoitov 	 * when flags == 0 or BPF_F_ALLOW_OVERRIDE the progs list will
62324bda9eSAlexei Starovoitov 	 * have either zero or one element
63324bda9eSAlexei Starovoitov 	 * when BPF_F_ALLOW_MULTI the list can have up to BPF_CGROUP_MAX_PROGS
6430070984SDaniel Mack 	 */
65324bda9eSAlexei Starovoitov 	struct list_head progs[MAX_BPF_ATTACH_TYPE];
66324bda9eSAlexei Starovoitov 	u32 flags[MAX_BPF_ATTACH_TYPE];
67324bda9eSAlexei Starovoitov 
68324bda9eSAlexei Starovoitov 	/* temp storage for effective prog array used by prog_attach/detach */
69324bda9eSAlexei Starovoitov 	struct bpf_prog_array __rcu *inactive;
7030070984SDaniel Mack };
7130070984SDaniel Mack 
7230070984SDaniel Mack void cgroup_bpf_put(struct cgroup *cgrp);
73324bda9eSAlexei Starovoitov int cgroup_bpf_inherit(struct cgroup *cgrp);
7430070984SDaniel Mack 
75324bda9eSAlexei Starovoitov int __cgroup_bpf_attach(struct cgroup *cgrp, struct bpf_prog *prog,
76324bda9eSAlexei Starovoitov 			enum bpf_attach_type type, u32 flags);
77324bda9eSAlexei Starovoitov int __cgroup_bpf_detach(struct cgroup *cgrp, struct bpf_prog *prog,
78324bda9eSAlexei Starovoitov 			enum bpf_attach_type type, u32 flags);
79468e2f64SAlexei Starovoitov int __cgroup_bpf_query(struct cgroup *cgrp, const union bpf_attr *attr,
80468e2f64SAlexei Starovoitov 		       union bpf_attr __user *uattr);
8130070984SDaniel Mack 
82324bda9eSAlexei Starovoitov /* Wrapper for __cgroup_bpf_*() protected by cgroup_mutex */
83324bda9eSAlexei Starovoitov int cgroup_bpf_attach(struct cgroup *cgrp, struct bpf_prog *prog,
84324bda9eSAlexei Starovoitov 		      enum bpf_attach_type type, u32 flags);
85324bda9eSAlexei Starovoitov int cgroup_bpf_detach(struct cgroup *cgrp, struct bpf_prog *prog,
86324bda9eSAlexei Starovoitov 		      enum bpf_attach_type type, u32 flags);
87468e2f64SAlexei Starovoitov int cgroup_bpf_query(struct cgroup *cgrp, const union bpf_attr *attr,
88468e2f64SAlexei Starovoitov 		     union bpf_attr __user *uattr);
8930070984SDaniel Mack 
90b2cd1257SDavid Ahern int __cgroup_bpf_run_filter_skb(struct sock *sk,
9130070984SDaniel Mack 				struct sk_buff *skb,
9230070984SDaniel Mack 				enum bpf_attach_type type);
9330070984SDaniel Mack 
9461023658SDavid Ahern int __cgroup_bpf_run_filter_sk(struct sock *sk,
9561023658SDavid Ahern 			       enum bpf_attach_type type);
9661023658SDavid Ahern 
974fbac77dSAndrey Ignatov int __cgroup_bpf_run_filter_sock_addr(struct sock *sk,
984fbac77dSAndrey Ignatov 				      struct sockaddr *uaddr,
991cedee13SAndrey Ignatov 				      enum bpf_attach_type type,
1001cedee13SAndrey Ignatov 				      void *t_ctx);
1014fbac77dSAndrey Ignatov 
10240304b2aSLawrence Brakmo int __cgroup_bpf_run_filter_sock_ops(struct sock *sk,
10340304b2aSLawrence Brakmo 				     struct bpf_sock_ops_kern *sock_ops,
10440304b2aSLawrence Brakmo 				     enum bpf_attach_type type);
10540304b2aSLawrence Brakmo 
106ebc614f6SRoman Gushchin int __cgroup_bpf_check_dev_permission(short dev_type, u32 major, u32 minor,
107ebc614f6SRoman Gushchin 				      short access, enum bpf_attach_type type);
108ebc614f6SRoman Gushchin 
1098bad74f9SRoman Gushchin static inline enum bpf_cgroup_storage_type cgroup_storage_type(
1108bad74f9SRoman Gushchin 	struct bpf_map *map)
111aa0ad5b0SRoman Gushchin {
1128bad74f9SRoman Gushchin 	return BPF_CGROUP_STORAGE_SHARED;
113aa0ad5b0SRoman Gushchin }
114aa0ad5b0SRoman Gushchin 
1158bad74f9SRoman Gushchin static inline void bpf_cgroup_storage_set(struct bpf_cgroup_storage
1168bad74f9SRoman Gushchin 					  *storage[MAX_BPF_CGROUP_STORAGE_TYPE])
1178bad74f9SRoman Gushchin {
1188bad74f9SRoman Gushchin 	enum bpf_cgroup_storage_type stype;
1198bad74f9SRoman Gushchin 
120*f294b37eSRoman Gushchin 	for_each_cgroup_storage_type(stype)
121*f294b37eSRoman Gushchin 		this_cpu_write(bpf_cgroup_storage[stype], storage[stype]);
1228bad74f9SRoman Gushchin }
1238bad74f9SRoman Gushchin 
1248bad74f9SRoman Gushchin struct bpf_cgroup_storage *bpf_cgroup_storage_alloc(struct bpf_prog *prog,
1258bad74f9SRoman Gushchin 					enum bpf_cgroup_storage_type stype);
126de9cbbaaSRoman Gushchin void bpf_cgroup_storage_free(struct bpf_cgroup_storage *storage);
127de9cbbaaSRoman Gushchin void bpf_cgroup_storage_link(struct bpf_cgroup_storage *storage,
128de9cbbaaSRoman Gushchin 			     struct cgroup *cgroup,
129de9cbbaaSRoman Gushchin 			     enum bpf_attach_type type);
130de9cbbaaSRoman Gushchin void bpf_cgroup_storage_unlink(struct bpf_cgroup_storage *storage);
131de9cbbaaSRoman Gushchin int bpf_cgroup_storage_assign(struct bpf_prog *prog, struct bpf_map *map);
132de9cbbaaSRoman Gushchin void bpf_cgroup_storage_release(struct bpf_prog *prog, struct bpf_map *map);
133de9cbbaaSRoman Gushchin 
134b2cd1257SDavid Ahern /* Wrappers for __cgroup_bpf_run_filter_skb() guarded by cgroup_bpf_enabled. */
13530070984SDaniel Mack #define BPF_CGROUP_RUN_PROG_INET_INGRESS(sk, skb)			      \
13630070984SDaniel Mack ({									      \
13730070984SDaniel Mack 	int __ret = 0;							      \
13830070984SDaniel Mack 	if (cgroup_bpf_enabled)						      \
139b2cd1257SDavid Ahern 		__ret = __cgroup_bpf_run_filter_skb(sk, skb,		      \
14030070984SDaniel Mack 						    BPF_CGROUP_INET_INGRESS); \
14130070984SDaniel Mack 									      \
14230070984SDaniel Mack 	__ret;								      \
14330070984SDaniel Mack })
14430070984SDaniel Mack 
14530070984SDaniel Mack #define BPF_CGROUP_RUN_PROG_INET_EGRESS(sk, skb)			       \
14630070984SDaniel Mack ({									       \
14730070984SDaniel Mack 	int __ret = 0;							       \
14830070984SDaniel Mack 	if (cgroup_bpf_enabled && sk && sk == skb->sk) {		       \
14930070984SDaniel Mack 		typeof(sk) __sk = sk_to_full_sk(sk);			       \
15030070984SDaniel Mack 		if (sk_fullsock(__sk))					       \
151b2cd1257SDavid Ahern 			__ret = __cgroup_bpf_run_filter_skb(__sk, skb,	       \
15230070984SDaniel Mack 						      BPF_CGROUP_INET_EGRESS); \
15330070984SDaniel Mack 	}								       \
15430070984SDaniel Mack 	__ret;								       \
15530070984SDaniel Mack })
15630070984SDaniel Mack 
157aac3fc32SAndrey Ignatov #define BPF_CGROUP_RUN_SK_PROG(sk, type)				       \
15861023658SDavid Ahern ({									       \
15961023658SDavid Ahern 	int __ret = 0;							       \
160ee07862fSYafang Shao 	if (cgroup_bpf_enabled) {					       \
161aac3fc32SAndrey Ignatov 		__ret = __cgroup_bpf_run_filter_sk(sk, type);		       \
16261023658SDavid Ahern 	}								       \
16361023658SDavid Ahern 	__ret;								       \
16461023658SDavid Ahern })
16561023658SDavid Ahern 
166aac3fc32SAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET_SOCK(sk)				       \
167aac3fc32SAndrey Ignatov 	BPF_CGROUP_RUN_SK_PROG(sk, BPF_CGROUP_INET_SOCK_CREATE)
168aac3fc32SAndrey Ignatov 
169aac3fc32SAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET4_POST_BIND(sk)				       \
170aac3fc32SAndrey Ignatov 	BPF_CGROUP_RUN_SK_PROG(sk, BPF_CGROUP_INET4_POST_BIND)
171aac3fc32SAndrey Ignatov 
172aac3fc32SAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET6_POST_BIND(sk)				       \
173aac3fc32SAndrey Ignatov 	BPF_CGROUP_RUN_SK_PROG(sk, BPF_CGROUP_INET6_POST_BIND)
174aac3fc32SAndrey Ignatov 
1754fbac77dSAndrey Ignatov #define BPF_CGROUP_RUN_SA_PROG(sk, uaddr, type)				       \
1764fbac77dSAndrey Ignatov ({									       \
1774fbac77dSAndrey Ignatov 	int __ret = 0;							       \
1784fbac77dSAndrey Ignatov 	if (cgroup_bpf_enabled)						       \
1791cedee13SAndrey Ignatov 		__ret = __cgroup_bpf_run_filter_sock_addr(sk, uaddr, type,     \
1801cedee13SAndrey Ignatov 							  NULL);	       \
1814fbac77dSAndrey Ignatov 	__ret;								       \
1824fbac77dSAndrey Ignatov })
1834fbac77dSAndrey Ignatov 
1841cedee13SAndrey Ignatov #define BPF_CGROUP_RUN_SA_PROG_LOCK(sk, uaddr, type, t_ctx)		       \
185d74bad4eSAndrey Ignatov ({									       \
186d74bad4eSAndrey Ignatov 	int __ret = 0;							       \
187d74bad4eSAndrey Ignatov 	if (cgroup_bpf_enabled)	{					       \
188d74bad4eSAndrey Ignatov 		lock_sock(sk);						       \
1891cedee13SAndrey Ignatov 		__ret = __cgroup_bpf_run_filter_sock_addr(sk, uaddr, type,     \
1901cedee13SAndrey Ignatov 							  t_ctx);	       \
191d74bad4eSAndrey Ignatov 		release_sock(sk);					       \
192d74bad4eSAndrey Ignatov 	}								       \
193d74bad4eSAndrey Ignatov 	__ret;								       \
194d74bad4eSAndrey Ignatov })
195d74bad4eSAndrey Ignatov 
1964fbac77dSAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET4_BIND(sk, uaddr)			       \
1974fbac77dSAndrey Ignatov 	BPF_CGROUP_RUN_SA_PROG(sk, uaddr, BPF_CGROUP_INET4_BIND)
1984fbac77dSAndrey Ignatov 
1994fbac77dSAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET6_BIND(sk, uaddr)			       \
2004fbac77dSAndrey Ignatov 	BPF_CGROUP_RUN_SA_PROG(sk, uaddr, BPF_CGROUP_INET6_BIND)
2014fbac77dSAndrey Ignatov 
202d74bad4eSAndrey Ignatov #define BPF_CGROUP_PRE_CONNECT_ENABLED(sk) (cgroup_bpf_enabled && \
203d74bad4eSAndrey Ignatov 					    sk->sk_prot->pre_connect)
204d74bad4eSAndrey Ignatov 
205d74bad4eSAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET4_CONNECT(sk, uaddr)			       \
206d74bad4eSAndrey Ignatov 	BPF_CGROUP_RUN_SA_PROG(sk, uaddr, BPF_CGROUP_INET4_CONNECT)
207d74bad4eSAndrey Ignatov 
208d74bad4eSAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET6_CONNECT(sk, uaddr)			       \
209d74bad4eSAndrey Ignatov 	BPF_CGROUP_RUN_SA_PROG(sk, uaddr, BPF_CGROUP_INET6_CONNECT)
210d74bad4eSAndrey Ignatov 
211d74bad4eSAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET4_CONNECT_LOCK(sk, uaddr)		       \
2121cedee13SAndrey Ignatov 	BPF_CGROUP_RUN_SA_PROG_LOCK(sk, uaddr, BPF_CGROUP_INET4_CONNECT, NULL)
213d74bad4eSAndrey Ignatov 
214d74bad4eSAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET6_CONNECT_LOCK(sk, uaddr)		       \
2151cedee13SAndrey Ignatov 	BPF_CGROUP_RUN_SA_PROG_LOCK(sk, uaddr, BPF_CGROUP_INET6_CONNECT, NULL)
2161cedee13SAndrey Ignatov 
2171cedee13SAndrey Ignatov #define BPF_CGROUP_RUN_PROG_UDP4_SENDMSG_LOCK(sk, uaddr, t_ctx)		       \
2181cedee13SAndrey Ignatov 	BPF_CGROUP_RUN_SA_PROG_LOCK(sk, uaddr, BPF_CGROUP_UDP4_SENDMSG, t_ctx)
2191cedee13SAndrey Ignatov 
2201cedee13SAndrey Ignatov #define BPF_CGROUP_RUN_PROG_UDP6_SENDMSG_LOCK(sk, uaddr, t_ctx)		       \
2211cedee13SAndrey Ignatov 	BPF_CGROUP_RUN_SA_PROG_LOCK(sk, uaddr, BPF_CGROUP_UDP6_SENDMSG, t_ctx)
222d74bad4eSAndrey Ignatov 
22340304b2aSLawrence Brakmo #define BPF_CGROUP_RUN_PROG_SOCK_OPS(sock_ops)				       \
22440304b2aSLawrence Brakmo ({									       \
22540304b2aSLawrence Brakmo 	int __ret = 0;							       \
22640304b2aSLawrence Brakmo 	if (cgroup_bpf_enabled && (sock_ops)->sk) {	       \
22740304b2aSLawrence Brakmo 		typeof(sk) __sk = sk_to_full_sk((sock_ops)->sk);	       \
228df39a9f1SWANG Cong 		if (__sk && sk_fullsock(__sk))				       \
22940304b2aSLawrence Brakmo 			__ret = __cgroup_bpf_run_filter_sock_ops(__sk,	       \
23040304b2aSLawrence Brakmo 								 sock_ops,     \
23140304b2aSLawrence Brakmo 							 BPF_CGROUP_SOCK_OPS); \
23240304b2aSLawrence Brakmo 	}								       \
23340304b2aSLawrence Brakmo 	__ret;								       \
23440304b2aSLawrence Brakmo })
235ebc614f6SRoman Gushchin 
236ebc614f6SRoman Gushchin #define BPF_CGROUP_RUN_PROG_DEVICE_CGROUP(type, major, minor, access)	      \
237ebc614f6SRoman Gushchin ({									      \
238ebc614f6SRoman Gushchin 	int __ret = 0;							      \
239ebc614f6SRoman Gushchin 	if (cgroup_bpf_enabled)						      \
240ebc614f6SRoman Gushchin 		__ret = __cgroup_bpf_check_dev_permission(type, major, minor, \
241ebc614f6SRoman Gushchin 							  access,	      \
242ebc614f6SRoman Gushchin 							  BPF_CGROUP_DEVICE); \
243ebc614f6SRoman Gushchin 									      \
244ebc614f6SRoman Gushchin 	__ret;								      \
245ebc614f6SRoman Gushchin })
246fdb5c453SSean Young int cgroup_bpf_prog_attach(const union bpf_attr *attr,
247fdb5c453SSean Young 			   enum bpf_prog_type ptype, struct bpf_prog *prog);
248fdb5c453SSean Young int cgroup_bpf_prog_detach(const union bpf_attr *attr,
249fdb5c453SSean Young 			   enum bpf_prog_type ptype);
250fdb5c453SSean Young int cgroup_bpf_prog_query(const union bpf_attr *attr,
251fdb5c453SSean Young 			  union bpf_attr __user *uattr);
25230070984SDaniel Mack #else
25330070984SDaniel Mack 
254fdb5c453SSean Young struct bpf_prog;
25530070984SDaniel Mack struct cgroup_bpf {};
25630070984SDaniel Mack static inline void cgroup_bpf_put(struct cgroup *cgrp) {}
257324bda9eSAlexei Starovoitov static inline int cgroup_bpf_inherit(struct cgroup *cgrp) { return 0; }
25830070984SDaniel Mack 
259fdb5c453SSean Young static inline int cgroup_bpf_prog_attach(const union bpf_attr *attr,
260fdb5c453SSean Young 					 enum bpf_prog_type ptype,
261fdb5c453SSean Young 					 struct bpf_prog *prog)
262fdb5c453SSean Young {
263fdb5c453SSean Young 	return -EINVAL;
264fdb5c453SSean Young }
265fdb5c453SSean Young 
266fdb5c453SSean Young static inline int cgroup_bpf_prog_detach(const union bpf_attr *attr,
267fdb5c453SSean Young 					 enum bpf_prog_type ptype)
268fdb5c453SSean Young {
269fdb5c453SSean Young 	return -EINVAL;
270fdb5c453SSean Young }
271fdb5c453SSean Young 
272fdb5c453SSean Young static inline int cgroup_bpf_prog_query(const union bpf_attr *attr,
273fdb5c453SSean Young 					union bpf_attr __user *uattr)
274fdb5c453SSean Young {
275fdb5c453SSean Young 	return -EINVAL;
276fdb5c453SSean Young }
277fdb5c453SSean Young 
2788bad74f9SRoman Gushchin static inline void bpf_cgroup_storage_set(
2798bad74f9SRoman Gushchin 	struct bpf_cgroup_storage *storage[MAX_BPF_CGROUP_STORAGE_TYPE]) {}
280de9cbbaaSRoman Gushchin static inline int bpf_cgroup_storage_assign(struct bpf_prog *prog,
281de9cbbaaSRoman Gushchin 					    struct bpf_map *map) { return 0; }
282de9cbbaaSRoman Gushchin static inline void bpf_cgroup_storage_release(struct bpf_prog *prog,
283de9cbbaaSRoman Gushchin 					      struct bpf_map *map) {}
284de9cbbaaSRoman Gushchin static inline struct bpf_cgroup_storage *bpf_cgroup_storage_alloc(
2858bad74f9SRoman Gushchin 	struct bpf_prog *prog, enum bpf_cgroup_storage_type stype) { return 0; }
286de9cbbaaSRoman Gushchin static inline void bpf_cgroup_storage_free(
287de9cbbaaSRoman Gushchin 	struct bpf_cgroup_storage *storage) {}
288de9cbbaaSRoman Gushchin 
28913193b0fSAndrey Ignatov #define cgroup_bpf_enabled (0)
290d74bad4eSAndrey Ignatov #define BPF_CGROUP_PRE_CONNECT_ENABLED(sk) (0)
29130070984SDaniel Mack #define BPF_CGROUP_RUN_PROG_INET_INGRESS(sk,skb) ({ 0; })
29230070984SDaniel Mack #define BPF_CGROUP_RUN_PROG_INET_EGRESS(sk,skb) ({ 0; })
29361023658SDavid Ahern #define BPF_CGROUP_RUN_PROG_INET_SOCK(sk) ({ 0; })
2944fbac77dSAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET4_BIND(sk, uaddr) ({ 0; })
2954fbac77dSAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET6_BIND(sk, uaddr) ({ 0; })
296aac3fc32SAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET4_POST_BIND(sk) ({ 0; })
297aac3fc32SAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET6_POST_BIND(sk) ({ 0; })
298d74bad4eSAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET4_CONNECT(sk, uaddr) ({ 0; })
299d74bad4eSAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET4_CONNECT_LOCK(sk, uaddr) ({ 0; })
300d74bad4eSAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET6_CONNECT(sk, uaddr) ({ 0; })
301d74bad4eSAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET6_CONNECT_LOCK(sk, uaddr) ({ 0; })
3021cedee13SAndrey Ignatov #define BPF_CGROUP_RUN_PROG_UDP4_SENDMSG_LOCK(sk, uaddr, t_ctx) ({ 0; })
3031cedee13SAndrey Ignatov #define BPF_CGROUP_RUN_PROG_UDP6_SENDMSG_LOCK(sk, uaddr, t_ctx) ({ 0; })
30440304b2aSLawrence Brakmo #define BPF_CGROUP_RUN_PROG_SOCK_OPS(sock_ops) ({ 0; })
305ebc614f6SRoman Gushchin #define BPF_CGROUP_RUN_PROG_DEVICE_CGROUP(type,major,minor,access) ({ 0; })
30630070984SDaniel Mack 
3078bad74f9SRoman Gushchin #define for_each_cgroup_storage_type(stype) for (; false; )
3088bad74f9SRoman Gushchin 
30930070984SDaniel Mack #endif /* CONFIG_CGROUP_BPF */
31030070984SDaniel Mack 
31130070984SDaniel Mack #endif /* _BPF_CGROUP_H */
312