hc
2024-01-05 071106ecf68c401173c58808b1cf5f68cc50d390
kernel/samples/bpf/tracex1_user.c
....@@ -1,20 +1,41 @@
11 // SPDX-License-Identifier: GPL-2.0
22 #include <stdio.h>
3
-#include <linux/bpf.h>
43 #include <unistd.h>
5
-#include <bpf/bpf.h>
6
-#include "bpf_load.h"
4
+#include <bpf/libbpf.h>
5
+#include "trace_helpers.h"
76
87 int main(int ac, char **argv)
98 {
10
- FILE *f;
9
+ struct bpf_link *link = NULL;
10
+ struct bpf_program *prog;
11
+ struct bpf_object *obj;
1112 char filename[256];
13
+ FILE *f;
1214
1315 snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]);
16
+ obj = bpf_object__open_file(filename, NULL);
17
+ if (libbpf_get_error(obj)) {
18
+ fprintf(stderr, "ERROR: opening BPF object file failed\n");
19
+ return 0;
20
+ }
1421
15
- if (load_bpf_file(filename)) {
16
- printf("%s", bpf_log_buf);
17
- return 1;
22
+ prog = bpf_object__find_program_by_name(obj, "bpf_prog1");
23
+ if (!prog) {
24
+ fprintf(stderr, "ERROR: finding a prog in obj file failed\n");
25
+ goto cleanup;
26
+ }
27
+
28
+ /* load BPF program */
29
+ if (bpf_object__load(obj)) {
30
+ fprintf(stderr, "ERROR: loading BPF object file failed\n");
31
+ goto cleanup;
32
+ }
33
+
34
+ link = bpf_program__attach(prog);
35
+ if (libbpf_get_error(link)) {
36
+ fprintf(stderr, "ERROR: bpf_program__attach failed\n");
37
+ link = NULL;
38
+ goto cleanup;
1839 }
1940
2041 f = popen("taskset 1 ping -c5 localhost", "r");
....@@ -22,5 +43,8 @@
2243
2344 read_trace_pipe();
2445
46
+cleanup:
47
+ bpf_link__destroy(link);
48
+ bpf_object__close(obj);
2549 return 0;
2650 }