对arptbales进行扩展

起因是因为客户给我们报了一个BUG,说对VLAN的优先级做了设置后,IP包是对的,但是ARP包的优先级不对。首先做了一些通用的分析后,发现之前对优先级作设置是用的iptables。显然大家都知道。ARP包的发送完全是由linux内核控制的,不进入TCP/IPstack,显然对所挂的HOOK不会进行调用。我认为我已经找到了解决的方法了。就用ebtables对SKB打标记重新设置优先级,可奇怪的是还是不行。后面仔细研究了一下代码,并问了一下公司当时设计这一个模块的老员工。终于发现了问题所在。在设置静态IP时,代码并未将这个新建的虚拟接口加入到一个桥中。因此就算在ebtables中对二层包进行打标记也没有用。因为ARP的SKB根本不过你在EBTABLES中挂的HOOK。自然是想再建个桥再将口子加进去。可是由于历史原因和代码框架问题,行不通。没办法。只好来硬的。自已对ARP这一块的代码进行分析。本来是想用个全局变量做接口。然后用PROC与用户空间通信。发现这也太土了,无疑会形成传说中的“潜规则”,对以后新手分析代码会产生更大的障碍。因此我用了标准的接口。

在ARP的发包函数中内核本身挂了一个HOOK。因此我就把这一块代码给捞了一遍分析了一把,再把ARPTABLES的代码也给分析了一把。在已有的target中增加一个case。问题终于得到解决。前后总共花了七天时间。实话说,感觉netfilter的代码比arptables的代码还容易看一些。arptables里面乱七八糟的数据结构一堆一堆的。很是费力。

下次再把代码帖上。

真发现没人对iptables等开源软件自已做扩展。我打算把这个好好分析分析。

你可能感兴趣的:(数据结构,linux,框架)