| .. | .. | 
|---|
| 1 | 1 | // SPDX-License-Identifier: GPL-2.0 | 
|---|
| 2 | 2 | #include <stdio.h> | 
|---|
| 3 |  | -#include <linux/bpf.h> | 
|---|
| 4 | 3 | #include <unistd.h> | 
|---|
| 5 |  | -#include <bpf/bpf.h> | 
|---|
| 6 |  | -#include "bpf_load.h" | 
|---|
|  | 4 | +#include <bpf/libbpf.h> | 
|---|
|  | 5 | +#include "trace_helpers.h" | 
|---|
| 7 | 6 |  | 
|---|
| 8 | 7 | int main(int ac, char **argv) | 
|---|
| 9 | 8 | { | 
|---|
| 10 |  | -	FILE *f; | 
|---|
|  | 9 | +	struct bpf_link *link = NULL; | 
|---|
|  | 10 | +	struct bpf_program *prog; | 
|---|
|  | 11 | +	struct bpf_object *obj; | 
|---|
| 11 | 12 | char filename[256]; | 
|---|
|  | 13 | +	FILE *f; | 
|---|
| 12 | 14 |  | 
|---|
| 13 | 15 | 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 | +	} | 
|---|
| 14 | 21 |  | 
|---|
| 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; | 
|---|
| 18 | 39 | } | 
|---|
| 19 | 40 |  | 
|---|
| 20 | 41 | f = popen("taskset 1 ping -c5 localhost", "r"); | 
|---|
| .. | .. | 
|---|
| 22 | 43 |  | 
|---|
| 23 | 44 | read_trace_pipe(); | 
|---|
| 24 | 45 |  | 
|---|
|  | 46 | +cleanup: | 
|---|
|  | 47 | +	bpf_link__destroy(link); | 
|---|
|  | 48 | +	bpf_object__close(obj); | 
|---|
| 25 | 49 | return 0; | 
|---|
| 26 | 50 | } | 
|---|