bro*_*ian 12 vlan traffic-shaping linux-networking linux-kernel tc
我有一个很好的整形器,带有散列过滤,构建在 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 用于 dst 地址)。没关系,对我来说似乎更合乎逻辑。
这有效 --- 就好像根本没有 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
Run Code Online (Sandbox Code Playgroud)
问题是到目前为止我找不到匹配 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
Run Code Online (Sandbox Code Playgroud)
现在我无法配合802.1Q标签at 0,at -2,at -4,at -6或类似的。我的主要问题是点击次数为零——根本没有检查这个过滤器,换句话说,“错误的协议”。
请任何人帮助我:-)
谢谢!
小智 5
在最近的内核中,VLAN 标记已从 skb 中剥离。尝试像这样在 skb 中进行元匹配:
tc filter add dev internal protocol all parent 1:0 prio 100 basic match 'meta(vlan mask 0xfff eq 0x0ed8)' flowid 1:300
Run Code Online (Sandbox Code Playgroud)
我建议使用wireshark来捕获用户空间中可见的通过界面的内容,并使用它来编写过滤器。我想知道接口是否出于某种原因剥离 VLAN 标记(尽管已配置为透明桥接)。也许是添加了额外的标签之类的?
| 归档时间: |
|
| 查看次数: |
5683 次 |
| 最近记录: |