C AF-XDP:实现共享的Umem套接字
我想实现XDP_SHARED_UMEM:C AF-XDP:实现共享的Umem套接字,c,linux,xdp-bpf,C,Linux,Xdp Bpf,我想实现XDP_SHARED_UMEM: libbpf库函数xsk\u socket\u create()检查xsk\u umem->refcount值。如果大于1,则设置struct sockaddr\u XDP的XDP\u SHARED\u UMEM选项 因此,就我的理解而言,我“只是”需要传递我想要与之共享umem的套接字的原始umem结构,其余的由libbpf完成 我尝试的方法是让第一个进程将其umem-struct复制到一个共享内存区域,第二个进程可以从该区域加载它。但是因为struc
libbpf
库函数xsk\u socket\u create
()检查xsk\u umem->refcount
值。如果大于1,则设置struct sockaddr\u XDP
的XDP\u SHARED\u UMEM
选项
因此,就我的理解而言,我“只是”需要传递我想要与之共享umem的套接字的原始umem结构,其余的由libbpf
完成
我尝试的方法是让第一个进程将其umem
-struct复制到一个共享内存区域,第二个进程可以从该区域加载它。但是因为struct xsk_umem
是在xsk.c
中定义的,所以它对用户是隐藏的,我不能这样做:
memcpy(shdm_ptr、umem、sizeof(struct xsk_umem))
我不知道他们怎么期望有人使用共享的umem功能?所以在邮件列表中讨论了这一点。在这里作记录
不建议您尝试进行多进程设置。比约恩说:
请注意,如果您愿意
使用共享umem执行多进程设置,您:需要
管理填充/完成环的控制流程,以及
在进程之间同步,或重新映射填充/完成
来自在多个进程中拥有umem的套接字的环和
同步对它们的访问。两者都不令人愉快
老实说,我不推荐这种设置
他补充道:
只是为了完整;要设置共享umem,请执行以下操作:
(感谢比约恩)这里的例子有用吗?据我所知,
umem->buffer
只是指向内存区域的指针,但我没有得到struct xsk_umem
的其他变量,例如fd
或refcount
,它们是xsk_socket\u创建
相应地设置XDP_共享
所必需的。我可能错了,但我不知道这个函数如何帮助meRight,对不起。那我就不知道了:/。可能是libbpf还没有这些帮助程序。我看到libbpf中有xsk\u umem\u fd()
,您能用它来获取文件描述符并将其传递给其他进程吗?(我没有尝试过,不知道这是否可行)我可以这样做,但同样xsk\u socket\u create
需要一个struct xsk\u umem*umem
。为了能够将fd
直接传递到xsk\u socket\u create
我必须更改库(我想)