eBPF首个数据包送入传输队列后丢失问题排查求助
eBPF首个数据包送入传输队列后丢失问题排查求助
各位好,我现在遇到一个eBPF相关的问题,想请大家帮忙排查下:
我做了一个基于eBPF的测试用例,核心是实现两个命名空间之间的ping通信。我的eBPF程序逻辑是这样的:拦截流的第一个数据包并发送到用户态,在用户态用这个包构建映射表,让该流后续的数据包可以直接从接收网卡进入内核,由内核生成ping回复。
问题出在第一个数据包上:我把它送入eBPF传输队列后,就再也找不到它的踪迹了——不管是在网卡上用tcpdump抓包,还是用pwru追踪,都看不到这个包的后续流程,更没法触发内核生成ping回复。
我补充几个细节:
- 运行环境是完全更新的Ubuntu 22.04
- 我的测试用例基于AF_XDP-filter实现,包含ping测试的运行脚本、完整的执行日志(后来补充了带tcpdump输出的日志)以及pwru的追踪日志
- 为了验证问题,我还新增了UDP测试用例,包含发送端计数程序、接收端程序,以及对应的运行脚本和日志。这个测试里同样出现了第一个包被重定向到用户态后丢失的情况,但第二个包能正常到达UDP监听端
有没有大佬能帮我分析下,我到底哪里做错了?
备注:内容来源于stack exchange,提问作者Chris Ward
相关产品推荐
相关产品推荐

