vlan – tc u32 – 如何在最近的内核中匹配L2协议?

前端之家收集整理的这篇文章主要介绍了vlan – tc u32 – 如何在最近的内核中匹配L2协议?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个很好的整形器,带有散列过滤,在 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标签方法.

过去匹配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或类似匹配.我没有点击计数的主要问题 – 换句话说,这个过滤器根本没有被检查,“错误的协议”.

请有人帮助我:-)

谢谢!

解决方法

在最近的内核中,skb会从skb中剥离VLAN标记.尝试使用这样的东西在skb中进行元匹配:
tc filter add dev internal protocol all parent 1:0 prio 100 basic match 'Meta(vlan mask 0xfff eq 0x0ed8)' flowid 1:300
原文链接:https://www.f2er.com/linux/400988.html

猜你在找的Linux相关文章