紫柳 发表于 2015-06-26 17:25

链路层开发有哪些接口或机制可用?

假如需要在链路层对网络数据进行处理的话,有哪些方法?

给内核加接口重编内核、集成到网卡芯片这两种除外..

nswcfd 发表于 2015-06-29 10:47

什么意思?能举个例子么?

如果只是支持做某种新的layer2协议的开发(不是替换现有layer2行为),dev_add_pack接口就可以啊。
如果只想对ethernet增加layer2的控制的话,可以选择ebtables接口(需要网口作为桥口)。
需要跟硬件打交道的话,只能调整驱动了。

紫柳 发表于 2015-06-29 17:08

本帖最后由 紫柳 于 2015-06-29 17:30 编辑

回复 2# nswcfd


    感谢兄弟提供了两个方法!

         以我的理解,dev_add_pack这个接口是注册二、三层协议处理函数用的,如果我想先于其他接口对所有网络数据在二层进行加解密,那么这个方法估计行不通,因为我不会比ipx/Ip/arp/rarp这些处理函数注册的更早。
    至于ebtables这个方法是基于netfilter的,确切的说也是工作在三层的

nswcfd 发表于 2015-06-29 18:44

那就注册个ptype_all类型的,在所有的子协议处理之前(非all类型),把报文修改掉,记得返回前释放skb的引用计数。

nswcfd 发表于 2015-06-29 18:49

最新的内核在dev上增加了一个rx_handler字段,也可以考虑利用一下。
参考:openswitch。
页: [1]
查看完整版本: 链路层开发有哪些接口或机制可用?