我有一个很好的整形器,带有散列过滤,在
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。