0

ネットワークドライバーに XDP プログラムをインストールしようとしていますが、セクション 4 を指しているエントリ 0 に、{map,call} 関連の relo データが含まれていない ELFというエラーが表示されます。コンパイラのバグ?! プログラム/マップのフェッチ中にエラーが発生しました!

私が実行しようとしているコード:

#define KBUILD_MODNAME "filter"
#include <arpa/inet.h>
#include <linux/bpf.h>
#include <linux/if_ether.h>
#include <linux/ip.h>
#include <linux/in.h>
#include <linux/udp.h>

static int (*bpf_trace_printk)(const char *fmt,...) = (void *)BPF_FUNC_trace_printk;

int udpfilter(struct xdp_md *ctx) {
    bpf_trace_printk("got a packet\n");
    void *data = (void *)(long)ctx->data;
    void *data_end = (void *)(long)ctx->data_end;
    struct ethhdr *eth = data;
    if ((void*)eth + sizeof(*eth) <= data_end) {
       struct iphdr *ip = data + sizeof(*eth);
       if ((void*)ip + sizeof(*ip) <= data_end) {
         if (ip->protocol == IPPROTO_UDP) {
            struct udphdr *udp = (void*)ip + sizeof(*ip);
            if ((void*)udp + sizeof(*udp) <= data_end) {
               if (udp->dest == ntohs(7999)) {
                  bpf_trace_printk("udp port 7999\n");
                  udp->dest = ntohs(7998);
              }
            }
          }
        }
      }
   return XDP_PASS;
   }

コンパイルコマンド: clang -O2 -g -Wall -target bpf -c filter.c -o filter.oでOK!

インストールに使用するコマンド: ip link set enp0s3 xdpgeneric obj filter.oその後、上記のエラーが発生します。

このメッセージが何を意味するのかわかりません。何か見逃していましたか?

4

1 に答える 1