网卡接收的帧将由驱动程序处理,然后由Linux内核传递到协议栈的上层。
是否有一种简单的方法可以防止内核将数据包传递到网络层?这样我就可以从datalink层接收帧并自己处理所有的数据包(也许应用层程序会被重写)?
我认为重新编译内核是必要的,如果这是通过修改softirq中的代码或netif_rx或每个cpu的列表队列中的函数来完成的?
事实上,我和一些同学正在尝试在用户空间中实施简化版本的TCP / IP协议栈以进行练习,我们刚刚开始。我正在阅读一些书籍,如UNP,APUE2,TCP / IP插图v1,v2,Linux网络架构,linux源代码等。我还有其他一些问题,我是否需要发布另一个问题?
答案 0 :(得分:2)
如果您只想自己处理数据包,可以使用内核模块 netfilter 并实现一些挂钩。您可以轻松找到一些代码示例。
在不同的钩子中,您可以选择处理数据包并将其返回给内核或删除它。这只是一个要改变的返回代码。
提供主题的代码和解释的文章:http://www.linuxjournal.com/article/7184
此解决方案可行,并且不太难实现,但不确定这是解决问题的自然方法。
答案 1 :(得分:0)
DPDK听起来像是你正在寻找的东西。