【发布时间】:2012-12-19 12:49:31
【问题描述】:
网卡接收到的帧会由驱动处理,然后由Linux内核传递到协议栈的上层。
有没有一种简单的方法可以防止内核将数据包传递到网络层?这样我就可以从数据链路层接收帧并自己处理所有数据包(也许应用层程序会被重写)?
我认为重新编译内核是必要的,是否应该通过修改 softirq 中的代码或 netif_rx 之类的函数或每个 cpu 的列表队列中的代码来完成?
其实我和一些同学正在尝试在用户空间实现一个简化版的TCP/IP协议栈进行练习,而我们才刚刚开始。我正在阅读一些书籍,如 UNP、APUE2、TCP/IP 插图 v1、v2、Linux 网络架构、linux 源代码等。我确实有一些其他问题,我需要发布另一个问题吗?
【问题讨论】:
-
你想做什么?修改内核可能没那么容易。
-
您确实应该描述您要解决的问题。以下答案之一建议使用 netfilter。另一种选择可能是使用 pcap 库直接获取原始数据包。在我们知道您真正想要解决的问题之前,我们不会知道您的正确答案是什么。
-
我编辑了我的问题,真的期待一些进一步的建议。