首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用XDP返回的BPF程序未能加载BPF框架(-22)

使用XDP返回的BPF程序未能加载BPF框架(-22)
EN

Stack Overflow用户
提问于 2020-08-31 11:48:24
回答 1查看 818关注 0票数 0

首先,我没有直接使用libbpf API,也没有使用BCC。相反,我试图使用bpftool生成的框架的API。

控制代码:

代码语言:javascript
复制
obj_gen = bpf_xdp_c__open();
if (!obj_gen)
  goto cleanup;

ifindex = if_nametoindex("eth0");
if(!ifindex)
{
  perror("if_nametoindex");
  return 1;
}

err = bpf_xdp_c__load(obj_gen);

BPF代码:

代码语言:javascript
复制
// Simple XDP BPF program. Everything packet will be dropped. 
SEC("test")
int xdp_prog1(struct xdp_md *ctx){
  char drop_message[] = "XDP PACKET DROP\n";
  bpf_trace_printk(&drop_message, sizeof(drop_message));
  return XDP_DROP;
}

因此,在运行之后,显示了以下错误:

代码语言:javascript
复制
  // libbpf: load bpf program failed: Invalid argument
  // libbpf: failed to load program 'test'
  // libbpf: failed to load object 'bpf_xdp_c'
  // libbpf: failed to load BPF skeleton 'bpf_xdp_c': -22

调试后,我注意到程序类型没有正确的值。它总是返回0。因此,在加载调用之前,我必须定义以下代码:

代码语言:javascript
复制
 obj_gen->progs.xdp_prog1->type = BPF_PROG_TYPE_XDP;

因为struct bpf_programlibbpf.c中,所以为了在编译中找到它,我必须在头中重新定义它。这个解决办法起作用了。

问:有没有更好的解决方案?

EN

回答 1

Stack Overflow用户

发布于 2020-08-31 11:48:24

我发现了问题所在。在查看了libbpf源库之后,我找到了变量。

代码语言:javascript
复制
static const struct bpf_sec_def section_defs[] = {... BPF_PROG_SEC("xdp",BPF_PROG_TYPE_XDP), ... 

因此,我注意到我还没有用SEC("xdp")在BPF程序中定义我的XDP部分。

谢谢@Qeole你的帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63670188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档