链路层开发有哪些接口或机制可用?
假如需要在链路层对网络数据进行处理的话,有哪些方法?给内核加接口重编内核、集成到网卡芯片这两种除外.. 什么意思?能举个例子么?
如果只是支持做某种新的layer2协议的开发(不是替换现有layer2行为),dev_add_pack接口就可以啊。
如果只想对ethernet增加layer2的控制的话,可以选择ebtables接口(需要网口作为桥口)。
需要跟硬件打交道的话,只能调整驱动了。 本帖最后由 紫柳 于 2015-06-29 17:30 编辑
回复 2# nswcfd
感谢兄弟提供了两个方法!
以我的理解,dev_add_pack这个接口是注册二、三层协议处理函数用的,如果我想先于其他接口对所有网络数据在二层进行加解密,那么这个方法估计行不通,因为我不会比ipx/Ip/arp/rarp这些处理函数注册的更早。
至于ebtables这个方法是基于netfilter的,确切的说也是工作在三层的 那就注册个ptype_all类型的,在所有的子协议处理之前(非all类型),把报文修改掉,记得返回前释放skb的引用计数。 最新的内核在dev上增加了一个rx_handler字段,也可以考虑利用一下。
参考:openswitch。
页:
[1]