基于交换芯片的五元组的PCL规则过滤功能
生活随笔
收集整理的這篇文章主要介紹了
基于交换芯片的五元组的PCL规则过滤功能
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
基于交換芯片的五元組的PCL規(guī)則過濾功能作者: 韓大衛(wèi)@吉林師范大學(xué)2012.12.10Not Approved by Document Control Review Copy Only基于Marvell 98DX51xx/81xx交換芯片的五元組等的策略規(guī)則(PCL)過濾功能.現(xiàn)將部分的功能的底層實現(xiàn)予以簡單介紹.Contact author for detailed information: handawei@jusontech.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:策略控制列表.可以理解為在交換芯片上實現(xiàn)的過濾規(guī)則列表.有一種類似的概念叫ACL.ACL:Access Control List . 訪問控制列表 一般來講,ACL是用戶層上下發(fā)的規(guī)則, 最終通過交換芯片或CPU來實現(xiàn)的,是一種用戶層上定義的規(guī)則.PCL是底層的概念, 是交換芯片內(nèi)部對此功能的定義,驅(qū)動工程師在操作系統(tǒng)底層軟件提取出此交換芯片的PCL過濾功能(比如根據(jù)五元組,根據(jù)VLAN-ID, 根據(jù)是否ARP報文等等),封裝成API類庫供用戶層使用, 用戶層就可以綜合使用這些API做成一條條過濾規(guī)則.PCL是交換芯片較高級的功能,一般普通的二層/三層交換機(jī)的使用的低端交換芯片是沒有的此功能的.很多網(wǎng)絡(luò)安全設(shè)備(如防火墻,分流器等)的一部分實現(xiàn)也是基于此機(jī)制.根據(jù)Marvell的datasheet, PCL對報文的處理是在L2/L3/L4之前,即Ingress Packet --------------> PCL -----> L2 ------> L3 -------> L4 ... 報文 首先經(jīng)過IPCL(Ingress PCL) Engine 處理, 根據(jù)報文的類型和PCL-ID生成一張IPCL Table , 此表的數(shù)據(jù)結(jié)構(gòu)大致為:9bit---0bit PCL-ID .. 29bit---18bit VID .. 49bit---42bit Ip Protocol .. 130bit---99bit SIP[4] 162bit---131bit DIP[4]...完成此IPCL table后, 拿此表在TCAM中進(jìn)行查找匹配, 匹配成功的條件是: 首先要PCL-ID相同, 如果規(guī)則制定了過濾條件, 那么依次匹配自定義的成員, 例如: 如想過濾出報文中VID為100的,那么只有IPCL table中VID位置為100 的數(shù)據(jù)結(jié)構(gòu)(即相應(yīng)的報文)可以被篩選出來, 進(jìn)而執(zhí)行TCAM中此表對對應(yīng)的ACTION.從而完成了一次PCL過濾.根據(jù)以上描述, 可以這樣定義一個數(shù)據(jù)結(jié)構(gòu)用來作為函數(shù)參數(shù), 傳遞用戶層的PCL指定規(guī)則以下是PCL動作部分的定義, 關(guān)于IPCL Table等部分的制作略.typedef struct sw_pcl_action {BOOL_T enable;uint32_t index; //規(guī)則編號uint16_t pclid; //PCL-IDpcl_rule_key_t pcl_key; //過濾依據(jù)pcl_rule_action_t ????????pcl_action; //動作描述 }sw_pcl_action_t; index即為TCAM查表做匹配時要匹配的表的編號.一個index編號為一條PCL規(guī)則, 有多少規(guī)則就需要執(zhí)行多少次匹配查找.其中, 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; //協(xié)議號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, //默認(rèn)轉(zhuǎn)發(fā)PCL_ACT_DROP, //丟棄PCL_ACT_NOT //不做動作 }pcl_action_cmd_type;//接口類型 typedef enum {PCL_INTF_PORT = 0, //默認(rèn)是端口PCL_INTF_VLAN, //VLANPCL_INTF_TRUNK, //trunkPCL_INTF_DEV, ...PCL_INTF_VIDX,PCL_INTF_INDEX,.... }InterFace_Type;常用的過濾有如下:基于五元組, 即基于源IPv4地址,源端口號,目的IPv4地址,目的端口號,協(xié)議號.基于報文本身是否有tag.基于報文本身的VLAN-ID.基于報文是否為ARP報文.基于報文是否為IP報文.基于報文是否為IPv4/v6報文.基于報文是否有分片.如果使用VID子作為過濾條件, 此VID為進(jìn)過PVID處理后, 報文此時攜帶的tag中的VLAN-ID.將VID裝入 pcl_action.pcl_key.vid , 通過msg發(fā)送至底層驅(qū)動.底層函數(shù)解析出此vid,將其賦值給配置寄存器的數(shù)據(jù)結(jié)構(gòu).mask->ruleStdIpv4L4.common.vid = 0xffff;pattern->ruleStdIpv4L4.common.vid = key_info.vid;理論上此VLAN-ID可配合掩碼使用,實現(xiàn)過濾指定范圍內(nèi)的VLAN-ID. 但此功能目前尚未提供. 可參考后面端口號 + 掩碼部分.基于五元組的過濾可以使用掩碼.說明如下:如果使用基于源IP地址 + 掩碼作為過濾條件, 如192.163.10.10/24需要將192.163.10.10 分成四個uint8_t 類型的數(shù)值, 裝在 uint8_t key_info.sip[4] 中. 最后, 將此key_info.sip [] 封裝到一個數(shù)據(jù)結(jié)構(gòu)msg中, 通過socket發(fā)送到底層驅(qū)動,底層函數(shù)收到此msg, 解析出key_info.sip [] 的成員, 將4個成員以網(wǎng)絡(luò)字節(jié)序分步填充一個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部分中對應(yīng)變量的按bit相與的結(jié)果.同時, 需要將掩碼24也傳至底層, 填充u32Ip同時配置一個相應(yīng)的uint32_t mask 的掩碼.mask->ruleStdIpv4L4.sip.u32Ip = ~0<<(32 - key_info.smask); (如果key_info.smask 為24, 得出結(jié)果為: 0xffffff00)note : key_info.smask 承載的是此IP地址的掩碼, 即24. mask->ruleStdIpv4L4.sip.u32Ip 是需要配置的掩碼, 配置交換芯片寄存器時, 需要將pattern部分與此mask的相應(yīng)部分按bit相與, 其結(jié)果為寄存器真正的有效位.最后還要: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最后需要變?yōu)?0xc0a30a00.使用目的IP地址 + 掩碼 作為過濾的判定條件, 如 192.163.10.20/24 則將192.163.20.10 分成四個uint8_t 類型的數(shù)值, 裝在 uint8_t key_info.dip[4]中, 其他原理同上. 使用源端口號作為過濾判定條件, 如 200 . 需要將此數(shù)值 傳入uint16_t類型的key_info.sport. 通過msg發(fā)送出去, 在底層, 將此值拆成兩個uint8_t 數(shù)值, 按網(wǎng)絡(luò)字節(jié)序傳入 pattern->ruleStdIpv4L4.l4Byte1和 pattern->ruleStdIpv4L4.l4Byte0中. 其對應(yīng)的掩碼使用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); 使用協(xié)議號作為過濾判定條件, 將數(shù)值傳入 key_info.protocol,底層驅(qū)動中填入mask和pattern的如下部分.mask->ruleStdIpv4L4.commonStdIp.ipProtocol = 0xff;? pattern->ruleStdIpv4L4.commonStdIp.ipProtocol = key_info.protocol;使用目的端口號作為過濾的判定條件, 將數(shù)值傳入key_info.dport, 其他原理同上.************** ************************************以下部分與驅(qū)動無關(guān),可以略過.***************** *********************************使用一段范圍的源端口號作為過濾的判定條件, 如 80-8080.需要使用一個或多個配合端口號的掩碼共同使用.簡單的應(yīng)用例子:源端口號64-65535,即大于源端口號大于等于64的范圍內(nèi)作為過濾判定條件.64 的二進(jìn)制 為: 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); 如果源端口號的二進(jìn)制中1的bit為多個, 那么需要多個mask來配合使用. 即多個PCL規(guī)則配合使用.如: value = 80 根據(jù)特定算法, 可以得出一下幾個mask:80: 0000 0000 0101 0000mask1: 1111 1111 1000 0000 mask2: 0000 0000 0110 0000 mask3: 0000 0000 0101 0000 note:文檔附錄中包含此計算掩碼數(shù)組的函數(shù)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均有相同的轉(zhuǎn)發(fā)規(guī)則, 報文依次匹配mask1,mask2,mask3 , 命中任一個mask,說明報文的源端口號大于或等于80.執(zhí)行PCL的設(shè)定的轉(zhuǎn)發(fā)動作, 如果都沒有匹配成功, 不在次范圍內(nèi), 不執(zhí)行次系列的PCL轉(zhuǎn)發(fā)規(guī)則.由于通過掩碼的方式只能判斷出一個數(shù)是否在一個值之上,即是否大于或等于一個數(shù),因此,在處理一個范圍的上限時, 需要對PCL的動作進(jìn)行設(shè)定, 即, 當(dāng)判斷出一個數(shù)大于此范圍的最大值時, 需要對其執(zhí)行丟棄或不執(zhí)行此系列的PCL轉(zhuǎn)發(fā)規(guī)則處理.例: 過濾出源端口號為: 80-8000范圍內(nèi)的報文,執(zhí)行PCL動作1.實現(xiàn)此功能分兩步: 一, 過濾出源端口號大于或等于80的報文, 命中規(guī)則的報文進(jìn)入第二階段, 沒有命中規(guī)則的報文不跳出判斷, 不執(zhí)行PCL動作1,交給下個報文處理機(jī)制處理.二, 過濾出源端口號大于或等于8001的報文, 命中規(guī)則的報文執(zhí)行PCL_ACT_NOT處理.命中規(guī)則的報文執(zhí)行PCL_ACT_FOR處理, 即實現(xiàn)PCL動作1.Note : PCL的動作處理類型有三種為 :PCL_ACT_FOR 轉(zhuǎn)發(fā)報文PCL_ACT_DROP 丟棄報文PCL_ACT_NOT默認(rèn)的類型為 PCL_ACT_FOR. 默認(rèn)轉(zhuǎn)發(fā).第一階段, 根據(jù)80-8000 中的下限80得出以下mask數(shù)組: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被分別制定為相應(yīng)的PCL規(guī)則 ,其對報文的處理類型是 PCL_ACT_FOR報文依次配置mask1,mask2,mask3,如命中任意一個mask, 那么進(jìn)入第二階段進(jìn)行范圍上限的過濾, 其他情況的報文不再執(zhí)行本系列PCL的過濾.第二階段 , 由于本算法作用是過濾出大于或等于一個數(shù)的范圍,那么對于80-8000的上線8000,需要定義一個uint16_t mask_ceiling = 8001. 按此值得出mask數(shù)組: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 范圍之內(nèi),則將報文執(zhí)行PCL_ACT_NOT處理.這樣, 源端口號在80-8000范圍內(nèi)的報文執(zhí)行PCL_ACT_FOR處理, 不在此范圍內(nèi)的報文執(zhí)行PCL_ACT_NOT處理,即不經(jīng)過次系列PCL處理.根據(jù)交換芯片datasheet. TCAM 的匹配查找可以分為兩次, IPCL0 Lookup 和IPCL1 Lookup那么, 將IPCL0 Lookup階段的匹配動作設(shè)定為 PCL_ACT_FOR, IPCL1 Lookup 階段的匹配動作設(shè)PCL_ACT_NOT, 即可實現(xiàn)如下處理流程:Packet ----> IPCL0 Lookup NO| -----> PCL_ACT_NOTY |E | S | | ↓ IPCL1 Lookup NO| -----> IPCL0 ACTIONY |E | S | | ↓PCL_ACT_NOT 第一階段, 過濾出源端口號大于或等于80的報文, 命中規(guī)則的報文帶著PCL_ACT_FOR的動作命令進(jìn)入第二階段再次進(jìn)行過濾.第二階段, 過濾出源端口號大于或等于8001的報文, 命中規(guī)則的報文執(zhí)行 PCL_ACT_NOT,取消PCL規(guī)則轉(zhuǎn)發(fā), 沒有命中IPCL1階段的報文, 即小于8001的報文,執(zhí)行IPCL0階段的動作.實現(xiàn)轉(zhuǎn)發(fā)到指定接口或VLAN.總上, 完成此功能需要的PCL規(guī)則共有如下: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詳細(xì)列表如下:(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鑒于此部分在軟件上做起來比較麻煩, 同時,考慮到為實現(xiàn)一個功能而一次下發(fā)100多條規(guī)則的效率問題, 所以這類功能可以交給CPU來做,用戶層判斷出此需求后, 將報文全部交給CPU,后者解析出報文后, if(sport >= 80 && sport <=8000)即可作出判斷, 相比起來將更為可取.轉(zhuǎn)載于:https://my.oschina.net/handawei/blog/95815
總結(jié)
以上是生活随笔為你收集整理的基于交换芯片的五元组的PCL规则过滤功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编程工具使用-Procexp
- 下一篇: js取消气泡事件、阻止浏览器的默认行为