我最近一直在努力熟悉Linux网络堆栈和设备驱动程序(两者都有类似名称的O'Reilly书籍),最终目标是卸载UDP.我已经在网卡上实现了UDP,但现在很难实现......
我没有在这个更大的目标上寻求帮助,而是希望有人可以为我澄清一个特定的片段,我发现它是LKM的一部分,它注册了一个新的协议(OTP),充当设备驱动程序和网络堆栈之间的过滤器.
http://www.phrack.org/archives/55/p55_0x0c_Building%20Into%20The%20Linux%20Network%20Layer_by_lifeline%20&%20kossak.txt
(注意:这篇Phrack文章包含三个不同的模块,OTP的代码位于页面底部)
在他的例子的init函数中,他有:
otp_proto.type = htons(ETH_P_ALL); otp_proto.func = otp_func; dev_add_pack(&otp_proto);
哪个(如果我理解正确的话)应该将otp_proto注册为数据包嗅探器并将其放入ptype_all数据结构中.我的问题是关于dev_add_pack.
注册为过滤器的协议是否总是放在L2和设备驱动程序之间的这一层?或者,例如,我可以使用相同的过程在应用程序层和传输层之间进行这样的过滤(分析套接字参数)吗?
如果这令人困惑,我很抱歉 - 当涉及到改变内核堆栈功能的模块时,我在绕着更大的图片时遇到了一些麻烦.
谢谢