网络设备和用于在网络设备中处理报文的方法
相关申请的交叉引用
本申请要求于2013年10月17日提交的题为“High Performance Soft Parsingand Key Generation in a Programmable Packet Processor Architecture”的美国临时专利申请No.61/892,105的优先权,其全部内容通过引用被明确地合并于此。
技术领域
本公开一般地涉及诸如交换机、路由器和边缘设备的网络设备,且更具体而言,涉及用于在这样的设备中处理通信报文的系统和方法。
背景技术
这里提供的背景技术用于一般性地呈现本公开的上下文的目的。当前所称的发明人的工作在本背景技术章节中描述该工作的程度上,以及在提交时可能不会被另外认定为现有技术的本描述的方面,既不明确地也不隐含地被承认为相对于本公开的现有技术。
诸如网络交换机、路由器、边缘设备等的一些网络设备采用并行报文处理,其中多个可编程报文处理元件同时地且并行地对不同报文执行各种处理操作。在其它网络设备中,流水线架构采用顺序布置的可编程报文处理元件,使得在流水线中的不同报文处理元件可以在给定时间处理不同报文。在一些这样的系统中,处理元件占用各种外部资源,诸如硬件加速器,以便对报文执行特定的处理操作。在这样的系统中,在通过网络设备处理报文时有效地利用相应的报文处理元件和将时延最小化是很重要的。网络设备需要有效执行的一种类型的操作是基于报文中的信息来生成一个或更多个查找密钥,随后对报文执行各种报文处理操作时利用该查找密钥。
发明内容
在一个实施例中,一种用于在网络设备中处理报文的方法,所述方法包括:通过执行存储在非瞬态计算机可读存储介质中的计算机可读指令的可编程处理单元来解析报文。解析报文包括:通过执行存储在非瞬态计算机可读存储器中的指令来标识在报文头内的一个或更多个协议层,通过执行存储在非瞬态计算机可读存储器中的指令来标识协议头在报文头内的相应位置,所述相应位置对应于标识的相应的一个或更多个协议层,以及将标识的协议头在报文头内的相应位置提供给硬件密钥生成器块,所述硬件密钥生成器块被配置成至少基于包括在报文中的信息来生成用于报文的一个或更多个密钥。所述方法还包括:通过所述密钥生成器块并使用标识的相应位置来生成与报文对应的查找密钥。生成查找密钥包括:使用标识的协议头的位置来从对应的协议头中提取一个或更多个字段,以及生成查找密钥以包括所述一个或更多个字段。所述方法还包括:将查找密钥提供至查找引擎;以及通过查找引擎并基于查找密钥来执行关于报文的查找操作。
在另一个实施例中,一种网络设备包括:多个网络端口,被配置成在网络上接收和发送报文。所述网络设备还包括一个或更多个报文处理节点。所述一个或更多个报文处理节点分别包括:处理单元,被配置成执行存储在非瞬态计算机可读存储介质中的计算机可读指令,以及硬件密钥生成器块,被耦合到报文处理节点。存储在非瞬态计算机可读存储介质中的计算机可读指令在由处理单元执行时使处理单元解析报文,以标识在报文头内的至少第一协议层并且标识与第一协议层对应的协议头在报文头内的位置。硬件密钥生成器块被配置成:使用标识的位置从协议头中提取一个或更多个头字段,以及生成查找密钥以包括一个或更多个头字段。网络设备还包括:查找引擎,被耦合到密钥生成器块,查找引擎被配置成基于查找密钥对报文执行查找操作。
附图说明
图1是根据一个实施例的被配置成采用本发明的灵活报文解析和密钥生成技术的示例网络设备10的简化框图。
图2A-2D是根据一个实施例的网络设备支持和/或被配置成支持的多个示例报文格式的图。
图3A是根据一个实施例的用于存储网络设备处理的报文的示例存储器的图。
图3B是根据一个实施例的示例密钥分段字段的图,该密钥分段字段标识将包括在针对网络设备正在处理的报文而生成的密钥中的示例头字段。
图3C是根据另一个实施例的另一个示例密钥分段字段的图,该密钥分段字段标识将包括在针对网络设备正在处理的报文而生成的密钥中的示例头字段。
图4是根据一个实施例的示例配置文件表的图。
图5是根据另一个实施例的被配置成采用本发明的灵活报文解析和密钥生成技术的另一个网络设备的框图。
图6是根据一个实施例的与图5的网络设备一起利用的引擎访问点(EAP)的框图。
图7是根据一个实施例的与图5的网络设备一起利用的报文处理节点700的框图。
图8是根据一个实施例的用于在网络设备中处理报文的另一个示例方法的流程图。
具体实施方式
图1是根据一个实施例的被配置成采用本发明的灵活报文解析和密钥生成技术的示例网络设备10的简化框图。网络设备10一般为计算机网络设备,其连接两个或更多个计算机系统、网络分段、子网络等。例如,网络设备10在一个实施例中是交换机。然而,应注意,网络设备10不必受限于特定协议层或特定组网技术(例如以太网)。例如,网络设备10也可以是网桥、路由器、VPN集线器等。
网络设备10包括耦合到多个网络端口12的可编程报文处理器11,且每个网络端口12又经由相应的通信链路耦合到通信网络和/或通信网络内的另一个合适的网络设备。一般来说,报文处理器11被配置成处理经由入口端口12接收的报文,以确定将传输报文的相应入口端口12,以及经由确定的入口端口12来传输报文。在一些实施例中,报文处理器11处理与报文相关联的报文描述符而不是处理报文本身。在一个实施例中,报文描述符包括来自报文的一些信息,诸如报文头信息的全部或一些,和/或包括网络设备10为报文生成的信息。在一些实施例中,报文描述符也包括其它信息,诸如在与网络设备10相关联的存储器中报文存储在哪里的指示符。为了便于解释,本文的术语“报文”用来指报文本身或者指与报文相关联的报文描述符。
在一个实施例中,在报文的处理期间,报文处理器11基于包括在报文中的信息和/或与报文相关联的信息来生成一个或更多个密钥,且基于该一个或更多个密钥来确定将关于报文执行的一个或更多个处理操作,诸如捕获报文或者将报文镜像到另一个处理器(未示出)以便进一步分析、抛弃或丢弃报文、确定转发报文所经由的合适端口12、更新用于负责报文的计量计数器等。在一个实施例中,为了生成用于报文的密钥,报文处理器11从报文头提取一个或更多个字段,且在为报文生成的密钥中包括提取的一个或更多个字段的值。在一些实施例中,字段在报文头中的位置取决于各种因素,诸如报文内协议层封装的编号、封装在报文内的协议的类型、在报文头中出现或未出现特定标记诸如虚拟局域网(VLAN)标记、报文头中多协议标签交换(MPLS)标签的数目等。由此,在各个实施例中,为了生成用于报文的密钥,报文处理器11先确定一个或更多个字段在报文头中的位置,然后使用确定的位置从报文头中提取该一个或更多个头字段。
在一个实施例中,字段在特定协议层头中的位置相对于报文内特定协议层头的开始来设置或预定。然而,在至少一些实施例中,特定协议层头的开始取决于各种因素,诸如报文中特定协议层头之前的其它协议层头的数目、类型和/或长度。在一个实施例中,报文处理器11标识报文头内的一个或更多个协议层,并确定相对于报文的开始与对应协议层头的相应开始位置对应的偏移。然后,为了生成用于报文的密钥,报文处理器11使用确定的协议层头的开始的位置作为至协议层头中的锚点,并且使用与协议层头中特定字段的位置对应的相对于协议层头的开始的预定偏移,来从特定协议层头中提取该特定字段。
报文处理器11包括处理单元14和密钥生成器块16。处理单元14耦合到数据存储器17和程序存储器18。在一个实施例中,数据存储器17用来临时存储与报文处理器11正在处理的报文相关联的信息。例如,在一个实施例中,数据存储器17存储与报文处理器11正在处理的报文相关联的报文描述符。在一个实施例中,数据存储器17还存储在报文处理器11的报文处理期间为报文生成的数据或信息,诸如报文处理器11关于报文将执行的处理操作的指示。在一个实施例中,程序存储器18存储由处理器可执行的计算机可读指令。
在一个实施例中,处理单元14被配置成通过执行存储在程序存储器18中的计算机可读指令来处理报文。在一个实施例中,处理单元14是微处理器。在另一个实施例中,处理单元14是除了微处理器以外的合适处理单元。另一方面,使用一个或更多个专用集成电路(ASIC)或其它硬件部件来实现密钥生成器块16。
在一个实施例中,处理单元14执行计算机可读指令来标识报文头内的协议层,并确定对应协议层头在报文头内的相应位置。在一个实施例中,处理单元14通过执行状态机来标识报文中的协议层和/或确定报文头内的协议层头位置,根据所述状态机基于报文中特定协议层头之前的协议层头中的一个或更多个头字段来确定报文内特定协议层和/或特定协议层头的位置。在一个实施例中,然后,处理单元14将确定的协议层头位置提供至密钥生成器块16。密钥生成器块16利用确定的协议层头位置来获得协议层头中的字段值,例如通过访问数据存储器17中存储对应字段的适当存储器位置。
在一个实施例中,处理单元14通过更新密钥生成器块16可访问的通用锚点22的值,来将确定的协议层头位置提供给密钥生成器块16。例如,报文处理器11包括一个或更多个寄存器或者存储器位置,用于存储在处理单元14的报文处理期间确定的协议层头的开始位置所对应的锚点的值。在一个实施例中,为了从特定协议层头的字段检索信息,密钥生成器块16获得指示处理单元14标识的特定层头的开始位置的值,并将所述值用作特定层头中的锚点。为了便于解释,如本文所使用的那样,术语“锚点”或“通用锚点”可以被互换使用来表示特定协议层头的位置(例如特定协议层头的开始)以及用于存储对特定协议层头的位置的指示的寄存器或存储器位置。在一个实施例中,密钥生成器块16利用确定的协议层头位置来从报文头中检索适当的协议层头字段。
在图1的示例实施例中,报文处理器11包括三个通用锚点22、第一通用锚点22-1、第二通用锚点22-2和第三通用锚点22-3。在一个实施例中,三个通用锚点22允许报文处理器11使得报文内正在被报文处理器11处理的高达三个协议层对于密钥生成器块16可用。在其它实施例中,报文处理器11包括其它合适的数目(例如,1、2、4、5、6、7、8等)。在一些这样的实施例中,更多数目的通用锚点22允许报文处理器11使得报文内正在被报文处理器11处理的更多数目的协议层头对于密钥生成器块16可用,至少在一些实施例中,允许密钥生成使用正在被报文处理器11处理的报文的更深协议层的字段。
在一个实施例中,通用锚点22没有全局对应于任意的特定协议层头。相反,在一个实施例中,处理单元14基于在处理单元14的报文处理期间在报文中标识的协议层来更新通用锚点22的值。由此,在示例实施例中,特定通用锚点22对应于处理单元14处理的第一报文的第一协议层,且对应于处理单元14处理的第二报文的第二协议层。例如,在示例实施例中,通用锚点(例如通用锚点22-1)指示处理单元14处理的第一报文的因特网协议(IP)头的位置,且指示处理单元14处理的第二报文的MPLS头的位置。此外,在一些实施例和/或场景中,例如在处理单元14在执行报文的隧道终结处理之后再解析报文时,处理单元14在报文处理期间不止一次地更新通用锚点22中的一个或更多个通用锚点22的值。在这样的实施例和/或场景中,通用锚点22在报文处理的不同阶段可以对应于报文内的不同协议层头。例如,在一些实施例中,在报文头的隧道终结之前执行报文解析时,通用锚点22(例如通用锚点22-1)指示因特网协议(IP)头的位置,而在报文头的隧道终结处理之后执行报文解析后,通用锚点22指示MPLS头的位置。
因为处理单元14通过执行计算机可读指令来解析报文以标识报文内的协议层和协议头的位置,处理单元14被配置成处理符合包括将来开发的协议的任意网络协议或者任意网络协议的组合的报文。在各个实施例中,在报文处理期间相对不频繁地执行这种方式的报文解析。例如,在一个示例实施例或场景中,这种方式的报文解析仅仅在报文处理期间执行一次。在另一个示例实施例或场景中,这种方式的报文解析在报文处理期间执行两次,第一次是在报文头的隧道终结处理之前,第二次是在报文头的隧道终结处理之后。在另一个实施例中和/或场景中,这种方式的报文解析在报文处理期间被执行其它合适的次数(例如3、4等)。另一方面,在至少一些实施例中,密钥生成在报文处理期间相对更为频繁地执行以便在关于报文执行各种处理操作时使用。在一个实施例中,因为通过硬件密钥生成器块16来执行头字段提取和密钥生成,与通过执行计算机可读指令来执行字段提取和/或密钥生成的系统诸如在根据计算机可读指令的报文解析期间相比,可以更快地执行头字段提取和密钥生成。在至少一些实施例中,使用计算机可读指令来解析报文以标识报文头中的协议层头的位置,为报文处理器11提供了支持各种报文格式的灵活性,包括将来开发的报文格式。此外,至少在一些实施例和/或场景中,使用硬件实现的密钥生成器块来执行头字段提取和密钥生成减少了报文处理单元14的处理负载且允许报文处理器11更快地处理报文和对进入网络设备10的报文流引入更少的处理时延。
在一个实施例中,密钥生成器块16包括或者耦合到配置文件表20。配置文件表20包括多个条目,每个条目对应于密钥生成器块16可以生成的特定密钥,诸如前向查找密钥、最长前缀匹配(LPM)密钥、策略控制列表(PCL)密钥等。在一个实施例中,例如,配置文件表20的对应于密钥的条目包括对将包括在密钥的一个或更多个分段中的一个或更多个头字段的指示。在一个实施例中,通过与从中将获得头字段的协议层头对应的锚点以及头字段相对于协议层头对应的锚点的偏移,来在配置文件表20中标识将包括在密钥中的每个头字段。在一个实施例中,为了生成密钥,密钥生成器块16访问配置文件表20中的与密钥对应的条目,其中所述条目向生成器块16指示哪个通用锚点22应被用于检索将包括在密钥中的适当头字段。在一个实施例中,密钥生成器块16利用所述条目指示的通用锚点22的值以及关于通用锚点22的值的偏移,来从报文头中检索适当头字段。在一个实施例中,通用锚点22的值依赖于报文处理器11处理的特定报文,且针对报文处理器11处理的不同报文而不同。在一个实施例中,因为通过处理单元14更新了通用锚点22的值来指示密钥生成器块16正为其生成密钥的特定报文中的协议层头的位置,密钥生成器块16从特定报文内的正确位置提取信息。以下参考图2A-2D描述根据一些实施例的一些示例格式以及符合该示例报文格式的报文内的协议层和协议层头位置的标识。
在一些实施例中,处理单元14被配置成在一些情况下重写将包括在密钥中的一个或更多个字段。在一个实施例中,为了重写将被包括在密钥中的字段,处理单元14向密钥生成器块16提供与将包括在密钥中的新的头字段对应的头字段信息,诸如锚点和偏移信息。例如,在一个实施例中,报文处理器11包括密钥生成器块16可访问到的一个或更多个“密钥分段重写”寄存器或存储器位置(未示出)。在这个实施例中,为了提供与要用于特定密钥的密钥分段对应的新信息,处理单元14利用与要包括在密钥分段中的新的头字段对应的信息来更新密钥分段重写寄存器的值。在一个实施例中,密钥生成器块16然后利用处理单元14提供的该新信息来代替存储在配置文件表20中的对应信息来生成密钥。
在一个实施例中,在生成用于报文的密钥后,密钥生成器块16向引擎24(例如查找引擎)提供密钥。在一个实施例中,引擎24基于密钥(例如从存储器中的表)获得对报文处理器11关于报文要执行的处理操作的指示。在一个实施例中,报文处理器11(例如报文处理器11的处理单元14)关于报文执行指示的处理操作。
图2A-2D是根据一个实施例的图1的网络设备10支持和/或被配置成支持的多个示例报文格式50-90的图。在其它实施例中,图1的网络设备10支持和/或可配置成支持仅示例报文格式50-90中的一些格式,和/或被配置成和/或可配置成支持除了示例报文格式50-90以外的合适报文格式。先看图2A,报文格式50对应于封装因特网协议(IP)诸如IP版本4(IPv4)或IP版本6(IPv6)的以太网报文、封装传输控制协议(TCP)报文的报文。在一个实施例中,报文格式50的头51包括以太网头52,随后是IP(例如IPv4或IPv6)头54,随后是TCP头56。在一个实施例中,处理单元14根据解析状态机在符合报文格式50的报文中标识协议层头52-56,所述解析状态机通过读取头52-56的各个字段的值并且根据头字段的值来更新解析器状态而操作。在一个实施例中,处理单元14标识头51内的特定协议层并且基于在头51中的特定协议层之前的一个或更多个协议层头中的一个或更多个字段来确定对应协议层头在头51内的位置。在一个实施例中,与报文格式对应的初始报文类型被预定且对报文格式50进行操作的解析器状态机已知初始报文类型。在一个实施例中,例如,网络设备10是以太网交换机。在这个实施例中,处理单元14被配置成解析各种以太网报文类型。在这个实施例中,初始头类型(这种情况下为以太网)被固定为解析状态机的初始状态。
在一个实施例中,处理单元14基于以太网头52中的字段值确定IP头(例如,IPv4头或IPv6头)在以太网头52之后。在一个实施例中例如,以太网头字段52包括以太类型字段,其指示在以太网头52之后的协议层(在这种情况下,IP层)。在这个实施例中,处理单元14基于头52的以太类型字段的值标识IP头54在以太网头52之后。另外,处理单元14确定IP头54的位置。例如,处理单元14确定IP头54的开始(例如,第一字节)关于报文的开始(例如,第一字节)的偏移。在一个实施例中,IP头54的偏移依赖于以太网头52的长度。在一个实施例中,以太网头52的长度例如基于出现或者没出现诸如VLAN标记的各种标记而变化。处理单元14基于在以太网头52中出现或者没出现VLAN标记和/或以太网头52中的VLAN标记的数目来确定以太网头52的长度,并且确定IP头54的位置作为与以太网头52的长度对应的从报文开始的偏移。在确定IP头54的位置后,处理单元14更新第一锚点22的值来指示确定的IP头54的位置。在一个实施例中,例如,处理单元14更新第一锚点22-1的值来指示确定的与IP头54对应的偏移。
在一个实施例中,处理单元14通过分析IP头54的适当字段来继续报文的解析。在一个实施例中,处理单元14基于IP头54中的一个或更多个字段确定IP头54之后是TCP头56。例如,IP头54包括被设置成指示TCP作为报文中的下一协议的“下一协议”字段。在一个实施例中,处理单元14基于IP头54的下一协议字段的值来确定TCP头56在IP头54之后。在一个实施例中,处理单元14还确定TCP头56的位置。在一个实施例中,例如,处理单元14确定TCP头56的位置作为TCP头56的开始关于报文的开始的偏移。在一个实施例中,处理单元14基于IP头54中的“长度”字段来确定IP头54的长度,并且将TCP头56的偏移确定作为IP头54的与第一锚点22-1的值对应的偏移与确定的IP头54的长度的数学和。在确定TCP头56的位置后,处理单元14更新第二锚点22的值以指示确定的TCP头56的位置。在一个实施例中,例如,处理单元14更新第二锚点22-2的值以指示确定的与TCP头56对应的偏移。
现在参加图2B,报文格式60包括以太网层,以太网层封装多协议标签交换层、封装IP层、封装TCP层。报文格式60包括头61,头61包括以太网头62、随后是MPLS头64、随后是IP头66、随后是UDP头68。在一个实施例中,处理单元14以与解析符合报文格式50的报文的方式类似的方式,来解析符合报文格式60的报文。在一个实施例中,处理单元14基于以太网头62的以太类型字段来确定以太网头62之后是MPLS头64,所述以太类型字段指示MPLS是跟着以太网头62的协议层。在一个实施例中,以太网头的以太类型字段也指示MPLS头64之后是IP头66。在另一个实施例中,MPLS头指示IP头66在MPLS头64之后。在一个实施例中,IP头66包括“下一协议”字段,该字段指示UDP协议作为包括中的下一层协议。处理单元14基于IP头66的“下一协议”字段确定IP头66之后是UDP头68,并且确定UDP头68的位置。在一个实施例中,处理单元14将UDP头68的位置确定为UDP头68的开始从报文的开始的偏移。在一个实施例中,处理单元14将偏移确定为IP头66的开始(即,第二锚点22-2的值)与IP头66中的长度字段指示的IP头66的长度的数学和。在一个实施例中,处理单元64然后更新诸如锚点22-3的第三锚点的值,以指示确定的UDP头68的偏移。
现在转到图2C,报文格式70对应于隧道终结的报文。具体来说,在图3C的示例实施例中,以太网封装的IP封装TCP报文在封装多链接透明互联(TRILL)协议报文的以太网内被隧穿。报文格式70包括含第一以太网头72的报文头71、随后是TRILL头74、随后是第二以太网头76、随后是IP头78、随后是TCP头80。在一个实施例中,以类似于符合上述报文格式300的报文的方式,处理单元14处理符合报文格式70的报文。在一个实施例中,处理单元14标识头71内的协议层,确定对应协议头在头71内的位置(例如,关于报文的开始的偏移),以及更新通用锚点22来指示确定的协议层在头71中的位置。在一个实施例中,处理单元14标识头71内的特定协议层,且基于头71中的特定协议层之前的一个或更多个协议层头中的一个或更多个字段来确定对应协议层头在头71内的位置。在确定协议层头在头71中的位置后,处理单元14更新通用锚点22的值来指示协议层头在头71中的位置。例如,在一个实施例中,处理单元14更新第一锚点22-1来指示TRILL头74的位置,更新第二锚点22-2来指示第二以太网头76的位置,并且更新第三锚点22-2来指示IP头78的位置。
在一些实施例中,处理单元14通过从报文头71去除以太网头72和TRILL头74来关于符合报文格式70的报文执行隧道终结。在一些这样的实施例中,处理单元14然后解析隧道终结的报文,以在隧道终结的头中标识协议层和确定协议层头的位置。在一个实施例中,处理单元14更新通用锚点22的值来指示根据隧道终结的头的解析而确定的协议头位置。在一个实施例中,例如,处理单元14更新第一锚点22-1来指示确定的IP头78的位置,更新第二锚点22-2来指示确定的TCP头80的位置。在一个实施例中,密钥生成器块16随后使用锚点22的新更新的值来生成用于报文的密钥,以从对应的协议层头(例如,从TCP头80)中检索字段。
现在转到图2D,报文格式90对应于具有协议X、Y、Z和W的一般格式报文,其中协议X是网络设备10的默认外部协议。报文格式90包括报文头91,报文头91包括第一协议层头X92,随后是第二协议层头Y94,随后是第三协议层头Z96,随后是第四协议层头W98。在一个实施例中,以类似于以上关于报文格式50、60和70讨论的格式,处理单元14确定每个协议层Y、Z和W的标识和/或确定与协议层Y、Z和W对应的协议层头94-96中的每个头的位置。例如,处理单元14基于在协议层Y、Z和Y之前的协议层头(或多个协议层头)中的一个或更多个字段,来确定每个协议层Y、Z和W的标识和/或确定与协议层Y、Z和W对应的协议层头94-96中的每个头的位置。在一个实施例中,处理单元14更新锚点22的值来指示确定的与协议层Y、Z和W对应的协议层头94-96的位置(例如,关于报文开始的偏移)。在一个实施例中,例如,处理单元14更新第一锚点22-1的值来指示确定的与协议层Y对应的头94的位置,更新第二锚点22-2来指示确定的与协议层Z对应的头96的位置,并且更新第三锚点22-3来指示确定的与协议层W对应的头98的位置。
在这个实施例中,密钥生成器块16随后生成用于报文的一个或更多个密钥,其中生成用于报文的密钥包括执行下列中的一项或更多项:使用作为至头94中的锚点的第一锚点22-1的值,从头94中提取一个或更多个字段;使用作为至头96中的锚点的第一锚点22-2的值,从头96中提取一个或更多个字段;和/或,使用作为至头96中的锚点的第一锚点22-3的值,从头98中提取一个或更多个字段。
回到图1,在一些实施例中,网络设备10包括报文解析引擎26。在一个实施例中,使用一个或更多个专用集成电路(ASIC)或其它硬件组件来实现报文解析引擎26。在一个实施例中,解析引擎26被配置成识别通过网络设备10支持的报文格式中的至少一些格式。例如,在一个实施例中,解析引擎26被配置成识别上述报文格式50-90中的一个或更多个格式。在一个实施例中,报文解析引擎26在报文被提供到处理单元14之前解析报文。在一个实施例中,报文解析引擎26标识报文头内的一个或更多个协议层,且确定在报文头内的对应协议层位置。在一个实施例中,报文解析引擎26利用报文解析引擎26标识的协议层头位置来更新一个或更多个通用锚点,和/或例如通过在与报文对应的报文描述符内包括对标识的位置的指示来将标识的协议头位置与报文相关联。在一些实施例中,处理单元14而不是解析引擎26,基于包括在报文描述符中的对报文解析引擎26标识的协议头位置的指示,利用报文解析引擎26标识的协议头位置来更新一个或更多个通用锚点。在一些实施例中,解析引擎26解析报文加速了符合至少一些(例如已知的)报文格式的报文的解析,且从处理单元14卸载这样的报文的解析。在一些实施例中,随后,在处理单元14的报文处理期间,例如如果处理单元14确定解析引擎26不正确地确定了通用锚点22中的一些或全部的值,则处理单元14更新这些值。
图3A是根据一个实施例的用于存储网络设备(诸如图1的网络设备10)处理的报文的示例存储器300的图,以及从存储器300检索特定字段的示例场景。在所示的例子中,从存储在存储器300中的报文的IPv4协议层头提取会话发起协议(SIP)字段。在一个实施例中,存储器300对应于图1的网络设备10的数据存储器17。在另一个实施例中,数据存储器300与其它合适的网络设备一起使用。作为一个例子,在所示实施例中,存储器300是四字节宽。在其它实施例中,存储器300具有其它合适的宽度。
在一个实施例中,所处理的报文的第一字节存储在存储器300的位置302。例如,在一个实施例中,报文的第一字节与报文头内的以太网头的开始对应。此外,在所示实施例中,IP头(例如IPv4头)的第一字节位于存储器300的存储器位置304,且报文的IPv4头的SIP字段的第一字节存储在存储器300的存储器位置306。
在示例场景中,密钥生成器块16接收用于特定引擎操作(例如查找操作)的请求,所述操作将基于为存储在存储器300中的报文生成的密钥而执行。在一个实施例中,请求包括标识配置文件表20中与请求的处理操作对应的条目的索引。在一个实施例中,密钥生成器块16访问配置文件表20且从配置文件表20中检索索引的条目。在一个实施例中,检索的配置文件表20的条目包括一个或更多个密钥分段字段,该字段标识要包括在密钥中的要从报文头提取的一个或更多个字段。图3B是根据一个实施例的示例密钥分段字段350的图,所述密钥分段字段350标识要包括在密钥中的示例头字段。在一个实施例中,从配置文件表20检索的条目包括一个或更多个密钥分段字段,诸如分段字段350。在图3B的示例实施例中,密钥分段字段350从报文的IPv4协议层头标识会话发起协议(SIP)字段。在一个实施例中,密钥分段字段350包括:基本地址子字段352,其指示数据存储器17中的报文的第一字节的存储器位置;锚点子字段354,其指示哪个通用锚点22(例如通用锚点22-1)用于从报文的IPv4头提取SIP字段;偏移子字段356,其指示与报文的IPv4头中的SIP字段的第一字节对应的关于IPv4协议层头的第一字节的偏移(例如,字节数目);以及长度子字段358,其指示IPv4头中的SIP字段的长度(例如,字节数目)。图3C是根据另一个实施例的另一个示例密钥分段字段360的图,所述密钥分段字段标识要包括在密钥中的示例头字段。在图3C的实施例中,密钥分段字段360将基本地址子字段352与偏移子字段354组合到单个基本地址子字段362中,所述单个地址基本子字段362指示基本地址子字段352的值与偏移子字段356的值的数学和。
再次参照图3A,在一个实施例中,锚点子字段354中指示的锚点值在处理单元14解析报文期间被设置,以指示IPv4头的第一字节从报文开始的偏移。在图3的示例场景中,锚点子字段354(例如,锚点22-1的值)指示的锚点值是18。此外,在所示的实施例中,偏移子字段356的值是12。在一个实施例中,生成器块16确定SIP字段关于报文第一字节的偏移是锚点字段354指示的锚点值与偏移字段356的值的和(在这种情况下,12+18=30)。可替选地,在一个实施例中,如果使用图3C的密钥分段字段格式360,密钥生成器块16将SIP字段的第一字节的存储器位置306确定为基本地址字段362的值与锚点子字段354指示的锚点值之和。在一个实施例中,为了从报文的IPv4头检索SIP字段,密钥生成器块16从基本地址子字段352中指示的地址检索在确定的偏移处(例如30字节)开始的长度子字段358中指示的字节数(例如4字节)。
图4是根据一个实施例的示例配置文件表400的图。配置文件表400包括多个条目,每个条目对应于可以在网络设备(诸如图1的网络设备10)的报文处理期间生成的特定密钥,诸如前向查找密钥、最长前缀匹配(LPM)密钥、策略控制列表(PCL)密钥等。例如,在一个实施例中,配置文件表20的对应于密钥的条目包括对要包括在密钥中的一个或更多个分段中的一个或更多个头字段的指示,以及关于密钥的其他信息,诸如被配置成基于密钥来执行处理操作(例如查找操作)的加速器引擎的指示、存储基于密钥执行的处理操作的结果的存储器位置等。在一个实施例中,配置文件表400对应于图1的网络设备10的配置文件表20。在另一个实施例中,示例配置文件表400与另一合适的网络设备一起使用。
在一个实施例中,依赖于密钥的大小,配置文件表400中与特定密钥对应的条目占据配置文件表400的一行或更多行。例如,在图4的实施例中,条目410占据配置文件表400的k行,且条目410-x和410-z中的每个条目占据配置文件表400的单个行。在一个实施例中,每个条目的与密钥对应的(或者与包括密钥的交易对应的)第一行还包括一般信息字段404和答复地址字段406。一般信息字段404包括关于交易的一般信息,诸如被配置成执行交易请求的特定类型的处理操作的引擎(例如,加速器引擎506)的标识符。答复信息字段406指示当从引擎接收到结果时在哪里存储处理操作的结果。例如,在一个实施例中,响应字段指示存储器位置的地址,诸如在当从引擎接收结果时将存储处理操作结果的数据存储器17(图1)中的存储器位置。
在一个实施例中,配置文件表400的每行包括一个或更多个密钥分段字段408,该字段指定哪个信息要被包括在为交易而生成的密钥的一个或更多个分段中。在一个实施例中,每个密钥分段字段408被格式化为图3B的示例密钥分段字段350。在另一个实施例中,每个密钥分段字段408被格式化为图3C的示例密钥分段字段360。在一个实施例中,配置文件表400的每行被配置成保持最大数目x个密钥分段字段408。例如,对应于交易的条目的第一行被配置成保持最大两个密钥分段字段408,且后面对应于条目的每行(如果有的话)包括最大三个密钥分段字段408。在图4的示例实施例中,条目410-1的第一行412-1包括两个密钥分段字段408,且行412-2至412-k中的每个包括三个密钥分段字段408。在所示实施例中,配置文件表400的条目410-x包括单个行412-m,其包括两个密钥分段字段408。条目410-z包括单个行412-w,该行只包括一个密钥分段字段408。在所示实施例中,行412-w中的第二密钥分段字段不保持任何信息,如在第二密钥分段字段中的“非有效”所示。
在一个实施例中,配置文件表400的每行包括“最后”字段402,其指示所述行是否是配置文件表400的最后一行条目。在一个实施例中,例如,配置文件表400中的行的字段402中为1的逻辑值(1)指示所述行是配置文件表400的特定条目的最后一行,且表400中的行的字段402中为0的逻辑值(0)指示所述行不是配置文件表400的特定条目的最后一行,或反之亦然。例如,示例配置文件表400的条目410-1包括k行412。在所示的实施例中,除了最后一行412-k以外,k行412中的每行的相应“最后”字段402指示对应的行不是条目410的最后一行,如行412中除了行412-k以外的每个行的“L=0”所示。在所示的实施例中,行412-k的“最后”字段402指示行412-k是条目410的最后一行,如行412-k的“L=1”所示。在一个实施例中,为了从配置文件表400检索特定条目,密钥生成器块(例如图1的密钥生成器块16)提取与条目对应的第一行,且基于条目第一行的“最后”字段402的值来确定检索的第一行是否是条目的最后一行。如果密钥生成器块确定第一行不是条目的最后一行,则密钥生成器块检索配置文件表400中的后续行,且基于后续行的“最后”字段来确定后续行是否是条目的最后一行。在一个实施例中,密钥生成器块继续检索配置文件表400的后续行,直到密钥生成器块检索到条目的最后一行,且基于检索到的行的“最后”字段402来确定检索到的行是条目的最后一行。
因为与相对较长密钥对应的密钥分段字段402分布在配置文件表400的多行之中,配置文件表400的每行不需要适应配置文件表400支持的最长密钥(例如,具有最大数目分段的密钥)。作为结果,在至少一些实施例中,与配置文件表400被配置成每行能够保持配置文件表400支持的最长密钥的所有分段的系统相比,分散分布与相对较长密钥对应的密钥分段字段402导致用于存储配置文件表400的存储器的更好利用。
图5是根据另一个实施例的被配置成采用本公开的灵活报文解析和密钥生成技术的另一个网络设备500的框图。网络设备500类似于网络设备10,除了网络设备500的报文处理器501包括多个可编程报文处理节点504,而不是图1的报文处理器11的单个处理单元14。在一个实施例中,PPN 504被配置成同时并行地对网络设备500经由端口12接收的报文执行处理。报文处理器501还包括多个加速度引擎506。加速度引擎506被配置成关于PPN 504处理的报文执行某些处理操作。在一个实施例中,PPN 504被配置成选择性地占用外部引擎506,以便关于PPN 504正处理的报文执行某些处理操作。例如,加速度引擎506被配置成基于为报文生成的密钥(例如查找操作)关于报文执行处理操作。在一个实施例中,多个加速度引擎506包括一个或更多个与图1的引擎24相同或类似的查找引擎。
在图5的实施例中,报文处理节点504被布置在多个报文处理集群(PPC)505中。在一个实施例中,集群505的PPN 504共享网络设备500的某些资源。例如,每个PPC 505包括被PPC 505中的PPN504共享的相应的共享程序存储器508、相应的引擎访问点(EAP)510以及相应的密钥生成器块514。在一个实施例中,集群505的共享程序存储器508存储用于对报文执行处理操作的计算机可读指令,且集群505中的PPN 504执行计算机可读指令以处理提供给集群505进行处理的报文。在一个实施例中,集群505中的EAP 510用作集群505中的PPN 504和加速度引擎506之间的接口。在一个实施例中,例如,EAP 510被配置成管理集群505的PPN504和加速器引擎506之间的交易。在一个实施例中,密钥生成器块514被配置成生成用于正被PPN 504处理的报文密钥,以提供到外部加速器引擎506。虽然图5中示出了密钥生成器块514与EAP 510分开,但在一些实施例中,密钥生成器块514也可以包括在EAP 510中。可替选地,在一些实施例中,相应的密钥生成器块514被包括在PPN 504中的每个PPN内,且可以负责生成用于相应PPN 504正在处理的报文的密钥。
根据一个实施例中,集群505的PPN 504被配置成执行存储在程序存储器508中的计算机可读指令,以处理被提供到集群505的PPN504进行处理的报文。在一个实施例中,每个PPN 504被配置成执行报文的多个不同处理操作。在一些实施例中,每个PPN 504被配置成执行报文的所有必需的处理(进行到完成处理),或者执行至少一部分的报文处理。另一方面,在一个实施例中,加速度引擎506使用专用集成电路(ASIC)或其它硬件部件来实现,且每个加速度引擎506专用于执行单个的通常为处理密集的操作。仅作为例子,在一个示例实施例中,第一加速度引擎506(例如引擎506a)是前向查找引擎,第二加速度引擎506(例如引擎506x)是策略查找引擎,第三加速度引擎506(例如引擎506c)是循环冗余校验(CRC)计算引擎等。
在报文处理期间,PPN 504选择性地占用加速度引擎506,用于对报文执行特定处理操作。在至少一些实施例中,PPN 504没有被配置成执行加速度引擎506被配置执行的特定处理操作。在至少一些实施例和/或场景中,加速度引擎506被配置执行的特定处理操作通常是高资源密集的和/或如果所述操作使用更通用的处理器(诸如PPN 504,或包括在PPN504中的更通用的处理器)来执行则将需要相对较长的时间来执行。在至少一些实施例中,采用用于执行特定处理操作的加速度引擎506减少了网络设备10所需的PPN 504的数目和/或大小,例如,以便网络设备10支持某个带宽或线速。在至少一些实施例和场景中,PPN 504需要花明显更长的时间(例如,两倍、十倍、500倍等)来执行加速度引擎506被配置执行的处理操作。这样,在至少一些实施例和场景中,加速度引擎506通过加快至少一些将要花很长时间由PPN 504执行的处理操作来辅助PPN 504。因而,加速度引擎506在本文中有时被称作“加速器引擎”。在一个实施例中,PPN 504被配置成利用加速度引擎506执行的处理操作的结果来进一步处理报文,例如,确定要关于报文采取的某些动作,诸如前向动作、策略控制动作等。
在一个实施例中,PPN 504被配置成执行存储在共享存储器508中的计算机可读指令,以解析报文来标识报文头内的协议头位置,如以上关于图1的处理单元14所述的那样。在一个实施例中,例如,PPN 504的报文处理单元515执行存储在共享存储器508中的计算机可读指令,以解析报文来标识报文头内的协议头位置。在一个实施例中,PPN 504的报文处理单元515与图1的处理单元14相同或类似。在一个实施例中,例如,报文处理单元515是微处理器。在另一个实施例中,报文处理单元515是另一合适的处理设备。
在一个实施例中,PPN 504被配置成提供标识的协议头位置给密钥生成器块514。例如,在一个实施例中,每个PPN 504包括多个通用锚点516。在一个实施例中,通用锚点516对应于图1的通用锚点22。在一个实施例中,PPN 504的处理单元515基于为PPN 504正在处理的报文标识的协议层位置来更新通用锚点516。随后,当PPN 504发起与关于报文执行特定处理操作的加速器引擎506的交易时,密钥生成器块514利用PPN 504提供给密钥生成器块514的报文头内的协议头位置来生成密钥以发送给加速器引擎506。在一个实施例中,密钥生成器块514与图1的密钥生成器块16相同或类似。在一个实施例中,以与图1的密钥生成器块16相同或类似的方式,密钥生成器块514利用PPN 504提供的报文头位置来从报文头中检索要包括在密钥中的适当头字段。在另一个实施例中,密钥生成器块514利用PPN 504为报文标识的一个或更多个协议层头位置以另一合适的方式来生成密钥。
在一个实施例中,图5的网络设备500支持和/或被配置成支持以上参考图2描述的示例报文格式50-90。在一些实施例中,以下描述的由图1的网络设备10的处理单元14执行的各种操作由网络设备500的处理单元515来执行。类似地,在一些实施例中,以下描述的由图1的网络设备10的密钥生成器块14执行的各种操作由处理单元515来执行。
虽然在图5中示出了三个PPC 505,但是在其它实施例中网络设备500可以包括其它合适数目(例如,1、2、4、5、6、7等)的PPC 505。在一个实施例中,PPN 504的集群共享网络设备500的某些资源。例如,在一个实施例中,每个PPC 505包括相应的共享程序存储器508。在一个实施例中,被包括在集群505中的共享存储器508耦合到集群505中的每个PPN 504。在一个实施例中,被包括在集群505中的共享存储器508存储用于对报文执行处理操作的计算机可读指令,且在一个实施例中,集群505中的PPN 504被配置成通过执行存储在共享存储器508中的指令来处理报文。在一个实施例中,每个PPC 505还包括相应的引擎访问点510。在一个实施例中,包括在集群505中的引擎访问点510耦合到集群505中的每个PPN504。在一个实施例中,被包括在集群505中的EAP 510用作加速器引擎506和集群505中的PPN 504之间的接口。在一些实施例中,每个PPC 505包括多个程序存储器508和/或多个EAP510,每个程序存储器508和/或EAP 510耦合到PPN 504的子集。此外,在一些实施例中,网络设备500的PPN 504没有被布置在集群中和/或没有共享网络设备500的资源。在一个实施例中,例如,每个PPN 504包括或者耦合到相应的专用程序存储器508和相应的专用EAP 510。
在一个实施例中,报文处理器501还包括分布器单元518和记录器单元520。在一个实施例中,分布器单元518被配置成将经由端口12接收到的报文的处理分布到可用的PPN504。在至少一些实施例和/或场景中,因为报文的处理被分布在多个PPN 504之间,且因为多个PPN 504执行报文的并行处理,PPN 504完成报文处理的顺序并不完全精确对应于网络设备500接收报文的顺序。在一个实施例中,在PPN 504完成报文处理时,PPN 504将报文提供给记录器单元520。在一个实施例中,记录器单元520被配置成至少在进入网络设备500的相同数据流内保持报文的顺序,以确保这些报文按照网络设备500接收报文的顺序从网络设备500发送出去。在一个实施例中,记录器单元520将报文提供给网络设备500要通过其发送报文的适当出站端口12,且网络设备500按照接收报文的顺序从适当出站端口12发送报文。
图6是根据一个实施例的与图5的网络设备500一起利用的引擎访问点(EAP)600的框图。在一个实施例中,EAP 600被用作图5的EAP 510。为了说明目的,参考图5的网络设备500来讨论示例EAP 600。然而在其它实施例中,EAP 600用在与图5的示例网络设备500不同的合适网络设备中。
在一个实施例中,EAP 600对应于报文处理集群,且耦合到包括在报文处理集群中的PPN 504。在一个实施例中,EAP 600包括集群分布器单元602、集群加速器引擎604和集群数据存储器606。集群分布器被配置成通过分布器518来分布提供到报文处理集群的报文的处理,和在集群中可用PPN 504(图5)之间分布处理的报文。在一个实施例中,集群加速器引擎604包括在集群本地的一个或更多个加速器引擎。在一个实施例中,加速器引擎604一般地类似于加速器引擎506,除了加速器引擎604的使用限于集群内的PPN 504以外。在一个实施例中,加速器引擎604被配置成执行不需要存储器访问和/或存储器查找的处理操作,同时加速器引擎506执行需要存储器访问和/或存储器查找的处理操作。例如,在一个实施例中,集群加速器引擎604被配置成执行诸如关于集群505-1中正在处理的报文的循环冗余检查计算和/或其它计算的这些操作。如在本文中所使用的,术语“加速器引擎”和“外部加速器引擎”涵盖加速器引擎506以及集群加速器引擎604。
在一个实施例中,集群加速器引擎604包括报文解析器,被配置成在提供报文给PPN 504之前执行报文的初始解析。例如,在一个实施例中,集群加速器引擎604包括与图1的报文解析器26相同或类似的报文解析器。
在一个实施例中,集群数据存储器606存储集群505-1中的PPN 504公用的信息。例如,在一个实施例中,数据存储器606存储集群505-1中的PPN 504公用的配置信息。在一个实施例中,集群数据存储器606还存储由分布器518提供给集群505-1的报文,直到报文的处理由集群分布器602分布给PPN 504。在一个实施例中,集群数据存储器还存储关于PPN 504正在处理的报文而执行的处理操作的结果,直到结果被提供到请求该处理操作的PPN 504。
在一个实施例中,EAP 600包括配置文件表610和密钥生成器块612。配置文件表610包括多个条目,所述多个条目包括用于处理针对特定处理操作的交易的信息。在一个实施例中,例如,配置文件表610的条目包括用于生成要发送到加速器引擎506以执行特定处理操作的请求的信息。在一个实施例中,配置文件表610的对应于处理操作的条目包括要包括在作为交易的一部分生成的密钥的一个或更多个分段中的一个或更多个字段的指示。在一个实施例中,通过与可以从中获得头字段的协议层头对应的锚点以及头字段相对于锚点的偏移,在配置文件表610中标识要包括在密钥中的每个头字段。在一个实施例中,配置文件表610对应于图1的配置文件表20和/或图4的配置文件表400。
在一个实施例中,为了触发加速器引擎506关于报文执行特定处理操作的,PPN504向EAP 600提供特定处理操作的指示。例如,PPN 504向EAP 600提供与特定处理操作对应的配置文件表610中的条目的索引。EAP 600接收特定处理操作的指示和基于指示来访问配置文件表610(例如使用该指示作为至配置文件表610中的索引),以及从配置文件表610检索操控与加速器引擎506的交易所需的信息。然后,基于从配置文件表610中的条目检索到的信息,EAP 600生成对于处理操作的请求,以及将请求引导到用于执行处理操作的适当的加速器引擎506。在一个实施例中,密钥生成器块612被配置成基于从用于生成密钥的配置文件表610中的适当条目中检索到的信息,来生成对应于处理操作的密钥。在一个实施例中,EAP 600被配置成在被引导到适当的加速器引擎506的请求中包括由生成器块612生成的密钥。在实施例中,密钥生成器块612对应于图1的密钥生成器块16和/或图5的密钥生成器块514。
EAP 600还被配置成从关于报文执行处理操作的加速器引擎506接收交易的响应,所述响应包含处理操作的结果。在一个实施例中,当EAP 600接收交易的结果时,EAP 600使得处理操作的结果被写入到配置文件表610中的条目中指示的存储器位置。
图7是根据一个实施例的用作图5的网络设备500中的PPN 504之一的PPN 700的框图。为了说明目的,示例PPN 700参考图5的网络设备来讨论。然而,在一些实施例中,PPN700可以用在与图5的网络设备500不同的合适的网络设备中。
PPN 700包括处理单元702,处理单元702被耦合到指令预取模块704、数据存储器706和网络访问点(NAP)模块708。在一个实施例中,处理单元702是被配置成执行从一组报文处理操作中选出的报文处理操作的处理设备。在一个实施例中,处理单元702是微处理器。在另一个实施例中,处理单元702是除了微处理器以外的处理单元。在一个实施例中,处理单元702对应于图5的处理单元515。在另一个实施例中,处理单元702是与图5的处理单元515不同的处理单元。
在一个实施例中,报文处理单元702通过执行存储在非瞬态存储器诸如共享程序存储器508中的计算机可读指令来执行报文处理操作。指令预取模块704被配置成从存储器508加载或“预取”指令集,并且处理单元702通过执行预取的指令来操作。在至少一些实施例,与处理单元直接从存储指令的存储器读取指令的系统相比,预取指令集允许处理单元702更快地执行指令。然而在其它实施例中,PPN 700省略预取模块704,且处理单元702通过从存储器508直接读取指令而操作。
在一个实施例中,数据存储器706存储处理PPN 700正在处理的报文所需的信息。在一个实施例中,例如,数据存储器706存储与PPN 700正在处理的报文对应的报文描述符。另外,在一个实施例中,数据存储器706存储在网络设备700的报文处理期间为报文生成的数据。在一个实施例中,处理单元702随后使用网络设备10在报文处理期间为报文生成的数据,以便基于所述数据进一步处理报文。例如,在一个实施例中,在PPN 700从加速器引擎506接收结果时,数据存储器706存储加速器引擎506执行的处理操作的结果。
根据一个实施例,NAP 708被配置成与处理单元702和EAP 600对接,以便触发加速器引擎506关于处理单元702请求的报文执行处理操作。例如,当处理单元702发起用于特定处理操作的交易时,NAP 708将特定处理操作的指示发送给EAP 600。在一个实施例中,然后,EAP 600使用特定处理操作的指示作为至配置文件表610中的索引来访问配置文件表610,并且基于从配置文件表610检索到的信息来生成对于特定处理操作的请求。在一个实施例中,事实上,处理单元702卸载了至EAP 600的对于处理操作的请求的生成。在一个实施例中,NAP 708还被配置成接收加速器引擎506执行的处理操作的结果,且将结果提供给处理单元702。
在一个实施例中,NAP 708包括通用锚点516。在一个实施例中,在确定报文中的协议层头位置后,处理单元702更新通用锚点516的值来指示确定的头位置,如以上关于图5所讨论的。在一个实施例中,NAP 708还包括重写配置文件字段718。在一个实施例中,配置文件重写字段718中的每个字段符合与配置文件表610中的密钥分段字段相同的格式,例如图3B的密钥分段字段350或图3C的密钥分段字段360。在一些实施例和场景中,处理单元702被配置成更新重写配置文件字段718的值来重写以上关于图1的处理单元14描述的密钥的一个或更多个分段。
图8是根据一个实施例的用于处理网络设备中的报文的示例方法800的流程图。在一个实施例中,所述方法800通过图1的网络设备10来实现。在另一个实施例中,所述方法800通过图5的网络设备500来实现。在其它实施例中,所述方法800通过其它合适的网络设备来实现。
在方框802,通过执行存储在存储器中的计算机可读指令的处理单元来解析报文。在一个实施例中,通过图1的网络设备10的处理单元14来解析报文。在另一个实施例中,通过图5的网络设备500的处理单元515来解析报文。在一个实施例中,方框802包括方框804-808。
在方框804,在报文头内标识一个或更多个层。在方框806,标识协议头的相应位置。在一个实施例中,一个或更多个协议头对应于在方框804标识的一个或更多个协议层。在一个实施例中,在方框804的协议层和/或在方框806的协议层头位置基于在报文中的特定协议层头之前的协议层头(或多个协议层头)中的一个或更多个头字段来确定。在一个实施例中,标识的协议头的位置对应于协议头的开始(例如,第一字节)。
在方框808,将一个或更多个协议头层位置提供给密钥生成器块。在一个实施例中,将一个或更多个协议头层位置提供给密钥生成器块包括:利用所述一个或更多个协议头层位置的指示来更新密钥生成器块可访问的一个或更多个通用锚点。
在方框810,由密钥生成器块生成用于报文的密钥。在一个实施例中,利用在方框806由报文处理单元标识的一个或更多个协议头位置来在810生成该用于报文的密钥。在一个实施例中,方框810包括方框812和814。
在方框812,从协议层头提取一个或更多个字段。在一个实施例中,使用在方框806标识的对应协议层位置来提取一个或更多个字段,以确定所述一个或更多个字段的相应位置。在一个实施例中,基于与所述一个或更多个字段对应的关于标识的协议头的位置(例如关于第一字节)的相应预定偏移,来确定所述一个或更多个字段的相应位置。在方框814,生成密钥以包括在方框812提取的一个或更多个字段。
在方框816,将在方框810生成的密钥提供给查找引擎。在一个实施例中,例如,将密钥提供给图1的网络设备10的查找引擎24。在另一个实施例中,将密钥提供给图5的网络设备500的加速器引擎506。在一个实施例中,将密钥包括在被作为与加速器引擎506的交易的一部分而向加速器引擎506设置的请求中。在其它实施例中,将密钥提供给其它合适的引擎。在方框818,关于报文要执行的处理操作由查找引擎基于在方框810生成的密钥来确定。
在一个实施例中,一种用于在网络设备中处理报文的方法包括:通过执行存储在非瞬态计算机可读存储介质中的计算机可读指令的可编程处理单元来解析报文。解析报文包括:通过执行存储在非瞬态计算机可读存储器中的指令来在报文头内标识一个或更多个协议层,通过执行存储在所述非瞬态计算机可读存储器中的指令来在所述报文头内标识协议头的相应位置,所述相应位置对应于相应的一个或更多个标识的协议层,以及将在所述报文头内标识的协议头的相应位置提供给硬件密钥生成器块,所述硬件密钥生成器块被配置成至少基于包括在所述报文中的信息来生成用于所述报文的一个或更多个密钥。所述方法还包括:通过所述密钥生成器块并使用标识的相应位置来生成与所述报文对应的查找密钥。生成查找密钥包括:使用标识的协议头的位置来从对应的协议头中提取一个或更多个字段,以及生成所述查找密钥以包括所述一个或更多个字段。所述方法还包括:提供所述查找密钥至查找引擎;以及通过所述查找引擎并基于所述查找密钥来执行关于所述报文的查找操作。
在其它实施例中,所述方法包括以下特征中的任一个或者任意一个或更多个的任意组合。
将标识的相应位置提供给密钥生成器块包括:更新相应的通用锚点的值,其中所述通用锚点不是全局对应于特定协议层,且其中,通用锚点的值指示特定协议层在所述报文头中相对于所述报文的开始的偏移。
所述方法还包括:在解析所述报文之后,执行所述报文的隧道终结以生成隧道终结的报文,其中执行所述报文的隧道终结包括从所述报文去除一个或更多个外部协议层头。
所述方法还包括:通过执行存储在非瞬态计算机可读存储介质中的计算机可读指令的处理单元来解析所述隧道终结的报文,包括:标识在所述隧道终结的报文的头内的一个或更多个协议层,标识协议头在所述隧道终结的报文的头内的相应位置,所述相应位置对应于标识的相应的一个或更多个协议层,以及将标识的协议头在所述隧道终结的报文的头内的相应位置提供给所述密钥生成器块。
将标识的协议头在所述隧道终结的报文的头内的相应位置提供给所述密钥生成器块包括:利用与所述隧道终结的报文对应的值来更新相应的通用锚点的值。
使用标识的协议头的位置来从对应的协议头中提取字段包括:基于(i)通用锚点的值,其指示在所述报文头中特定协议层相对于所述报文的开始的偏移;以及(ii)相对于所述通用锚点的值的预定偏移,来确定所述字段的位置。
生成查找密钥包括:从配置文件表检索条目,其中所述配置文件表的条目标识将从报文头提取的一个或更多个头字段,所述一个或更多个头字段被包括在查找密钥的相应的一个或更多个分段中;提取在所述配置文件表中的条目中标识的一个或更多个头字段;以及生成查找密钥以包括所述一个或更多个头字段。
从所述配置文件表中检索条目包括:从所述配置文件表的两个或更多个行中检索条目,其中所述两个或更多个行的每行标识将包括在所述查找密钥的相应的一个或更多个分段中的一个或更多个头字段。
除了最后一行以外,所述条目的两个或更多个行中的每行包括被设置成指示所述行不是条目的最后一行的指示,所述两个或更多个行中的最后一行包括用于指示所述行是所述条目的最后一行的指示。
检索所述条目包括:(i)检索所述条目的第一行,(ii)基于第一行中的指示来确定所述第一行并非所述条目的最后一行,(iii)检索所述条目的后续行,(iv)基于检索的后续行中的指示来确定后续行是不是条目的最后一行,以及如果确定所述后续行不是所述条目的最后一行,重复步骤(iii)和(iv),直到确定检索的后续行是所述条目的最后一行为止。
所述方法还包括:通过处理单元重写标识将包括在查找密钥上的新的头字段的信息,以及其中,生成所述查找密钥包括:包括所述新的头字段以代替在条目中标识的头字段。
将标识的协议头在所述报文头内的相应位置提供给硬件密钥生成器块包括:将所述查找密钥提供给使用一个或更多个专用集成电路实现的密钥生成器块。
在另一个实施例中,一种网络设备包括:多个网络端口,被配置成在网络上接收和发送报文。所述网络设备还包括一个或更多个报文处理节点。所述一个或更多个报文处理节点分别包括:处理单元,被配置成执行存储在非瞬态计算机可读介质中的计算机可读指令;以及耦合到报文处理节点的硬件密钥生成器块。存储在非瞬态计算机可读介质中的计算机可读指令在由所述处理单元执行时,使所述处理单元:解析报文,以便标识在所述报文头内的至少第一协议层,标识对应于第一协议层的协议头在所述报文头内的位置。所述硬件密钥生成器块被配置成:使用标识的位置,从所述协议头中提取一个或更多个头字段,以及生成查找密钥以包括所述一个或更多个头字段。所述网络设备还包括耦合到所述密钥生成器块的查找引擎,所述查找引擎被配置成基于所述查找密钥对所述报文执行查找操作。
在其它实施例中,所述网络设备包括以下特征中的任一个或者任意一个或更多个的任意组合。
所述一个或更多个报文处理节点被配置成至少通过更新相应的通用锚点的值,来将标识的相应位置提供给相应的密钥生成器块,其中所述通用锚点不是全局对应于特定协议层,且其中,通用锚点的值指示特定协议层在所述报文头中相对于所述报文的开始的偏移。
所述一个或更多个报文处理节点被配置成:在解析所述报文之后,执行所述报文的隧道终结以生成隧道终结的报文,其中执行所述报文的隧道终结包括从所述报文去除一个或更多个外部协议层头。
所述一个或更多个报文处理节点被配置成解析所述隧道终结的报文,以标识在所述隧道终结的报文的头内的一个或更多个协议层,标识协议头在所述隧道终结的报文的头内的相应位置,所述相应位置对应于标识的相应的一个或更多个协议层,以及将标识的协议头在所述隧道终结的报文的头内的相应位置提供给相应的密钥生成器块。
所述一个或更多个可编程报文处理节点被配置成:至少通过与所述隧道终结的报文对应的值来更新相应的通用锚点的值,将标识的协议头在所述隧道终结的报文的头内的相应位置提供给相应的密钥生成器块。
所述密钥生成器块被配置成基于(i)通用锚点的值,其指示协议层头的位置;以及(ii)相对于所述通用锚点的值得预定偏移,来确定将从协议层头提取的字段的位置。
所述密钥生成器块被配置成:从配置文件表检索条目,其中所述配置文件表的条目标识将从报文头提取的一个或更多个头字段,所述一个或更多个头字段将被包括在查找密钥的相应的一个或更多个分段中,提取在所述配置文件表中的条目中标识的一个或更多个头字段;以及生成所述查找密钥以包括所述一个或更多个头字段。
所述密钥生成器块被配置成:通过检索在所述配置文件表的两个或更多个行中来检索所述配置文件表的条目,其中所述两个或更多个行的每行标识将被包括在所述查找密钥的相应的一个或更多个分段中的一个或更多个头字段。
除了最后一行以外,所述条目的两个或更多个行中的每行包括被设置成指示所述行不是条目的最后一行的指示,所述两个或更多个行中的最后一行包括用于表示所述行是所述条目的最后一行的指示。
各个密钥生成器块被配置成:(i)检索所述条目的第一行,(ii)基于第一行中的指示来确定所述第一行并非所述条目的最后一行,(iii)检索所述条目的后续行,(iv)基于检索的后续行中的指示来确定后续行是否是条目的最后一行,以及如果确定所述后续行不是所述条目的最后一行,重复步骤(iii)和(iv),直到确定检索的后续行是所述条目的最后一行为止。
所述一个或更多个可编程报文处理节点还被配置成:重写标识将被包括在查找密钥上的新的头字段的信息,以及其中,所述密钥生成器块被配置成:生成所述查找密钥来包括所述新的头字段以代替在条目中标识的头字段。
使用相应的一个或更多个专用集成电路来实现相应的密钥生成器块。
可以利用硬件、执行固件指令的处理器、执行软件指令的处理器或它们的任意组合来实现上述的各种块、操作和技术中的至少一些。当利用执行软件或固件指令的处理器实现时,软件或固件指令可以存储在任意的计算机可读介质中,诸如磁盘、光盘、RAM、ROM或闪存等。软件或固件指令可以包括在处理器执行时使存储器执行各种动作的机器可读指令。
当通过硬件实现时,硬件可以包括分立部件、集成电路、专用集成电路(ASIC)、可编程逻辑器件(PLD)等中的一个或更多个。
尽管已经参考特定示例描述了本发明,但这些示例仅用于例示说明而不对本发明进行限制,本领域技术人员显然可以认识到,在不脱离本发明的精神和范围的情况下可以对公开的实施例进行改变、添加和/或删除。