如何使用"BPF_MAP_TYPE_SOCKHASH"



我正在测试nginx_quic与quic_bpf打开,但我遇到了BPF_MAP_CREATE失败。errno(22)告诉无效参数。我用BPF_MAP_TYPE_SOCKHASH类型编写了一个简单的BPF_MAP_CREATE示例。但是errno(7)告诉论证列表太长了。我不知道如何使用BPF_MAP_TYPE_SOCKHASH

下面是我的代码:

#include <sys/socket.h>
#include <sys/syscall.h>
#include <linux/bpf.h>
#include <string.h>
#include <stdint.h>
#include <errno.h>

int main(){
union bpf_attr attr;
memset(&attr, sizeof(union bpf_attr), 0);

- attr.map_type = BPF_MAP_TYPE_SOCKHASH;
attr.key_size = sizeof(uint64_t);
attr.value_size = sizeof(uint64_t);
attr.max_entries = 64;
attr.map_flags = 0;


int ret = syscall(__NR_bpf, BPF_MAP_CREATE, attr, sizeof(attr));
printf("ret = %d, errno = %dn", ret, errno);
return 0;
}

result: ret = -1, errno = 7

我的linux内核是5.4uname -:Linux h3c_r4900 5.4.0-126-generic #142~18.04.1-Ubuntu SMP Thu Sep 1 16:25:16 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

谁能给我一个工作的例子或告诉什么是我的代码或系统环境的问题?我认为bpf过滤器是在linux内核中实现的,还是我需要libbpf或任何依赖关系?

这个问题是由于linux内核不支持ebpf导致的。我通过重新编译linux内核来解决这个问题,几乎所有ebpf相关的配置都打开了。

相关内容

  • 没有找到相关文章

最新更新