xref: /openbmc/linux/samples/bpf/tracex7_user.c (revision c4c3c32d)
1 #define _GNU_SOURCE
2 
3 #include <stdio.h>
4 #include <unistd.h>
5 #include <bpf/libbpf.h>
6 
7 int main(int argc, char **argv)
8 {
9 	struct bpf_link *link = NULL;
10 	struct bpf_program *prog;
11 	struct bpf_object *obj;
12 	char filename[256];
13 	char command[256];
14 	int ret = 0;
15 	FILE *f;
16 
17 	if (!argv[1]) {
18 		fprintf(stderr, "ERROR: Run with the btrfs device argument!\n");
19 		return 0;
20 	}
21 
22 	snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]);
23 	obj = bpf_object__open_file(filename, NULL);
24 	if (libbpf_get_error(obj)) {
25 		fprintf(stderr, "ERROR: opening BPF object file failed\n");
26 		return 0;
27 	}
28 
29 	prog = bpf_object__find_program_by_name(obj, "bpf_prog1");
30 	if (!prog) {
31 		fprintf(stderr, "ERROR: finding a prog in obj file failed\n");
32 		goto cleanup;
33 	}
34 
35 	/* load BPF program */
36 	if (bpf_object__load(obj)) {
37 		fprintf(stderr, "ERROR: loading BPF object file failed\n");
38 		goto cleanup;
39 	}
40 
41 	link = bpf_program__attach(prog);
42 	if (libbpf_get_error(link)) {
43 		fprintf(stderr, "ERROR: bpf_program__attach failed\n");
44 		link = NULL;
45 		goto cleanup;
46 	}
47 
48 	snprintf(command, 256, "mount %s tmpmnt/", argv[1]);
49 	f = popen(command, "r");
50 	ret = pclose(f);
51 
52 cleanup:
53 	bpf_link__destroy(link);
54 	bpf_object__close(obj);
55 	return ret ? 0 : 1;
56 }
57