具体实施方式
根据本发明示范实施例,提供了一种组合流水线式包分类和地址搜索引擎,该引擎能够支持区别服务,比如过滤、计费和服务质量供应。
根据本发明示范实施例,包分类器的功能之一是把包分类成包流,这通常是通过检查多个包头字段值进行的。包分类器使用的规则指定检查哪些字段值以及什么值是期望的。符合相同规则的包被分类为属于实施本发明的设备之内的相同包流。在处理这样的包中,执行相同的包处理动作,动作通常包括交换包。
根据本发明的示范实施例,利用图1所示的分段流水线基础结构100将包分类以及层2和层3网络地址搜索集成在一起。
根据本发明的示范实施例,在包头字段提取之前,由阶段1执行包帧型确定。在处理包之前确定包帧使得从包头提取字段值的处理降低到最小需要。三个包帧型确定引擎被并行使用来标识所接收包的帧型。根据本发明的示范实施例的示范实施,可以辨别至少256个包帧型,但是本发明不限于此。包帧型确定引擎检查每个接收包的每个包头102的部分,并且包括:
硬件帧型确定引擎104提供用于包帧格式的非常快速的包帧型标识,所述包帧格式通常是以广泛接受的标准指定的,这些标准比如是互联网工程任务组(IETE)公布的IEEE 802x标准,该标准在此引用作为参考。在硬件设计和制造期间,优化硬件引擎104的操作,但本发明不限于此。硬件引擎104通常被实施为一个芯片上的硬件逻辑电路,它可以提供某些运行时间定制。广泛的运行时间定制有利于非常快的包帧型确定,以及有利于界限预定的包帧型确定延迟。大多数包业务包括标准包(但本发明不限于此),典型地可以用最小延迟和最小处理开销来标识至少112个包帧型。
根据一个示范实施,硬件引擎104确定标准包帧型,例如VLAN标签的以太网II封装TCP/IP包的帧型,其格式如下表所示:
B7 B0
硬件帧型确定引擎104识别VLAN标签的以太网II封装的TCP/IP包,该识别是通过匹配以下的指定偏移(位置)报头字段值实现的:
第12字节的值=0x81;
第13字节的值=0x00;
第16字节的值=0x08;
第17字节的值=0x00;和
第27字节的值=0x11。
一旦发现包字段值匹配预定组合,相应的帧型值就与该包相关联。
标准能够改变或者被废弃,如下所述,解决潜在的未到期废弃的一种方式是把从可配置帧型确定引擎106/108经过硬件引擎104输出的帧型区分优先次序。
解决潜在的未到期废弃的另一种方式是,通过停用硬件引擎104的相应硬件逻辑部分来避免匹配旧标准帧型。在这种方式中,处理开销被降低到最小需要。然而,如果不出现冲突,则通常希望反向兼容性,并且如果旧标准帧型标识干扰预期操作,则可以仅仅停用硬件引擎104的硬件逻辑部分。
连续帧型消除处理由判决树分析引擎106执行。最适合于经由连续帧型消除辨别的帧型间的关系是“type-of”(类型)关系。正如本领域已知的那样,层3数据报(原始包)被封装在层2数据报中。作为一个简单实例,判决树分析引擎106辨别具有不同层3报头格式但具有相同层2报头格式的包帧型。因此在字段中定制判决树分析引擎106的操作中,在重新指定类型关系时提供了某些灵活性。示范实施除了支持硬件引擎104检测的帧型之外,还可以支持超过128个帧型,但本发明不限于此。
根据示范实施例的示范实施,帧型间的类型关系被示范地指定为判决树的节点202。图2示意地显示了示范二进制判决树200。通过应用测试的特定序列、判决树200中节点202之间的关系指定的序列标识每个预定包格式。节点202的实际实施包括判决表210中的记录212,每个记录212与判决表行索引相关联,并且包括:帧型标识位组合的包头偏移,帧型标识测试位组合和跳跃指令。帧型标识测试位组合可以包括:比特掩码、二进制值和比较二进制值,用于确定对应于至少一个包头字段的包头字段值比特是否等于一个期望值,是否服从已指定的无用比特。跳跃指令包括确定连续帧型消除处理是否已经完成的说明符;如果未完成,则将判决表行索引跳到下一个,确定位组合匹配测试是肯定的还是否定的。根据本发明示范实施例的示范实施,以下的记录212说明代表每个记录212中拥有的示范信息:
字段名 |
说明 |
比较字 |
指定包头信息比较的2字节的位置 |
比较值 |
比较值 |
掩码 |
相应的2字节的比特掩码 |
跳到肯定匹配测试结果/帧型上的索引 |
用于匹配或帧型值的JUMP地址A)当匹配比特的结尾=0时,如果比较是匹配的,则跳到指定地址B)当匹配比特的结尾=0时,指示帧型值 |
匹配结束 |
指示比较结束。如果该比特是逻辑高,则用于匹配的下一个跳跃地址字段中存储的值是帧型 |
跳到否定匹配测试结果上的索引 |
当比较不导致匹配比特结尾=0时的匹配时,用于不匹配或帧型值的跳跃地址跳跃到指定地址, |
不匹配结束 |
指示比较结束 |
在重新用于帧型确定记录212的结尾的帧型说明的跳跃指令字段的情况下,通过重新使用多目的的记录字段实现存储空间效率。
在与硬件引擎104比较时,尽管判决树分析引擎106在标识包帧型中可以不提供预定的处理延迟,但是类型关系说明仅仅需要最小帧型定义存储,并且在实施判决树分析引擎106的交换设备制造之后提供对标准发展/修改的附加/修改的标准帧格式的支持。
判决树分析引擎106可能花费较长时间周期来标识接收的包的帧型。只要判决树引擎106可以标识接收的包的帧型,就可以利用单个判决树分析引擎106,假定首先接收包头,同时接收最小长度包净荷。最小长度以太网包,报头和净荷是64字节与考虑前置码的20字节的帧间间隙。为了确保线路/网线速度的分组处理,判决树200必需被压缩以使较少数量判决树结点202被协商确定帧型,或者可以使用多个判决树分析引擎106。依赖实施标识帧型的判决树分析引擎106的预期使用,对于以平均包到达速率完成帧型确定是充分的。
根据本发明示范实施例的示范实施,判决树分析引擎106微码逻辑可以每个时钟执行一次测试(202/204/212/214)。
根据本发明示范实施例的示范实施,判决树分析引擎106包括判决树分析器206和判决表210的微码实施。
依据该实施,源端口标识符112被提供给流水线100的第一阶段,并且帧型确定引擎104、106和108的任何一个可以提供根据源端口说明单独确定的帧型说明114。在经由特定端口接收的包帧型被认为先验时,可以利用基于源端口标识符的帧型确定。
根据本发明示范实施例的示范实施,判决树分析引擎106还实施基于端口的帧型确定。判决表210还包括对应于实施判决树分析引擎106的交换设备输入端口的行214。根据本发明示范实施例的示范实施,第一N个判决表记录214被用来实现判决树节点204(多个起点),其中N对应于实现判决树分析引擎106的交换系统输入端口的数量。有利的是,对应于接收到的包的输入端口的源端口标识符112可以直接用作检索判决表记录214的索引,而不需要中间处理。本发明不限于这种实施,每个输入端口标识符112可以以一对一或者多对一为基础映射到判决表行索引上。
一旦源端口标识符112(和报头102)可用于流水线的阶段1,判决树分析器206就首先检索相应的判决表记录214,然后判决树分析器206应用这里指定的测试。有利的是,借助代表分离的输入端口细节、连续帧型消除处理的起点的每个判决树节点204,至少一个判决树记录214可以用单独基于源端口标识符112提供早期帧型确定的字段值来配置。只有当特定帧型应当描述相应输入端口上的接收的包时,判决树记录204才可以被用户配置以指定帧型。对于干线端口以及特别提供对非标准包帧格式的快速帧型确定,上述优点是显而易见的。
当具有多个帧格式类型的包应当经由输入端口被接收时加速连续帧型消除处理中的进一步增强,可以经过指定指向判决树200不同子树的跳跃指令中提供的灵活性来实现。一个这样的示范实施例包括:在供应同时发生的数据和语音服务的收敛应用中,在通信网边缘上利用的交换节点,其中在交换设备的传输/供应商侧,在不同端口接收数据和语音(一个似乎非常合理的实施)。关于IP语音(VoIP)方案,通过直接跳跃到经由任一干线端口接收的包的判决树200的相同子树,标识沿下行链路方向传输并经由VoIP干线端口接收的包的IP包头以及确定帧型可以不被预先执行(pre-empted)。分析子树也许仍然被要求来确定VoIP包是否为普通以太网分组或者具有VLAN报头的以太网包。至于沿上行链路方向经过通信网节点的包,通常经由与客户关联的相同分布侧输入端口接收数据和语音包,然而数据和语音包可以经由例如被不同业务类型(TOS)包头字段值说明标识的分离“虚拟连接”来传输。尽管没有能力单独根据输入端口标识符112实现早期判决,但考虑到相应判决树记录214可以是用户编码以详细说明帧型确定处理首先经由到判决树200的特别子树的特定跳跃,考虑服务类型确定,因此可以进一步明白在指定判决树200中提供的灵活性。
图4示出了判决树分析器206的示范循环操作(300),判决树分析器206从判决表210中检索一个记录212(步骤312),并且从记录212字段中指定的具有偏移(和比特长度)的包头中检索包头比特值(步骤314)。已检索的二进制值与历经比特掩码中指定的无用比特的预期二进制值相匹配(步骤316)。依据步骤316匹配的结果,“匹配”或者“不匹配”记录212字段被考虑。根据是否已经到达匹配结束318,提供帧型输出,并且对于另一个接收的包重新开始处理300,或者用跳跃指令来在步骤312检索判决表210中的下一个记录212。
根据本发明示范实施例,由于已提取的包头可以与历经/或不历经比特掩码的任一指定的比较值比较,因此本发明的示范实施例的示范实施提供了能够使比特值范围匹配的三重匹配性能。
根据本发明示范实施例,如果多报头字段具有短比特长度并且彼此比较接近,则判决树200的节点202可以使测试在多个包头字段上同时被执行。
模板匹配引擎108被用来支持具有在硬件引擎104中未预先编码的包帧型的包处理,或者支持经由判决树200表达为可辨别包帧型的类型的包处理。模板匹配引擎108在指定用于匹配接收的包头的组合的包头格式模板中提供完全的灵活性。示范实施可以除了对硬件引擎104和判决树分析引擎106检测的帧型提供支持外,还对至少16个用户指定帧型提供支持。
根据本发明示范实施例的示范实施,模板匹配引擎108利用三重内容可寻址存储器(TCAM)。名为“可配置三重内容可寻址存储器”的普通转让美国专利申请10/403,110中公开了本领域的三重内容可寻址存储器的示范性使用(RayChin Lu于2003年3月31提交申请,该申请在此引用以资参考)。包头模板包括掩码和位组合,两者都是用户可配置的,以提供对任何帧格式的支持。如上所述,多个帧型是能够被标识的,因为模板匹配服从掩码比特。模板可以被安排成使得第一模板匹配将作为相关的一个。因此模板匹配引擎108在指定待匹配的包头格式组合中提供全灵活性。模板匹配引擎108还有助于延缓所实施的通信网节点的废弃。
由于三个帧型确定引擎104、106和108并行操作,因此多个帧型输出被提供给帧型输出选择器110,在处理经过流水线100的每个包中,选择器110选择待使用的帧型说明114。通常,可配置引擎的帧型说明输出被给予对最小可配置引擎输出的优先权。模板匹配引擎108的帧型输出通常被给予对判决树分析引擎106的帧型输出的更高优先级,并且判决树分析引擎106的帧型输出被给予对硬件引擎104的帧型输出的更高优先级。
所有树帧型确定引擎能够不辨别接收的包的帧型,这也许是因为例如传输的新标准包、支持已经被禁止/中断地旧标准包类型、或者传输的畸形包。依据流水线100的预期操作,不能确定帧型的包不经过流水线100作任何进一步处理,并且(本发明不限于)被丢弃、改道或者被发送给管理处理器,如果这样,则降低流水线100剩余部分对这种接收包的不必要处理的暴露。根据本发明示范实施例的示范实施,帧型不能够确定的接收的包被归于为不匹配帧型保留的帧型标识符(例如十六进制值0xFF)。
参见图1,流水线100的阶段2设有源端口标识符112、包头102和归因的帧型114。
包头字段值提取器120被用来根据提取表124的帧型索引记录122中指定的提取指令,从提取包头102中提取包头字段值。对于每个帧型114,对应记录122指定启动字段值提取的相关包头字段偏移。包头格式字段关联性是经由一组有效帧格式比特指定的。如上所述(但本发明不限于此),根据示范实施,可以在至少256个帧型之间辨别流水线100的阶段1,因此提取表124可以包括至少256个相应记录122表项。
以下是示范帧型搜索信息提取记录122的表示:
仅仅设置报头字段值提取器120,参考帧型索引记录122以提取对应于始于相应偏移地每个有效帧格式比特集的包头字段值。以下是如果相应特定帧型114有效,则从接收包头提取的字段值的示范列表如下:
-目的地MAC(6字节);
-源MAC(6字节);
-DSAP(1字节);
-SSAP(1字节);
-以太网类型(2字节);
-VLAN ID(12比特);
-802.1p优先权(3比特);
-TOS(1字节);
-TTL(1字节);
-协议ID(1字节);
-IP CHKSUM(2字节);
-SPC_IP(4字节);
-SRC L4端口(2字节);
-目的地L4端口(2字节);
-UDP/TCP CHKSUM(2字节);
-用户定义/TCP标记(1字节)。
显而易见,提取表124中的记录122仅仅指定每个帧型的有效字段,并且对于每个有效字段仅仅指定偏移。然而,包头字段的上述列表还显示括号中的字段长度。记录122中的有效字段的字段长度说明的内含物交由设计选择处理:指定记录122中的字段长度需要存储空间,作为选择,包头字段提取器120可以作出关于包头字段长度的假设。
根据本发明示范实施例的另一个示范实施,包头提取器120不从包头字段中物理提取字段值,以只是随后再次将其存储到与包头102分离的寄存器中。由于包头102保持对流水线100的所有阶段有效,因此包头字段提取器120根据帧型114或Mtype126把“指针模板”关联到每个接收包,并且向流水线100的后续阶段提供包头、指针模板和Mtype三元组。由于模板和/或后续阶段处理需要检查包头字段值,因此模板和/或处理参考与每个处理的包关联的指针模板,以直接检查包头字段值。示范的指针模板包括指向包头102开头的存储器地址指针,以及相应提取记录122中指定的有效偏移值。这种实施的益处包括空间节省,因为包头信息仅仅存储一次。
根据本发明示范实施例,每个记录122还指定用于包分类的匹配类型126(Mtype)。帧型说明114涉及用于提取包头值目的地包格式,而匹配类型说明126用于包分类。多个帧型114可以被映射到单个匹配类型126。
根据本发明示范实施例,每个记录122还指定是否对于特定帧型执行默认包处理动作128:
00:使用默认端口动作:(默认);
01:转发到CPU;
10:过滤器:丢弃包;和
11:(无效/保留)。
根据本发明示范实施例的示范实施,以每个入口端口为基础,在寄存器中指定默认端口动作128。示范默认端口动作128包括:
00:使用L2/L3搜索结果:(默认);
01:转发到CPU;
10:过滤器:丢弃包;和
11:(无效/保留)。
已提取的字段130值加之匹配类型126和初步动作128被提供给用于L2和L3搜索的流水线100的阶段3。流水线100的后续阶段可以修改初步动作。
阶段3包括执行不同搜索任务的三个搜索引擎:L2搜索,协议VLAN搜索,L3搜索。
L2搜索引擎132利用了2004年2月24日转让给Yik等人(其中的某些人在此称为发明人)的名为“高速MAC地址搜索引擎”普通转让美国专利US 6,697,873B1所述的散列搜索算法,该专利’873在此引用以资参考。总之L2搜索引擎132提供以下功能:
源MAC ADDR学习:已提取源MAC ADDR 130自己、或者MAC ADDR和VLAN ID组合(130)被用作经由“873美国专利”公开的散列方案执行L2交换数据库的L2交换表中查找的密钥:
-如果查找不能标识相应表项,则在L2交换表中创建L2交换数据库表项(还向管理处理器报告已学习的MAC ADDR);和
-如果查找标识相应表项,则更新与表项关联的老化比特;
根据已提取的目的地MAC ADDR 130或者目的地MAC ADDR和VLAN ID组合(130)(用作经由“873美国专利”公开的散列方案执行L2交换数据库的L2交换表中查找的密钥)执行目的地端口搜索:
-如果查找不标识相应表项,则已接收包被洪泛到所有端口。如果接收的包具有关联的VLAN ID,则洪泛被限制到与相同VLAN域关联的端口,与相同VLAN域关联的端口经由VLAN表被指定。
-如果查找成功,则包仅仅被发送给正确端口。如果包具有关联的VLAN ID,则相关端口是与相同VLAN域关联的一个。
L2交换数据库包括具有以下示范格式的表项:
名称 |
说明 |
T标记 |
时间标记用来控制表项老化。如果时间标记未在预定时间周期内更新,则可以消除该表项。 |
地址 |
1.对于L2帧-MAC ADDR2.对于L3多播帧-IP ADDR和VLAN ID |
端口号/多播组 |
对于单播包,字段指示关联的端口号或MAC ADDR的中继端口。(中继端口是对应于多个物理端口的逻辑端口)对于L2多播和IP多播包,字段指示包归属的多播组ID。根据该组ID,搜索引擎执行多播组表中的查找,以获得目的地出口端口的组。 |
类型 |
表项状态:000-无效001-动态MAC表项数据结构010-IP多播数据结构011-静态MAC数据结构100-L2多播101-具有源和目的地过滤的静态MAC数据结构110-具有源过滤的静态数据结构111-具有目的地过滤的静态MAC数据结构 |
优先权 |
优先权 |
丢弃比特 |
丢弃多播包 |
L2搜索引擎132从L2交换数据库中检索/导出交换信息,交换信息(本发明不限于此)包括:出口端口位映射,归于接收包的VLAN ID,指定VLAN ID特定处理动作(插入,置换,消除,忽略等)的位映射,传输优先权,丢落优先权,多播或单播转发说明等。交换信息将在定制用于处理接收包的包处理响应中利用。
对于多播包,L2搜索引擎132需要获得对应于组ID的出口端口说明,这是经由以下示范性31比特表项在具有指定组成员的示范性组ID索引表项的多播组表中执行查找获得的:
31 |
30-28 |
27-00 |
管理处理器端口 |
保留 |
端口00-27的端口位映射 |
多播组表可以包括至少256个表项,但不发明不限于此。
源和目的地MAC ADDR由L2搜索引擎132映射到相应的源MAC_IDX和目的地MAC_IDX的说明符,该说明符将在阶段4由包分类引擎142使用。
根据本发明示范实施例,阶段3还包括L3搜索引擎134。L2搜索引擎132和L3搜索引擎134并行操作。通过使用作为密钥的已提取的目的地IP地址在L3交换数据库中查找下一跳路由器信息,L3搜索引擎134执行层3搜索操作。L3交换数据库包括L3IP交换表和范围匹配表。在L3交换数据库查找期间,检索的信息被用于把已提取的源IPADDR和目的地IP ADDR映射到一个索引值,该索引值将被供给阶段4以供分类器142使用。
L3交换数据库查找被执行以确定关于接收的包的路由信息。L3交换数据库查找包括执行两个搜索:以获得精确匹配并确定范围匹配。
Barrak等人(其中的某些人在此称之为发明人)于2003年12月31提交的名为“高速MAC地址搜索引擎”的普通转让美国专利申请10/750,455公开了一种精确匹配搜索,该申请在此引用以资参考。总之,在执行L3搜索中,目的地IP ADDR被散列到散列索引。散列索引用来引用L3交换数据库中的表项。
每个L3交换数据库表项包括以下示范信息:
在搜索L3交换数据库中,将IP ADDR与相应索引表项中存储的IPADDR进行比较。
如果发现IP ADDR匹配,则L3搜索完成,并执行以下动作:
-获得相应下一跳路由信息;
-引供L3计数器索引以更新阶段5上的L3传输计数器;
-L3交换数据库表项的老化比特被更新,指示近期使用的表项;和
-已匹配的表项被用作阶段4上的包分类的IP_IDX。
如果未发现IP ADDR匹配,则可能意味着多个IP ADDR被散列到同一散列索引中。L3交换数据库表项随后将具有指向表项列表的第一表项的有效指针。分析列表以发现匹配。
如果列表不包含IP ADDR的匹配,则提供关于精确匹配失败的指示。如果发现精确匹配失败则考虑L3范围搜索的结果。
L3范围搜索模仿最长前缀匹配方案。L3交换数据库的IP范围匹配表的表项包括IP ADDR说明,以及与IP ADDR范围关联的IP掩码。IP掩码指定用于比较的IP范围(通常是IP子网):
交换数据块的IP范围匹配表可以包括64个表项,需要时可以根据应用使用更多的表项,但本发明不限于此。
将已提取得目的地IP ADDR的比特与L3交换数据库表项中存储的IP ADDR的比特进行比较,并且将结果进行IP掩码。掩码指定相关比特,并且如果相关比特匹配,则范围匹配是肯定的。
如果L3范围匹配被发现,则对于L3精确匹配应用执行相同动作。如果表项未被匹配,则L3范围匹配被说成已经失败。
如果L3精确匹配和L3范围匹配是成功的,则精确匹配则得到超过L3范围匹配的优先权。如果匹配未被发现,则被路由的包通常被转发到管理处理器用于进一步处理。
在上述说明中,说明目的地IP搜索,以解析L3被路由的包的交换响应。根据本发明示范实施例,对于包括被路由的分组和桥接包的所有IP包,L3搜索引擎134还尝试搜索用于源IP ADDR的L3交换数据库,以把32比特IP地址映射到通常具有较少比特(比如12或14比特)的IP_IDX中。IP ADDR到相应IP_IDX的映射被用来减少分类阶段4的实施成本。
根据本发明示范实施例,提供一个将VLAN标记与包的PROTOCOL说明相关联的选项。PROTOCOL由Ethertype的值或者包头的DSAP/SSAP字段标识。协议VLAN搜索引擎136以确定Ethertype-II的Ethernet和SNAP接收的包,或者其它逻辑链路控制(LLC)包的DSAP/SSAP。根据本发明的示范实施例,至少16个可配置的Ethertype或DSAP/SSAP可以分别与VLAN ID关联。协议VLAN搜索引擎136对已提取的包头字段值执行操作,包括将已提取字段值与已知组合匹配:
-如果没有发现用于接收的包的匹配(意味着包没有VLAN标记/联系),则不采取行动。根据示范实施例,当未发现匹配时,可以分配默认VLAN ID:
-如果发现匹配,则接收的包被归为对应于从关联匹配表项中导出的说明的VLAN IDX;
-在查询VLAN表以确定出局(outgoing)VLAN标记中,将索引和端口ID 112用作查找密钥;和
-匹配时替换VLAN ID(标记)。
示范协议VLAN表包括:
请注意,以每个入口端口为基础提供VLAN IDX和VLAN映射。因此,可以为不同端口上的相同协议分配不同VLAN ID。
根据本发明示范性实施例,L2和L3搜索引擎132和134组合提供来自支持制订至少接收的包的初步交换响应140的匹配交换数据库表项中交换信息。阶段4处理完成后可用的信息支持基于以下各项的交换响应的定制:入口端口ID,已提取得包头信息,从L2交换数据库提取的交换信息,从L3交换数据库提取的交换信息,从协议VLAN表导出的信息。交换响应中指定的示范性信息包括:
原始的源端口 |
接收的包的出口端口 |
传输优先权 |
包的传输优先权,用于查询和调度 |
丢弃优先权 |
包的丢弃优先权,用于查询前的WRED |
VLAN |
标记控制,包括用户优先权比特,CFI比特和VLAN ID |
用户优先权比特 |
指示L3搜索引擎134应当输出描述符中存储的优先权比特,不输出包检查或搜索的结果 |
VLAN tag in |
指示接收的包包含VLAN标记报头 |
多播 |
指示接收的包是多播包 |
重新计算CRC |
如果报头已经被修改,则指示是否为该传输前的包重新计算CRC |
置换源MAC |
指示是否为该传输前的包(用于L3被路由的包)置换源MAC地址 |
VLAN tag out比特 |
指示必需发送VLAN标记包的出口端口 |
目的地端口位映射 |
指示必需发送的包的端口 |
包长度 |
存储的包的长度,包括报头、数据和CRC。但不包括包说明符长度 |
交换响应中的信息用来指示处理阶段5之后的接收的包的转发引擎(在别处描述)如何处理该包。
根据本发明示范实施例,通过使多个已提取的包字段服从分类规则,阶段4把包分类成包流。分类规则可以被实施为测试值和关联的测试掩码。
回忆阶段2从接收的包的报头中提取多个字段值,并且为不同帧格式类型114提取不同字段值。根据本发明示范实施例的示范实施,包分类规则匹配不同包帧格式类型的不同字段/字段值。分类规则表144中详细说明了分类规则,规则表的字段可以有依赖于关联每个规则的Mtype126的不同含义。例如,如果Mtype=1对应于以太网-II/IP/TCP包,并且Mtype=2对应于以太网-II IP/ICMP包;那么可以根据以下字段执行Mtype=1的包分类:Mtype=1,源端口ID(112),源MAC ADDR,目的地MAC ADDR,源IP ADDR,目的地IP ADDR,TCP源端口,TCp目的端口;可以根据以下字段执行Mtype=2的包分类:Mtype=2,源端口ID(112),源MAC ADDR,目的地MAC ADDR,源IP ADDR,目的地IPADDR,ICMP码,ICMP类型。根据本发明示范实施例的示范实施,尽管分类规则表项字段可以有不同含义,例如,TCP源端口对ICMP码,但是不会造成混乱,因为对照分类规则的测试受限于相应的Mtype值。
以下是分类规则表表项146的格式的示范:
匹配字段 |
说明 |
Mtype |
(参见某些预定义匹配类型的附表) |
出口端口 |
出口端口:物理端口或中继端口 |
目的地MAC索引 |
L2搜索引擎132映射/MAC表项号 |
源MAC索引 |
L2搜索引擎132映射/MAC表项号 |
VLAN ID |
VLAN ID |
以太网类型/DSAP+SSAP |
以太网-II和SNAP包的以太网类型,或LLC包的DSAP/SSAP |
源-IPv4 |
L3搜索引擎134映射:精确匹配或范围匹配 |
目的地IPv4 |
L3搜索引擎134映射:精确匹配或范围匹配 |
协议ID |
IP协议字段 |
源-L4 |
源UDP/TCP端口 |
目的地-L4 |
目的地UDP/TCP端口 |
TCP-标记/用户Def |
TCP标记或用户定义字段 |
量级 |
如果多个规则匹配,则选择具有最高量级的规则 |
在操作中,通过将已提取字段值与服从相应测试掩码的分类规则中指定的预期测试值进行比较,包分类器142对照分类规则测试与关联包的Mtype126相关联的分类规则中指定的已提取包头字段值的至少一个子集。根据本发明的示范实施例的示范实施,当发现分类规则匹配时,分类规则表144中的分类规则表项146被用作包流ID。
根据本发明示范实施例,量级与每个分类规则相关联。当多个规则被匹配时,与包分类器142相关联的流ID选择器148根据具有最高量级的分类规则对接收的包分类。如果具有相同量级的多个表项146是匹配的,则在确定主题包的流ID中选择具有最高分类规则表索引的最高表项。
根据本发明示范实施例,就可能的程度而言,早在得到包的交换响应140的阶段2,就将初步动作128与接收的包相关联。例如,初步动作128可以基于阶段2的入口端口,然后在阶段3根据L2搜索引擎132从L2交换数据库导出的交换信息以及根据L3搜索引擎从L3交换数据库导出的交换信息,修改初步动作。
L3路由功能是经由L3搜索引擎134提供的。然而,在包分类器142中,经由IP范围匹配提供给予L3路由选择的灵活性。所以,包分类器142扩展了IP范围匹配的能力。
根据本发明示范实施例的示范实施,在L3路由IP范围匹配中利用Mtype说明126,以便根据匹配字段的不同含义辨别规则。解决该情况的一种方式是为每个新Mtype分配Mtype+4。这是当L3搜索引擎134不能在其L3交换数据库中发现路由并且决定利用包分类器142执行L3搜索功能时,L3搜索引擎134把4加到Mtype值,并且将其与目的地IP ADDR一起提供给包分类器142。根据示范实施例,包分类器142可以利用全目的地IP ADDR匹配基于替代使用IP索引的新Mtype的规则。
根据本发明示范实施例,在流水线100的阶段5执行动作128。关于接收的包的所有动作128可以被分类成:默认端口动作,帧型动作,L2/L3动作,分配给接收的包处理流水线100的不同阶段上接收的包的流动作。交换响应还可以与接收的包相关联。执行动作128服从图5的500所示的优先规则。
流动作被给予最高优先。如果包分类器142成功分类阶段4上接收的包,则流ID被归于包(502)。流ID被用来在动作表154中查找流动作。一旦从动作表154中检索到适当流动作和相应的流动作参数,则对包和/或包头执行504流动作。
如果流动作与接收的包已经相关联,则给予帧型动作优先地位,如果有效帧型动作128已与阶段2上接收的包相关联,则从提取表124的记录122中导出上述内容。与接收的包关联的帧型动作在步骤512中确定。帧型动作128包括在步骤514把接收的包转发到CPU,并且在步骤516丢弃接收的包。
如果“00”的帧型动作码与接收的包相关联,则把优先地位给予基于包被接收的源端口(根据SPortID 112)的默认端口动作。在步骤522中确定的与接收的包相关联的有效端口动作码包括在步骤524把接收的包转发到CPU,并在步骤526丢弃接收包。根据实施,默认端口动作可以被归于接收的包,或者可以在至少一个默认端口动作寄存器中根据每个端口来指定。
如果“00”的默认端口动作码与接收的包相关联,则在步骤532根据L2/L3搜索结果动作128处理包。
图6显示了流水线100的阶段5的示范性结构的细节。在查找动作表154以确定将对包执行的动作中,利用对应于包的流ID 150和初步动作128。初步交换响应140也许包括提供给交换响应修改器156的目的地端口ID说明152。交换响应修改器156根据从动作表154指定的信息中导出的指令进行操作,以把最后交换响应140提供给帧引擎162。包头102被提供给包头修改器。包头修改器158根据从动作表154指定的信息中导出的信息修改包头102。一旦修改包头102,包重新装配模块164就定制经由输出端口发送的新包,新包包括包净荷以及已修改的包头102。
流动作表154的每个表项包括以下示范信息:
-指定将对包/包头执行什么动作的动作码;
-用来启动包头VLAN ID置换的置换VLAN ID ENABLE说明;
-当VLAN ID置换被启用时使用的VLAN ID说明;
-具有基于动作码的多个含义的转发INDX/DEST BIT MAP字段:
i.目的地端口比特映射指示,
ii.当动作包括再映射IP和MAC报头时,表示到IP和MAC信息的转发索引,
iii.当动作包括心跳方向时的心跳字段指示,
-允许XP再映射说明指定传输优先权和丢弃优先权置换,
-XP字段指定新的传输优先权;
-DP字段指定新的丢弃优先权;
-Snoop_Enable指定转发到窥探端口的包;
-Snoop_Port_ID指定窥探端口;
-Remap_TOS/DSCP_Enable说明符指定IP报头中的TOS/DSCP字段置换;
-TOS/DSCP字段指定待置换的TOS/DSCP值;
-802.1p Remap_Enable说明符指定包头中的802.1p(VLAN优先权)字段置换;
-802.1p字段指定在置换802.1p字段值中待使用的VLAN优先权值;
-Merering_Enable说明符用来启用用于流的测量功能;
-Counting_Enable说明符用来启用用于流的计数功能;和
-Metering/Counter_Index说明符指示测量计或计数器ID。
以下是六个专用流动作的示范细节:
L2/L3转发(动作码000)把目的地位映射作为参数,并改写流水线100的阶段3上提供的初步交换响应140中指定的目的地端口位映射。以与根据L2/L3搜索结果修改包的相同方式(如下所述)修改包头。
到CPU端口的转发(动作码001)改变目的地位映射,以指定包转发到CPU端口。
过滤包(动作码010)可以把更新过滤计数器的指令视为参数,该过滤计数器实施丢弃包的计数。修改初步交换响应140,以设置过滤比特开启(on)。包被丢弃。
心跳检测(动作码011):如果收到心跳包,则把对话ID、类型和模式发送给待处理的故障转移(失败转移)模块(故障转移模块的操作在别处说明)。修改初步交换响应140,以设置故障转移包比特开启(on),它指示包是心跳包。其它修改包括置换目的地端口映射说明,以及包被转发到用于其它处理的故障转移模块(未示出)。
流动作MAC ADDR再映射,IP ADDR再映射以及L3再映射共享图6所示的同一数据库,该数据库被实施为ADDR再映射表166,但是该数据库在下文中被分别称为MAC ADDR再映射数据库166,IP ADDR再映射数据库166,和L3再映射数据库166。ADDR再映射表166中的表项包括目的地IP ADDR说明,目的地位映射,VLAN“tagout”位映射说明(参见上述的T端口矢量),VLAN ID说明,以及目的地MAC ADDR。
MAC ADDR再映射(动作码100)把指向故障转移数据流(参见下文)的索引视为参数,并且定义故障转移的三个FLOV比特启用MAC和IP再映射。FLOVF-E,故障转移功能启用比特由CPU设置以开启失败功能。当故障转移模块检测到对话失败时,设置FLOVE-H,硬件启用比特(如别处所述)。当CPU检测到对话失败时,CPU设置FLOVE-S,软件启用比特。故障转移/再映射ON是指,FLOV-E=1和(FLOVE-H或FLOVE-S)=1,如果故障转移/再映射为OFF,则不修改初步交换响应140。然而如果故障转移/再映射为ON,则索引用来执行MAC再映射数据库166中的查找,以检索信息,比如:置换目的地位映射,置换VLAN ID和VLAN优先权以及置换出局VLAN标记位映射,构成再映射表。对初步交换响应140的修改包括:置换目的地位映射,置换VLAN ID,置换VLAN优先权,置换VLAN“togout”位映射(参见上述的T端口矢量),并且重新计算CRC。对包头的修改包括置换目的地MAC ADDR。
至于故障转移模块170提供的故障转移功能,如果入局包与需要地址再映射的流ID 150相关联,以及如果已经检测并记录用于流ID 150的失败,与如果没有失败相比较,则包将被不同地转发,包括把包转发到不同目的地地址。FLOV比特用来标识是否已经存在失败。如果没有,则正常转发。一旦失败,流动作表154的相应行中存储的索引被用作指针,以指向含有待使用的替代转发信息的再映射表166的一行。
IP ADDR再映射(动作码101)把故障转移数据流和上述的三个失败比特视为参数。如果故障转移/再映射是ON,则索引用来执行IP再映射数据库166中的查找,以检索信息如:目的地位映射,下一跳目的地MAC ADDR,VLAN ID/TAG,出局VLAN标记位映射,以及目的地IP地址,该信息用于修改初步交换响应140和包头102。根据包类型,存在4种修改包头102和初步交换响应140的不同方案,下表概述了这些方案:
方案 |
包头字段修改 |
初步交换响应修改 |
如果包是IP桥接包(不 |
置换目的地MAC ADDR |
置换目的地位映射 |
是被路由的包)并且不是UDP或TCP包(置换目的地IP ADDR) |
置换目的地IP ADDR置换IP校验和 |
置换VLAN ID置换VLAN“tagout”比特设置/重新计算CRC |
如果包是IP桥接包,并且是UDP或TCP包(置换目的地IP ADDR和重新计算TCP/UDP校验和) |
置换目的地MAC ADDR置换目的地IP ADDR重新计算IP校验和重新计算UDP/TCP校验和 |
置换目的地位映射置换VLAN ID置换VLAN“tagout”比特设置/重新计算CRC |
如果包是IP被路由的包并且不是UDP或TCP包(执行路由功能并置换目的地IP ADDR) |
置换目的地MAC ADDR将TTL递减1置换目的地IP ADDR重新计算IP校验和 |
置换目的地位映射置换VLAN ID置换VLAN“tagout”比特设置/置换CRC置换源MAC ADDR |
如果包是IP被路由的UDP或TCP包(执行路由功能,置换目的地IP ADDR和重新计算TCP/UDP校验和) |
置换目的地MAC ADDR将TTL递减1置换目的地IP校验和重新计算IP校验和重新计算UDP/TCP校验和 |
置换目的地位映射置换VLAN ID置换VLAN“tagout”比特设置/重新计算CRC比特置换源MAC ADDR |
其中IP被路由的包涉及服从L3路由器的包。通常,L3路由,流动作表154中指定的索引可以被用来指向提供L3路由中的路由表的表项。
L3路由(动作码110)把路由表项视为参数。索引用来从再映射表166中提取目的地位映射、目的地MAC ADDR、下一跳目的地MAC ADDR以及VLAN信息。修改初步交换响应140包括:置换目的地位映射,置换VLAN ID,置换VLAN优先权,置换VLAN“tagout”位映射,以及重新计算CRC。修改包头包括:用下一跳MAC ADDR置换目的地MAC ADDR,将TTL递减1,更新IP校验和。
以下动作可以彼此共存,并且可以与上述流动作共存。
XP和丢弃优先权(DP)置换:CPU为每个流重新定义XP和DP。如果XP_置换被设置为1,则修改初步交换响应140以置换XP和DP值。
窥探:修改初步交换响应140,增加窥探端口以作为一个输出端口,即通过开启对应于目的地位映射中窥探端口的比特,转发包的一个输出端口。窥探还确保在转发包中设置多播比特。
TOS/COS重新映射:基于已提供的TOS/DSCP值,通过置换TOS/DSCP值修改包头102。CRC和IP校验和必需被重新计算,因为包头102被修改。
802.1p重新映射:如果用新的VLAN标记修改初步交换响应140,则重新映射802.1p字段。CRC也必需被重新计算。
802.1Q VLAN ID置换:用802.1Q VLAN ID值置换初步交换响应的802.1Q VLAN ID。CRC也必须被重新计算。
参见图7,可以独立地激活和去激活速率测量和包计数。
速率测量:测量索引被提供给测量模块168。测量模块168根据测量索引追踪业务流。如果业务流超过指定的峰速率,则测量模块168报告红色状态。如果业务流低于指定的平均速度,则测量模块168报告绿色状态。在其它方面,报告状态是黄色的。初步交换响应140是根据测量模块168报告的颜色说明修改的。如果颜色是红的(“10”),则过滤比特被设置,这有效地掩码待丢弃的包。如果颜色是黄色(“01”),则设置丢弃优先,导致根据优先规则丢弃包。如果颜色是绿色(“00”),则不作出对初步交换响应的相应修改。
计数:为测量模块168设置测量索引还可以启用计数。如果流状态不是红色的,则递增对应于已发送的包和已发送字节数量的计数器。如果流状态是红色的,则递增丢弃计数器。
流测量和计数单元168的详细功能包括:
根据本发明示范实施例的示范实施,是IETF标准的两速率三颜色标志方案(trTCM)用来测量基于每个流的业务。根据本发明示范实施例,分别根据流峰值速率(PIR)、最大峰值脉冲串大小、保证信息速率(CIR)(平均速率)和最大平均脉冲串大小,使用两个漏桶实施该方案。
对于需要流测量的每个包,流测量模块168使用测量索引更新相应的流漏桶计数器。测量模块返回以下的流的绿色、黄色和红色状态:
红色:如果业务流超过PIR,
黄色:如果业务流超过CIR但是与PIR一致,
绿色:如果业务流与CIR一致。
测量索引已索引的表的表项中持有每个流计算器,每个表项具有:接收的包计数器,接收的字节计数器,发送的或红色包计数器,发送的或红色计数器,包丢弃计数器。“发送的”计数器用于计数基于L3动作处理的L3交换包,而“红色”计数器用于根据已确定的流ID 150处理的已分类的包。
如上所述,可以根据对应于L3搜索结果的动作处理与流ID 150相关联的包。在此情况下,L3搜索引擎向流测量和计数模块158提供源计数器索引和目的地计数器索引。测量和计数模块158使用源索引更新相应的接收计数器,同时使用目的地索引更新发送计数器。如果过滤比特和交换响应150被设置,则更新丢弃计数器,而不是更新发送计数器。
回忆L3搜索引擎134未发现L3交换数据中的源IP地址,因此将不能够提供源计数器IDX。根据本发明示范实施例,对于这样的包,源端口被用作更新L3默认源端口计数器的索引。
当包被分类成包流时,执行流计数器更新,流动作还需要通过设置计数器比特的计数器更新。测量和计数器模块168使用流计数器索引更新相关联的RX计数器。
测量和计数器模块168还保持对入口速率测量的红色(丢弃)包数量的跟踪。如果颜色是红色,则测量和计数模块168还更新包丢弃计数器(与上述的实现空间效率的发送计数器共享相同字段)。
回忆流动作码000类似于用于被路由的包的L3动作。以下处理需要作用于这种包。包头102需要被修改成:用下一跳路由器的MAC地址置换目的地MAC ADDR,它是L3搜索引擎136导出的目的地MAC ADDR,如果包分类器142将该包与流ID 150相关联,则可以用从MAC ADDR再映射表166导出的目的地MAC ADDR进行改写。TTL被递减1,IP_CHKSUM被更新。修改初步交换响应150包括设置L2 CRC重新计算标记并改写VLAN ID说明。请注意,由L3搜索引擎134执行以下L3动作:如果TTL>1,则丢弃包,并且把置换源MAC ADDR比特设置在初步交换响应140。
根据本发明示范实施例,提供了一种灵活报头分析方案,其中三个报头分析引擎被并行使用以根据全线速入局包的检查被指定的包头位组合,确定各种帧型。利用三个报头分析引擎提供了以下灵活性:硬件引擎提供用于标准已知帧型的快速帧型标识,判决树分析引擎,以及可配置模板匹配引擎。
根据本发明示范实施例,在确保最小和快速预处理的帧型确定之后,从包头中提取包头字段值。利用了一个用户可配置的字段提取器,由此可以对于每个帧型指定至少一个字段的偏移。对于某些包类型,在流水线的早期阶段可以确定包处理动作。
根据本发明示范实施例,通过把层2源和目的地MAC地址以及层3源和目的地IP地址映射成搜索地址表中使用的内部索引,降低了实施成本。组合式L2和L3搜索引擎利用基于散列的搜索方案,来把已提取的网络寻址字段值映射成具有短比特长度的索引。
根据本发明示范实施例,动作归于已分类的包,这些动作包括但不限于:虚拟局域网ID标识符(VLAN ID)插入,VLAN重新映射,服务类型(TOS)重新映射,服务质量(QoS)实施,过滤,转发以及报头修改。
应当理解,数据库、表、列表、表项、字段和寄存器的每一个的大小安排已经关联存储器存储空间需求。数据库、表、列表、表项、字段和寄存器的大小交由设计选择处理,这涉及选择考虑了与提供所需存储空间相关联的成本。
上述实施例仅仅是示范,本领域熟练技术人员将会明白,在不背离本发明精神条件下,可以对上述实施例作出各种变化。本发明的范围仅由所附权利要求定义。