保定模板做网站,临沂网站建设技术支持,医院网站那里填评价,wordpress上传上限2019独角兽企业重金招聘Python工程师标准 基于交换芯片的五元组的PCL规则过滤功能作者: 韩大卫吉林师范大学2012.12.10Not Approved by Document Control
Review Copy Only基于Marvell 98DX51xx/81xx交换芯片的五元组等的策略规则(PCL)过滤功能.现将部分的功能的… 2019独角兽企业重金招聘Python工程师标准
基于交换芯片的五元组的PCL规则过滤功能作者: 韩大卫吉林师范大学2012.12.10Not Approved by Document Control
Review Copy Only基于Marvell 98DX51xx/81xx交换芯片的五元组等的策略规则(PCL)过滤功能.现将部分的功能的底层实现予以简单介绍.Contact author for detailed information: handaweijusontech.comForward:Marvell对PCL概念的定义是:The Policy engine performs per-flow processing of packets received and transmitted by the device.A packet can be bound to one or more sets of policy rules, which we call Policy Control Lists (PCL).PCL:策略控制列表.可以理解为在交换芯片上实现的过滤规则列表.有一种类似的概念叫ACL.ACL:Access Control List . 访问控制列表 一般来讲,ACL是用户层上下发的规则, 最终通过交换芯片或CPU来实现的,是一种用户层上定义的规则.PCL是底层的概念, 是交换芯片内部对此功能的定义,驱动工程师在操作系统底层软件提取出此交换芯片的PCL过滤功能(比如根据五元组,根据VLAN-ID, 根据是否ARP报文等等),封装成API类库供用户层使用, 用户层就可以综合使用这些API做成一条条过滤规则.PCL是交换芯片较高级的功能,一般普通的二层/三层交换机的使用的低端交换芯片是没有的此功能的.很多网络安全设备(如防火墙,分流器等)的一部分实现也是基于此机制.根据Marvell的datasheet, PCL对报文的处理是在L2/L3/L4之前,即Ingress
Packet -------------- PCL ----- L2 ------ L3 ------- L4 ... 报文 首先经过IPCL(Ingress PCL) Engine 处理, 根据报文的类型和PCL-ID生成一张IPCL Table , 此表的数据结构大致为:9bit---0bit PCL-ID
..
29bit---18bit VID
..
49bit---42bit Ip Protocol
..
130bit---99bit SIP[4]
162bit---131bit DIP[4]...完成此IPCL table后, 拿此表在TCAM中进行查找匹配, 匹配成功的条件是: 首先要PCL-ID相同, 如果规则制定了过滤条件, 那么依次匹配自定义的成员, 例如: 如想过滤出报文中VID为100的,那么只有IPCL table中VID位置为100 的数据结构(即相应的报文)可以被筛选出来, 进而执行TCAM中此表对对应的ACTION.从而完成了一次PCL过滤.根据以上描述, 可以这样定义一个数据结构用来作为函数参数, 传递用户层的PCL指定规则以下是PCL动作部分的定义, 关于IPCL Table等部分的制作略.typedef struct sw_pcl_action {BOOL_T enable;uint32_t index; //规则编号uint16_t pclid; //PCL-IDpcl_rule_key_t pcl_key; //过滤依据pcl_rule_action_t pcl_action; //动作描述
}sw_pcl_action_t; index即为TCAM查表做匹配时要匹配的表的编号.一个index编号为一条PCL规则, 有多少规则就需要执行多少次匹配查找.其中,
typedef struct pcl_rule_key {char sip[4]; //源ip地址uint8_t smask; //源ip地址掩码char dip[4];uint8_t dmask;uint16_t sport; //源端口号uint16_t spmask; //掩码uint16_t dport; uint16_t dpmask; uint8_t protocol; //协议号uint8_t tag; uint16_t vid; //VID
....
}pcl_rule_key_t;typedef struct pcl_rule_action { uint32_t intf_id; //出接口pcl_action_cmd_type intf_cmd; //动作类型InterFace_Type intf_type; //接口类型
}pcl_rule_action_t; //动作类型
typedef enum {PCL_ACT_FOR 0, //默认转发PCL_ACT_DROP, //丢弃PCL_ACT_NOT //不做动作
}pcl_action_cmd_type;//接口类型
typedef enum {PCL_INTF_PORT 0, //默认是端口PCL_INTF_VLAN, //VLANPCL_INTF_TRUNK, //trunkPCL_INTF_DEV, ...PCL_INTF_VIDX,PCL_INTF_INDEX,....
}InterFace_Type;常用的过滤有如下:基于五元组, 即基于源IPv4地址,源端口号,目的IPv4地址,目的端口号,协议号.基于报文本身是否有tag.基于报文本身的VLAN-ID.基于报文是否为ARP报文.基于报文是否为IP报文.基于报文是否为IPv4/v6报文.基于报文是否有分片.如果使用VID子作为过滤条件, 此VID为进过PVID处理后, 报文此时携带的tag中的VLAN-ID.将VID装入 pcl_action.pcl_key.vid , 通过msg发送至底层驱动.底层函数解析出此vid,将其赋值给配置寄存器的数据结构.mask-ruleStdIpv4L4.common.vid 0xffff;pattern-ruleStdIpv4L4.common.vid key_info.vid;理论上此VLAN-ID可配合掩码使用,实现过滤指定范围内的VLAN-ID. 但此功能目前尚未提供.
可参考后面端口号 掩码部分.基于五元组的过滤可以使用掩码.说明如下:如果使用基于源IP地址 掩码作为过滤条件, 如192.163.10.10/24需要将192.163.10.10 分成四个uint8_t 类型的数值, 装在 uint8_t key_info.sip[4] 中. 最后, 将此key_info.sip [] 封装到一个数据结构msg中, 通过socket发送到底层驱动,底层函数收到此msg, 解析出key_info.sip [] 的成员, 将4个成员以网络字节序分步填充一个uint32_t类型的成员.pattern-ruleStdIpv4L4.sip.u32Ip | (key_info.sip[0] 0xff) 24; pattern-ruleStdIpv4L4.sip.u32Ip | (key_info.sip[1] 0xff) 16; pattern-ruleStdIpv4L4.sip.u32Ip | (key_info.sip[2] 0xff) 8;pattern-ruleStdIpv4L4.sip.u32Ip | (key_info.sip[3] 0xff) 0;note :
key_info.sip[]承载的是此IP地址, 即192.163.10.10
pattern-ruleStdIpv4L4.sip.u32Ip 就是底层需要填充的uint32_t成员, 配置交换芯片寄存器时,依赖的即此变量与mask部分中对应变量的按bit相与的结果.同时, 需要将掩码24也传至底层, 填充u32Ip同时配置一个相应的uint32_t mask 的掩码.mask-ruleStdIpv4L4.sip.u32Ip ~0(32 - key_info.smask); (如果key_info.smask 为24, 得出结果为: 0xffffff00)note :
key_info.smask 承载的是此IP地址的掩码, 即24.
mask-ruleStdIpv4L4.sip.u32Ip 是需要配置的掩码, 配置交换芯片寄存器时, 需要将pattern部分与此mask的相应部分按bit相与, 其结果为寄存器真正的有效位.最后还要:pattern-ruleStdIpv4L4.sip.u32Ip mask-ruleStdIpv4L4.sip.u32Ip;要保证mask为0 的部分 pattern的也为0 .例:如 mask-ruleStdIpv4L4.sip.u32Ip 为 0xffffff00 (mask 为24) ,
pattern-ruleStdIpv4L4.sip.u32Ip 为 0xc0a30a0a( IP为 192.163.10.10)那么pattern-ruleStdIpv4L4.sip.u32Ip最后需要变为 0xc0a30a00.使用目的IP地址 掩码 作为过滤的判定条件, 如 192.163.10.20/24
则将192.163.20.10 分成四个uint8_t 类型的数值, 装在 uint8_t key_info.dip[4]中, 其他原理同上. 使用源端口号作为过滤判定条件, 如 200 . 需要将此数值 传入uint16_t类型的key_info.sport. 通过msg发送出去, 在底层, 将此值拆成两个uint8_t 数值, 按网络字节序传入 pattern-ruleStdIpv4L4.l4Byte1和 pattern-ruleStdIpv4L4.l4Byte0中. 其对应的掩码使用0xff.mask-ruleStdIpv4L4.l4Byte1 0xff;pattern-ruleStdIpv4L4.l4Byte1 (GT_U8)(key_info.sport 0xff);mask-ruleStdIpv4L4.l4Byte0 0xff;pattern-ruleStdIpv4L4.l4Byte0 (GT_U8)(key_info.sport 8);
使用协议号作为过滤判定条件, 将数值传入 key_info.protocol,底层驱动中填入mask和pattern的如下部分.mask-ruleStdIpv4L4.commonStdIp.ipProtocol 0xff; pattern-ruleStdIpv4L4.commonStdIp.ipProtocol key_info.protocol;使用目的端口号作为过滤的判定条件, 将数值传入key_info.dport, 其他原理同上.************** ************************************以下部分与驱动无关,可以略过.***************** *********************************使用一段范围的源端口号作为过滤的判定条件, 如 80-8080.需要使用一个或多个配合端口号的掩码共同使用.简单的应用例子:源端口号64-65535,即大于源端口号大于等于64的范围内作为过滤判定条件.64 的二进制 为: 0000 0000 0100 0000那么需要的掩码为: 1111 1111 1100 0000 即0xffc0令 key_info.sport 64;
key_info.spmask 0xffc0;在底层:mask-ruleStdIpv4L4.l4Byte1 (GT_U8)(key_info.spmask 0xff); pattern-ruleStdIpv4L4.l4Byte1 (GT_U8)(key_info.sport 0xff);mask-ruleStdIpv4L4.l4Byte0 (GT_U8)(key_info.spmask 8); pattern-ruleStdIpv4L4.l4Byte0 (GT_U8)(key_info.sport 8);
如果源端口号的二进制中1的bit为多个, 那么需要多个mask来配合使用. 即多个PCL规则配合使用.如: value 80 根据特定算法, 可以得出一下几个mask:80: 0000 0000 0101 0000mask1: 1111 1111 1000 0000 mask2: 0000 0000 0110 0000 mask3: 0000 0000 0101 0000 note:文档附录中包含此计算掩码数组的函数pattern1: 1000 0000 0000 0000
pattern1: 0100 0000 0000 0000
pattern1: 0010 0000 0000 0000
pattern1: 0001 0000 0000 0000
pattern1: 0000 1000 0000 0000
pattern1: 0000 0100 0000 0000
pattern1: 0000 0010 0000 0000
pattern1: 0000 0001 0000 0000
pattern1: 0000 0000 1000 0000pattern2: 0000 0000 0110 0000
pattern3: 0000 0000 0101 0000note: 如果(x mask ) pattern ,那么这是一次成功匹配.每个mask均有相同的转发规则, 报文依次匹配mask1,mask2,mask3 , 命中任一个mask,说明报文的源端口号大于或等于80.执行PCL的设定的转发动作, 如果都没有匹配成功, 不在次范围内, 不执行次系列的PCL转发规则.由于通过掩码的方式只能判断出一个数是否在一个值之上,即是否大于或等于一个数,因此,在处理一个范围的上限时, 需要对PCL的动作进行设定, 即, 当判断出一个数大于此范围的最大值时, 需要对其执行丢弃或不执行此系列的PCL转发规则处理.例: 过滤出源端口号为: 80-8000范围内的报文,执行PCL动作1.实现此功能分两步: 一, 过滤出源端口号大于或等于80的报文, 命中规则的报文进入第二阶段, 没有命中规则的报文不跳出判断, 不执行PCL动作1,交给下个报文处理机制处理.二, 过滤出源端口号大于或等于8001的报文, 命中规则的报文执行PCL_ACT_NOT处理.命中规则的报文执行PCL_ACT_FOR处理, 即实现PCL动作1.Note : PCL的动作处理类型有三种为 :PCL_ACT_FOR 转发报文PCL_ACT_DROP 丢弃报文PCL_ACT_NOT默认的类型为 PCL_ACT_FOR. 默认转发.第一阶段, 根据80-8000 中的下限80得出以下mask数组:80 : 0000 0000 0101 0000mask1: 1111 1111 1000 0000
mask2: 0000 0000 0110 0000
mask3: 0000 0000 0101 0000 pattern1-2: 0100 0000 0000 0000
pattern1-3: 0010 0000 0000 0000
pattern1-4: 0001 0000 0000 0000
pattern1-5: 0000 1000 0000 0000
pattern1-6: 0000 0100 0000 0000
pattern1-7: 0000 0010 0000 0000
pattern1-8: 0000 0001 0000 0000
pattern1-9: 0000 0000 1000 0000pattern2: 0000 0000 0110 0000
pattern3: 0000 0000 0101 0000
note: 如果(x mask ) pattern ,那么这是一次成功匹配.每个mask被分别制定为相应的PCL规则 ,其对报文的处理类型是 PCL_ACT_FOR报文依次配置mask1,mask2,mask3,如命中任意一个mask, 那么进入第二阶段进行范围上限的过滤, 其他情况的报文不再执行本系列PCL的过滤.第二阶段 , 由于本算法作用是过滤出大于或等于一个数的范围,那么对于80-8000的上线8000,需要定义一个uint16_t mask_ceiling 8001. 按此值得出mask数组:8001 : 0001 1111 0100 0001mask1: 1110 0000 0000 0000
mask2: 0001 0000 0000 0000
mask3: 0000 1000 0000 0000
mask4: 0000 0100 0000 0000
mask5: 0000 0010 0000 0000
mask6: 0000 0001 1000 0000
mask7: 0000 0000 0100 0000
mask8: 0000 0000 0011 1110
mask9: 0000 0000 0000 0001 pattern1-1: 1000 0000 0000 0000
pattern1-2: 0100 0000 0000 0000
pattern1-3: 0010 0000 0000 0000
pattern2: 0001 0000 0000 0000
pattern3: 0000 1000 0000 0000
pattern4: 0000 0100 0000 0000
pattern5: 0000 0010 0000 0000
pattern6-1: 0000 0001 0000 0000
pattern6-2: 0000 0000 1000 0000
pattern7: 0000 0000 0100 0000
pattern8-1: 0000 0000 0010 0000
pattern8-2: 0000 0000 0001 0000
pattern8-3: 0000 0000 0000 1000
pattern8-4: 0000 0000 0000 0100
pattern8-5: 0000 0000 0000 0010
pattern9: 0000 0000 0000 0001如果报文命中了任一一个mask, 说明报文的源端口号大于或等于8001, 即,不在80-8000 范围之内,则将报文执行PCL_ACT_NOT处理.这样, 源端口号在80-8000范围内的报文执行PCL_ACT_FOR处理, 不在此范围内的报文执行PCL_ACT_NOT处理,即不经过次系列PCL处理.根据交换芯片datasheet. TCAM 的匹配查找可以分为两次, IPCL0 Lookup 和IPCL1 Lookup那么, 将IPCL0 Lookup阶段的匹配动作设定为 PCL_ACT_FOR, IPCL1 Lookup 阶段的匹配动作设PCL_ACT_NOT, 即可实现如下处理流程:Packet ---- IPCL0 Lookup NO| ----- PCL_ACT_NOTY |E | S | | ↓ IPCL1 Lookup NO| ----- IPCL0 ACTIONY |E | S | | ↓PCL_ACT_NOT 第一阶段, 过滤出源端口号大于或等于80的报文, 命中规则的报文带着PCL_ACT_FOR的动作命令进入第二阶段再次进行过滤.第二阶段, 过滤出源端口号大于或等于8001的报文, 命中规则的报文执行 PCL_ACT_NOT,取消PCL规则转发, 没有命中IPCL1阶段的报文, 即小于8001的报文,执行IPCL0阶段的动作.实现转发到指定接口或VLAN.总上, 完成此功能需要的PCL规则共有如下:IPCL0 : mask1: 1111 1111 1000 0000 mask1: 1111 1111 1000 0000
pattern1-2: 0100 0000 0000 0000mask1: 1111 1111 1000 0000
pattern1-3: 0010 0000 0000 0000mask1: 1111 1111 1000 0000
pattern1-4: 0001 0000 0000 0000mask1: 1111 1111 1000 0000
pattern1-5: 0000 1000 0000 0000mask1: 1111 1111 1000 0000
pattern1-6: 0000 0100 0000 0000mask1: 1111 1111 1000 0000
pattern1-7: 0000 0010 0000 0000mask1: 1111 1111 1000 0000
pattern1-8: 0000 0001 0000 0000mask1: 1111 1111 1000 0000
pattern1-9: 0000 0000 1000 0000mask2: 0000 0000 0110 0000
pattern2: 0000 0000 0110 0000mask3: 0000 0000 0101 0000
pattern3: 0000 0000 0101 0000IPCL1:mask1: 1110 0000 0000 0000
pattern1-1: 1000 0000 0000 0000mask1: 1110 0000 0000 0000
pattern1-2: 0100 0000 0000 0000mask1: 1110 0000 0000 0000
pattern1-3: 0010 0000 0000 0000mask2: 0001 0000 0000 0000
pattern2: 0001 0000 0000 0000mask3: 0000 1000 0000 0000
pattern3: 0000 1000 0000 0000mask4: 0000 0100 0000 0000
pattern4: 0000 0100 0000 0000mask5: 0000 0010 0000 0000
pattern5: 0000 0010 0000 0000mask6: 0000 0001 1000 0000
pattern6-1: 0000 0001 0000 0000
mask6: 0000 0001 1000 0000
pattern6-2: 0000 0000 1000 0000mask7: 0000 0000 0100 0000
pattern7: 0000 0000 0100 0000mask8: 0000 0000 0011 1110
pattern8-1: 0000 0000 0010 0000mask8: 0000 0000 0011 1110
pattern8-2: 0000 0000 0001 0000mask8: 0000 0000 0011 1110
pattern8-3: 0000 0000 0000 1000mask8: 0000 0000 0011 1110
pattern8-4: 0000 0000 0000 0100mask8: 0000 0000 0011 1110
pattern8-5: 0000 0000 0000 0010mask9: 0000 0000 0000 0001
pattern9: 0000 0000 0000 0001详细列表如下:(0) mask1 pattern1-1 (1) mask1 pattern1-1
(0) mask1 pattern1-2 (1) mask1 pattern1-1
(0) mask1 pattern1-3 (1) mask1 pattern1-1
(0) mask1 pattern1-4 (1) mask1 pattern1-1
(0) mask1 pattern1-5 (1) mask1 pattern1-1
(0) mask1 pattern1-6 (1) mask1 pattern1-1
(0) mask1 pattern1-7 (1) mask1 pattern1-1
(0) mask1 pattern1-8 (1) mask1 pattern1-1
(0) mask1 pattern1-9 (1) mask1 pattern1-1(0) mask1 pattern1-1 (1) mask1 pattern1-2
(0) mask1 pattern1-2 (1) mask1 pattern1-2
(0) mask1 pattern1-3 (1) mask1 pattern1-2
(0) mask1 pattern1-4 (1) mask1 pattern1-2
(0) mask1 pattern1-5 (1) mask1 pattern1-2
(0) mask1 pattern1-6 (1) mask1 pattern1-2
(0) mask1 pattern1-7 (1) mask1 pattern1-2
(0) mask1 pattern1-8 (1) mask1 pattern1-2
(0) mask1 pattern1-9 (1) mask1 pattern1-2(0) mask1 pattern1-1 (1) mask1 pattern1-3
(0) mask1 pattern1-2 (1) mask1 pattern1-3
(0) mask1 pattern1-3 (1) mask1 pattern1-3
(0) mask1 pattern1-4 (1) mask1 pattern1-3
(0) mask1 pattern1-5 (1) mask1 pattern1-3
(0) mask1 pattern1-6 (1) mask1 pattern1-3
(0) mask1 pattern1-7 (1) mask1 pattern1-3
(0) mask1 pattern1-8 (1) mask1 pattern1-3
(0) mask1 pattern1-9 (1) mask1 pattern1-3(0) mask1 pattern1-1 (1) mask2 pattern2
(0) mask1 pattern1-2 (1) mask2 pattern2
(0) mask1 pattern1-3 (1) mask2 pattern2
(0) mask1 pattern1-4 (1) mask2 pattern2
(0) mask1 pattern1-5 (1) mask2 pattern2
(0) mask1 pattern1-6 (1) mask2 pattern2
(0) mask1 pattern1-7 (1) mask2 pattern2
(0) mask1 pattern1-8 (1) mask2 pattern2
(0) mask1 pattern1-9 (1) mask2 pattern2(0) mask1 pattern1-1 (1) mask3 pattern3
(0) mask1 pattern1-2 (1) mask3 pattern3
(0) mask1 pattern1-3 (1) mask3 pattern3
(0) mask1 pattern1-4 (1) mask3 pattern3
(0) mask1 pattern1-5 (1) mask3 pattern3
(0) mask1 pattern1-6 (1) mask3 pattern3
(0) mask1 pattern1-7 (1) mask3 pattern3
(0) mask1 pattern1-8 (1) mask3 pattern3
(0) mask1 pattern1-9 (1) mask3 pattern3(0) mask1 pattern1-1 (1) mask4 pattern4
(0) mask1 pattern1-2 (1) mask4 pattern4
(0) mask1 pattern1-3 (1) mask4 pattern4
(0) mask1 pattern1-4 (1) mask4 pattern4
(0) mask1 pattern1-5 (1) mask4 pattern4
(0) mask1 pattern1-6 (1) mask4 pattern4
(0) mask1 pattern1-7 (1) mask4 pattern4
(0) mask1 pattern1-8 (1) mask4 pattern4
(0) mask1 pattern1-9 (1) mask4 pattern4(0) mask1 pattern1-1 (1) mask5 pattern5
(0) mask1 pattern1-2 (1) mask5 pattern5
(0) mask1 pattern1-3 (1) mask5 pattern5
(0) mask1 pattern1-4 (1) mask5 pattern5
(0) mask1 pattern1-5 (1) mask5 pattern5
(0) mask1 pattern1-6 (1) mask5 pattern5
(0) mask1 pattern1-7 (1) mask5 pattern5
(0) mask1 pattern1-8 (1) mask5 pattern5
(0) mask1 pattern1-9 (1) mask5 pattern5(0) mask1 pattern1-1 (1) mask6 pattern6-1
(0) mask1 pattern1-2 (1) mask6 pattern6-1
(0) mask1 pattern1-3 (1) mask6 pattern6-1
(0) mask1 pattern1-4 (1) mask6 pattern6-1
(0) mask1 pattern1-5 (1) mask6 pattern6-1
(0) mask1 pattern1-6 (1) mask6 pattern6-1
(0) mask1 pattern1-7 (1) mask6 pattern6-1
(0) mask1 pattern1-8 (1) mask6 pattern6-1
(0) mask1 pattern1-9 (1) mask6 pattern6-1(0) mask1 pattern1-1 (1) mask6 pattern6-2
(0) mask1 pattern1-2 (1) mask6 pattern6-2
(0) mask1 pattern1-3 (1) mask6 pattern6-2
(0) mask1 pattern1-4 (1) mask6 pattern6-2
(0) mask1 pattern1-5 (1) mask6 pattern6-2
(0) mask1 pattern1-6 (1) mask6 pattern6-2
(0) mask1 pattern1-7 (1) mask6 pattern6-2
(0) mask1 pattern1-8 (1) mask6 pattern6-2
(0) mask1 pattern1-9 (1) mask6 pattern6-2(0) mask1 pattern1-1 (1) mask7 pattern7
(0) mask1 pattern1-2 (1) mask7 pattern7
(0) mask1 pattern1-3 (1) mask7 pattern7
(0) mask1 pattern1-4 (1) mask7 pattern7
(0) mask1 pattern1-5 (1) mask7 pattern7
(0) mask1 pattern1-6 (1) mask7 pattern7
(0) mask1 pattern1-7 (1) mask7 pattern7
(0) mask1 pattern1-8 (1) mask7 pattern7
(0) mask1 pattern1-9 (1) mask7 pattern7(0) mask1 pattern1-1 (1) mask8 pattern8-1
(0) mask1 pattern1-2 (1) mask8 pattern8-1
(0) mask1 pattern1-3 (1) mask8 pattern8-1
(0) mask1 pattern1-4 (1) mask8 pattern8-1
(0) mask1 pattern1-5 (1) mask8 pattern8-1
(0) mask1 pattern1-6 (1) mask8 pattern8-1
(0) mask1 pattern1-7 (1) mask8 pattern8-1
(0) mask1 pattern1-8 (1) mask8 pattern8-1
(0) mask1 pattern1-9 (1) mask8 pattern8-1(0) mask1 pattern1-1 (1) mask8 pattern8-2
(0) mask1 pattern1-2 (1) mask8 pattern8-2
(0) mask1 pattern1-3 (1) mask8 pattern8-2
(0) mask1 pattern1-4 (1) mask8 pattern8-2
(0) mask1 pattern1-5 (1) mask8 pattern8-2
(0) mask1 pattern1-6 (1) mask8 pattern8-2
(0) mask1 pattern1-7 (1) mask8 pattern8-2
(0) mask1 pattern1-8 (1) mask8 pattern8-2
(0) mask1 pattern1-9 (1) mask8 pattern8-2(0) mask1 pattern1-1 (1) mask8 pattern8-3
(0) mask1 pattern1-2 (1) mask8 pattern8-3
(0) mask1 pattern1-3 (1) mask8 pattern8-3
(0) mask1 pattern1-4 (1) mask8 pattern8-3
(0) mask1 pattern1-5 (1) mask8 pattern8-3
(0) mask1 pattern1-6 (1) mask8 pattern8-3
(0) mask1 pattern1-7 (1) mask8 pattern8-3
(0) mask1 pattern1-8 (1) mask8 pattern8-3
(0) mask1 pattern1-9 (1) mask8 pattern8-3(0) mask1 pattern1-1 (1) mask8 pattern8-4
(0) mask1 pattern1-2 (1) mask8 pattern8-4
(0) mask1 pattern1-3 (1) mask8 pattern8-4
(0) mask1 pattern1-4 (1) mask8 pattern8-4
(0) mask1 pattern1-5 (1) mask8 pattern8-4
(0) mask1 pattern1-6 (1) mask8 pattern8-4
(0) mask1 pattern1-7 (1) mask8 pattern8-4
(0) mask1 pattern1-8 (1) mask8 pattern8-4
(0) mask1 pattern1-9 (1) mask8 pattern8-4(0) mask1 pattern1-1 (1) mask8 pattern8-5
(0) mask1 pattern1-2 (1) mask8 pattern8-5
(0) mask1 pattern1-3 (1) mask8 pattern8-5
(0) mask1 pattern1-4 (1) mask8 pattern8-5
(0) mask1 pattern1-5 (1) mask8 pattern8-5
(0) mask1 pattern1-6 (1) mask8 pattern8-5
(0) mask1 pattern1-7 (1) mask8 pattern8-5
(0) mask1 pattern1-8 (1) mask8 pattern8-5
(0) mask1 pattern1-9 (1) mask8 pattern8-5(0) mask1 pattern1-1 (1) mask9 pattern9
(0) mask1 pattern1-2 (1) mask9 pattern9
(0) mask1 pattern1-3 (1) mask9 pattern9
(0) mask1 pattern1-4 (1) mask9 pattern9
(0) mask1 pattern1-5 (1) mask9 pattern9
(0) mask1 pattern1-6 (1) mask9 pattern9
(0) mask1 pattern1-7 (1) mask9 pattern9
(0) mask1 pattern1-8 (1) mask9 pattern9
(0) mask1 pattern1-9 (1) mask9 pattern9(0) mask2 pattern2 (1) mask1 pattern1-1
(0) mask2 pattern2 (1) mask1 pattern1-2
(0) mask2 pattern2 (1) mask1 pattern1-3
(0) mask2 pattern2 (1) mask2 pattern2
(0) mask2 pattern2 (1) mask3 pattern3
(0) mask2 pattern2 (1) mask4 pattern4
(0) mask2 pattern2 (1) mask5 pattern5
(0) mask2 pattern2 (1) mask6 pattern6-1
(0) mask2 pattern2 (1) mask6 pattern6-2
(0) mask2 pattern2 (1) mask7 pattern7
(0) mask2 pattern2 (1) mask8 pattern8-1
(0) mask2 pattern2 (1) mask8 pattern8-2
(0) mask2 pattern2 (1) mask8 pattern8-3
(0) mask2 pattern2 (1) mask8 pattern8-4
(0) mask2 pattern2 (1) mask8 pattern8-5
(0) mask2 pattern2 (1) mask9 pattern9(0) mask3 pattern3 (1) mask2 pattern2
(0) mask3 pattern3 (1) mask3 pattern3
(0) mask3 pattern3 (1) mask4 pattern4
(0) mask3 pattern3 (1) mask5 pattern5
(0) mask3 pattern3 (1) mask6 pattern6-1
(0) mask3 pattern3 (1) mask6 pattern6-2
(0) mask3 pattern3 (1) mask7 pattern7
(0) mask3 pattern3 (1) mask8 pattern8-1
(0) mask3 pattern3 (1) mask8 pattern8-2
(0) mask3 pattern3 (1) mask8 pattern8-3
(0) mask3 pattern3 (1) mask8 pattern8-4
(0) mask3 pattern3 (1) mask8 pattern8-5
(0) mask3 pattern3 (1) mask9 pattern9鉴于此部分在软件上做起来比较麻烦, 同时,考虑到为实现一个功能而一次下发100多条规则的效率问题, 所以这类功能可以交给CPU来做,用户层判断出此需求后, 将报文全部交给CPU,后者解析出报文后, if(sport 80 sport 8000)即可作出判断, 相比起来将更为可取. 转载于:https://my.oschina.net/handawei/blog/95815