具有可编程内核的网络设备的制作方法

文档序号:7549475阅读:202来源:国知局
专利名称:具有可编程内核的网络设备的制作方法
具有可编程内核的网络设备
相关串请的交叉引用
本申请要求于2011年I月6日提交的题为“Programmable Switch”的第 61/430,413号美国临时专利申请的优先权,其全部公开内容以引用的方式并入本文。
本申请还要求于2011年3月23日提交的题为“Programmable Switch”的第 61/466,718号美国临时专利申请的优先权,其全部公开内容以引用的方式并入本文。技术领域
本公开一般涉及通信网络,更具体地,涉及网络切换设备。
背景技术
本文提供的背景描述用于一般性地呈现本发明的上下文的目的。就该背景部分中描述的当前称作发明人的工作以及可能以其它方式在提交时未作为现有技术的描述的各个方面而言,既没有明确地也没有隐含地承认当前称作发明人的工作是相对于本发明的现有技术。
网络交换机被配置为在连接到通信链路的多个端口之间转发网络业务。对于高吞吐量的应用而言,网络交换机通常是使用诸如专用集成电路(ASIC)的硬件来实现的。当引入了新的网络协议并且在引入新的网络协议之前设计了网络交换机的硬件(例如,ASIC) 时,该网络交换机可能难以处理符合新的网络协议的分组。发明内容
在一个实施方式中,网络设备包括多个端口和分组处理管线,多个端口被配置为在网络上接收和发送分组,分组处理管线包括多个硬件级。至少一个硬件级被配置为输出数据结构,该数据结构包括基于对接收的分组或数据结构执行的第一分组处理操作、从接收的分组中提取的字段,其中,数据结构与分组相关联。网络设备还包括可配置处理器,可配置处理器耦合到分组处理管线的至少一个硬件级。可配置处理器被配置为修改数据结构中的字段以生成经修改的数据结构,并且将经修改的数据结构传递到后续的硬件级,后续的硬件级被配置为使用由可配置处理器修改的字段来对数据结构执行第二分组处理操作。
在另一个实施方式中,一种方法包括经由网络切换设备的端口接收分组,以及利用分组处理管线处理分组,分组处理管线包括多个硬件级,多个硬件级至少包括第一级、第二级和可配置处理器。利用分组处理管线处理分组包括利用第一级输出数据结构,该数据结构包括基于对接收的分组或数据结构执行的第一分组处理操作、从接收的分组中提取的字段,其中,数据结 构与分组相关联;使用可配置处理器修改数据结构中的字段以生成经修改的数据结构;以及将所修改的数据结构传递到第二硬件级,第二硬件级被配置为使用由可配置处理器修改的字段来对数据结构执行第二分组处理操作。



