本文档的C opyleft归wwwlkk所有使用GPL发布可以自由拷贝、转载转载时请保持文档的完整性严禁用于任何商业用途。
E-mail:wwwlkk@126.com
来源: http://passport.baidu.com/?business&aid=6&un=wwwlkk#7li ux 2.6.35内核u32分类器逻辑架构分析
前言 1.在使用u32分类器的时候会发现 内核的行为会与用户规则的行为不一致。 2.想找到具备高性能的u32分类器规则需要对u32分类器的内核实现架构有深入的理解。基于以上2个原因分析了linux2.6.35内核的u32分类器源码重点是给出u 32分类器的逻辑架构。
一在理解u32分类器的逻辑架构前需要先理解几个概念
1. 队列分类器链每个可分类整形队列都有一个分类器链这条链上的所有分类器都有相
同的数据结构如下
2. 第1级分类器 tc f_p ro to分类器看不到分类器的具体实现不同的分类器内部实现是完
全不同可以把这样的分类器称为1级分类器。
3. u32分类器进行u32功能匹配的分类器可以认为是第2级分类器。结构如下
4. u32哈希表所有的u32分类器必须附属在一个u32哈希表上 u32哈希表最多可以有256个表项每个表项都可以附属一个u32分类器链。结构如下
5. 队列的u32哈希表链 为了便于管理和查找u32哈希表 内核将创建的u32哈希表加入队列的u32哈希表链。
二下面用关系图具体说明各种逻辑关系
1 1级分类器和u32哈希表的逻辑关系图
图1涉及到1级分类器链头指针filter_list是放在队列的私有数据中不同种类的队列放置的位置是不同的但是必须存在当队列对数据包进行分类的时候将会遍历这个分类器链。
2 u32哈希表和u32分类器的逻辑关系图
图2里面才真正出现了u32分类器 u32哈希表只是u32分类器的一个容器只有在u32哈希中添加了u32分类器才能进行u32功能过滤。
3队列和u32哈希表的逻辑关系图
所有的u32哈希表都会被加入这个哈希链中但是并不是所有的u32哈希表都关联到1级分类器中如图1所示如果u32哈希表被关联到了1级分类器我们将这样的u32哈希称为第1级u32哈希表那么在队列遍历分类器时遍历流程就可以到达这个u32哈希表也就是可以到达这个u32哈希表内的u32分类器链。 我们可以将遍历1级分类器链称为第1级遍历遍历第1级u32哈希表内的u32分类器链称为第2级遍历
其它的u32哈希表是用户创建的在1级遍历的时候不会被遍历到。
可以看到1级u32哈希表是具有特殊地位的它只能由内核来创建它的哈希句柄也是由
内核来分配。
为了保证逻辑和遍历过程的一致性 内核要求不能有相同优先级的1级分类器 由于1级u32哈希表和1级分类器是一一关联的那么 1级u32哈希表的优先级也是不能相同。
如果要添加一个u32分类器 由于u32分类器必须附属在u32哈希表上所以必须要有一
个u32哈希表。这个u32哈希表可以是内核自动创建的也可以是用户要求创建的。
有2种情况内核会自动创建1级u32哈希表
1用户要求添加优先级是a的u32分类器那么内核会自动创建一个优先级是a的1级分类
器和一个1级u32哈希表如果已经创建过了就不会再创建然后将这个u32分类器加
入这个u32哈希表的唯一的一个分类器链中。
2用户要求添加一个优先级是a的u32哈希表那么内核会自动创建一个优先级是a的1级
分类器和一个1级u32哈希表如果已经创建过了就不会再创建然后再创建u32哈希
表加入队列的u32哈希链中。
三以上就是u32分类器的逻辑架构应该大体上是讲清楚了下面是一些补充内容。
1.为什么1级分类器的优先级不能相同我想是为了保证逻辑上的优先级和实际的流程上的优先级一致性如果逻辑上两个分类器的优先级相同那么实际匹配中到底是哪个分类器先进行分类呢从实际的匹配流程看分类器的优先级是不可能相同的。
2.有了以上的逻辑架构就可以很好的理解为什么u32分类器的完整句柄是由3个数组成H
B I其中H就是所在的u32哈希表的句柄 B就是哈希表项的偏移位置 I就是u32分类器的标识。 H是12bit的无符号整数 B是8bit的无符号整数 I是12bit的无符号整数一共32bit
3.u32分类器可以使用link功能将匹配流程转向其它的分类器链如果在子分类器链中匹配成功那么整个匹配流程结束如果未匹配成功返回原始的分类器链继续想下匹配。
4.内核添加分类器的函数是
5.不同种类的队列提供统一获取1级分类器链指针接口
6.第1级分类器链遍历函数
提速啦的来历提速啦是 网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑 由赣州王成璟网络科技有限公司旗下赣州提速啦网络科技有限公司运营 投资1000万人民币 在美国Cera 香港CTG 香港Cera 国内 杭州 宿迁 浙江 赣州 南昌 大连 辽宁 扬州 等地区建立数据中心 正规持有IDC ISP CDN 云牌照 公司。公司购买产品支持3天内退款 超过3天步退款政策。提速啦的市场定位提速啦主...
VPSDime是2013年成立的国外VPS主机商,以大内存闻名业界,主营基于OpenVZ和KVM虚拟化的Linux套餐,大内存、10Gbps大带宽、大硬盘,有美国西雅图、达拉斯、新泽西、英国、荷兰机房可选。在上个月搞了一款达拉斯Linux系统VPS促销,详情查看:VPSDime夏季促销:美国达拉斯VPS/2G内存/2核/20gSSD/1T流量/$20/年,此次推出一款Windows VPS,依然是...
香港最便宜的vps要多少钱?最便宜的香港vps能用吗?香港vps无需备案,整体性能好,而且租用价格便宜,使用灵活,因为备受站长喜爱。无论是个人还是企业建站,都比较倾向于选择香港VPS。最便宜的香港vps能用吗?正因为有着诸多租用优势,香港VPS在业内颇受欢迎,租用需求量也在日益攀升。那么,对于新手用户来说,香港最便宜的vps租用有四大要点是务必要注意的,还有易探云香港vps租用最便宜的月付仅18元...