xref: /linux-6.15/include/linux/bpf-cgroup.h (revision 8bad74f9)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
230070984SDaniel Mack #ifndef _BPF_CGROUP_H
330070984SDaniel Mack #define _BPF_CGROUP_H
430070984SDaniel Mack 
5*8bad74f9SRoman 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*8bad74f9SRoman Gushchin DECLARE_PER_CPU(void*, bpf_cgroup_storage[MAX_BPF_CGROUP_STORAGE_TYPE]);
27*8bad74f9SRoman Gushchin 
28*8bad74f9SRoman Gushchin #define for_each_cgroup_storage_type(stype) \
29*8bad74f9SRoman Gushchin 	for (stype = 0; stype < MAX_BPF_CGROUP_STORAGE_TYPE; stype++)
30aa0ad5b0SRoman Gushchin 
31de9cbbaaSRoman Gushchin struct bpf_cgroup_storage_map;
32de9cbbaaSRoman Gushchin 
33de9cbbaaSRoman Gushchin struct bpf_storage_buffer {
34de9cbbaaSRoman Gushchin 	struct rcu_head rcu;
35de9cbbaaSRoman Gushchin 	char data[0];
36de9cbbaaSRoman Gushchin };
37de9cbbaaSRoman Gushchin 
38de9cbbaaSRoman Gushchin struct bpf_cgroup_storage {
39de9cbbaaSRoman Gushchin 	struct bpf_storage_buffer *buf;
40de9cbbaaSRoman Gushchin 	struct bpf_cgroup_storage_map *map;
41de9cbbaaSRoman Gushchin 	struct bpf_cgroup_storage_key key;
42de9cbbaaSRoman Gushchin 	struct list_head list;
43de9cbbaaSRoman Gushchin 	struct rb_node node;
44de9cbbaaSRoman Gushchin 	struct rcu_head rcu;
45de9cbbaaSRoman Gushchin };
46de9cbbaaSRoman Gushchin 
47324bda9eSAlexei Starovoitov struct bpf_prog_list {
48324bda9eSAlexei Starovoitov 	struct list_head node;
49324bda9eSAlexei Starovoitov 	struct bpf_prog *prog;
50*8bad74f9SRoman Gushchin 	struct bpf_cgroup_storage *storage[MAX_BPF_CGROUP_STORAGE_TYPE];
51324bda9eSAlexei Starovoitov };
52324bda9eSAlexei Starovoitov 
53324bda9eSAlexei Starovoitov struct bpf_prog_array;
54324bda9eSAlexei Starovoitov 
5530070984SDaniel Mack struct cgroup_bpf {
56324bda9eSAlexei Starovoitov 	/* array of effective progs in this cgroup */
57324bda9eSAlexei Starovoitov 	struct bpf_prog_array __rcu *effective[MAX_BPF_ATTACH_TYPE];
58324bda9eSAlexei Starovoitov 
59324bda9eSAlexei Starovoitov 	/* attached progs to this cgroup and attach flags
60324bda9eSAlexei Starovoitov 	 * when flags == 0 or BPF_F_ALLOW_OVERRIDE the progs list will
61324bda9eSAlexei Starovoitov 	 * have either zero or one element
62324bda9eSAlexei Starovoitov 	 * when BPF_F_ALLOW_MULTI the list can have up to BPF_CGROUP_MAX_PROGS
6330070984SDaniel Mack 	 */
64324bda9eSAlexei Starovoitov 	struct list_head progs[MAX_BPF_ATTACH_TYPE];
65324bda9eSAlexei Starovoitov 	u32 flags[MAX_BPF_ATTACH_TYPE];
66324bda9eSAlexei Starovoitov 
67324bda9eSAlexei Starovoitov 	/* temp storage for effective prog array used by prog_attach/detach */
68324bda9eSAlexei Starovoitov 	struct bpf_prog_array __rcu *inactive;
6930070984SDaniel Mack };
7030070984SDaniel Mack 
7130070984SDaniel Mack void cgroup_bpf_put(struct cgroup *cgrp);
72324bda9eSAlexei Starovoitov int cgroup_bpf_inherit(struct cgroup *cgrp);
7330070984SDaniel Mack 
74324bda9eSAlexei Starovoitov int __cgroup_bpf_attach(struct cgroup *cgrp, struct bpf_prog *prog,
75324bda9eSAlexei Starovoitov 			enum bpf_attach_type type, u32 flags);
76324bda9eSAlexei Starovoitov int __cgroup_bpf_detach(struct cgroup *cgrp, struct bpf_prog *prog,
77324bda9eSAlexei Starovoitov 			enum bpf_attach_type type, u32 flags);
78468e2f64SAlexei Starovoitov int __cgroup_bpf_query(struct cgroup *cgrp, const union bpf_attr *attr,
79468e2f64SAlexei Starovoitov 		       union bpf_attr __user *uattr);
8030070984SDaniel Mack 
81324bda9eSAlexei Starovoitov /* Wrapper for __cgroup_bpf_*() protected by cgroup_mutex */
82324bda9eSAlexei Starovoitov int cgroup_bpf_attach(struct cgroup *cgrp, struct bpf_prog *prog,
83324bda9eSAlexei Starovoitov 		      enum bpf_attach_type type, u32 flags);
84324bda9eSAlexei Starovoitov int cgroup_bpf_detach(struct cgroup *cgrp, struct bpf_prog *prog,
85324bda9eSAlexei Starovoitov 		      enum bpf_attach_type type, u32 flags);
86468e2f64SAlexei Starovoitov int cgroup_bpf_query(struct cgroup *cgrp, const union bpf_attr *attr,
87468e2f64SAlexei Starovoitov 		     union bpf_attr __user *uattr);
8830070984SDaniel Mack 
89b2cd1257SDavid Ahern int __cgroup_bpf_run_filter_skb(struct sock *sk,
9030070984SDaniel Mack 				struct sk_buff *skb,
9130070984SDaniel Mack 				enum bpf_attach_type type);
9230070984SDaniel Mack 
9361023658SDavid Ahern int __cgroup_bpf_run_filter_sk(struct sock *sk,
9461023658SDavid Ahern 			       enum bpf_attach_type type);
9561023658SDavid Ahern 
964fbac77dSAndrey Ignatov int __cgroup_bpf_run_filter_sock_addr(struct sock *sk,
974fbac77dSAndrey Ignatov 				      struct sockaddr *uaddr,
981cedee13SAndrey Ignatov 				      enum bpf_attach_type type,
991cedee13SAndrey Ignatov 				      void *t_ctx);
1004fbac77dSAndrey Ignatov 
10140304b2aSLawrence Brakmo int __cgroup_bpf_run_filter_sock_ops(struct sock *sk,
10240304b2aSLawrence Brakmo 				     struct bpf_sock_ops_kern *sock_ops,
10340304b2aSLawrence Brakmo 				     enum bpf_attach_type type);
10440304b2aSLawrence Brakmo 
105ebc614f6SRoman Gushchin int __cgroup_bpf_check_dev_permission(short dev_type, u32 major, u32 minor,
106ebc614f6SRoman Gushchin 				      short access, enum bpf_attach_type type);
107ebc614f6SRoman Gushchin 
108*8bad74f9SRoman Gushchin static inline enum bpf_cgroup_storage_type cgroup_storage_type(
109*8bad74f9SRoman Gushchin 	struct bpf_map *map)
110aa0ad5b0SRoman Gushchin {
111*8bad74f9SRoman Gushchin 	return BPF_CGROUP_STORAGE_SHARED;
112aa0ad5b0SRoman Gushchin }
113aa0ad5b0SRoman Gushchin 
114*8bad74f9SRoman Gushchin static inline void bpf_cgroup_storage_set(struct bpf_cgroup_storage
115*8bad74f9SRoman Gushchin 					  *storage[MAX_BPF_CGROUP_STORAGE_TYPE])
116*8bad74f9SRoman Gushchin {
117*8bad74f9SRoman Gushchin 	enum bpf_cgroup_storage_type stype;
118*8bad74f9SRoman Gushchin 	struct bpf_storage_buffer *buf;
119*8bad74f9SRoman Gushchin 
120*8bad74f9SRoman Gushchin 	for_each_cgroup_storage_type(stype) {
121*8bad74f9SRoman Gushchin 		if (!storage[stype])
122*8bad74f9SRoman Gushchin 			continue;
123*8bad74f9SRoman Gushchin 
124*8bad74f9SRoman Gushchin 		buf = READ_ONCE(storage[stype]->buf);
125*8bad74f9SRoman Gushchin 		this_cpu_write(bpf_cgroup_storage[stype], &buf->data[0]);
126*8bad74f9SRoman Gushchin 	}
127*8bad74f9SRoman Gushchin }
128*8bad74f9SRoman Gushchin 
129*8bad74f9SRoman Gushchin struct bpf_cgroup_storage *bpf_cgroup_storage_alloc(struct bpf_prog *prog,
130*8bad74f9SRoman Gushchin 					enum bpf_cgroup_storage_type stype);
131de9cbbaaSRoman Gushchin void bpf_cgroup_storage_free(struct bpf_cgroup_storage *storage);
132de9cbbaaSRoman Gushchin void bpf_cgroup_storage_link(struct bpf_cgroup_storage *storage,
133de9cbbaaSRoman Gushchin 			     struct cgroup *cgroup,
134de9cbbaaSRoman Gushchin 			     enum bpf_attach_type type);
135de9cbbaaSRoman Gushchin void bpf_cgroup_storage_unlink(struct bpf_cgroup_storage *storage);
136de9cbbaaSRoman Gushchin int bpf_cgroup_storage_assign(struct bpf_prog *prog, struct bpf_map *map);
137de9cbbaaSRoman Gushchin void bpf_cgroup_storage_release(struct bpf_prog *prog, struct bpf_map *map);
138de9cbbaaSRoman Gushchin 
139b2cd1257SDavid Ahern /* Wrappers for __cgroup_bpf_run_filter_skb() guarded by cgroup_bpf_enabled. */
14030070984SDaniel Mack #define BPF_CGROUP_RUN_PROG_INET_INGRESS(sk, skb)			      \
14130070984SDaniel Mack ({									      \
14230070984SDaniel Mack 	int __ret = 0;							      \
14330070984SDaniel Mack 	if (cgroup_bpf_enabled)						      \
144b2cd1257SDavid Ahern 		__ret = __cgroup_bpf_run_filter_skb(sk, skb,		      \
14530070984SDaniel Mack 						    BPF_CGROUP_INET_INGRESS); \
14630070984SDaniel Mack 									      \
14730070984SDaniel Mack 	__ret;								      \
14830070984SDaniel Mack })
14930070984SDaniel Mack 
15030070984SDaniel Mack #define BPF_CGROUP_RUN_PROG_INET_EGRESS(sk, skb)			       \
15130070984SDaniel Mack ({									       \
15230070984SDaniel Mack 	int __ret = 0;							       \
15330070984SDaniel Mack 	if (cgroup_bpf_enabled && sk && sk == skb->sk) {		       \
15430070984SDaniel Mack 		typeof(sk) __sk = sk_to_full_sk(sk);			       \
15530070984SDaniel Mack 		if (sk_fullsock(__sk))					       \
156b2cd1257SDavid Ahern 			__ret = __cgroup_bpf_run_filter_skb(__sk, skb,	       \
15730070984SDaniel Mack 						      BPF_CGROUP_INET_EGRESS); \
15830070984SDaniel Mack 	}								       \
15930070984SDaniel Mack 	__ret;								       \
16030070984SDaniel Mack })
16130070984SDaniel Mack 
162aac3fc32SAndrey Ignatov #define BPF_CGROUP_RUN_SK_PROG(sk, type)				       \
16361023658SDavid Ahern ({									       \
16461023658SDavid Ahern 	int __ret = 0;							       \
165ee07862fSYafang Shao 	if (cgroup_bpf_enabled) {					       \
166aac3fc32SAndrey Ignatov 		__ret = __cgroup_bpf_run_filter_sk(sk, type);		       \
16761023658SDavid Ahern 	}								       \
16861023658SDavid Ahern 	__ret;								       \
16961023658SDavid Ahern })
17061023658SDavid Ahern 
171aac3fc32SAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET_SOCK(sk)				       \
172aac3fc32SAndrey Ignatov 	BPF_CGROUP_RUN_SK_PROG(sk, BPF_CGROUP_INET_SOCK_CREATE)
173aac3fc32SAndrey Ignatov 
174aac3fc32SAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET4_POST_BIND(sk)				       \
175aac3fc32SAndrey Ignatov 	BPF_CGROUP_RUN_SK_PROG(sk, BPF_CGROUP_INET4_POST_BIND)
176aac3fc32SAndrey Ignatov 
177aac3fc32SAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET6_POST_BIND(sk)				       \
178aac3fc32SAndrey Ignatov 	BPF_CGROUP_RUN_SK_PROG(sk, BPF_CGROUP_INET6_POST_BIND)
179aac3fc32SAndrey Ignatov 
1804fbac77dSAndrey Ignatov #define BPF_CGROUP_RUN_SA_PROG(sk, uaddr, type)				       \
1814fbac77dSAndrey Ignatov ({									       \
1824fbac77dSAndrey Ignatov 	int __ret = 0;							       \
1834fbac77dSAndrey Ignatov 	if (cgroup_bpf_enabled)						       \
1841cedee13SAndrey Ignatov 		__ret = __cgroup_bpf_run_filter_sock_addr(sk, uaddr, type,     \
1851cedee13SAndrey Ignatov 							  NULL);	       \
1864fbac77dSAndrey Ignatov 	__ret;								       \
1874fbac77dSAndrey Ignatov })
1884fbac77dSAndrey Ignatov 
1891cedee13SAndrey Ignatov #define BPF_CGROUP_RUN_SA_PROG_LOCK(sk, uaddr, type, t_ctx)		       \
190d74bad4eSAndrey Ignatov ({									       \
191d74bad4eSAndrey Ignatov 	int __ret = 0;							       \
192d74bad4eSAndrey Ignatov 	if (cgroup_bpf_enabled)	{					       \
193d74bad4eSAndrey Ignatov 		lock_sock(sk);						       \
1941cedee13SAndrey Ignatov 		__ret = __cgroup_bpf_run_filter_sock_addr(sk, uaddr, type,     \
1951cedee13SAndrey Ignatov 							  t_ctx);	       \
196d74bad4eSAndrey Ignatov 		release_sock(sk);					       \
197d74bad4eSAndrey Ignatov 	}								       \
198d74bad4eSAndrey Ignatov 	__ret;								       \
199d74bad4eSAndrey Ignatov })
200d74bad4eSAndrey Ignatov 
2014fbac77dSAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET4_BIND(sk, uaddr)			       \
2024fbac77dSAndrey Ignatov 	BPF_CGROUP_RUN_SA_PROG(sk, uaddr, BPF_CGROUP_INET4_BIND)
2034fbac77dSAndrey Ignatov 
2044fbac77dSAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET6_BIND(sk, uaddr)			       \
2054fbac77dSAndrey Ignatov 	BPF_CGROUP_RUN_SA_PROG(sk, uaddr, BPF_CGROUP_INET6_BIND)
2064fbac77dSAndrey Ignatov 
207d74bad4eSAndrey Ignatov #define BPF_CGROUP_PRE_CONNECT_ENABLED(sk) (cgroup_bpf_enabled && \
208d74bad4eSAndrey Ignatov 					    sk->sk_prot->pre_connect)
209d74bad4eSAndrey Ignatov 
210d74bad4eSAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET4_CONNECT(sk, uaddr)			       \
211d74bad4eSAndrey Ignatov 	BPF_CGROUP_RUN_SA_PROG(sk, uaddr, BPF_CGROUP_INET4_CONNECT)
212d74bad4eSAndrey Ignatov 
213d74bad4eSAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET6_CONNECT(sk, uaddr)			       \
214d74bad4eSAndrey Ignatov 	BPF_CGROUP_RUN_SA_PROG(sk, uaddr, BPF_CGROUP_INET6_CONNECT)
215d74bad4eSAndrey Ignatov 
216d74bad4eSAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET4_CONNECT_LOCK(sk, uaddr)		       \
2171cedee13SAndrey Ignatov 	BPF_CGROUP_RUN_SA_PROG_LOCK(sk, uaddr, BPF_CGROUP_INET4_CONNECT, NULL)
218d74bad4eSAndrey Ignatov 
219d74bad4eSAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET6_CONNECT_LOCK(sk, uaddr)		       \
2201cedee13SAndrey Ignatov 	BPF_CGROUP_RUN_SA_PROG_LOCK(sk, uaddr, BPF_CGROUP_INET6_CONNECT, NULL)
2211cedee13SAndrey Ignatov 
2221cedee13SAndrey Ignatov #define BPF_CGROUP_RUN_PROG_UDP4_SENDMSG_LOCK(sk, uaddr, t_ctx)		       \
2231cedee13SAndrey Ignatov 	BPF_CGROUP_RUN_SA_PROG_LOCK(sk, uaddr, BPF_CGROUP_UDP4_SENDMSG, t_ctx)
2241cedee13SAndrey Ignatov 
2251cedee13SAndrey Ignatov #define BPF_CGROUP_RUN_PROG_UDP6_SENDMSG_LOCK(sk, uaddr, t_ctx)		       \
2261cedee13SAndrey Ignatov 	BPF_CGROUP_RUN_SA_PROG_LOCK(sk, uaddr, BPF_CGROUP_UDP6_SENDMSG, t_ctx)
227d74bad4eSAndrey Ignatov 
22840304b2aSLawrence Brakmo #define BPF_CGROUP_RUN_PROG_SOCK_OPS(sock_ops)				       \
22940304b2aSLawrence Brakmo ({									       \
23040304b2aSLawrence Brakmo 	int __ret = 0;							       \
23140304b2aSLawrence Brakmo 	if (cgroup_bpf_enabled && (sock_ops)->sk) {	       \
23240304b2aSLawrence Brakmo 		typeof(sk) __sk = sk_to_full_sk((sock_ops)->sk);	       \
233df39a9f1SWANG Cong 		if (__sk && sk_fullsock(__sk))				       \
23440304b2aSLawrence Brakmo 			__ret = __cgroup_bpf_run_filter_sock_ops(__sk,	       \
23540304b2aSLawrence Brakmo 								 sock_ops,     \
23640304b2aSLawrence Brakmo 							 BPF_CGROUP_SOCK_OPS); \
23740304b2aSLawrence Brakmo 	}								       \
23840304b2aSLawrence Brakmo 	__ret;								       \
23940304b2aSLawrence Brakmo })
240ebc614f6SRoman Gushchin 
241ebc614f6SRoman Gushchin #define BPF_CGROUP_RUN_PROG_DEVICE_CGROUP(type, major, minor, access)	      \
242ebc614f6SRoman Gushchin ({									      \
243ebc614f6SRoman Gushchin 	int __ret = 0;							      \
244ebc614f6SRoman Gushchin 	if (cgroup_bpf_enabled)						      \
245ebc614f6SRoman Gushchin 		__ret = __cgroup_bpf_check_dev_permission(type, major, minor, \
246ebc614f6SRoman Gushchin 							  access,	      \
247ebc614f6SRoman Gushchin 							  BPF_CGROUP_DEVICE); \
248ebc614f6SRoman Gushchin 									      \
249ebc614f6SRoman Gushchin 	__ret;								      \
250ebc614f6SRoman Gushchin })
251fdb5c453SSean Young int cgroup_bpf_prog_attach(const union bpf_attr *attr,
252fdb5c453SSean Young 			   enum bpf_prog_type ptype, struct bpf_prog *prog);
253fdb5c453SSean Young int cgroup_bpf_prog_detach(const union bpf_attr *attr,
254fdb5c453SSean Young 			   enum bpf_prog_type ptype);
255fdb5c453SSean Young int cgroup_bpf_prog_query(const union bpf_attr *attr,
256fdb5c453SSean Young 			  union bpf_attr __user *uattr);
25730070984SDaniel Mack #else
25830070984SDaniel Mack 
259fdb5c453SSean Young struct bpf_prog;
26030070984SDaniel Mack struct cgroup_bpf {};
26130070984SDaniel Mack static inline void cgroup_bpf_put(struct cgroup *cgrp) {}
262324bda9eSAlexei Starovoitov static inline int cgroup_bpf_inherit(struct cgroup *cgrp) { return 0; }
26330070984SDaniel Mack 
264fdb5c453SSean Young static inline int cgroup_bpf_prog_attach(const union bpf_attr *attr,
265fdb5c453SSean Young 					 enum bpf_prog_type ptype,
266fdb5c453SSean Young 					 struct bpf_prog *prog)
267fdb5c453SSean Young {
268fdb5c453SSean Young 	return -EINVAL;
269fdb5c453SSean Young }
270fdb5c453SSean Young 
271fdb5c453SSean Young static inline int cgroup_bpf_prog_detach(const union bpf_attr *attr,
272fdb5c453SSean Young 					 enum bpf_prog_type ptype)
273fdb5c453SSean Young {
274fdb5c453SSean Young 	return -EINVAL;
275fdb5c453SSean Young }
276fdb5c453SSean Young 
277fdb5c453SSean Young static inline int cgroup_bpf_prog_query(const union bpf_attr *attr,
278fdb5c453SSean Young 					union bpf_attr __user *uattr)
279fdb5c453SSean Young {
280fdb5c453SSean Young 	return -EINVAL;
281fdb5c453SSean Young }
282fdb5c453SSean Young 
283*8bad74f9SRoman Gushchin static inline void bpf_cgroup_storage_set(
284*8bad74f9SRoman Gushchin 	struct bpf_cgroup_storage *storage[MAX_BPF_CGROUP_STORAGE_TYPE]) {}
285de9cbbaaSRoman Gushchin static inline int bpf_cgroup_storage_assign(struct bpf_prog *prog,
286de9cbbaaSRoman Gushchin 					    struct bpf_map *map) { return 0; }
287de9cbbaaSRoman Gushchin static inline void bpf_cgroup_storage_release(struct bpf_prog *prog,
288de9cbbaaSRoman Gushchin 					      struct bpf_map *map) {}
289de9cbbaaSRoman Gushchin static inline struct bpf_cgroup_storage *bpf_cgroup_storage_alloc(
290*8bad74f9SRoman Gushchin 	struct bpf_prog *prog, enum bpf_cgroup_storage_type stype) { return 0; }
291de9cbbaaSRoman Gushchin static inline void bpf_cgroup_storage_free(
292de9cbbaaSRoman Gushchin 	struct bpf_cgroup_storage *storage) {}
293de9cbbaaSRoman Gushchin 
29413193b0fSAndrey Ignatov #define cgroup_bpf_enabled (0)
295d74bad4eSAndrey Ignatov #define BPF_CGROUP_PRE_CONNECT_ENABLED(sk) (0)
29630070984SDaniel Mack #define BPF_CGROUP_RUN_PROG_INET_INGRESS(sk,skb) ({ 0; })
29730070984SDaniel Mack #define BPF_CGROUP_RUN_PROG_INET_EGRESS(sk,skb) ({ 0; })
29861023658SDavid Ahern #define BPF_CGROUP_RUN_PROG_INET_SOCK(sk) ({ 0; })
2994fbac77dSAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET4_BIND(sk, uaddr) ({ 0; })
3004fbac77dSAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET6_BIND(sk, uaddr) ({ 0; })
301aac3fc32SAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET4_POST_BIND(sk) ({ 0; })
302aac3fc32SAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET6_POST_BIND(sk) ({ 0; })
303d74bad4eSAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET4_CONNECT(sk, uaddr) ({ 0; })
304d74bad4eSAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET4_CONNECT_LOCK(sk, uaddr) ({ 0; })
305d74bad4eSAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET6_CONNECT(sk, uaddr) ({ 0; })
306d74bad4eSAndrey Ignatov #define BPF_CGROUP_RUN_PROG_INET6_CONNECT_LOCK(sk, uaddr) ({ 0; })
3071cedee13SAndrey Ignatov #define BPF_CGROUP_RUN_PROG_UDP4_SENDMSG_LOCK(sk, uaddr, t_ctx) ({ 0; })
3081cedee13SAndrey Ignatov #define BPF_CGROUP_RUN_PROG_UDP6_SENDMSG_LOCK(sk, uaddr, t_ctx) ({ 0; })
30940304b2aSLawrence Brakmo #define BPF_CGROUP_RUN_PROG_SOCK_OPS(sock_ops) ({ 0; })
310ebc614f6SRoman Gushchin #define BPF_CGROUP_RUN_PROG_DEVICE_CGROUP(type,major,minor,access) ({ 0; })
31130070984SDaniel Mack 
312*8bad74f9SRoman Gushchin #define for_each_cgroup_storage_type(stype) for (; false; )
313*8bad74f9SRoman Gushchin 
31430070984SDaniel Mack #endif /* CONFIG_CGROUP_BPF */
31530070984SDaniel Mack 
31630070984SDaniel Mack #endif /* _BPF_CGROUP_H */
317