流程图
流程图
流程图
图1是根据本发明的实施方式的示例性网络设备的功能图;图2是根据一个实施方式的用于在网络设备中处理分组的示例性方法的流程图; 图3是根据一个实施方式的用于在网络设备中处理分组的另一个示例性方法的图4是根据一个实施方式的用于在网络设备中处理分组的另一个示例性方法的是根据一个实施方式的用于修改分组的报头的示例性方法的数据流程图; 是根据一个实施方式的用于在网络设备中处理分组的另一个示例性方法的图5 图6 以及图7是根据一个实施方式的在图1的网络设备中使用的示例性的可配置内核单元的示意图。
具体实施方式
图1是根据一个实施方式的被配置用于处理和转发数据单元(即分组)的示例性网络设备100的框图。如下面更详细描述的,虽然在一个实施方式中作为硬件级或处理引擎的管线的配置,但是网络设备100包括散布在管线的各个级之间的一个或多个可配置内核。在一些实施方式中,一个或多个可配置内核可以在制造设施处、由用户在现场等重新配置。例如,当引入新的网络通信协议时,可以重新配置一个或多个可配置内核,使得网络设备100可以处理符合新的网络通信协议的分组。作为另一个示例,一个或多个可配置内核被重新配置为使得网络设备100可以执行网络设备100先前不能执行的功能。在一些实施方式中,可以在与网络设备100和/或网络设备100中包含的硬件(例如,分组处理器)的生产商相关联的制造设施中重新配置一个或多个可配置内核。例如,如果存在这样的集成电路(1C),即其上的分组处理器(或者其一部分)有瑕疵或者存在设计错误使得分组处理器未如期望地进行操作,则在已经制造出IC以后,制造设施可以重新配置一个或多个可配置内核以执行解决方法使得分组处理器如期望地进行操作。
在一个实施方式中,一个或多个可配置内核是包含在分组处理管线中的管线单元 (即硬件级)。在一个实施方式中,管线的单元基于分组中的字段(例如报头字段)的值和 /或基于与分组相关联的数据结构来执行与分组相关联的不同的任务。在一个实施方式中, 这种数据结构包括分组的报头字段。在一个实施方式中,数据结构另外或可替换地包括与分组相关联的其它信息。例如,其它信息可以包括由管线的第一单元生成的值,该值向管线的第二单元指示第二单元应当如何处理分组(例如,第二单元应当对分组执行哪个任务或哪些任务)。
在一个实施方式中,一个或多个可配置内核允许网络设备100被配置为执行不同的功能、适当地处理符合不同或新的网络协议的分组、处理(work around)管线中的错误或瑕疵等。在一个实施方式中,当网络设备100的管线单元中的很多管线单元不适合于处理符合第二协议的分组时,一个或多个可配置内核允许适合于处理符合第一协议的分组的网络设备100或者网络设备100中的至少各个级被重新配置为处理符合第二协议的分组。例如,在一个实施方式中,管线的单元处理与分组相关联 的数据结构,并且每一个数据结构包括由管线的单元中的很多管线单元视作为与第一协议指定的第一分组报头字段对应的字段。在一个实施方式中,例如在制造设施处或者由顾客对可配置内核中的一个进行配置,以基于由第二协议指定的第二分组报头字段修改数据结构字段。然后,假设数据结构字段仍然与由第一协议指定的第一报头字段相对应,管线的其它单元可以使用所修改的数据结构字段处理数据结构。换言之,在一个实施方式中,虽然分组似乎具有符合第一协议的数据结构字段并且对分组进行处理如同该分组符合第一协议一样,但是实际上在可配置内核进行修改以后,数据结构中的所选择的字段的实际内容符合第二协议。在一个实施方式中,对分组的实际处理(例如,做出转发决定)是由处理单元根据第二协议执行的,该处理单元表现地如同其处理符合第一分组的分组一样。
在另一个实施方式中,第一可配置内核被配置为基于对分组的分析来设置数据结构字段。位于第一可配置内核的下游的第二可配置内核被配置为基于数据结构字段的值采取不同的动作。第一可配置内核与第二可配置内核之间的其它管线单元被配置为忽略数据结构字段。在一个实施方式中,可配置内核被配置为基于对分组的分析来设置一个或多个数据结构字段,并且管线中的下游单元使用这一个或多个数据结构字段来确定分组是否应当绕过下游单元中的一个或多个的处理。
参照图1,网络设备100包括耦合到一个或多个进入(ingress)物理端口 108和一个或多个外出(egress)物理端口 116的分组处理管线102。虽然图1中仅示出了一个进入物理端口 108和一个外出物理端口 116,但是典型的交换机设备包括分组经由其进入的多个进入物理端口 108和分组经由其从网络设备100外出的多个外出物理端口 116。在一个实施方式中,分组处理管线包括耦合到外出部分112的进入部分104。图1是简化的框图, 并且网络设备中的处理管线通常包括图1中未示出的额外单元以提高清晰度。
在一些实施方式中,进入物理端口 108和外出物理端口 116耦合到多个通信链路。 通常,存在多个物理端口(入口和/或出口),并且每一个物理端口耦合到单个相应的通信链路。例如,在一些实施方式中,进入物理端口 108和外出物理端口 116耦合到多个不 同的网络和/或切换系统中的其它交换机(未示出)。例如,在各个实施方式中,进入物理端口 108和外出物理端口 116耦合到供应商网络、一个或多个客户端网络和/或切换系统中的一个或多个其它交换机。为了清楚的目的,仅可以看见一个进入物理端口和一个外出物理端口。在一个实施方式中,分组处理管路102耦合到多个物理端口并且被配置为在多个物理端口之间转发分组。
在一个实施方式中,进入物理端口 108和外出物理端口 116提供与其它设备的多个双向、点到点的通信链路,例如电桥、切换系统中的其它交换机、端点等等。
在一个实施方式中,分组处理管线102通常将数据分组从进入物理端口 108传送到适当的外出物理端口 116。在一些实施方式中,至少一些物理端口是输入/输出端口,并且至少一些进入物理端口 108和外出物理端口 116与相同的物理端口相对应。
如图1所示,进入部分104和外出部分112中的每一个包括串联耦合的多个处理单元。通常,管线的每一个单元可选择地处理分组或者与分组对应的数据结构(例如,分组描述符),然后将分组或数据结构传递给管线中的下一个单元以进行进一步的处理。在一个实施方式中,诸如分组描述符的数据结构包括来自分组的一些信息,例如,分组的报头信息中的一些或全部。在一些实施方式中,数据结构还包括其它信息,例如,关于分组存储在与网络设备100相关联的存储器中的位置的指示符、关于管线的一个或多个单元要采取的行动的指示、诸如关于分组所属的流的指示符的与分组有关的特征信息等等。为了便于解释,下文中的术语“分组”用于指代分组本身或者与分组相关联的数据结构。管线102中的每一个单元可以处理或者可以不处理特定的分组。例如,在一些实例中,单元简单地将分组传递到管线102中的下一个单元上。在一个实施方式中,进入部分104的最后一个单元将分组传递到外出分212的第一单元。
在一个实施方式中,进入部分104和外出部分112的单元中的每一个或至少一些包括相应的存储器或者以其它方式与该相应的存储器相关联。在一个实施方式中,单元接收的分组被存储在与该单元相关联的存储器中。在图1中示出了分组处理管线102的特定的示例性单元,并且在下文中将其作为示例性的示例进行讨论。在一些实施方式中,一个或多个其它适当的单元包括在分组处理管线102中。此外,在一些实施方式中,从分组处理管线102中省略了图1中所示的一个或多个单元。
在图1的示例中,进入部分104包括耦合到进入物理端口 108的端口媒体访问控制(MAC)接收机单元120。端口 MAC接收机单元120通常执行媒体访问控制功能。端口 MAC 接收机单元120通常还将进入部分104与网络设备100的特定物理进入端口接合(即,如果网络设备100包括多个物理进入端口,则网络设备100包括多个相应的端口 MAC接收机单元120)。在另一个实施方式中,一个端口 MAC接收机单元120将进入部分104与网络设备100的多个物理进入端口(为了清楚的目的而未示出)接合。
接收直接存储器存取(RxDMA)单元124通常将每一个接收的分组写入存储器(未示出)并且输出存储器中的分组的位置的相应指示符(例如,指针)。在一个实施方式中, RxDMA单元124包括数据结构发生器和报头解析器。在一个实施方式中,报头解析器对分组中的报头信息进行解析,而数据结构发生器生成与分组对应的数据结构(例如,分组描述符)并且在数据结构中包括由报头解析器解析出的报头信息。在一个实施方式中,数据结构包括存储器中的分组的位置的指示符(例如,指针),使得可以从分组本身提取出处理所需的额外信息(如果需要的话)和/或使得一旦完成对数据结构的处理,就可以将分组最终转发给所选择的位置。
可配置内核单元128耦合到RxDMA单元124。在一个实施方式中,可配置内核单元 128能够(例如,在制造设施中、由用户等)被配置为执行通常不能由管线102中的其它单元执行的期望的操作,或者适当地修改与输入分组相关联的数据结构使得管线102中的其它单元可以对分组执行与它们通常被配置以执行的操作不同的操作。在一个实施方式中, 可配置内核单元128包括被配置为执行存储器(未示出)中存储的机器可读指令的处理器。例如,可以修改、删除、重写与处理器相关联的存储器中存储的指令、可以添加新的指令等等。在一个实施方式中,可配置内核单元128包括诸如可编程逻辑设备(PLD)的可重新配置的硬件。
在一个实施方式中,可配置内核单元128能够被配置为修改由管线102的前一个单元(例如,RxDMA单元124或者另一个单元(未示出))所创建的数据结构。在一个实施方式中,可配置内核单元128能够被配置为修改数据结构中的值。在一个实施方式中,可配置内核单元128能够被配置为添加字段和/或从数据结构中移除字段和/或向数据结构中的字段中插入与旨在插入到该字段中的内容不同的内容(从管线中的其它单元的角度来看)。在一个实施方式中,可配置内核单元128能够被配置为对解析报头字段的RxDMA单元124或另一个单元(未示出)不能解析的报头字段进行解析。例如,在一个实施方式中, 管线102的其它单元(例如,RxDMA单元124)可能不能处理符合某一网络协议的分组。例如,管线102的(例如,在RxDMA单元124或另一个单元(未示出)中执行的)报头解析功能不能解析某一网络协议指定的报头字段,因而基于解析创建的数据结构不包括来自与某一网络协议对应的报头字段的信息。另一方面,在一个实施方式中,可配置内核单元128能够被配置为基于来自与某一网络协议对应的报头字段的信息来修改数据结构。换言之,可配置内核单兀128适合于基于符合一个或多个其它处理级未知的协议的报头信息以这样的方式来更新与分组对应的数据结构中的字段,即,该方式使得虽然使用了符合一个或多个处理级未知的协议的信息,但是这一个或多个其它处理级然后能够处理分组。虽然在一个实施方式中,信息符合未知的协议,但是可配置内核以这样的方式将该信息应用于数据结构,即,该方式似乎符合处理单元已知的协议,使得分组可以由一个或多个其它处理级进行处理。
在一个实施方式中,管线102的其它单元使用修改的数据结构进行操作,如同修改的数据结构与不同于(其它单元未知的)某一网络协议的(其它单元已知的)网络协议相对应一样。在另一个实施方式中,管线102的其它单元被配置为忽略由可配置内核单元 128修改的数据结构的各个部分,除了管线102的下游的一个或多个其它可配置内核单元已经被配置为使用由可配置内核单元128修改的数据结构的各个部分来执行管线102先前还未被配置为执行的功能,例如,与(其它单元未知的)某一网络协议相对应的功能或者其它适当的功能。
在另一个实施方式中,管线102的(例如,在RxDMA单元124或另一个单元(未示出)中执行的)报头解析功能由于设计错误或者制造缺陷而错误地操作,因而基于解析创建的数据结构不包括来自分组的报头字 段的正确信息或者不是管线102所预期的。另一方面,可配置内核128能够被配置为例如基于来自报头字段的信息来修改数据结构,以校正管线102的报头解析功能中的错误。
在一个实施方式中,除了上面所讨论的(例如,与分组的报头字段对应的)字段以外,管线102使用的数据结构还包括与可配置内核单元有关的字段,S卩,用于影响可配置内核单元的操作的字段和/或由一个或多个可配置内核单元设置以影响管线102中的其它单元的字段。例如,在一个实施方式中,所述数据结构包括由一个或多个可配置内核单元设置以向一个或多个其它可配置内核单元指示如何处理分组和/或要采取的行动的一个或多个字段,但是这些字段被管线102中的除了可配置内核单元以外的单元忽略。在一个实施方式中,所述数据结构包括由管线单元而不是可配置内核单元设置以向一个或多个可配置内核单元指示如何处理分组和/或要采取的行动的一个或多个字段,但是这些字段被管线 102中的除了可配置内核单元以外的单元忽略。在一个实施方式中,数据结构包括一个或多个字段,该一个或多个字段由一个或多个可配置内核单元设置以向管线102的一个或多个其它单元(例如,可配置内核单元和/或除了可配置内核单元以外的单元)指示与数据结构对应的分组是应当绕过管线102中的一个或多个其它单元还是通过管线102中的一个或多个其它单元而不由管线102中的一个或多个其它单元处理。
在一些实施方式中,可配置内核128被省略。例如,上面讨论的数据结构(例如, 分组描述符)的修改是由另一个可配置内核执行的,或者根本不执行。更确切地说,另一个可配置内核可以执行如下所描述的不同功能。
参照隧道终止(TTI)分类单元132示出了包括与硬件处理结合操作的可配置内核的处理管线的通用硬件架构和操作原则。描述TTI分类单元132仅出于根据特定的实施方式说明功能的目的,但是可配置内核的操作可以与管线中的任何适当的处理单元相结合。 TTI分类单元132耦合到可配置内核128。根据一个实施方式,TTI分类单元132通常执行多个定义的功能。例如,在一个实施方式中,TTI分类单元132通常执行至少两个查询功能。 在第一查询功能中,识别去往由网络设备100辨别的MAC地址、VLAN对的分组。该识别可以在一个或多个后续的功能或管线单元中使用。第二查询功能(隧道终止和接口分配(TTI) 查询)用于隧道终止识别和接口分配和/或根据层2 (L2)或层3(L3)报头字段将VLAN分配给分组。
在一个实施方式中,TTI查询包括使用正在处理的分组的报头的字段和其它信息 (例如第一查询的结果)作为查询密钥来从具有表格数据的一个或多个表格获得数据。一个实施方式中,表格数据包括关于要米取的行动的指不。在一个实施方式中,在一些情况下,TTI查询指示分组与一个或多个TTI动作相关联,例如,向分组分配VLAN、分配服务质量 (QoS)参数、分配外出端口等。
如上文所讨论的,TTI分类单元132所使用一个或多个存储器组件(例如,TCAM) 中维护的·一个或多个表格、数据库和/或其它资料库。在一个实施方式中,查询一个或多个表格、数据库等以识别与进入的分组的格式和结构匹配或近似的表格条目或数据库记录。 当TTI分类单元132不能识别与进入的分组的格式和结构匹配或近似的表格条目或数据库记录时,TTI分类单元132可以不采取行动或者采取一个或多个默认的行动。
在一个实施方式中,TTI分类单元132所使用的一个或多个表格包括对应于与TTI 分类单元132的下游的可配置内核单元有关的信息的一个或多个字段。例如,在一个实施方式中,当TTI分类单元132识别表格条目时,TTI分类单元132可以使用表格条目中的一个或多个字段来设置或修改数据结构中的一个或多个相应的字段以影响可配置内核单元的下游的操作。
在一个实施方式中,TTI分类单元132所使用的一个或多个表格包括以下各项中的一项或多项LocalUnitDefined[31:0]字段、LocalUnitDefinedUpdateMask[31:0]字段和用于指示相应的分组是应当绕过管线102的一个或多个可配置内核单元还是通过管线 102的一个或多个可配置内核单元而不由管线102的一个或多个可配置内核单元处理的字段。LocalUnitDefined字段是与用于将来自刚刚处理分组描述符的单元的信息传送到下一个最近的可编程内核的数据结构(例如,分组描述符)中的LocalUnitDefined[31:0] 字段对应的字段。例如,在一个实施方式中,如果诸如TTI分类单元132的单元基于分组描述符执行多个查询,则第一查询用于更新分组描述符中的LocalUnitDefined字段的第一部分,第二查询用于更新分组描述符中的LocalUnitDefined的第二部分,等等。 LocalUnitDefinedUpdateMask字段(例如,分组描述符)向TTI分类单元132指示将响应于查询来修改来自分组描述符中的LocalUnitDefined字段的哪些比特。在一个实施方式中,下一个最近的可编程内核使用LocalUnitDefined字段来决定对分组执行哪一种额外的动作。能够在现场、在制造设施中等改变(即,重新配置)一个或多个表格,使得可以相对于网络设备100中的可配置内核单元所使用的修改的分组描述符字段来改变TTI分类单元132的功能。在一个实施方式中,TTI分类单元132被配置为允许分组绕过TTI分类单元132或 TTI分类单元132的一个或多个子单元的处理。例如,在一个实施方式中,如果TTI分类单元132在处理分组时执行多个查询操作,则TTI分类单元132被配置为允许分组绕过这些查询操作中的一个或多个。在一个实施方式中,与分组相关联的数据结构的一个或多个字段向TTI分类单元132指示分组是否要绕过TTI分类单元132或TTI分类单元132的一个或多个子单元的处理。在一个实施方式中,由可配置内核128来设置或修改数据结构的这样的一个或多个字段。
可配置内核单元136耦合到TTI分类单元132。在一个实施方式中,可配置内核单元136包括与可配置内核单元128相同的结构或者相似的结构。在一个实施方式中,可配置内核单元136能够(例如在制造设施中、由用户等等)被配置为执行期望的操作。例如,在一个实施方式中,可配置内核单元136能够被配置为修改与分组相关联的数据结构, 该数据结构是从TTI分类单元132或者管线102中的另一个适当的上游单元接收的。然后,可配置内核单元136向管线中的下一个单元转发修改的数据结构。在一个实施方式中, 可配置内核单元136基于由TTI分类单元132或另一个适当的单元修改的分组描述符中的 LocalUnitDefined字段来修改数据结构(例如,分组描述符)或者执行另一个适当的功能。
在一个实施方式中,省略了可配置内核单元136。例如,由可配置内核单元136执行的对数据结构(例如,分组描述符)的修改或者其它功能是由另一个可配置内核执行的, 或者根本不执行。
在一个实施方式中,进入策略引擎140耦合到可配置内核单元136。进入策略引擎140通常执行流分类。流与有关的一系列分组相对应,并且可以以多种不同的方式进行定义。流的一个示例是由媒体访问控制(MAC)报头中的MAC源地址或特定的MAC目的地地址定义的。换言之,在一个示例中,具有特定的MAC源地址的所有分组与特定的流相对应。 流的另一个示例是由MAC源地址目的地地址对定义的。换言之,在一个示例中,具有特定的 MAC源地址和MAC目的地地址的所有分组与特定的流相对应。此外,在一些实施方式中,可以组合来自不同的协议层的字段以定义流。
在一个实施方式中,进入策略引擎140包括TCAM或其它适当的存储器,或者耦合到TCAM或者其它适当的存储器。进入策略引擎140通常使用正在处理的分组的报头的字段以及其它适当的信息作为去往TCAM的密钥。TCAM中的条目指示特定的规则或者要执行的一组一个或多个动作(例如,关于流测量、VLAN分配、外出端口分配等)。在一些场景中, 要执行的动作中的至少一些将由进入策略引擎140的下游的处理单元来执行。因此,在一些场景中,进入策略引擎140向分组分配属性以向下游处理单元指示如何处理该分组。在一个实施方式中,分配属性包括将属性指示符包括在与分组相对应的数据结构中。在一个实施方式中,进入策略引擎140使用TTI分类单元132执行的查询的结果。例如,在一个实施方式中,TTI分类单元132查询的结果用作由进入策略引擎140执行的查询的密钥的一部分。
在其它实施方式中,进入策略引擎140不使用TCAM。例如,在其它实施方式中,使用用于对多字段参数进行分类的哈希技术或任何其它适当的技术。因此,在一些实施方式中,省略进入策略引擎140的TCAM。
电桥引擎144耦合到进入策略引擎140。电桥引擎144包括或者耦合到转发数据库(未示出),该转发数据库包括MAC目的地地址和关于具有MAC目的地地址的分组应当转发到的相应外出端口的指示。在一个实施方式中,转发数据库包括具有MAC目的地地址和关于相应的外出端口的指不的表格。在一个实施方式中,转发数据库更一般性地包括MAC 源地址和MAC目的地地址,并且提供MAC地址与端口和诸如以下各项中的一项或多项的其它参数的绑定指示分组是否由进入部分104反映到进入分析器(未示出)以进行进一步处理的标志、指示分组是否将由外出部分112反映到外出分析器(未示出)以进行进一步处理的标志、将用于用户定义的功能的用户定义的比特等。这些绑定主要用于转发决定,但是也用于其它目的,例如,用于将分组反映给分析器以进行进一步处理、用户定义的功能或应用等。在一些实施方式中并且在至少一些场景中,电桥引擎144执行MAC源地址查询和 MAC目的地地址查询。
在一个实施方式中,电桥引擎144通常使用层2信息来确定应当将分组转发到的端口。在一些实例中,通过检查分组的MAC目的地地址并且使用转发数据库确定目的地地址对应的网络分段来完成对是否应当转发分组以及应当向哪里转发分组的决定。此外,在其它实施方式和/或实例中,也使用其它信息。例如,在一些实施方式中和/或实例中使用 VLAN信息。例如,在一些实施方式中,电桥引擎144能够使用VLAN信息确定用于层2多播或广播分组的端口目的地。在一些实施方式中,电桥引擎144还维护转发数据库。例如,在一个实施方式中,电桥引擎144通过记录与进入分组对应的端口并且将该端口与分组的源 MAC地址相关联,来获知进入分组的源MAC地址对应的端口。在一个实施方式中,在另一个示例中,电桥引擎144通过记录与进入分组相对应的VLAN并且将端口与分组的VLAN相关联,来获知进入分组的VLAN对应的端口。
通常,转发数据库将用于做出转发决定的多个变量进行相关。例如,转发数据库包括基于VLAN、端口和MAC地址的条目;例如,基于MAC地址和VLAN的查询操作在桥接 (bridging)操作中是有用的。在一个实施方式中,电桥引擎144还使用由TTI分类单元132 提供的信息来做出转发决定。因此,转发数据库记录或表格条目包括与目的地MAC地址、端口、VLAN等中的一个或多个相关联的字段。
在一个实施方式中,电桥引擎144使用的转发数据库包括以下各项中的一项或多项LocalUnitDefined[31: 0]字段、LocalUnitDefinedUpdateMask[31:0]字段和用于指示相应的分组是应当绕过管线102的一个或多个可配置内核单元还是通过管线 102的一个或多个可配置内核单元而不由管线102的一个或多个可配置内核单元处理的字段。LocalUnitDefined字段是与用于将来自刚刚处理分组描述符的单元的信息传送到下一个最近的可编程内核的数据结构(例如,分组描述符)中的LocalUnitDefined 字段对应的字段。例如,在一个实施方式中,如果诸如电桥引擎144的单元基于分组描述符执行多个查询,则第一查询用于更新分组描述符中的LocalUnitDefined字段的第一部分,第二查询用于更新分组描述符中的LocalUnitDefined的第二部分,等等。 LocalUnitDefinedUpdateMask字段(例如,分组描述符)向电桥引擎144指示将响应于查询来修改来自分组描述符中的LocalUnitDef ined字段的哪些比特。在一个实施方式中,下一个最近的可编程内核使用LocalUnitDefined字段来决定将对分组执行哪一种额外的动作。
在一个实施方式中,电桥引擎144被配置为允许分组绕过电桥引擎144或电桥引擎144的一个或多个子单元的处理。例如,在一个实施方式中,电桥引擎144被配置为允许分组绕过转发数据库查询。在一个实施方式中,与分组相关联的数据结构的一个或多个字段向电桥引擎144指示分组是否绕过电桥引擎144或电桥引擎144的一个或多个子单元的处理。在一个实施方式中,由可配置内核128和/或可配置内核136来设置或修改数据结构的此类一个或多个字段。
外出前(pre-egress)引擎148耦合到电桥引擎144。在一个实施方式中,外出前引擎148将进入部分104的先前的单元的决定合并为单个决定,并且相应地更新与分组相对应的数据结构。
在一个实施方式中,外出部分112耦合到外出前引擎148。在一个实施方式中并且在一些场景中,外出前引擎148确定与分组将转发到的一个或多个目标端口对应的一个或多个物理目标。物理目标可以是物理端口设备对、干线、隧道起始、物理端口列表等。
在一个实施方式中,可配置内核单元152耦合到外出前引擎148。在一个实施方式中,可配置内核单元152包括与可配置内核单元128相同的结构或者类似的结构。在一个实施方式中,可配置内核单元152能够被配置为(例如,在制造设施中、由用户等)执行期望的操作。例如,在一个实施方式中,可配置内核单元152能够被配置为修改与分组相关联的数据结构,该数据结构是从进入部分104接收的。然后,可配置内核单元152将经修改的数据结构转发给管线102中的下一个单元。
在一个实施方式中,省略了可配置内核单元152。例如,由可配置内核单元152对数据结构(例如,分组描述符)或者其它功能执行的修改是由另一个可配置内核执行的,或者根本不执行。
传输排队单元156耦合到可配置内核单元152。例如,传输排队单元156通常对与多个队列中的分组对应的数据结构(例如,分组描述符)进行排队,其中,所述多个队列对应于不同类别的流和/或不同的物理端口。在一个实施方式中,传输排队单元156通常还执行速率整形。
传输直接存储器存取(TxDMA)单元160耦合到传输排队单元156。TxDMA单元160 通常使用如上所述的与分组对应的数据结构,以识别将经由一个或多个外出端口发送的分组。TxDMA单元160将所识别的分组写入与一个或多个外出端口对应的一个或多个传输缓冲器。
在一个实施方式中,可配置内核单元164耦合到TxDMA单元160。在一个实施方式中,可配置内核单元164包括与可配置内核单元128相同的结构或者类似的结构。在一个实施方式中,可配置内核单元164能够(例如在制造设施中、由用户等等)被配置为执行期望的操作。例如,在一个实施方式中,可配置内核单元164能够被配置为修改与分组相关联的数据结构,该数据结构是从管线102中的前一个单元接收的。然后,可配置内核单元164 向管线102中的下一个单元转发修改的数据结构。
在一个实施方式中,省略了可配置内核单元164。例如,由可配置内核单元164执行的对数据结构(例如,分组描述符)的修改或者其它功能是由另一个可配置内核执行的, 或者根本不执行。
报头变更单元168耦合到可配置内核单元164。在一些场景中,进入分组在分组报头中具有VLAN字段和MAC字段,并且在一些场景中,必须(例如,根据与MAC DA相关联的 VLAN)修改VLAN字段或者将分组多播传送到不同的VLAN中的目的地设备。应当注意的是, 分组报头的修改可以在进入供应商网络时或者在从供应商网络外出时发生。在一个实施方式中,报头变更单元168维护信息从而允许适当地操纵分组报头以促进这些多播操作。在一些实现中,报头变更单元168独立地或者与外出部分112的其它单元协作地操纵分组报头。在一些实施方式中,报头变更单元168实现对客户端网络的标记的控制或者使得其它子网络能够实现。为了支持该功能,报头变更单元168被实现在查询表、数据库或者其它适当的数据结构中或者包括查询表、数据库或者其它适当的数据结构,其中,查询表、数据库或者其它适当的数据结构将分组属性信息、VLAN、VID、MAC地址与客户端VLAN标记偏好相关。此外,在一些场景中,报头变更单元168指向隧道起始条目,该隧道起始条目提供与分组的所需的外部报头有关的信息;在这一方面,隧道起始条目定义了将用于在供应商网络上发送分组的隧道。
在一个实施方式中,可配置内核单元172耦合到报头变更单元168。在一个实施方式中,可配置内核单元172包括与可配置内核单元128相同的结构或者类似的结构。在一个实施方式中,可配置内核单元172能够被配置为(例如,在制造设施中、由用户等)执行期望的操作。例如,在一个实施方式中,可配置内核单元172能够被配置为修改与分组相关联的数据结构,该数据结构是从管线102中的前一个单元接收的。然后,可配置内核单元 172将经修改的数据结构转发给管线102中的下一个单元。
在另一个实施方式中,与仅仅修改与分组相关联的数据结构相反,可配置内核单元172可以被配置为直接修改分组。例如,在一个实施方式中,可配置内核单元172可以被配置为向分组添加封装报头信息。在一个实施方式中,管线102上游的另一个单元(例如, 另一个可配置内核单元)(例如,在与分组相对应的数据结构中)提供向可配置内核单元 172指示封装报头信息应当被添加到分组的信息。
作为另一个例子,在一个实施方式中,可配置内核单元172可以被配置为对分组进行解封装,即,被配置为从分组中移除封装报头信息。在一个实施方式中,管线102上游的另一个单元(例如,另一个可配置内核单元)(例如,在与分组对应的数据结构中)提供向可配置内核单元172指示应当从分组中移除封装报头信息的信息。
在一个实施方式中,省略了可配置内核单元172。例如,由可配置内核单元172执行的对数据结构(例如,分组描述符)的修改或者其它功能是由另一个可配置内核执行的, 或者根本不执行。
外出策略引擎176耦合到可配置内核单元172。外出策略引擎176通常执行流分类。当分组属于辨别的流时,外出策略176将该分组与流相关联。例如,在一个实施方式中, 外出策略引擎176将流标识符(ID)附接到分组以指示分组所属的流。在至少一些场景和实现中,在从网络设备100外出之前或者之时,从分组中移除流ID。例如,在一个实施方式中,如果网络设备100是切换系统的包括其它类似的网络设备(未示出)的组件并且如果分组离开切换系统,则在从网络设备100外出之前或之时,从分组中移除流ID。另一 方面, 在一个实施方式中,如果网络设备100是切换系统的包括其它类似的网络设备(未示出) 的组件并且如果正在将分组转发给切换系统中的另一个网络设备,则在从网络设备100外出之前或之时,将流ID包含在分组的分布式切换架构(DAS)标签中。
将端口 MAC传输单元180耦合到外出策略引擎176。端口 MAC传输单元180通常执行介质存取控制功能,并且将分组转发给适当的外出物理端口 116。
图2是根据一个实施方式的用于处理分组的示例性方法200的流程图。方法200 由诸如图1的网络设备100的网络设备来执行。为了说明的目的,参照图1讨论方法200。 然而,在一个实施方式中,方法200是由除了网络设备100的其它适当的网络设备来执行的。
此外,为了说明的目的,参照这样的实施方式讨论了方法200,在该实施方式中,在可配置内核单元的配置之前将管线102配置为至少处理符合以太网协议的分组但是不能处理符合以太网光纤信道(FCoE)协议的分组(除了将这些FCoE分组视作以太网分组)。 虽然使用与FCoE有关的示例说明了管线的实施方式的操作,但是本专利的范围不限于该特定的应用。在其它实施方式中,对符合其它适当的协议的分组进行类似的处理。
在方框204,在网络设备100处接收符合以太网光纤信道(FCoE)协议的分组。FCoE 分组包括封装在以太网帧中的符合光纤信道(FC)协议(即,FC分组)的分组。
在方框208,RxDMA单元124或者另一个适当的单元从FCoE分组的以太网报头中提取报头信息并且将提取出的报头信息存储在与FCoE分组相关联的分组描述符(即,数据结构)中。例如,从FCoE分组的以太网报头中提取MAC目的地地址(DA),并且将其存储在描述符的MAC DA字段中。
在方框212,由TTI分类单元132处理FCoE分组。例如,TTI分类单元132的一个或多个表格被配置为使得响应于由TTI分类单元132执行的一个或多个查询操作,TTI分类单元132从FCoE分组内的FC分组中提取目的地标识符(D_ID),并且将D_ID存储在描述符的用户数据字段中。在一个实施方式中,用户数据字段是描述符中的可以用于在执行可配置的功能时在管线的单元之间传送信息的字段。例如,用户可以配置TTI分 类单元132 以从FCoE分组中提取D_ID,并且将D_ID存储在用户数据字段中。在其它实施方式中,用户数据字段可以用于存储要在管线的单元之间传送的其它类型的信息。因此,例如,在一个实施方式中,TTI分类单元132可以(例如,至少部分地通过修改TTI分类单元132的一个或多个表格或者通过另一种适当的技术)被配置为识别FCoE分组并且从这些分组中提取D_ ID。例如,在一个实施方式中,响应于一个或多个查询操作,TTI分类单元132在描述符中 (例如,在描述符的LocalUnitDefined字段中)存储指示符,该指示符以信号形式告知可配置内核单元136关于与该描述符相关联的分组是FCoE分组。如上文所讨论的,TTI分类单元132的一个或多个表格能够在现场、在制造设施等中被改变(即,被重新配置),使得TTI 分类单元132的功能被改变,以提取D_ID,在描述符中存储0_10,并且存储以信号形式告知可配置内核单元136的指示符。
在方框216,响应于接收到与FCoE分组相关联的描述符,可配置内核单元136确定该描述符将由可配置内核单元136修改。例如,可配置内核单元136在描述符中(例如,在描述符的LocalUnitDefined字段中)检测到指示符,该指示符以信号形式告知可配置内核单元136与描述符相关联的分组是FCoE分组。例如,可配置内核单元136确定描述符中的 MAC DA字段应当由存储在描述符的用户数据字段中的D_ID值重写。在TTI分类单元132 在描述符中存储以信号形式告知与描述符相关联的分组是FCoE分组的实施方式中,可配置内核单元136响应于分析描述符中的以信号形式告知FCoE分组的指示符,确定描述符中的MAC DA字段应当由存储在描述符的用户数据字段中的D_ID值重写。
在方框220,可配置内核单元136响应于方框216处的确定,从描述符的用户数据字段得到D_ID值,并且将D_ID存储在描述符的MAC DA字段中(例如,使用D_ID值来重写 MAC DA 字段)。
在方框224,不熟悉FCoE协议但是能够基于MAC DA做出转发决定的电桥引擎144 至少部分地基于描述符的MAC DA字段来处理FCoE字段,其中,该MAC DA字段由D_ID值重写。例如,在一个实施方式中,电桥引擎144至少基于描述符的MAC DA字段来在转发数据库中执行查询操作。由电桥引擎144在方框224处执行的其它处理包括基于使用描述符的MAC DA字段执行的查询操作来确定网络设备100将经由其发送分组的一个或多个外出端口。由于在方框220处执行的操作,因此电桥引擎144使用FC分组的D_ID字段(其将被写入到描述符的MAC DA字段中)而不是使用以太网报头的原始MAC DC字段来做出转发决定(例如,确定将经由其发送分组的一个或多个外出端口)。
在一个实施方式中,电桥引擎144不另外被配置为使用来自封装在以太网帧中的 FC分组的信息来做出转发决定。例如,电桥引擎144被配置为至少使用描述符(通常具有以太网报头的MAC DA值的值)中的MAC DA字段,但是不使用描述符的用户数据字段。·因此,如果未执行方框220的操作,则电桥引擎144将使用以太网报头的MAC DA值来做出转发决定。然而,因为在方框220,可配置内核单元136在描述符的MAC DA字段中存储了来自FC分组的D_ID值,因此使得电桥引擎144利用D_ID值来做出转发决定。因此,电桥引擎144做出转发决定,如同FCoE分组仅仅是以太网分组一样,但是实际上使用来自封装在以太网帧中的FC分组的信息来做出转发决定。
FCoE分组进一步由管线102进行处理。类似地,管线102中的其它单元(例如,外出前引擎148、TxQ单元156、TxDMA单元160等)不另外被配置为当处理分组时使用来自封装在以太网帧中的FC分组的信息。因此,在一个实施方式中,管线102中的这些其它单元处理FCoE分组,如同FCoE分组仅仅是以太网分组一样。例如,管线102中的一个或多个其它单元基于描述符的MAC DA字段并且假设存储在描述符的MAC DA字段中的值是来自以太网报头的MAC DA字段的值(当实际上来自FC分组的D_ID值存储在描述符的MAC DA字段中时),来处理FCoE分组。
更一般地,在上面所讨论的场景中,以太网协议是第一网络通信协议(第一协议) 的示例,FCoE协议是第二网络通信协议(第二协议)的示例。在一个实施方式中,当网络 100的管线单元中的很多管线单元不适合于处理符合第二协议的分组时,一个或多个可配置内核允许适合于处理符合第一协议的分组的管线102被重新配置为处理符合第二协议的分组。例如,在一个实施方式中,管线102的单元中的很多单元将分组描述符的字段看作为与由第一协议指定的第一分组报头字段对应。然而,可配置内核单元被配置为在分组描述符的字段中存储来自由第二协议指定的第二分组报头字段的值。因此,使得当处理分组时使用描述符的字段的可配置内核单元下游的一个或多个单元使用由第二协议指定的第二分组报头字段,但是这些单元假设它们正在使用由第一协议指定的第一分组报头字段。 因此,使得可配置内核单元下游的一个或多个单元在这些单元没有另外被配置为使用由第二协议指定的第二分组报头字段时使用由第二协议指定的第二分组报头字段。
图3是根据一个实施方式的用于处理分组的另一个示例性的方法300的流程图。方法300是由诸如图1的网络设备100的网络设备执行的。为了说明的目的,参照图1讨论了方法300。然而,在一个实施方式中,方法300是由除了网络设备100以外的适当的网络设备执行的。
此外,为了说明的目的,参照一个实施方式讨论了方法300,在该实施方式中,在可配置内核单元的配置之前,管线102不能处理符合封装协议的分组(除了将这些分组视作符合管线102的单元已知的一些其它协议(例如,以太网协议或者另一种适当的协议)的分组)。在其它实施方式中,对符合其它适当的协议的分组进行类似的处理。
在方框304,在网络设备100处接收符合封装协议的分组。符合封装协议的分组 (接收的分组)包括封装报头和符合不同的协议(在本文中也称作内部分组协议)的内部分组。
在方框308,RxDMA单元124或者另一个适当的单元从封装报头中提取报头信息, 并且将提取出的报头信息存储在与接收的分组相关联的分组描述符(即,数据结构)中。 例如,从接收的分组的封装报头中提取MAC目的地地址(DA),并且将其存储在描述符的MAC DA字段中。
在方框312,TTI分类单元132或者另一个适当的处理单元处理接收的分组。例如,在一个实施方式中,TTI分类单元132可以(例如,至少部分地通过修改TTI分类单元 132的一个或多个表格或者通过另一种适当的技术)被配置为执行不同的功能和/或识别管线的其它单元 不能处理或识别的不同类型的分组。例如,在一个实施方式中,TTI分类单元132的一个或多个表格被配置为使得响应于由TTI分类单元132执行的一个或多个查询操作,该TTI分类单元132提取封装报头中的与封装协议对应的一个或多个字段(在本文中称作一个或多个封装字段),并且将一个或多个封装字段存储在描述符的一个或多个数据字段中。附加地或可替换地,在一个实施方式中,TTI分类单元132的一个或多个表格被配置为使得响应于由TTI分类单元132执行的一个或多个查询操作,该TTI分类单元132 从内部分组提取一个或多个字段(在本文中称作一个或多个内部分组字段),并且将一个或多个封装字段存储在描述符的一个或多个用户数据字段中。如上文所讨论的,TTI分类单元132的一个或多个表格能够在现场、在制造设施等中被改变(即,被重新配置),使得TTI 分类单元132的功能被改变,以提取封装报头中和/或内部分组中的一个或多个字段,并且将一个或多个字段存储在描述符中。
在方框316,可配置内核单元136响应于接收到与接收的分组相关联的描述符, 确定接收的分组符合封装协议并且管线102应当解封装所接收的分组,这包括移除封装报头。例如,在一个实施方式中,可配置内核单元136被配置为识别存储在描述符的一个或多个用户数据字段中的信息,所述信息指示接收的分组符合封装协议并且应当对接收的分组执行解封装过程。在一个实施方式中,用户数据字段是描述符中的可以用于在执行可配置的功能时在管线的单元之间传送信息的字段。例如,用户可以配置TTI分类单元132以在用户数据字段中存储信息,该信息指示所接收的分组符合封装协议并且应当对所接收的分组执行解封装过程。在一个实施方式中,用户可以配置TTI分类单元132以在描述符的 LocalUnitDefined字段中存储信息,该信息指示接收的分组符合封装协议并且应当对接收的分组执行解封装过程。
在方框320,在一个实施方式中,响应于确定应当对接收的分组执行解封装过程,可配置内核单元136在描述符中存储指示符,该指示符以信号形式告知管线102的下游单元应当对接收的分组执行解封装过程。
该分组由管线102的其它单元处理,如同该分组符合管线102已知的协议一样,直到描述符到达可配置内核172为止。例如,描述符中的以信号形式告知应当执行解封装过程的指示符被可配置内核136与可配置内核172之间的管线单元忽略。
在方框324,可配置内核172分析描述符并且识别描述符中的以信号形式告知应当执行解封装过程的指示符。响应于该指示符,可配置内核172对接收的分组进行解封装, 其包括从接收的分组中移除封装报头。
分组由管线102的后续单元进一步处理并且经由适当的外出端口进行发送。
图4是根据一个实施方式的用于处理分组的另一个示例性方法400的流程图。方法400由诸如图1的网络设备100的网络设备执行。为了说明的目的,参照图1讨论了方法400。然而,在一个实施方式中,方法400是由除了网络设备100以外的适当的网络设备执行的。
此外为了说明的目的,参照一个实施方式讨论了方法400,在该实施方式中,管线 102在可配置内核单元的配置之前不能生成符合封装协议的分组。在其它实施方式中,类似地生成符合其它适当的协议的分组。
在方框404,在网络设备100处接收分组。在方框408,RxDMA单元124或另一个适当的单元从分组的报头中提取报头信息,并且将提取出的报头信息存储在与接收的分组相关联的分组描述符(即,数据结构)中。例如,从接收的分组的封装报头中提取MAC目的地地址(DA),并且将其存储在描述符的MAC DA字段中。
在方框416,可配置内核单元136响应于接收到与接收的分组相关联的描述符,确定应当根据封装协议来封装接收的分组。作为一个示例,封装可以用于在带宽有限的情况下例如在射频/微波传输中执行IP报头压缩。在这些情况下,在一个实施方式中,MAC和 /或IP报头在传输之前被移除并且被标识符替换。在一个实施方式中,接收设备分析报头并且检测标识符而不是MAC和IP报头。可编程的内核单元136检测该标识符或者另一个适当的指示符,并且响应于检测到该标识符或另一个适当的指示符,确定应当基于标识符封装该分组(例如,将MAC和IP报头添加回分组)。
在方框420,在一个实施方式中,响应于确定应当封装接收的分组,可配置内核单元136在描述符中存储指示符,该指示符以信号形式告知管线102的下游单元应当对接收的分组执行封装过程。
分组由管线102的其它单元处理,而不考虑封装协议,直到描述符到达可配置内核172为止。例如,描述符中的以信号形式告知应当执行封装过程的指示符被可配置内核 136与可配置内核172之间的管线单元忽略。
在方框424,可配置内核172分析描述符并且识别描述符中的以信号形式告知应当执行封装过程的指示符。响应于该指示符,可配置内核172根据封装协议封装接收的分组,其包括将封装报头添加到接收的分组。
该分组由管线102的后续单元进一步处理,并且经由适当的外出端口进行发送。
再次参照图1,在一个实施方式中,报头变更单元168可以被配置为通过将用户定义的报头添加到分组来修改分组的报头。在一个实施方式中,报头变更单元168可以被配置为基于一个或多个用户定义的报头表格来将用户定义的报头添加到分组。在一个实施方式中,报头变更单元168使用与将添加到分组的一个或多个用户定义的报头对应的第一表格。对于每一个用户定义的报头,第一表格包括将由报头变更单元168使用以创建用户定义的报头的信息。例如,在一个实施方式中,第一表格包括将包括在用户定义的报头中的信息。作为另一个例子,在一个实施方式中,第一表格包括指示将用户定义的报头添加到分组中的位置的偏移信息。作为另一个例子,在一个实施方式中,第一表格包括指示将添加的用户定义的报头的长度的信息。作为另一个例子,第一表格包括用于在添加了用户定义的报头以后生成与分组的报头相关联的校验和的信息,例如,校验和类型、报头中的用于生成校验和的起始位置、报头中的用于生成校验和的结束位置、关于存储校验和的结果的位置的指示等中的一个或多个。
在一个实施方式中,第一表格中的每一个条目(该条目与用户定义的报头相对应)包括与第二表格的偏移。第二表格包括将由报头变更单元168使用以创建用户定义的报头的其它信息。在一个实施方式中,第二表格包括关于将来自第一表格的信息与额外的信息进行组合的信息,例如,数据结构中的与用户定义的报头将添加到的分组对应的信息。 在一个实施方式中,第二表格中的每一个条目包括以下各项中的一项或多项关于额外的信息对应的用户定义的报头中的位置的指示、用于将来自第一表格的信息与额外的信息进行组合的掩码(mask)等。
在一个实施方式中,报头变更单兀168使用的第一表格和第二表格能够在现场、 在制造设施等中被改变(即,被重新配置)以改变报头变更单元168用于使报头变更单元 168能够向分组添加用户定义的报头的方式。
图5是根据一个实施方式的用于修改报头的示例性方法500的数据流图。方法 500由诸如图1的网络设备100的报头变更单元168的被配置为执行报头变更的网络设备的单元执行。为了说明的目的,参照图1讨论了方法500。然而,在一个实施方式中,方法 500是由除了网络设备100以外的适当的网络设备执行的。
此外,为了说明的目的,参照一个实施方式讨论了方法500,在该实施方式中,管线 102在可配置内核单 元以及报头变更单元168的第一表格和第二表格或者另一个适当的处理单元的配置之前,不能生成由方法500产生的报头。在其它实施方式中,类似地生成其它适当的分组报头。
在一个实施方式中,从报头变更单元168上游的可配置内核单元(例如,从可配置内核单元164)接收报头部分504。例如,在一个实施方式中,可配置内核单元164修改分组描述符以包括报头部分504。在一个实施方式中,可配置内核单兀164修改分组描述符以包括以信号形式向报头变更单元168告知报头变更单元168将向分组添加用户定义的报头的指示符。然后,可配置内核单元164向报头变更单元168发送分组描述符。
响应于接收到描述符,报头变更单元168确定将用户定义的报头添加到分组。例如,报头变更单元168检测描述符中的关于用户定义的报头将添加到分组的指示符。报头变更单兀168然后从分组描述符获得报头部分504,然后使用报头部分504在第一表格中执行第一查询操作。在一个实施方式中,第一查询操作的输出包括将用于生成用户定义的报头的报头模板508。在一个实施方式中,第一查询操作的输出还包括指示将在分组中添加用户定义的报头的位置的偏移信息。在一个实施方式中,第一查询操作的输出还包括指示将添加的用户定义的报头的长度的信息。第一查询操作的输出还包括用于在添加了用户定义的报头之后生成与分组的报头相关联的检验和的信息。
在一个实施方式中,查询操作的输出还包括第二表格中的索引。报头变更单元168 使用该索引来在第二表格中执行第二查询操作。在一个实施方式中,第二查询操作的输出包括关于如何将报头部分504与报头模板508进行组合的信息。例如,在一个实施方式中, 第二查询操作的输出包括指示报头部分504相对于报头模板508的偏移的偏移信息。作为另一个例子,在一个实施方式中,第二查询操作的输出包括掩码信息(例如,掩码512),该掩码信息与报头部分504相对应并且将用于将报头部分504与报头模板508相结合。
现在参照图5,根据使用第二查询操作从第二表格获得的偏移信息来安排报头部分504,并且在第一 AND操作中组合报头部分504和掩码512。类似地,在第二 AND (与)操作中组合报头模板508和掩码512的逻辑逆。在OR(或)操作中组合第一 AND操作的结果和第二 AND操作的结果以生成临时用户定义的报头520。根据使用第一查询操作从第一表格获得的长度信息来缩短临时用户定义的报头520以生成用户定义的报头524。
然后,在由使用第一查询操作从第一表格获得的偏移信息指示的分组中的位置处将用户定义的报头524添加到分组。用户定义的报头524添加到的分组包括原始的分组报头部分528和剩余部分532。在一个实施方式中,剩余部分532被缩短以移除将由用户定义的报头524替换或者以其它方式从分组省略的报头信息。
将用于在添加了用户定义的报头524以后生成与分组的报头相关联的校验和的信息是使用第一查询操作从第一表格获得的,并且该信息包括以下各项中的一项或多项 校验和类型、报头中的用于生成校验和的起始位置、报头中的用于生成校验和的结束位置、 关于报头中的存储校验和的结果的位置的指示等。该信息由报头变更单元168使用以在插入用户定义的报头524以 后生成与分组对应的校验和,并且报头变更单元168在分组中存储该校验和。
在其它实施方式或场景中,虽然图5示出了插入到原始的分组报头部分528与剩余部分532之间的用户定义的报头524,但是在其它位置中添加用户定义的报头524。例如, 在其它实施方式或场景中,用户定义的报头524被添加到分组的开始,即,在原始分组报头部分528之前。在一个实施方式中,插入用户定义的报头524包括重写原始分组报头的至少一部分。
图6是根据一个实施方式的用于处理分组的另一个示例性的方法600的流程图。 方法600是由诸如图1的网络设备100的网络设备执行的。为了说明的目的,参照图1和图5讨论了方法600。然而,在一个实施方式中,方法600是由除了网络设备100以外的适当的网络设备和/或使用除了与图5对应的技术以外的适当的技术来执行的。
此外,为了说明的目的,参照这样的实施方式讨论了方法600,在该实施方式中,在可配置内核单元和报头变更单元168的配置(例如,由报头变更单元168使用的一个或多个表格的配置)之前管线102不能生成具有添加到分组的包括用户定义的报头的一个或多个特定的报头的分组。
在方框604,在网络设备100处接收分组。在方框608,RxDMA单元124或另一个适当的单元从分组的报头中提取报头信息,并且将提取出的报头信息存储在与接收的分组相关联的分组描述符(即,数据结构)中。例如,从接收的分组的封装报头中提取MAC目的地地址(DA),并且将其存储在描述符的MAC DA字段中。
在方框612,可配置内核单元164响应于接收到与接收的分组相关联的描述符,确定应当向接收的分组添加用户定义的报头。确定应当向接收的分组添加用户定义的报头是基于描述符中携带的信息(例如,以下各项中的一项或多项目标端口、 ProgrammableCoreDefined字段、VLAN或者任何其它适当的字段)。在一个实施方式中, ProgrammableCoreDefined字段是字段。例如,这种用户定义的报头可以是与专用网络协议或处于正在标准化但是还未完成的过程中的网络协议(例如,使用通用路由封装的网络虚拟化(NVGRE)协议、虚拟可扩展局域网(VxLAN)协议)对应的报头。因此,在网络交换机执行方法600或另一个类似的适当方法的实施方式中,网络交换机能够在例如制造以后被配置为发送具有与专用协议或在制造交换机时还未完成的协议对应的报头的分组。
在方框616,响应于确定用户定义的报头应当添加到接收的分组,可配置内核单元 164修改描述符以包括指示符,从而以信号形式告知报头变更单元168应当将用户定义的报头添加到接收的分组。例如,在一个实施方式中,可配置内核单元164修改描述符中的向报头变更单元168指示报头变更单元168应当将哪一个封装添加到分组的字段。
在方框620,响应于确定应当将用户定义的报头添加到接收的分组,可配置内核单元164修改分组描述符以包括关于将添加到接收的分组的用户定义的报头的指示符。
在其它实施方式中,在方框616和/或620,除了可配置内核单元164以外的适当的可配置内核单元修改描述符。在一个实施方式中,在管线102的其它单元位于i)修改分组描述符以包括将添加用户定义的报头的指示符和/或将要添加的特定的用户定义的报头的指示符的可配置内核单元与ii)报头变更单元168之间的实施方式中,分组由管线 102的其它单元处理,而不考虑这些指示符。例如,这些指示符由可配置内核与报头变更单元168之间的管线单元忽略。
在方框624,报头变更单元168分析描述符并且识别描述符中的以信号形式告知应当添加用户定义的报头的指 示符。响应于该指示符,报头变更单元168使用来自描述符的信息来在一个或多个表格中执行一个或多个查询操作,以确定将要添加的用户定义的报头。例如,报头变更单兀168使用上面参照图5所讨论的第一表格和第二表格来执行第一查询操作和第二查询操作。例如,在制造设施和/或在现场配置一个或多个表格(例如,参照图5所讨论的第一表格和第二表格),以使报头变更单元168能够使用一个或多个查询操作的结果来确定用户定义的报头。
在方框628,报头变更单元168将用户定义的报头添加到分组。在一个实施方式中,如参照图5所讨论的,报头变更单元168将用户定义的报头添加到分组。
管线102的后续单元进一步处理分组,并且经由适当的外出端口来发送该分组。
图7是根据一个实施方式的示例性的可配置内核单元700的框图。在一些实施方式中,可配置内核单元700用作以下各项中的一项或多项图1的可配置内核单元128、可配置内核单元136、可配置内核单元152、可配置内核单元164和可配置内核单元172。在其它实施方式中,在一些实施方式中,图1的可配置内核单元中的一个或多个是与可配置内核单元700不同的适当的可配置内核。类似地,在一些实施方式中,在除了图1的网络设备 100以外的网络设备中使用可配置内核单元700。
可配置内核单元700包括被配置为向多个处理引擎708分配描述符(即,与分组对应的数据结构)的分配器(sprayer) 704。多个处理引擎708被配置为允许并行处理多个描述符以促进可配置内核单元700以网速(例如,足以以网络交换机接收分组的速率处理分组的速度)操纵报头的能力。例如,在一个实施方式中,在描述符以固定的间隔(例如,与管线的时钟对应的一个或多个时钟周期)通过管线的管线中使用可配置内核单元700。换言之,管线的至少一些单元中的每一个(包括可配置内核单元700)被配置为一旦准备好, 就以固定的间隔输出描述符。通过使用被配置为并行处理多个描述符的多个处理引擎708, 可配置内核单元700能够以与管线的其它单元对应的速率处理分组描述符。然而,在另一个实施方式中,可配置内核单元700包括单个处理引擎,该单个处理引擎被配置为以充分高于管线的时钟速率的速度操作,使得一旦准备好,单个处理引擎就以管线的时钟速率输出描述符。
每一个处理引擎708包括处理器712和一个或多个存储器716。每一个处理器712 适合于执行存储在相应的存储器716中的机器可读指令。在一个实施方式中,每一个存储器716另外存储由处理器712使用的数据,并且存储由处理器712操作的一个或多个描述符。在一个实施方式中,每一个存储器716是单个存储器设备。在另一个实施方式中,每一个存储器716对应于多个存储器设备,其包括与以下各项对应的存储器设备i)机器可读指令(代码)、ii)处理器712使用的数据以及iii)处理器712操作的一个或多个描述符。在另一个实施方式中,每一个存储器716对应于多个存储器设备,其包括与以下各项对应的存储器设备i)机器可读指令(代码)以及ii)由处理器712使用的包括一个或多个描述符的数据。在一个实施方式中,多个处理器712共享一个或多个存储器设备(例如,多端口存储器设备、高速RAM设备等)。仅作为一个例子,在一个实施方式中,如果多个处理器 712将执行相同的功能,则多个处理器712共享存储代码的单个多端口和/或高速RAM设备。
在一个实施方式中,每一个处理器712包括微码引擎。在其它实施方式中,每一个处理器712包括除了微码引擎以外的适当的处理器。
可配置内核单元700还包括先入先出(FIFO)存储器系统720。
在操作中,当描述符由可配置内核单元700接收时,分配器704确定将向其发送描述符的处理器引擎708中一个。在一个实施方式中,分配器704基于确定哪些处理引擎708 繁忙(例如,已经处理另一个描述符)来确定一个处理引擎708。在一个实施方式中,分配器704基于经由其接收到与描述符对应的分组的端口来确定一个处理引擎708。在一个实施方式中,分配器704可以被配置为将处理弓I擎708的一个或多个子集与一个或多个端口相对应。
在一个实施方式中,分配器704还被配置为向描述符分配指示符(ID)。在一个实施方式中,分配给描述符的ID允许可配置 内核单元700以可配置内核单元700接收描述符的顺序输出描述符。在一个实施方式中,分配器704被配置为以循环的方式向描述符分配 ID。在其它实施方式中,分配器704被配置为以另一种适当的方式向描述符分配ID。
当分配器704向处理引擎708发送描述符时,分配器704还向处理引擎708和FIFO 存储器系统720发送相应的ID。在一个实施方式中,FIFO存储器系统720维护指示在FIFO 存储器系统720中哪一个ID是第一 ID的位图。在一个实施方式中,当可配置内核单元700 输出与第一 ID对应的描述符时,该FIFO存储器系统720修改位图以指示下一个ID现在是第一 ID0在处理弓I擎708接收到描述符时,可配置内核单元700被配置为将该处理弓I擎708 标记为繁忙的。处理器712然后根据存储在存储器716中的代码和数据来处理描述符。可以在现场、在制造设施等中改变(即,重新配置)存储在存储器716中的代码和/或数据, 以改变可配置内核单元700的功能。
在一个实施方式中,当处理器712完成对描述符的处理时,处理器712向FIFO存储器系统720发送指不对描述符的处理完成的完成消息。在一个实施方式中,该完成消息包括与描述符对应的ID。
在接收到完成消息时,FIFO存储器系统720确定完成消息中的ID是否对应于 FIFO存储器系统720中的例如由上文所讨论的位图指示的第一 ID。如果完成消息中的ID 未与FIFO存储器系统720中的第一 ID相对应,则FIFO存储器系统720等待直到完成消息中的ID变为FIFO存储器系统720中的第一 ID为止。当确定完成消息中的ID对应于FIFO 存储器系统720中的第一 ID时,该FIFO存储器系统720向处理引擎708发送确认消息。 在一个实施方式中,响应于该确认消息,处理引擎708向FIFO存储器系统720发送描述符并且FIFO存储器系统720向例如处理管线中的下一个单元输出描述符。在另一个实施方式中,响应于该确认消息,处理引擎708向处理管线中的下一个单元输出描述符。在处理引擎708向FIFO存储器系统720发送描述符以后,可配置内核单元700被配置为将处理引擎 708标记为不繁忙的。
在一个实施方式中,可以使一个或多个处理弓I擎708进入低功率模式并且将其标记为繁忙的以节省功率。在一个实施方式中,可以将处理引擎708锁定在更慢的时钟速率以节省功率。例如,在一个实施方式中,可配置内核单元700适合于改变提供给一个或多个处理引擎708的一个或多个时钟的时钟速度,以影响可配置内核单元700的功率消耗。
应当注意的是,可以使用硬件、执行固件指令的处理器、执行软件指令的处理器或者其任意组合来执行附图的方框中的每一个。当至少部分地使用执行软件指令的处理器执行方框时,可以将软件存储在任何计算机可读存储器中,例如,存储在磁盘、光盘或者其它存储介质上、存储在计算机的RAM或ROM或闪存、处理器、硬盘驱动器、光盘驱动器、磁带驱动器等中。同样地,可以经由任何已知或期望的传送方法将软件指令传送到用户或系统,所述传送方法包括例如通过计算机可读磁盘或其它可传输的计算机存储机制或者经由通信介质。当用硬件执行时,硬件可以包括以下各项中的一项或多项分立组件、集成电路、专用集成电路(ASIC)等。参照图1,根据一个实施方式,管线102被实现在单个集成电路(IC) 上。在其它实施方式中,管线102被实现在多个IC上。例如,在一个实施方式中,根据一个实施方式,进入部分104被实现在第一 IC上,外出部分被实现在第二 IC上。
虽然已经参照旨在仅仅是说明性的而非限制本发明的具体示例描述了本发明,但是本领域普通技术人员应当清楚的是,在不偏离本发明的精神和范围的情况下,可以对所公开的实施方式进行改变、添加和/或删除。
权利要求
1.一种网络设备,包括 多个端口,被配置为在网络上接收和发送分组; 分组处理管线,包括多个硬件级,其中至少一个硬件级被配置为输出数据结构,所述数据结构包括基于对接收的分组或所述数据结构执行的第一分组处理操作而从所述接收的分组中提取的字段,其中,所述数据结构与所述分组相关联;以及 可配置处理器,耦合到所述分组处理管线的所述至少一个硬件级,其中,所述可配置处理器被配置为修改所述数据结构中的所述字段以生成经修改的数据结构,并且将所述经修改的数据结构传递到后续的硬件级,所述后续的硬件级被配置为使用由所述可配置处理器修改的所述字段来对所述数据结构执行第二分组处理操作。
2.根据权利要求1所述的网络设备,还包括所述后续的硬件级,其中,所述后续的硬件级被配置为根据所述字段中的数据对符合第一协议的数据结构执行分组处理操作,所述字段中的所述数据被所述后续的硬件级预期为符合所述第一协议,其中,所述字段中的实际数据由所述可配置处理器修改为符合与所述第一协议不同的第二协议。
3.根据权利要求1所述的网络设备,其中,所述分组处理管线包括被配置为从所述接收的分组中提取所述字段并且将所述字段存储在所述数据结构中的硬件级。
4.根据权利要求1所述的网络设备,其中,所述字段与从所述分组的报头中提取的目的地地址相对应; 其中,后续的硬件级被配置为基于所述字段确定所述分组将经由其进行发送的端口。
5.根据权利要求1所述的网络设备,其中,所述字段是第一字段; 其中,所述可配置处理器被配置为使用来自从所述接收的分组中提取的第二字段的数据来重写所述第一字段。
6.根据权利要求4所述的网络设备,其中,所述分组处理管线包括被配置为从所述接收的分组中提取第二字段并且将所述字段存储在所述数据结构中的硬件级。
7.根据权利要求6所述的网络设备,其中,所述分组包括内部分组,并且其中所述第二字段是从所述内部分组中提取的。
8.根据权利要求1所述的网络设备,其中,所述可配置处理器被配置为执行机器可读指令。
9.根据权利要求1所述的网络设备,其中,所述可配置处理器包括一个或多个微码引擎。
10.根据权利要求1所述的网络设备,其中,所述可配置处理器包括可编程逻辑设备。
11.一种方法,包括 经由网络切换设备的端口接收分组; 利用分组处理管线处理所述分组,所述分组处理管线包括多个硬件级,所述多个硬件级至少包括第一级、第二级和可配置处理器,处理所述分组包括 利用所述第一级输出数据结构,所述数据结构包括基于对接收的分组或所述数据结构执行的第一分组处理操作而从所述接收的分组中提取的字段,其中,所述数据结构与所述分组相关联; 利用所述可配置处理器修改所述数据结构中的所述字段以生成经修改的数据结构;以及将所述经修改的数据结构传递到所述第二硬件级,所述第二硬件级被配置为使用由所述可配置处理器修改的所述字段来对所述数据结构执行第二分组处理操作。
12.根据权利要求11所述的方法,其中,处理所述分组包括处理与所述分组相对应的分组描述符。
13.根据权利要求12所述的方法,其中,处理所述分组描述符包括处理所述数据结构。
14.根据权利要求11所述的方法,其中,所述字段是与第一网络通信协议相对应的第一字段; 其中,利用所述可配置处理器进行修改包括使用从所述分组中提取的第二字段来修改所述数据结构中的所述第一字段,其中所述第二字段与第二网络通信协议相对应。
15.根据权利要求14所述的方法,还包括使用由所述可配置处理器修改的所述第一字段对所述数据结构执行所述第二分组处理操作,其中所述第二分组处理操作将由所述可配置处理器修改的所述第一字段视作与所述第一网络通信协议相对应。
16.根据权利要求15所述的方法,其中,使用从所述分组中提取的所述第二字段修改所述数据结构中的所述第一字段包括利用来自所述第二字段的数据重写所述第一字段中的数据; 其中,使用由所述可配置处理器修改的所述第一字段对所述数据结构执行所述第二分组处理操作包括基于由所述可配置处理器修改的所述第一字段来确定所述分组将经由其进行发送的端口。
17.根据权利要求14所述的方法,还包括从包含在分组中的内部分组中提取所述第二字段。
18.根据权利要求11所述的方法,其中,所述字段是目的地地址; 其中,修改所述数据结构中的所述字段包括修改所述目的地地址; 其中,所述方法还包括使用由所述可配置处理器修改的目的地字段来对所述数据结构执行所述第二分组处理操作。
19.根据权利要求16所述的方法,其中,所述目的地地址是第一目的地地址; 其中,所述方法还包括从所述分组中提取第二目的地地址; 其中,修改所述数据结构中的所述字段包括利用所述第二目的地地址的至少一部分来重写所述第一目的地地址的至少一部分。
全文摘要
在网络设备中,多个端口被配置为在网络上接收和发送分组。分组处理管线包括多个硬件级,其中,至少一个硬件级被配置为输出数据结构,该数据结构包括基于对接收的分组或数据结构执行的第一分组处理操作从接收的分组中提取的字段,其中,数据结构与分组相关联。可配置处理器被耦合到分组处理管线的至少一个硬件级。可配置处理器被配置为修改数据结构中的字段以生成经修改的数据结构,并且将经修改的数据结构传递到后续的硬件级,后续的硬件级被配置为使用由可配置处理器修改的字段来对数据结构执行第二分组处理操作。
文档编号H04L29/06GK103004158SQ201280002096
公开日2013年3月27日 申请日期2012年1月5日 优先权日2011年1月6日
发明者A·罗特施特因 申请人:马维尔以色列(M.I.S.L)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1