如何防止内核向网络层传递数据包



网卡收到的帧将由驱动程序处理,然后由Linux内核传递到协议栈的上层。

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

我认为重新编译内核是必要的,这应该通过修改代码在softirq或功能如netif_rx或在列表队列每cpu?

事实上,我和一些同学正在尝试在用户空间实现一个简化版本的TCP/IP协议栈作为练习,我们才刚刚开始。我正在读一些书,比如UNP, APUE2, TCP/IP图解v1, v2, Linux网络架构,Linux源代码等等。我确实有一些其他的问题,我需要张贴另一个问题吗?

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

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

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

这个解决方案将工作,并不是太难实现,但不确定这是解决问题的自然方法。

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

最新更新