首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用linux eBPF向内核网络堆栈注入数据包?

如何使用linux eBPF向内核网络堆栈注入数据包?
EN

Server Fault用户
提问于 2022-09-22 10:58:00
回答 1查看 349关注 0票数 1

我试图使用一个eBPF程序和一个AF_XDP套接字和一个用户空间过滤器程序来过滤到达服务器的以太网数据包。为此,我需要将通过过滤器的数据包重新注入到内核网络堆栈中。我正在为这些数据包打电话给xsk_ring_prod__reserve和xsk_ring_prod__submit,但是它们没有到达我想要它们去的地方;我怀疑它们被传递到以太网卡进行传输,但是,我不能直接确认这一点。我希望有一个例子作为Facebook Katran负载均衡器https://github.com/facebookincubator/katran的一部分.当然,负载平衡有时涉及到接收到到达节点的数据包.但我看不出我需要什么。我的测试用例在这里,https://github.com/tjcw/xdp-tutorial/tree/master/udp-sender;目前我正在尝试丢弃UDP数据包并通过其他协议,如TCP和ICMP;但是我发现测试用例在它运行时会丢弃所有到达的数据包。

有人能告诉我如何进行包注入吗?

EN

回答 1

Server Fault用户

发布于 2022-09-23 12:03:19

来自Magnus Karlsson,他编写了大部分相关内核代码:

当您用AF_XDP发送数据包时,它们会离开网络接口,而不是发送到内核。如果有XDP作为出口(现在只有XDP用于入口),您可以使用它将数据包转发到内核。现在,您不得不使用诸如tun/tap或veth设备之类的方法将数据包发送到内核中。不幸的是,这些设备并没有那么快。可能是一个Mpps。

如果您需要比1 Mpps更高的速度,并且您的过滤器/程序很简单,那么我建议在XDP中实现它,因为它在将数据包传输到内核或用户空间之前在内核中运行。它将比跳到用户空间的速度更快。

希望这能帮上忙。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1111314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档