ebpfプログラムをカーネルにロード中にエラーが発生しました。

ebpfプログラムをカーネルにロード中にエラーが発生しました。

ebpfプログラムをカーネルにロードしようとしたときにこのエラーが発生するのはなぜですか?

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;
}

ローダー.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;
}

間違い:

$ 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

私のコードに問題がありますか?

ベストアンサー1

load_prog.cBPFプログラムを含むオブジェクトファイルを参照していますが、そのsock_example.oオブジェクトファイルは実際にはebpf_prog.o

おすすめ記事