问题描述
首先,我没有直接使用 libbpf API,也没有使用BCC。相反,我尝试使用 bpftool 生成的框架的API。
控制代码:
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代码:
// 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;
}
因此,运行后,显示以下错误:
// 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。因此,我必须在装入调用之前定义以下代码:
obj_gen->progs.xdp_prog1->type = BPF_PROG_TYPE_XDP;
由于struct bpf_program
在libbpf.c
中,因此我不得不在标头中重新定义以便编译找到它。此解决方法有效。
问:有更好的解决方案吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)