6

网卡接收到的帧会经过驱动处理,然后由Linux内核传递到协议栈的上层。

有没有一种简单的方法可以防止内核将数据包传递到网络层?这样我就可以从数据链路层接收帧并自己处理所有数据包(也许应用层程序会被重写)?

我认为重新编译内核是必要的,这应该通过修改softirq中的代码或netif_rx等函数或每个cpu的列表队列来完成吗?

事实上,我和一些同学正在尝试在用户空间实现一个简化版的 TCP/IP 协议栈进行练习,而我们才刚刚开始。我正在阅读一些书籍,如 UNP、APUE2、TCP/IP 插图 v1、v2、Linux 网络架构、linux 源代码等。我确实有一些其他问题,我需要发布另一个问题吗?

4

2 回答 2

2

如果你只想自己处理数据包,你可以使用内核模块netfilter并实现一些钩子。您可以轻松找到一些代码示例。

在您的不同钩子中,您可以选择处理数据包并将其返回给内核或丢弃它。这只是一个要更改的返回码。

文章给出了一些代码和主题的解释:http ://www.linuxjournal.com/article/7184

该解决方案将起作用,并且实施起来并不难,但不确定它是否是解决问题的自然方法。

于 2013-01-07T16:09:03.163 回答
0

DPDK听起来像是您正在寻找的东西。

于 2015-06-27T00:39:39.993 回答