我有一个很好的整形器,带有散列过滤,构建在 linux 桥上。简而言之,br0连接external和internal物理接口,VLAN 标记的数据包是“透明地”桥接的(我的意思是,那里没有 VLAN 接口)。
现在,不同的内核以不同的方式执行此操作。我可能对确切的内核版本范围有误,请原谅。谢谢。
因此,在 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
Run Code Online (Sandbox Code Playgroud)
在这里,“内核”将“协议”字段中的两个字节与 0x8100 匹配,但将 ip 数据包的开头视为“零位置”(对不起,我的英语,如果我有点不清楚)。
同样,在 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
Run Code Online (Sandbox Code Playgroud)
在这里,“内核”与协议匹配,但计算从该协议头开始的偏移量——我必须添加 4 个字节到偏移量(20,而不是 16 用于 …