我有一个很好的成型器,带有哈希过滤,是在linux桥上构建的。简而言之,对于br0
连接接口external
和internal
物理接口,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(我还没有构建香草内核)中,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个字节(dst地址为20,而不是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标签的方法。
过去匹配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标签at 0
,at -2
,at -4
,at -6
或类似的。我的命中计数为零的主要问题---根本没有检查此过滤器,即“协议错误”。
请任何人帮助我:-)
谢谢!
protocol all
了我RTNETLINK answers: Invalid argument
(这里是3.3.4内核)。我将使用较新的内核对此进行测试。谢谢。