加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-13 18:07:30 所属栏目:Linux 来源:网络整理
导读:我有一个很好的整形器,带有散列过滤,在 linux桥上构建.简而言之,br0连接外部和内部物理接口,VLAN标记的数据包“透明地”桥接(我的意思是,没有VLAN接口). 现在,不同的内核做得与众不同.对于确切的内核版本范围我可能有问题,请原谅我.谢谢. 2.6.26 所以,在debi
我有一个很好的整形器,带有散列过滤,在 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读