Why I am getting this error when I want to load the ebpf program into kernel??
ebpf_prog.c:
#include <bpf/bpf_helpers.h>
#include <bpf/libbpf.h>
int main(int argc, char **argv) {
struct bpf_object *obj;
int map_fd, prog_fd;
int i, sock;
FILE *f;
if (bpf_prog_load("ebpf_prog.o", BPF_PROG_TYPE_SOCKET_FILTER, &obj, &prog_fd)){
printf("The kernel didn't load the BPF program\n");
return -1;
}
return 0;
}
load_prog.c:
#include <linux/bpf.h>
#include <bpf/bpf_helpers.h>
#include <bpf/libbpf.h>
int main(int argc, char **argv) {
struct bpf_object *obj;
int map_fd, prog_fd;
int i, sock;
FILE *f;
if (bpf_prog_load("ebpf_prog.o", BPF_PROG_TYPE_SOCKET_FILTER, &obj, &prog_fd)){
printf("The kernel didn't load the BPF program\n");
return -1;
}
return 0;
}
Error:
$ gcc ebpf_prog.c -c -o ebpf_prog.o
$ gcc load_prog.c -o load_prog -lbpf
$ ./load_prog
libbpf: elf: sock_example.o is not a valid eBPF object file
The kernel didn't load the BPF program
what's wrong with my code??