我有一个很好的整形器,带有散列过滤,在
linux桥上构建.简而言之,br0连接外部和内部物理接口,VLAN标记的数据包“透明地”桥接(我的意思是,没有VLAN接口).
现在,不同的内核做得与众不同.对于确切的内核版本范围我可能有问题,请原谅我.谢谢.
2.6.26
所以,在debian中,2.6.26及以上(我认为高达2.6.32) – 这有效:
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \ u32 ht 1:64 match ip dst 192.168.1.100 flowid 1:200
这里,“内核”匹配“协议”字段中的两个字节与0x8100,但将ip数据包的开头计为“零位”(如果我有点不清楚,对不起我的英语).
2.6.32
再次,在debian(我没有构建vanilla内核),2.6.32-5 —这有效:
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \ u32 ht 1:64 match ip dst 192.168.1.100 at 20 flowid 1:200
这里,“内核”对于协议匹配相同,但计算从该协议的头部开始的偏移量 – 我必须添加4个字节到偏移量(20,而dst地址不是16).没关系,对我来说似乎更合乎逻辑.
3.2.11,最新稳定现在
这很有效 – 好像根本没有802.1q标签:
tc filter add dev internal protocol ip parent 1:0 prio 100 \ u32 ht 1:64 match ip dst 192.168.1.100 flowid 1:200
过去匹配802.1q标签
我之前可以这样做:
tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \ u32 match u16 0x0ed8 0x0fff at -4 flowid 1:300
现在我无法将802.1q标记与0,-2,-4,-6或类似匹配.我没有点击计数的主要问题 – 换句话说,这个过滤器根本没有被检查,“错误的协议”.
请有人帮助我:-)
谢谢!