hc
2023-12-09 b22da3d8526a935aa31e086e63f60ff3246cb61c
kernel/samples/bpf/tracex7_user.c
....@@ -1,17 +1,18 @@
11 #define _GNU_SOURCE
22
33 #include <stdio.h>
4
-#include <linux/bpf.h>
54 #include <unistd.h>
6
-#include <bpf/bpf.h>
7
-#include "bpf_load.h"
5
+#include <bpf/libbpf.h>
86
97 int main(int argc, char **argv)
108 {
11
- FILE *f;
9
+ struct bpf_link *link = NULL;
10
+ struct bpf_program *prog;
11
+ struct bpf_object *obj;
1212 char filename[256];
1313 char command[256];
14
- int ret;
14
+ int ret = 0;
15
+ FILE *f;
1516
1617 if (!argv[1]) {
1718 fprintf(stderr, "ERROR: Run with the btrfs device argument!\n");
....@@ -19,15 +20,37 @@
1920 }
2021
2122 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
+ }
2228
23
- if (load_bpf_file(filename)) {
24
- printf("%s", bpf_log_buf);
25
- return 1;
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;
2646 }
2747
2848 snprintf(command, 256, "mount %s tmpmnt/", argv[1]);
2949 f = popen(command, "r");
3050 ret = pclose(f);
3151
52
+cleanup:
53
+ bpf_link__destroy(link);
54
+ bpf_object__close(obj);
3255 return ret ? 0 : 1;
3356 }