c - AF-XDP:仅加载内核程序一次,但将对 xsks-map 的访问分配给多个进程
问题描述
据我了解,每个网络接口只能有一个 AF-XDP 内核程序。我想将来自单个网络接口的多个多播地址的数据包处理分配给多个进程。我编写了一个“加载器”程序来创建进程(到目前为止工作正常)。
我现在的问题是在加载程序中仅加载一次内核程序load_bpf_and_xdp_attach
,但是将对 xsks-map 的访问分配给多个进程。
load_bpf_and_xdp_attach
返回指向 a 的指针struct bpf_object*
。然后需要这个指针bpf_object__find_map_by_name
来访问bpf_map
文件描述符。
我的想法是将 的内容bpf_object
写入共享内存,从而将其分配给进程。但不幸的是,该结构bpf_object
是在libbpf.c
. 因此,我无法做到这一点:
void insert_bpf_obj_into_shrd_mem(int shmid, struct bpf_object *bpf_obj) {
uint8_t *shm_data = shmat(shmid, NULL, 0);
if(shm_data == -1) {
fprintf(stderr, "Failed to obtain `shared memory` with id %d: %s\n", shmid, strerror(errno));
exit(1);
}
memcpy(shm_data, bpf_obj, sizeof(struct bpf_object));
shmdt(shm_data);
}
这在我看来,libbpf
不想让任何人知道bpf_object
。
有什么想法可以实现我最初的想法吗?
如果每个进程都加载自己的内核程序版本,我最终会得到(amount of processes)
-xsks 映射,我认为这不明智。
编辑:我知道有一种方法可以重用地图,但是......似乎有点复杂
解决方案
推荐阅读
- python - Django html 表单数据抛出 NoReverseMatch
- angular - SnackBar 在 HTTPInterceptor 中使用时不显示
- html - 更少的编译器生成空规则
- asp.net-core-mvc - 查询字符串绑定在 RazorPage 上不起作用,即使 SupportsGet = true
- ruby-on-rails - Rails、EC2、Nginx、Unicorn - 新资产不再在生产环境中渲染
- javascript - NodeJS 并发 SFTP 下载导致不同的文件长度
- javascript - 回调函数——如何知道参数内容是什么
- html - Freshdesk/Freshchat 的重音符号问题
- java - 应用于递归算法的动态规划
- url - 替换 URL 的多个部分