xref: /linux/tools/testing/selftests/bpf/progs/bpf_iter.h (revision fe0dd9d4b7402c9773fc7a453fa65875abaa24ec)
184544f56SYonghong Song /* SPDX-License-Identifier: GPL-2.0 */
284544f56SYonghong Song /* Copyright (c) 2020 Facebook */
384544f56SYonghong Song /* "undefine" structs in vmlinux.h, because we "override" them below */
484544f56SYonghong Song #define bpf_iter_meta bpf_iter_meta___not_used
584544f56SYonghong Song #define bpf_iter__bpf_map bpf_iter__bpf_map___not_used
684544f56SYonghong Song #define bpf_iter__ipv6_route bpf_iter__ipv6_route___not_used
784544f56SYonghong Song #define bpf_iter__netlink bpf_iter__netlink___not_used
884544f56SYonghong Song #define bpf_iter__task bpf_iter__task___not_used
984544f56SYonghong Song #define bpf_iter__task_file bpf_iter__task_file___not_used
10e8168840SSong Liu #define bpf_iter__task_vma bpf_iter__task_vma___not_used
112767c977SYonghong Song #define bpf_iter__tcp bpf_iter__tcp___not_used
122767c977SYonghong Song #define tcp6_sock tcp6_sock___not_used
13ace6d6ecSYonghong Song #define bpf_iter__udp bpf_iter__udp___not_used
14ace6d6ecSYonghong Song #define udp6_sock udp6_sock___not_used
1504e92818SKuniyuki Iwashima #define bpf_iter__unix bpf_iter__unix___not_used
16363885d7SAndrii Nakryiko #define bpf_iter__bpf_map_elem bpf_iter__bpf_map_elem___not_used
17363885d7SAndrii Nakryiko #define bpf_iter__bpf_sk_storage_map bpf_iter__bpf_sk_storage_map___not_used
182f7de986SLorenz Bauer #define bpf_iter__sockmap bpf_iter__sockmap___not_used
195a9b8e2cSDmitrii Dolgov #define bpf_iter__bpf_link bpf_iter__bpf_link___not_used
20*fe0dd9d4SHao Luo #define bpf_iter__cgroup bpf_iter__cgroup___not_used
21cfe77683SAlan Maguire #define btf_ptr btf_ptr___not_used
22cfe77683SAlan Maguire #define BTF_F_COMPACT BTF_F_COMPACT___not_used
23cfe77683SAlan Maguire #define BTF_F_NONAME BTF_F_NONAME___not_used
24cfe77683SAlan Maguire #define BTF_F_PTR_RAW BTF_F_PTR_RAW___not_used
25cfe77683SAlan Maguire #define BTF_F_ZERO BTF_F_ZERO___not_used
26a9d2fae8SAlan Maguire #define bpf_iter__ksym bpf_iter__ksym___not_used
2784544f56SYonghong Song #include "vmlinux.h"
2884544f56SYonghong Song #undef bpf_iter_meta
2984544f56SYonghong Song #undef bpf_iter__bpf_map
3084544f56SYonghong Song #undef bpf_iter__ipv6_route
3184544f56SYonghong Song #undef bpf_iter__netlink
3284544f56SYonghong Song #undef bpf_iter__task
3384544f56SYonghong Song #undef bpf_iter__task_file
34e8168840SSong Liu #undef bpf_iter__task_vma
352767c977SYonghong Song #undef bpf_iter__tcp
362767c977SYonghong Song #undef tcp6_sock
37ace6d6ecSYonghong Song #undef bpf_iter__udp
38ace6d6ecSYonghong Song #undef udp6_sock
3904e92818SKuniyuki Iwashima #undef bpf_iter__unix
40363885d7SAndrii Nakryiko #undef bpf_iter__bpf_map_elem
41363885d7SAndrii Nakryiko #undef bpf_iter__bpf_sk_storage_map
422f7de986SLorenz Bauer #undef bpf_iter__sockmap
435a9b8e2cSDmitrii Dolgov #undef bpf_iter__bpf_link
44*fe0dd9d4SHao Luo #undef bpf_iter__cgroup
45cfe77683SAlan Maguire #undef btf_ptr
46cfe77683SAlan Maguire #undef BTF_F_COMPACT
47cfe77683SAlan Maguire #undef BTF_F_NONAME
48cfe77683SAlan Maguire #undef BTF_F_PTR_RAW
49cfe77683SAlan Maguire #undef BTF_F_ZERO
50a9d2fae8SAlan Maguire #undef bpf_iter__ksym
5184544f56SYonghong Song 
5284544f56SYonghong Song struct bpf_iter_meta {
5384544f56SYonghong Song 	struct seq_file *seq;
5484544f56SYonghong Song 	__u64 session_id;
5584544f56SYonghong Song 	__u64 seq_num;
5684544f56SYonghong Song } __attribute__((preserve_access_index));
5784544f56SYonghong Song 
5884544f56SYonghong Song struct bpf_iter__ipv6_route {
5984544f56SYonghong Song 	struct bpf_iter_meta *meta;
6084544f56SYonghong Song 	struct fib6_info *rt;
6184544f56SYonghong Song } __attribute__((preserve_access_index));
6284544f56SYonghong Song 
6384544f56SYonghong Song struct bpf_iter__netlink {
6484544f56SYonghong Song 	struct bpf_iter_meta *meta;
6584544f56SYonghong Song 	struct netlink_sock *sk;
6684544f56SYonghong Song } __attribute__((preserve_access_index));
6784544f56SYonghong Song 
6884544f56SYonghong Song struct bpf_iter__task {
6984544f56SYonghong Song 	struct bpf_iter_meta *meta;
7084544f56SYonghong Song 	struct task_struct *task;
7184544f56SYonghong Song } __attribute__((preserve_access_index));
7284544f56SYonghong Song 
7384544f56SYonghong Song struct bpf_iter__task_file {
7484544f56SYonghong Song 	struct bpf_iter_meta *meta;
7584544f56SYonghong Song 	struct task_struct *task;
7684544f56SYonghong Song 	__u32 fd;
7784544f56SYonghong Song 	struct file *file;
7884544f56SYonghong Song } __attribute__((preserve_access_index));
7984544f56SYonghong Song 
80e8168840SSong Liu struct bpf_iter__task_vma {
81e8168840SSong Liu 	struct bpf_iter_meta *meta;
82e8168840SSong Liu 	struct task_struct *task;
83e8168840SSong Liu 	struct vm_area_struct *vma;
84e8168840SSong Liu } __attribute__((preserve_access_index));
85e8168840SSong Liu 
8684544f56SYonghong Song struct bpf_iter__bpf_map {
8784544f56SYonghong Song 	struct bpf_iter_meta *meta;
8884544f56SYonghong Song 	struct bpf_map *map;
8984544f56SYonghong Song } __attribute__((preserve_access_index));
902767c977SYonghong Song 
912767c977SYonghong Song struct bpf_iter__tcp {
922767c977SYonghong Song 	struct bpf_iter_meta *meta;
932767c977SYonghong Song 	struct sock_common *sk_common;
942767c977SYonghong Song 	uid_t uid;
952767c977SYonghong Song } __attribute__((preserve_access_index));
962767c977SYonghong Song 
972767c977SYonghong Song struct tcp6_sock {
982767c977SYonghong Song 	struct tcp_sock	tcp;
992767c977SYonghong Song 	struct ipv6_pinfo inet6;
1002767c977SYonghong Song } __attribute__((preserve_access_index));
101ace6d6ecSYonghong Song 
102ace6d6ecSYonghong Song struct bpf_iter__udp {
103ace6d6ecSYonghong Song 	struct bpf_iter_meta *meta;
104ace6d6ecSYonghong Song 	struct udp_sock *udp_sk;
105ace6d6ecSYonghong Song 	uid_t uid __attribute__((aligned(8)));
106ace6d6ecSYonghong Song 	int bucket __attribute__((aligned(8)));
107ace6d6ecSYonghong Song } __attribute__((preserve_access_index));
108ace6d6ecSYonghong Song 
109ace6d6ecSYonghong Song struct udp6_sock {
110ace6d6ecSYonghong Song 	struct udp_sock	udp;
111ace6d6ecSYonghong Song 	struct ipv6_pinfo inet6;
112ace6d6ecSYonghong Song } __attribute__((preserve_access_index));
113363885d7SAndrii Nakryiko 
11404e92818SKuniyuki Iwashima struct bpf_iter__unix {
11504e92818SKuniyuki Iwashima 	struct bpf_iter_meta *meta;
11604e92818SKuniyuki Iwashima 	struct unix_sock *unix_sk;
11704e92818SKuniyuki Iwashima 	uid_t uid;
11804e92818SKuniyuki Iwashima } __attribute__((preserve_access_index));
11904e92818SKuniyuki Iwashima 
120363885d7SAndrii Nakryiko struct bpf_iter__bpf_map_elem {
121363885d7SAndrii Nakryiko 	struct bpf_iter_meta *meta;
122363885d7SAndrii Nakryiko 	struct bpf_map *map;
123363885d7SAndrii Nakryiko 	void *key;
124363885d7SAndrii Nakryiko 	void *value;
125363885d7SAndrii Nakryiko };
126363885d7SAndrii Nakryiko 
127363885d7SAndrii Nakryiko struct bpf_iter__bpf_sk_storage_map {
128363885d7SAndrii Nakryiko 	struct bpf_iter_meta *meta;
129363885d7SAndrii Nakryiko 	struct bpf_map *map;
130363885d7SAndrii Nakryiko 	struct sock *sk;
131363885d7SAndrii Nakryiko 	void *value;
132363885d7SAndrii Nakryiko };
1332f7de986SLorenz Bauer 
1342f7de986SLorenz Bauer struct bpf_iter__sockmap {
1352f7de986SLorenz Bauer 	struct bpf_iter_meta *meta;
1362f7de986SLorenz Bauer 	struct bpf_map *map;
1372f7de986SLorenz Bauer 	void *key;
1382f7de986SLorenz Bauer 	struct sock *sk;
1392f7de986SLorenz Bauer };
140cfe77683SAlan Maguire 
1415a9b8e2cSDmitrii Dolgov struct bpf_iter__bpf_link {
1425a9b8e2cSDmitrii Dolgov 	struct bpf_iter_meta *meta;
1435a9b8e2cSDmitrii Dolgov 	struct bpf_link *link;
1445a9b8e2cSDmitrii Dolgov };
1455a9b8e2cSDmitrii Dolgov 
146*fe0dd9d4SHao Luo struct bpf_iter__cgroup {
147*fe0dd9d4SHao Luo 	struct bpf_iter_meta *meta;
148*fe0dd9d4SHao Luo 	struct cgroup *cgroup;
149*fe0dd9d4SHao Luo } __attribute__((preserve_access_index));
150*fe0dd9d4SHao Luo 
151cfe77683SAlan Maguire struct btf_ptr {
152cfe77683SAlan Maguire 	void *ptr;
153cfe77683SAlan Maguire 	__u32 type_id;
154cfe77683SAlan Maguire 	__u32 flags;
155cfe77683SAlan Maguire };
156cfe77683SAlan Maguire 
157cfe77683SAlan Maguire enum {
158cfe77683SAlan Maguire 	BTF_F_COMPACT	=	(1ULL << 0),
159cfe77683SAlan Maguire 	BTF_F_NONAME	=	(1ULL << 1),
160cfe77683SAlan Maguire 	BTF_F_PTR_RAW	=	(1ULL << 2),
161cfe77683SAlan Maguire 	BTF_F_ZERO	=	(1ULL << 3),
162cfe77683SAlan Maguire };
163a9d2fae8SAlan Maguire 
164a9d2fae8SAlan Maguire struct bpf_iter__ksym {
165a9d2fae8SAlan Maguire 	struct bpf_iter_meta *meta;
166a9d2fae8SAlan Maguire 	struct kallsym_iter *ksym;
167a9d2fae8SAlan Maguire };
168