CN115088239A - 用于网络设备的混合固定/可编程报头解析器 - Google Patents
用于网络设备的混合固定/可编程报头解析器 Download PDFInfo
- Publication number
- CN115088239A CN115088239A CN202080096569.6A CN202080096569A CN115088239A CN 115088239 A CN115088239 A CN 115088239A CN 202080096569 A CN202080096569 A CN 202080096569A CN 115088239 A CN115088239 A CN 115088239A
- Authority
- CN
- China
- Prior art keywords
- header
- programmable
- parsing
- parse
- packet
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 claims description 45
- 238000012545 processing Methods 0.000 claims description 23
- 230000004044 response Effects 0.000 claims description 8
- 230000004048 modification Effects 0.000 description 30
- 238000012986 modification Methods 0.000 description 30
- 238000010586 diagram Methods 0.000 description 18
- 238000004364 calculation method Methods 0.000 description 16
- 230000006870 function Effects 0.000 description 15
- 238000004519 manufacturing process Methods 0.000 description 12
- 230000008569 process Effects 0.000 description 11
- 238000007792 addition Methods 0.000 description 6
- 230000007547 defect Effects 0.000 description 6
- 238000013461 design Methods 0.000 description 4
- 238000005538 encapsulation Methods 0.000 description 4
- 238000000605 extraction Methods 0.000 description 4
- 239000003607 modifier Substances 0.000 description 4
- 230000002950 deficient Effects 0.000 description 3
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 108090000623 proteins and genes Proteins 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 0.000 description 1
- 238000013024 troubleshooting Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/30—Peripheral units, e.g. input or output ports
- H04L49/3063—Pipelined operation
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/161—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/26—Special purpose or proprietary protocols or architectures
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/28—Timers or timing mechanisms used in protocols
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
网络设备的分组处理器包括转发引擎,该转发引擎被配置为确定出口网络接口,由网络设备接收的分组将经由该出口网络接口被发送。分组处理器还包括报头解析器,被配置为解析由网络设备接收的分组中的报头信息。报头解析器包括第一解析电路,该第一解析电路被配置为解析分组的报头的第一部分,并且提示可编程第二解析电路解析报头的第二部分。报头的第一部分具有第一解析电路已知的报头结构。可编程第二解析电路包括可配置电路系统和存储控制信息的存储器,该控制信息控制可配置电路系统的操作,以解析报头的第二部分。
Description
相关申请的交叉引用
本申请要求2019年12月13日提交的名称为“可编程解析单元(PPU)”的美国临时专利申请第62/948,043号的权益,该专利申请通过引用整体并入本文。
技术领域
本发明总体上涉及网络设备,如网络交换机、网桥、路由器等。更具体地,涉及解析网络设备中分组的报头。
背景技术
网络设备,如交换机、网桥和路由器,基于分组的报头中的地址通过网络转发分组。一些网络设备包括耦合到不同网络链路的多个端口。这种网络设备通常经由一个端口接收分组,并且至少处理分组的报头,以决定网络设备应该经由哪个其他端口或哪些其他端口发送分组。网络设备然后将分组转发到所确定的一个或多个其他端口。
在处理分组的过程中,网络设备将解析分组的一个或多个报头,以识别和/或提取对处理分组有用的信息。传统上,使用能够以线速(wire-speed)运行的硬件引擎,来执行报头解析。这种解析引擎被配置为解析具有在解析引擎设计时已知的固定格式(并且具有固定长度)的报头,并且在支持在解析引擎设计时未知的新的和/或专有报头类型方面,缺乏灵活性。另一方面,报头解析器的可编程实现利用可编程处理器来执行报头解析,但是这种可编程实现通常不能以商业上合理的成本支持线速处理。
发明内容
在一个实施例中,一种网络设备包括:多个网络接口,被配置为与多个网络链路通信地耦合;以及耦合到多个网络接口的分组处理器,该分组处理器包括:转发引擎,被配置为确定出口网络接口,经由该多个网络接口而接收的分组将经由该出口网络接口被发送;以及报头解析器,被配置为解析经由多个网络接口接收的分组中的报头信息。该报头解析器包括:第一解析电路和可编程第二解析电路,该第一解析电路被配置为解析分组的报头的第一部分,并且提示可编程第二解析电路解析该报头的第二部分,该报头的第一部分具有第一解析电路已知的报头结构,该可编程第二解析电路包括:i)可配置电路系统和ii)存储控制信息的存储器,该控制信息控制该可配置电路系统的操作,以解析该报头的第二部分。
在另一实施例中,一种用于在网络设备中处理分组的方法,包括:经由网络设备的网络接口接收分组;解析分组的报头,包括:由第一解析电路解析报头的第一部分,该报头的第一部分具有第一解析电路已知的报头结构,由第一解析电路提示网络设备的可编程第二解析电路解析报头的第二部分,由可编程第二解析电路从可编程第二解析电路的存储器中检索控制信息,该控制信息指示将执行的与结合解析报头的第二部分有关的操作,以及由可编程第二解析电路解析报头的第二部分,包括使用控制信息控制可编程第二解析电路的可配置电路系统;由转发引擎确定发送分组所经由的一个或多个出口网络接口,该一个或多个出口网络接口使用由i)第一解析电路和ii)可编程第二解析电路中的一个或两个从报头解析的信息来确定的;以及经由由转发引擎确定的一个或多个出口网络接口,发送分组。
附图说明
图1是根据实施例的采用混合固定/可编程报头解析器的示例网络设备的简图。
图2是根据实施例的包括在图1的网络设备中的示例分组处理器的简图。
图3是根据实施例的混合固定/可编程报头解析器能够处理的示例Geneve分组格式的示意图。
图4是根据另一实施例的混合固定/可编程报头解析器能够处理的示例网络服务报头封装分组格式的示意图。
图5是根据一个实施例的混合固定/可编程报头解析器能够处理的示例以太网分组格式的示意图。
图6是根据一个实施例的图2的分组处理器的示例可编程报头解析器的简图。
图7是根据一个实施例的图6的可编程报头解析器的示例计算级的简图。
图8是根据一个实施例的图7的计算级的示例计算硬件单元的简图。
图9是根据一个实施例的、利用包括第一解析电路和可编程第二解析电路的网络设备处理分组的方法的流程图。
具体实施方式
以下说明公开了许多不同的实施例或示例,用于实现主题的不同特征。下面描述组件和布置的具体示例,以简化本公开。当然,这些仅仅是示例,并不旨在进行限制。此外,本公开可以在各种示例中重复参考数字和/或字母。这种重复是为了简洁和清楚的目的,其本身并不规定所讨论的各种实施例和/或配置之间的关系。
在更详细地描述各种实施例之前,应注意实施例不具有限制性,因为此类实施例中的元素可能会变化。还应注意,这里描述和/或示出的特定实施例具有可以容易地从该特定实施例中分离的元素,并且可选地与几个其他实施例中的任何一个相结合,或者替代这里描述的几个其他实施例中的任何一个中的元素。这里使用的术语是为了描述某些概念,并且该术语不旨在进行限制。除非另有定义,否则本文使用的所有技术和科学术语具有与实施例所属领域中通常理解的相同含义。
在下述各种实施例中,如交换机、网桥、路由器等的网络设备包括混合固定/可编程报头解析器,其解析分组的报头,以识别和/或提取用于处理分组的信息。混合固定/可编程报头解析器包括固定报头解析器,其被配置为解析固定的第一报头类型集合和/或具有固定的预定义长度的报头。在一些实施例中,固定报头解析器被配置为解析第一报头类型集合,该第一报头类型集合在制造时是固定的,并且不能在现场被改变/更新。作为说明性示例,能够被固定报头解析器解析的第一报头类型集合包括标准化的和/或广泛使用的报头类型,并且可选地包括在制造时已知的一个或多个专有报头类型。
混合固定/可编程报头解析器还包括可编程报头解析器,可对其进行编程,以解析固定报头解析器不能解析的第二组一个或多个报头类型。在一些实施例中,可编程报头解析器能够在制造后被编程和/或重新编程(例如,“在现场”),以解析混合固定/可编程报头解析器在制造时不能解析的不同和/或附加的报头类型。
在一些实施例中,可编程报头解析器可以被编程来解析i)可变长度报头和ii)固定长度报头中的一个或两个。作为说明性示例,可编程报头解析器可以被编程而解析的第二报头类型集合包括:固定报头解析器不能解析的一个或多个专有报头类型。作为另一个示例,可编程报头解析器可以被编程而解析的第二报头类型集合包括:在报头解析器被设计或制造之后被采用的一个或多个报头类型(例如,被工业、被标准委员会等采用)。作为又一个示例,可编程报头解析器可以被编程而解析的第二报头类型集合包括:固定报头解析器不能解析的一个或多个可变长度报头类型。
在一些实施例中,固定报头解析器也可以被编程至比可编程报头解析器更受限制的程度。例如,尽管固定报头解析器在某种程度上也是可编程的,但是固定报头解析器不能被编程来解析可编程报头解析器可以被编程而处理的一些类型的报头。作为说明性的示例,尽管固定报头解析器在某种程度上也是可编程的,但是固定报头解析器不能被编程来解析可变长度报头,而可编程报头解析器可以被编程来解析可变长度报头。在一些实施例中,固定报头解析器可以“在现场”被编程,但是不能被编程来解析可编程报头解析器可以被编程而解析的一些类型的报头。
图1是根据实施例的包括混合固定/可编程报头解析器104的示例网络设备100的简化框图。网络设备100通常在两个或更多个计算机系统、网络分段、子网等之间转发分组。例如,在一个实施例中,网络设备100是路由器。然而,注意,网络设备100不必限于特定的协议层或特定的联网技术(例如,互联网协议)。例如,在其他实施例中,网络设备100适当地是网桥、交换机、虚拟专用网络(VPN)集中器等。
网络设备100包括多个网络接口(例如,端口)108,被配置为耦合到相应的网络链路。网络接口108(为简洁起见,有时在本文中称为“端口”)被配置为经由相应的网络链路接收分组和发送分组。
网络设备100还包括分组存储器112,以用于存储经由网络端口108接收的分组,同时网络设备100处理分组,直到网络设备100经由网络端口108发送分组。
网络设备100还包括耦合到分组存储器112和端口108的分组处理器116。分组处理器116为经由端口108接收到的分组生成各自的分组描述符(这里有时称为“描述符”)。每个描述符包括与一个分组相对应的数据单元。描述符尤其包括从分组的报头中获取的信息,并且描述符一般来说由分组处理器116处理,以确定发送与描述符相对应的分组所经由的端口108(有时称为“目标端口”),并且使得分组经由所确定的目标端口108被发送。在一些实施例中,描述符包括与分组相对应的信息,该信息不是从分组的报头中提取的,该信息诸如存储器112中存储分组的位置的指示、要对分组采取的动作的指示(例如,如何修改分组的报头的指示、要丢弃分组的指示等)。
在一个实施例中,分组处理器116包括转发引擎(未示出),被配置为分析分组的报头信息(包含在描述符中),以确定发送分组所经由的端口108。仅作为说明性示例,转发引擎被配置为:使用分组的报头中的目的地地址(所述目的地地址已经从报头中提取、并存储在与分组相对应的描述符中),从而在转发数据库(未示出)中执行查找,以确定发送分组所经由的特定端口(或多个端口)108,该转发数据库存储指示目的地地址和端口108之间的对应关系的转发信息。作为另一个说明性示例,转发引擎被配置为使用分组的报头中的虚拟局域网标识符(virtual local area network identifier,VLAN ID)(所述VLAN ID已经从报头中提取、并存储在与该分组相对应的描述符中),以在转发数据库(未示出)(例如,上述相同的转发数据库或不同的转发数据库)中执行查找,该转发数据库存储指示VLAN ID和端口108之间的对应关系的转发信息,以确定用于该分组的特定端口集合108,该分组将经由该特定端口集合而被发送。根据一个实施例,转发引擎(未示出)被配置为在与分组相对应的分组描述符中存储目标端口108(或多个目标端口的集合)的ID。
由分组处理器116执行的其他示例功能包括以下功能中的一种或两种或多种的任何合适组合(或不包括以下功能):i)修改分组的报头(例如,更新下一跳地址、添加隧道报头、移除隧道报头等)、ii)对分组进行分类、iii)计量,例如用于服务质量控制等。
在一些实施例中,网络设备100包括与端口108相对应的发送队列120。根据一个实施例,在分组处理器116确定了针对分组的目标端口108之后,分组处理器116将针对分组的描述符(或者与分组相对应的另一个合适的数据单元)排入与目标端口108相对应的发送队列120中。当描述符(或其他合适的数据单元)到达发送队列120的头部时,从分组存储器112中读取相应的分组,并经由目标端口108进行发送。
根据一个实施例,混合固定/可编程报头解析器104是分组处理器116的组件。混合固定/可编程报头解析器104包括固定报头解析器和可编程报头解析器。根据一些实施例,固定报头处理器被配置为解析固定的第一报头类型集合、和/或具有固定的预定义长度的报头。作为说明性示例,能够被固定报头解析器解析的第一报头类型集合包括在制造时已知的报头类型,诸如i)标准化和/或广泛使用的报头类型,ii)一个或多个专有报头类型等中的一个或多个。
混合固定/可编程报头解析器104还包括可编程报头解析器,其可以被编程以解析固定报头解析器不能解析的第二组一个或多个报头类型。在一些实施例中,可编程报头解析器可以被编程来解析i)可变长度报头和ii)固定长度报头中的一个或两个。作为说明性示例,可编程报头解析器可以被编程而所解析的第二报头类型集合包括:固定报头解析器不能解析的一个或多个专有报头类型。作为另一个示例,可编程报头解析器可以被编程来解析的第二报头类型集合包括:固定报头解析器不能解析的一个或多个可变长度报头类型。
尽管固定报头解析器被描述为“固定的”,但根据一些实施例,固定报头解析器也可以被编程至比可编程报头解析器更受限制的程度。例如,尽管固定报头解析器在某种程度上也是可编程的,但是固定报头解析器不能被编程来解析可编程报头解析器可以被编程而解析的一些类型的报头。作为说明性的示例,尽管固定报头解析器在某种程度上也是可编程的,但是固定报头解析器不能被编程来解析可变长度报头,而可编程报头解析器可以被编程来解析可变长度报头。在一些实施例中,固定报头解析器可以“在现场”被编程,但是不能被编程来解析可编程报头解析器可以被编程而解析的一些类型的报头。
在一些实施例中,由于设计缺陷或制造缺陷,固定报头解析器不能解析报头类型。因此,在一些实施例中,可编程报头解析器可以被编程来针对固定报头解析器中的一个或多个缺陷提供“解决方案(work around)”,从而挽救(salvage)否则将变得不可用或不适合出售的分组处理器116。
图2是根据一个实施例的与图1的分组处理器116相对应的示例分组处理器200的简图,出于解释目的,参考图1描述了图2。然而,在其他实施例中,图1的分组处理器116与不同于分组处理器200的另一合适的分组处理器相对应,和/或分组处理器200被包括在不同于图1的网络设备100的另一合适的网络设备中。
在一个实施例中,分组处理器200使用流水线架构实施,并包括分组处理流水线220。根据一个实施例,分组处理流水线220包括流水线布置中的多个流水线级224,其中至少一些流水线级224:i)从流水线中的前一个流水线级224接收分组描述符,ii)处理分组描述符,以及iii)向流水线中的下一个流水线级224提供至少一些分组描述符。例如,流水线级224之一与如上所述的转发引擎相对应。作为另一个示例,另一流水线级224被配置为修改分组的报头(例如,更新下一跳地址、添加隧道报头、移除隧道报头等)。作为又一个示例,另一流水线级224被配置为执行计量功能,例如,用于服务质量控制等。
级224b(本文有时称为“解析器级”)与如上所述的混合固定/可编程报头解析器相对应。尽管根据流水线220中的级224的排序,解析器级224b被示为处于流水线220中的第二位置(例如,解析器级224b位于第一位置(级224a)之后和第三位置(级224c)之前),但是在其他实施例中,解析器级224b处于流水线220中的另一合适位置。
在一个实施例中,级224a为接收的分组生成相应的分组描述符,并且将生成的分组描述符提供给解析器级224b。例如,由级224a提供给解析级224b的描述符包括:分组存储器112中存储的与该描述符相对应的分组的位置的指示符。作为另一个示例,由级224a提供给解析器级224b的描述符附加地或可替换地包括:接收与该描述符相对应的分组所经由的端口108的指示符。
在另一个实施例中,解析器级224b生成分组描述符。例如,针对每个接收的分组,级224a向解析器级224b提供分组存储器112中存储该分组的位置的指示、和/或接收该分组所经由的端口108的指示,解析器级224b生成针对该分组的描述符,该描述符包括分组存储器112中存储该分组的位置的指示、和接收该分组所经由的端口108的指示中的一个或两个。
根据一个实施例,解析器级224b被配置为:i)识别分组的报头中的字段,ii)从识别的字段中提取信息,iii)在描述符中存储一些提取的信息,iv)使用一些提取的信息计算进一步的信息,以及v)在描述符中存储计算的进一步的信息。
解析器级224b包括如上所述的固定报头解析器244。例如,根据一些实施例,固定报头处理器244被配置为解析固定的第一报头类型集合、和/或具有固定的预定义长度的报头。固定报头解析器244从所接收的分组中接收报头信息,并解析所接收的报头信息的至少一部分。例如,固定报头解析器244被配置为:i)识别报头信息中的第一字段(所识别的字段与固定的第一报头类型集合相对应),ii)从所识别的第一字段中提取信息,以及iii)在与分组相对应的描述符中存储一些提取的信息。在一些实施例中,固定报头解析器244还被配置为:i)使用一些提取的信息来计算进一步的信息,以及ii)将计算的进一步的信息存储在描述符中。
在一些实施例中,固定报头处理器244还被配置为确定何时报头信息包括如下的一个或多个报头类型,其中一个或多个报头类型将由耦合到固定报头解析器的可编程报头解析器248解析。在一些实施例中,将由可编程报头解析器248解析的一个或多个报头类型包括:固定报头处理器244不能解析的一个或多个报头类型。附加地或替代地,根据一些实施例,将由可编程报头解析器248解析的一个或多个报头类型包括:固定报头解析器244能够解析的报头类型,但是仍然将由可编程报头解析器248处理。作为说明性示例,可以确定固定报头解析器244包括缺陷,该缺陷导致固定报头解析器244至少在一些情况下不正确地(或次优地)解析已知报头,因此确定可编程报头解析器248改为解析已知报头。
固定报头解析器244包括触发电路252,其被配置为:确定分组是否包括将由可编程报头解析器248解析的一个或多个报头类型;并响应于确定分组包括将由可编程报头解析器248解析的一个或多个报头类型,提示可编程报头解析器248解析分组中所包括的一个或多个报头类型。例如,触发电路252被配置为:识别报头的第一部分(其中固定报头处理器244能够解析报头的第一部分)中的信息,该信息指示存在位于第一报头部分之后的第二报头部分,并且其中可编程报头解析器248将解析位于第一报头部分之后的报头信息。因此,报头的第一部分中的信息(其指示存在位于第一报头部分之后的第二报头部分)向固定报头处理器244指示:报头信息,在与报头的第一部分的末端相对应的位置处,包括一个或多个报头类型,可编程报头解析器248将对该一个或多个报头类型进行解析。
仅作为说明性示例,报头信息中的一个或多个第一字段可指示:分组的有效载荷部分在与固定报头处理器244能够解析的第一报头部分的末端不同的偏移处开始,这意味着在第一报头部分和有效载荷之间存在第二报头部分。例如,固定报头处理器244能够通过第一报头部分处理报头信息,但是不能处理分组中第一报头部分之外的报头信息。因此,指示分组的有效载荷部分所起始于的偏移的信息向触发电路252指示:报头信息,在分组中与第一报头部分的末端相对应的位置处,包括固定报头处理器244不能解析的一个或多个报头类型。
作为另一个说明性示例,触发电路252被配置为:在第一报头部分中的端口字段被设置为特定值(或多个特定值中的一个)时,确定报头信息包括固定报头处理器244不能解析的、位于分组中特定位置处的、一个或多个报头类型。图3是由2018年10月7日互联网工程任务组(Internet Engineering Task Force,IETF)的draft-ietf-nvo3-geneve-08“Geneve:通用网络虚拟化封装”定义的示例Geneve分组格式300的图。分组格式300包括固定报头处理器244能够解析的第一报头部分304,以及可编程报头解析器248能够解析的第二报头部分308。
第一报头部分304包括外部以太网报头324、外部互联网协议版本4(IPv4)报头328和外部用户数据报协议(UDP)报头332。第二报头部分308包括Geneve报头364。分组300还包括一个或多个内部报头和有效载荷372。
外部UDP报头332包括目的地端口字段384,其被设置为特定值(例如,6081或另一个合适的值),以指示Geneve报头364跟随外部UDP报头332。因此,根据一个实施例,响应于触发电路252确定目的地端口字段384被设置为特定值(例如,6081或另一个合适的值),触发电路252确定:固定报头处理器244不能解析的另一个报头(即,Geneve报头364),在与外部UDP报头332的末端相对应的位置处,跟随外部UDP报头332。
Geneve报头364为可变长度报头。更具体地,Geneve报头364包括:i)具有可变长度的可变长度选项字段392,以及ii)长度字段394,其指示可变长度选项字段392的长度。根据一个实施例,可编程报头解析器248被配置为从长度字段394提取长度信息,并使用提取的长度信息来确定可变长度选项字段392的长度。
尽管上文讨论了说明性示例,其中固定报头处理器244(例如,触发电路252)分析报头的第一部分中的有效载荷偏移信息、和/或端口信息,以确定分组包括应该由可编程报头解析器248解析的第二报头部分,但在其他实施例中,固定报头处理器244(例如,触发电路252)分析报头的第一部分中的其他合适信息,以确定分组包括应该由可编程报头解析器248解析的第二报头部分。在其他实施例中,固定报头处理器244(例如,触发电路252)分析报头的第二部分中的其他合适信息,以确定第二报头部分应该由可编程报头解析器248解析(例如,固定报头处理器244(例如,触发电路252)能够分析报头的第二部分中的一些信息,以确定第二报头部分应该由可编程报头解析器248解析)。
图4是由2018年1月的征求意见(Request for Comment,RFC)8300、互联网工程任务组(IETF)的“网络服务报头(Network Service Header,NSH)”定义的示例网络服务报头(NSH)封装分组格式400的示意图。分组格式400包括传输封装报头部分404、NSH报头部分408和原始分组部分412。在一个实施例中,固定报头处理器244能够解析NSH报头部分408的子集和传输封装报头部分404,而可编程报头解析器248能够处理NSH报头部分408的另一个子集,这将在下面更详细地描述。
NSH报头部分408包括基本报头424、服务路径报头428和一个或多个可选上下文报头432。在一个实施例中,固定报头处理器244至少能够解析基本报头424和服务路径报头428。
基本报头424包括操作、管理和维护(Operation,Administration andMaintenance,OAM)位字段444、长度字段448和元数据(metadata,MD)类型字段452。OAM位字段444被设置为特定值(例如,一),以指示分组400是OAM分组。当OAM位字段被设置为特定值(例如,一)时,NSH报头408(例如,(多个)上下文报头432)可以用于路径标识信息,该路径标识信息是实现服务路径、以及经由服务特定的OAM消息端到端地监控服务链并对其进行故障排除而所需的。管理员可以使用NSH报头408(例如,(多个)上下文报头432)中的信息(例如,经由流量分析器),来验证正在被沿着服务路径转发的分组的路径细节(例如,记账、确保正确链接、提供报告等)。在一个实施例中,当固定解析器244(例如,触发电路252)确定OAM位字段444被设置为特定值(例如,一)时,固定解析器244(例如,触发电路252)确定可编程报头解析器248要解析NSH报头408的至少一部分(例如,至少(多个)上下文报头432)。
基本报头424还包括长度字段448,其指示NSH报头408的总长度。在一些实施例中,长度字段448的某些值指示(多个)上下文报头432具有可变长度格式,因此应当由可编程报头解析器248解析。因此,在一些实施例中,当固定解析器244(例如,触发电路252)确定长度字段448被设置为一个或多个特定值的集合中的任意值时,固定解析器244(例如,触发电路252)确定可编程报头解析器248要解析(多个)上下文报头432。
基本报头424还包括元数据(MD)字段452,其指示基本报头424和服务路径报头428之外的NSH报头408的格式(例如,(多个)上下文报头432的格式)。例如,MD字段452的第一值(例如,0x1)指示(多个)上下文报头432具有固定长度格式,而MD字段452的第二值(例如,0x2)指示(多个)上下文报头432具有可变长度格式。因此,在一些实施例中,当固定解析器244(例如,触发电路252)确定MD字段452被设置为第二值(例如,0x2)时,固定解析器244(例如,触发电路252)确定可编程报头解析器248要解析(多个)上下文报头432。
图5为具有思科元数据(Cisco Metadata,CMD)标签的示例以太网分组格式500的示意图。分组格式500包括以太网报头504、以及有效载荷和循环冗余校验(cyclicredundancy check,CRC)部分512。在一个实施例中,固定报头处理器244能够解析以太网报头504的第一部分,但是不能解析以太网报头504的第二部分。另一方面,可编程报头解析器248能够处理以太网报头504的第二部分,这将在下面更详细地描述。
以太网报头504包括:目的介质访问控制(MAC)地址字段524、源MAC地址字段528、802.1Q标签532、CMD标签536和以太类型(Ethertype)字段540。CMD标签536包括CMD以太类型字段564、版本字段568、长度字段572、安全组标签(security group tag,SGT)选项类型字段576、SGT值字段580以及可选的一个或多个其他CMD选项字段584。CMD以太类型字段564位于以太网报头504中的如下位置:在省略CMD标签536的以太网报头中,该位置与太类型字段540的位置相对应。CMD以太类型字段564被设置为特定值(例如,0x8909),其指示以太网报头504包括CMD标签536。因此,在一些实施例中,当固定解析器244(例如,触发电路252)确定CMD以太类型字段564被设置为特定值(例如,0x8909)时,固定解析器244(例如,触发电路252)确定可编程报头解析器248要解析CMD标签536的至少一些字段,例如,例如,i)至少长度字段572、SGT选项类型字段576、SGT值字段580和(多个)其他CMD选项字段584(如果存在的话)。
长度字段572指示CMD标签536的在长度字段572之后的长度。在一些实施例中,长度字段572的某些值指示在SGT值字段580之后有一个或多个其他CMD字段584,因此应该由可编程报头解析器248解析。因此,在一些实施例中,当固定解析器244(例如,触发电路252)确定长度字段572被设置为一个或多个特定值的集合中的任何值时,固定解析器244(例如,触发电路252)确定可编程报头解析器248要解析SGT值字段580之后的至少一个或多个其他CMD字段584。
在互联网协议版本6(IPv6)分组被封装在以太网帧中的另一实施例中,当固定解析器244(例如,触发电路252)确定以太网报头中的以太类型字段被设置为特定值(例如,0x88DD或另一个合适值)时,固定解析器244(例如,触发电路252)确定可编程报头解析器248将解析IPv6分组的IPv6报头。在说明性实施例中,IPv6报头与如下的报头相对应,该报头为包括一个或多个通用分段标识符(generalized segment identifiers,G-SID)的IPv6上通用分段路由(Generalized Segment Routing over IPv6,G-SRv6)报头,并且可编程报头解析器248被配置为提取一个或多个G-SID,并且将所提取的一个或多个G-SID存储在与分组相对应的描述符中。
再次参考图2,响应于固定报头处理器244(例如,触发电路252)确定报头信息包括固定报头处理器244不能解析的一个或多个报头类型,该固定报头处理器244(例如,触发电路252)被配置为生成使能信号,该使能信号提示可编程报头解析器248进一步解析报头信息,例如,解析报头处理器244未完全解析和/或未能完全解析的报头信息的部分。
可编程报头解析器248接收与分组相对应的报头信息,并解析报头处理器244未解析和/或未完全解析的报头信息的部分。在一些实施例中,从固定报头解析器244接收报头信息。在其他实施例中,报头信息是从分组处理器220的另一个组件接收的,例如级224a。
可编程报头解析器248执行的解析包括:识别报头信息中的字段,以及从一个或多个所识别的字段中提取信息。在一些实施例中,由可编程报头解析器248执行的解析还包括:使用从一个或多个所识别的字段中提取的信息来计算进一步的信息。
可编程报头解析器248还接收与分组相对应的描述符。在一个实施例中,由可编程报头解析器248执行的解析还包括:将从报头信息中提取的信息存储在描述符中。在其他实施例中,附加地或替代地,由可编程报头解析器248执行的解析包括将计算的进一步的信息中的至少一些信息存储在描述符中。
在一些实施例中,可编程报头解析器248接收指示报头信息内的如下位置的信息(本文有时称为“偏移信息”),可编程报头解析器248将在该位置处开始解析。在一些实施例中,从固定报头解析器244接收偏移信息(例如,触发电路252被配置为生成偏移信息)。
在一些实施例中,固定报头解析器244可以解析的报头类型集合在制造时是固定的,不能在现场被更改/被更新。在一些实施例中,固定报头解析器244不能解析特定类型的报头,并且不能在现场被重新编程/更新以解析这些特定类型的报头。例如,固定报头解析器244不能解析可变长度报头,并且不能在现场被重新编程/更新以解析可变长度报头。
另一方面,可编程报头解析器248能够被编程(例如,在制造时)以解析固定报头解析器244不能完全解析的报头。在一些实施例中,可编程报头解析器248可选地能够在现场被重新编程,以解析制造时解析级224b不能解析的不同和/或附加的报头类型。在一些实施例中,可编程报头解析器可以被编程来解析:i)可变长度报头、和ii)固定长度报头中的一个或两个。
尽管固定报头解析器244被描述为“固定的”,但根据一些实施例,固定报头解析器244也可以被编程至比可编程报头解析器更受限制的程度。例如,尽管固定报头解析器244在某种程度上也是可编程的,但是固定报头解析器244不能被编程来解析可编程报头解析器248可以被编程来解析的一些类型的报头。作为说明性的示例,尽管固定报头解析器244在某种程度上也是可编程的,但是固定报头解析器244不能被编程来解析可变长度报头,而可编程报头解析器248可以被编程来解析可变长度报头。在一些实施例中,固定报头解析器244可以“在现场”被编程,但是不能被编程来解析可编程报头解析器248可以被编程来解析的一些类型的报头。
在一些实施例中,由于设计缺陷或制造缺陷,固定报头解析器244不能解析报头类型。因此,在一些实施例中,可编程报头解析器248可以被编程来针对固定报头解析器244中的一个或多个缺陷提供“解决方案”,从而挽救否则将变得不可用或不适合出售的分组处理器200。例如,根据一个实施例,尽管有(多个)缺陷,有缺陷的固定报头解析器244被配置为解析报头的有缺陷的固定报头解析器244能够正确解析的那些(多个)部分,然后可编程报头解析器248被配置为解析报头的有缺陷的固定报头解析器244不能正确解析的那些(多个)部分。
在各种实施例中,流水线220被配置为:在第一次解析操作中解析固定报头解析器244能够(或应该)解析的尽可能多的分组报头,并使用可编程报头解析器248继续解析分组报头的未解析分段。
图6是根据一个实施例的示例可编程报头解析器600的简图。在一个实施例中,可编程报头解析器600与图2的可编程报头解析器248相对应。在另一个实施例中,可编程报头解析器600被包括在图1的混合固定/可编程报头解析器104中。在其他实施例中,图1的混合固定/可编程报头解析器104、和/或图2的可编程报头解析器248包括不同于可编程报头解析器600的合适的可编程报头解析器。类似地,在一些实施例中,可编程报头解析器600被用在不同于图1的网络设备100的合适的网络设备中、和/或不同于图2的分组处理器200的合适的分组处理器中。在一些实施例中,可编程报头解析器600不与固定报头解析器结合使用。
可编程处理器600包括一个或多个计算级604、和描述符修改器608。尽管在图6中示出了三个计算级604,但是在其他实施例中,可编程处理器600包括除了三个之外的不同合适数量的计算级604(例如,一个、两个、四个、五个等)。
如下文将更详细描述的,每个计算级604能够被编程以执行与解析报头信息相关的所需操作。描述符修改器608被配置为:如由计算级604生成的描述符修改信息的所指定,修改与分组相关联的描述符。在一些实施例中,计算级604被配置为:i)从可变长度报头的长度字段中提取长度信息,以及ii)解析可变量的报头信息,该可变量取决于所提取的长度信息。在其他实施例中,计算级604不能解析可变长度报头,该可变长度报头具有指示可变长度报头长度的长度字段。
计算级604被串联地布置,使得一个计算级604的输出作为另一个计算级604的输入。此外,计算级604被布置在反馈布置中,使得最后计算级604的输出可选地作为输入被提供给第一计算级604。例如,计算级604c的输出作为输入被提供给计算级604a。在其他实施例中,可编程解析器的计算级不是串行布置的。例如,在其他实施例中,可编程解析器的计算级并行操作。
计算级604从固定解析器244(和/或从分组处理器200中的其他电路系统,如级224a)接收各种信息和/或信号。例如,根据一个实施例,计算级604a接收提示计算级604a开始操作的使能信号。计算级604a还接收与分组相对应的报头信息,以及指示报头信息内的如下位置的偏移信息,可编程解析器600将在该位置处开始解析。在一些实施例中,计算级604a还从分组处理器116/200中的其他电路系统接收元数据,该元数据与正在被解析的分组相对应。在一些实施例中,元数据包括由固定报头解析器(例如,图2的固定报头解析器244)生成的数据。例如,元数据包括由固定报头解析器(例如,图2的固定报头解析器244)从分组的报头中提取的数据(和/或从其计算的数据(和/或使用从其提取的数据确定的数据))。这可以使可编程解析器600能够跳过重新提取和/或重新计算已经由硬件解析器提取/计算的数据。在分组处理器116包括诸如流水线220之类的流水线的一些实施例中,附加地或替代地,元数据包括由流水线中的(多个)先前级(诸如级224a)生成的数据。
在可编程解析器600包括多个计算级604的一些实施例中,计算级604被配置为迭代地处理报头信息。在可编程解析器600包括多个计算级604的其他实施例中,相应计算级604附加地或可替换地被配置为处理报头信息的相应部分。在其他实施例中,(多个)计算级604附加地或替代地被配置为作为状态机来操作,其中计算级604交换状态信息。
在(多个)计算级604配置为迭代地处理报头信息和/或作为状态机操作的一些实施例中,(多个)计算级604由例如固定解析器244、或附加/替代地由分组处理器116/200中的其他电路系统提供初始化信息。作为说明性示例,(多个)计算级604被提供有一个或多个计数参数的(多个)初始值。例如,一个或多个计数参数中的一个计数参数指示将由(多个)计算级604执行的一组有序迭代中的一个特定迭代。作为另一个示例,一个或多个计数参数中的一个计数参数指示正在被处理的报头信息的一个特定部分。作为又一个示例,一个或多个计数参数中的一个计数参数指示由(多个)计算级604实现的状态机的一组状态中的一个特定状态。
根据一个实施例,作为处理报头信息的一部分,每个计算级604被配置为选择性地递减计数。根据另一个实施例,作为处理报头信息的一部分,每个计算级604被配置为选择性地递增计数。根据另一个实施例,作为处理报头信息的一部分,每个计算级604被配置为选择性地将计数设置为特定值。在一个实施例中,作为处理报头信息的一部分,每个计算级604能够被编程来交替地递减或递增计数。在另一个实施例中,作为处理报头信息的一部分,每个计算级604能够被编程来选择性地i)递减计数,ii)递增计数,或者iii)将计数设置为特定值。
在为(多个)计算级604提供初始化信息并且(多个)计算级604被配置为实现状态机的一些实施例中,初始化参数包括针对状态机的初始状态信息。
在为(多个)计算级604提供初始化信息的一些实施例中,至少一些初始化信息与一个或多个报头信息、偏移和元数据中所包含的信息相对应。
每个计算级604生成描述符修改信息(本文有时称为“便笺式存储器(scratchpad)”),以指示描述符修改器608如何修改描述符。在一些实施例中,至少一些计算级604中的每一个向另一个计算级604提供描述符修改信息,该另一个计算级604可以修改描述符修改信息、或者输出未改变的描述符修改信息。在其他实施例中,描述符修改信息被存储在可由描述符修改器608访问的一个或多个寄存器(或另一合适的存储器设备)中。
至少一些计算级604中的每一个生成被用作针对另一个计算级604的(多个)输入的(多个)输出。作为一个示例,至少一些计算级604中的每一个被配置为:生成提示另一个计算级604开始处理报头信息的使能信号。作为另一个示例,至少一些计算级604中的每一个被配置为:生成指示报头信息内的如下位置的偏移信息,另一个计算级604在该位置处开始处理报头信息。作为另一个示例,至少一些计算级604中的每一个被配置为生成计数信息,例如如上所述,并且将该计数信息提供给另一个计算级604。作为另一个示例,至少一些计算级604中的每一个被配置为生成状态信息,例如如上所述,并且将该状态信息提供给另一个计算级604。作为又一个示例,至少一些计算级604中的每一个被配置为生成描述符修改信息,例如如上所述,并且将描述符修改信息提供给另一个计算级604。向另一个级提供描述符修改信息是一个计算级604向另一个计算级604提供初步解析结果的示例,另一个计算级604然后可以使用初步解析结果来进一步处理报头信息。
尽管图6示出了输出报头信息、元数据和便笺式存储器总线的计算级604,但在各种其他实施例中,i)报头信息、ii)元数据和iii)便笺式存储器总线中的一个、两个或更多个的任何合适组合与至少一些计算级604并行提供,而不是经由其他计算级604提供。
图7是根据一个实施例的示例计算级700的简图。在一个实施例中,计算级700与图6的计算级604之一相对应。在其他实施例中,图6的每个计算级604与不同于计算级700的合适的计算级相对应。类似地,在一些实施例中,在不同于图6的可编程解析器600的合适的可编程解析器中使用计算级700。
计算级700包括选择器电路704,其被配置为选择由计算级700接收的报头信息的子集。在一个实施例中,选择器电路704根据由计算级700接收的偏移信息来选择报头信息的不同子集。仅仅作为一个说明性的示例,选择器电路704选择报头信息的位于起始点的32字节子集,该起始点是以由偏移信息指定的两个字节的间隔确定的。在其他实施例中,选择不同于32字节的合适大小(例如,16字节、48字节等)、和/或所选择的开始点的间隔是不同于两个字节的合适间隔(例如,一个字节、四个字节等)。
在一个实施例中,密钥生成器电路708被配置为生成三态内容可寻址存储器(ernary content addressable memory,TCAM)712的查找密钥。根据各种实施例,密钥生成器电路708被配置为通过从以下各项中的一项、两项或更多项中选择位来生成查找密钥:i)由选择器电路704所选择的报头信息的子集,ii)描述符修改信息(便笺式存储器),iii)元数据,以及iv)计数信息。在一些实施例中,密钥生成器电路708由状态信息控制,使得密钥生成器电路708根据状态信息,通过从以下各项中的一项、两项或更多项的不同组合中选择相应的位的集合来生成查找密钥:i)由选择器电路704选择的报头信息的子集、ii)描述符修改信息(便笺式存储器)、iii)元数据和iv)计数信息中。在其他实施例中,密钥生成器电路708附加地或可替换地由状态信息控制,使得密钥生成器电路708通过从以下各项中的一项、两项或更多项中选择不同的位的集合来生成查找密钥:i)由选择器电路704选择的报头信息的子集,ii)描述符修改信息(便笺式存储器),iii)元数据,以及iv)计数信息。
在一个实施例中,TCAM 712被配置为将密钥与存储在TCAM 712的相应条目中的相应内容进行比较,并且当发现匹配时,输出与包含匹配的条目相对应的索引。
由TCAM 712输出的索引输出用于查找存储器716(例如,寄存器文件、随机存取存储器(RAM)、闪存等)中的条目。存储器716在存储器716的相应条目中包括相应的控制信息。在一个实施例中,使用索引而从存储器716检索的控制信息然后被用于控制计算硬件单元720。具体而言,不同的控制信息控制计算硬件单元720,以针对计算硬件单元720的其他输入执行相应的不同处理操作,例如以下各项中的一项或两项或多项的任何适当组合:i)由选择器704选择的报头信息的子集,ii)描述符修改信息(便笺式存储器),iii)元数据,以及iv)计数信息。
TCAM 712和存储器716的内容是可编程的,计算级700的操作根据TCAM 712和存储器716的内容而变化。在一些实施例中,TCAM 712和存储器716的内容可以被重新编程(例如,在制造期间执行初始编程之后),使得计算级700的操作可以在制造之后例如“在现场”被改变。因为固定报头解析器(例如,图2的固定报头解析器244)解析报头的一些部分,所以减少了需要由可编程解析器解析的报头的量,从而有助于减少可编程报头解析器的(多个)资源的(多个)量,例如TCAM 712的大小、存储器716的大小、计算单元720的复杂度(和/或硅面积)等,相比之下,类似结构的可编程报头解析器必须解析整个报头。
根据各种实施例,计算单元720执行的操作示例包括:递增计数信息、递减计数信息、将计数信息设置为特定值等。在一些实施例中,控制信息控制计算单元720根据控制信息对来自操作集的计数信息执行不同的操作(例如,递增、递减、设置为特定值等中的两个或更多个的任何合适的组合)。
由计算单元720执行的操作的另一个示例包括:将状态信息设置为特定值。在一个实施例中,计算单元720将状态信息设置为由从存储器716检索的控制信息所指定的特定值。
由计算单元720执行的操作的另一个示例包括:将偏移信息设置为特定值。在一个实施例中,计算单元720将偏移信息设置为由从存储器716检索的控制信息所指定的特定值。在一个实施例中,计算单元720将偏移信息设置为由计算单元720计算的值。在一个实施例中,根据从存储器716检索的控制信息,计算单元720或者i)将偏移信息设置为由从存储器716检索的控制信息所指定的特定值,或者ii)将偏移信息设置为由计算单元720计算的值。
计算单元720执行的操作的另一个示例包括:从i)由选择器704选择的报头信息的子集,ii)元数据,和/或iii)描述符修改信息(便笺式存储器)中提取一个或多个字段。在一个实施例中,从存储器716检索的控制信息指定:将从i)由选择器704选择的报头信息的子集,ii)元数据,和/或iii)描述符修改信息(便笺式存储器)中提取哪一个字段、或哪些个字段。在一些实施例中,控制信息指定i)计算单元的输入内的开始位置(例如,由选择器704选择的报头信息,ii)元数据,iii)描述符修改信息(便笺式存储器)等),以及ii)要提取的位的数目。
由计算单元720执行的操作的另一个示例包括对由计算单元720提取的字段执行算术操作。例如,计算单元720被配置为将由计算单元720提取的数据乘以或除以2的倍数(例如,通过右移或左移所提取的数据。在一些实施例中,控制信息指定:i)要执行乘法还是除法(例如,左移还是右移),以及乘法/除法的操作数(例如,要执行移位的位的数目)。
由计算单元720执行的算术操作的另一个示例包括:向由计算单元720提取的字段添加常数或从中减去常数。在一些实施例中,控制信息指定i)是执行加法还是减法,以及要加上或减去的常数。
由计算单元720执行的算术操作的另一个示例包括:将由计算单元720提取的字段的位的子集设置为常数。在一些实施例中,控制信息指定i)所提取的字段中的位的哪个子集将被设置,以及ii)位的子集将被设置为的常数。
由计算单元720执行的操作的另一个示例包括:将计算单元720的寄存器设置为特定值。在一些实施例中,控制信息指定寄存器要被设置的值。
由计算单元720执行的操作的另一个示例包括:在计算单元720的两个寄存器中的值之间执行算术操作。在两个寄存器中的值之间执行的算术操作包括加法、减法、比较等中的一个或两个、或更多个的任何合适的组合。在一个实施例中,控制信息指定要执行的算术操作。在另一个实施例中,控制信息附加地或替代地指定计算单元720的寄存器集中的两个寄存器,算术操作将在这两个寄存器上执行。
在各种情况下,在其上执行算术操作的第一寄存器包括以下之一:i)第一值,其与从a)由选择器704选择的报头信息的子集、b)元数据、和/或c)描述符修改信息(便笺式存储器)中提取的一个或多个字段相对应,ii)第一常数等;并且在其上执行算术操作的第二寄存器包括以下之一:i)第二值,其与从a)由选择器704选择的报头信息的子集、b)元数据和/或c)描述符修改信息(便笺式存储器)中提取的一个或多个字段相对应,ii)第二常数等。
在一些实施例中,由计算单元720生成的一个或多个结果用于修改描述符修改信息(便笺式存储器)。在其他实施例中,由计算单元720生成的一个或多个结果附加地或替代地用于修改要提供给另一个计算级604的偏移信息。
图8是根据一个实施例的示例计算单元800的简图。在一个实施例中,计算单元800与图7的计算单元720相对应。在其他实施例中,图7的计算单元720与不同于计算单元800的合适的计算单元相对应。类似地,在一些实施例中,计算单元800用在不同于图7的计算级700的合适的计算级中。
如图8所示,各种电路接收控制信息、并受其控制。在一个实施例中,控制信息与从图7的存储器716检索的控制信息相对应。在其中计算单元800被包括在不同于图7的计算级700的合适的计算级中的其他实施例中,从其他合适的计算级的存储器中检索控制信息。计算单元800根据提供给计算单元800的控制信息进行不同的操作。
计算单元800包括计数器修改电路804,其被配置为在控制信息的控制下交替递增计数值、递减计数值或将计数值设置为特定值。例如,修改的计数信息(计出(count out))被提供给另一个计算级604(图6)。在一个实施例中,当控制信息指定计数值将被设置为特定值时,控制信息也指定该特定值。
计算单元800还包括多个计算子部分808。在一个实施例中,每个计算子部分808具有类似的结构,并且为了简洁起见,仅示出了一个计算子部分808(计算子部分808a)。在其他实施例中,一个或多个其他计算子部分808具有不同于计算子部分808a的合适结构。
计算子部分808a接收元数据、描述符修改信息(便笺式存储器)、(例如,由选择器704(图7)选择的)至少报头信息的子集和控制信息。在各种其他实施例中,计算子部分808a不接收元数据、描述符修改信息(便笺式存储器)和报头信息的子集(例如,由选择器704(图7)选择的)中的一个或两个、或更多个的任何合适的组合。在其他实施例中,计算子部分808a附加地或替代地接收其他合适的信息,例如计数信息、状态信息等。
选择器电路812在控制信息的控制下,选择报头信息的子集、元数据、和描述符修改信息(便笺式存储器)中的一个,以生成所选择的信息。字段提取电路816耦合到选择器电路812,并从所选择的信息中选择位的一个或多个子集,以生成(多个)提取的字段。
移位逻辑电路820耦合到字段提取电路816。移位逻辑电路820在控制信息的控制下选择性地将(多个)提取的字段向左或向右移位(或不执行移位)。如本领域普通技术人员所公知的,将二进制值左移x位对应于将二进制值乘以2^x。类似地,将二进制值右移x位对应于将二进制值除以2^x。因此,在一些情况下,移位逻辑电路820用于对(多个)提取的字段执行2^x乘法或除法。在一些实施例中,控制信息指示i)移位是向左还是向右,以及ii)移位的位的数目。在一些实施例中,当控制信息指示移位0位时,移位逻辑电路820仅用于传递(多个)提取的字段通过而不进行修改。移位逻辑电路820生成这里称为“移位信息”的输出。当没有执行移位时,“移位信息”仅仅是由移位逻辑电路820接收的(多个)未修改的提取字段。
设置位逻辑电路824被耦合到移位逻辑电路820。在控制信息的控制下,设置位逻辑电路824选择性地将移位信息中的一个或多个位(或没有位)设置为(多个)期望值。在一些实施例中,控制信息指示i)要设置哪一个位或哪些位(如果有的话),以及ii)一个或多个相应位的(多个)特定值。在一些实施例中,当控制信息指示没有要设置的位时,设置位逻辑电路824仅用于传递移位信息而不进行修改。设置位逻辑电路824生成这里称为“具有设置位的信息”的输出。当没有设置位值时,“具有设置位的信息”仅仅是由设置位逻辑电路824接收的未修改的移位信息。
加法器/减法器电路828耦合到设置位逻辑电路824。在控制信息的控制下,加法器/减法器电路828选择性地向具有设置位的信息加上或减去常数(或不执行加法或减法)。在一些实施例中,控制信息指示i)是否要执行加法、减法或不执行任何操作,以及ii)如果执行的话,要被加上或减去的常数。在一些实施例中,当控制信息指示不执行任何操作时,加法器/减法器电路828仅用于传递具有设置位的信息而不进行修改。加法器/减法器电路828生成这里称为“和/差”的输出。当不执行加法或减法操作时,“和/差”仅仅是由加法器/减法器电路828接收的具有设置位的未修改信息。
和/差被存储在寄存器832中。寄存器832通信地耦合到一个或多个其他计算子部分808,使得由计算子部分808a生成的和/差可供一个或多个其他计算子部分808使用。在其他实施例中,寄存器832不通信地耦合到任何其他计算子部分808,并且由计算子部分808a生成的和/差不可由任何其他计算子部分808使用。
设置值电路836在控制信息的控制下生成输出。控制信息指示如下的特定值,设置值电路836将设置值电路836的输出设置到的该特定值。
计算子部分808a包括算术函数电路840,其被配置为在控制信息的控制下,使用第一操作数和第二操作数选择性地执行算术函数。在各种实施例中,算术函数电路840被配置为选择性地执行来自一个或多个算术函数的集合中的如控制信息所指定的算术函数,该一个或多个算术函数的集合包括以下各项中的一项或两项或更多项的任何适当组合:i)将第一操作数和第二操作数相加以生成和,ii)从第一操作数中减去第二操作数以生成差,ii)从第二操作数中减去第一操作数以生成差,iii)将第一操作数与第二操作数进行比较以生成比较结果,等等。在一些实施例中,当控制信息指示将不执行任何操作时,算术函数电路840仅用于传递第一操作数而不进行修改。
算术函数电路840生成本文称为“算术结果”的输出。当不执行任何操作时,“算术结果”仅仅是算术函数电路840所接收的未修改的第一操作数。
选择器电路844在控制信息的控制下选择算术函数电路840的第一操作数。选择器电路844从候选第一操作数的集合中选择一个值作为第一操作数,该候选第一操作数的集合包括:i)由字段提取电路816生成的(多个)提取的字段,ii)存储在寄存器832中的和/差,以及iii)设置值电路836的输出。在各种其他实施例中,该候选第一操作数的集合包括其他合适的值和/或排除以下各项中的一个或两个或更多个的任何合适的组合:i)由字段提取电路816生成的(多个)提取的字段,ii)存储在寄存器832中的和/差,以及iii)设置值电路836的输出。
选择器电路848在控制信息的控制下选择算术函数电路840的第二操作数。选择器电路844从候选第二操作数的集合中选择一个值作为第二操作数,该候选第二操作数的集合包括:由其他计算子部分808生成的多个值。在一些实施例中,由其他计算子部分808生成的多个值包括:其他计算子部分808中的与计算子部分808a中的寄存器832相对应的寄存器中的值。在各种其他实施例中,该候选第二操作数的集合包括其他合适的值(例如由计算子部分808a生成的值)、和/或排除由其他计算子部分808生成的一个或多个值。
选择器852耦合到算术函数电路840,并且被配置为在控制信息的控制下,选择性地i)将算术结果写入描述符修改信息(便笺式存储器)和/或ii)输出算术结果作为要提供给另一个计算级604(图6)的偏移信息。在一个实施例中,选择器852被配置为在控制信息的控制下,选择性地仅执行以下之一:i)将算术结果写入描述符修改信息(便笺式存储器)、或ii)输出算术结果作为要提供给另一个计算级604(图6)的偏移信息。在另一个实施例中,选择器852被配置为在控制信息的控制下,选择性地执行以下之一或两者:i)将算术结果写入描述符修改信息(便笺式存储器),和/或ii)输出算术结果作为要提供给另一个计算级604(图6)的偏移信息。
再次参考图1和图2,在其他实施例中,混合固定/可编程报头解析器104和/或可编程报头解析器248的可编程解析电路包括:处理器、和耦合到处理器的存储器,该存储器存储软件和/或固件指令(或其他合适的机器可读指令),并且该处理器被配置为执行存储在存储器中的软件和/或固件指令(或其他合适的机器可读指令),以解析报头的第二部分,如上所述。因为使用软件仅解析报头的一部分,所以至少在一些实施例中,可编程报头解析器248能够以线速解析分组的一部分。此外,因为使用软件仅解析报头的一部分,所以混合分组解析器200(其包括固定报头解析器244和可编程报头解析器248)能够以线速容易地解析整个分组报头,并且至少在一些实施例中,能够使用比更传统的完全可编程报头解析器更少的可编程计算资源来这样做。
图9是根据一个实施例的用于在包括第一解析电路和可编程第二解析电路的网络设备中处理分组的示例方法900的流程图。在一个实施例中,网络设备与图1的网络设备100相对应,并且第一解析电路和可编程第二解析电路是混合固定/可编程报头解析器104的组件。在其他实施例中,方法900由不同于图1的网络设备100的另一个合适的网络设备来实现。
在一个实施例中,第一解析电路和可编程第二解析电路分别与图2的固定报头解析器244和可编程报头解析器248相对应。在其他实施例中,使用分别不同于图2的固定报头解析器244和/或可编程报头解析器248的第一解析电路和可编程第二解析电路来实现方法900。
在一个实施例中,可编程第二解析电路与图6的可编程解析器600相对应。在其他实施例中,使用不同于图6的可编程解析器600的合适的可编程解析电路来实现方法900。
在一个实施例中,可编程第二解析电路包括图7的计算级700。在其他实施例中,方法900使用合适的可编程解析电路来实现,该解析电路包括不同于计算级700的架构。
在一个实施例中,可编程第二解析电路包括图8的计算硬件单元800。在其他实施例中,方法900使用合适的可编程解析电路来实现,该可编程解析电路包括不同于计算硬件单元800的架构。
仅出于解释目的,参照图1-8描述了方法900。然而,如上所述,方法900可以使用不同于以上参考图1、2和6-8描述的其他网络设备和解析电路系统来实现。类似地,方法900可以结合除了参考图3-5描述的那些之外的分组格式来使用。
在框904,网络设备接收分组。在一个实施例中,网络设备经由网络接口接收分组。例如,根据一个说明性实施例,网络设备100经由网络接口108接收分组。
在框908,分组的报头由第一解析电路和可编程第二解析电路解析。在一个实施例中,解析分组的报头包括i)由第一解析电路解析报头的第一部分,以及ii)由可编程第二解析电路解析报头中的不同于报头的第一部分的第二部分。在另一个实施例中,解析分组的报头还包括:i)由第一解析电路提示网络设备的可编程第二解析电路解析报头的第二部分;ii)由可编程第二解析电路从可编程第二解析电路的存储器中检索控制信息,该控制信息指示将执行的与解析报头的第二部分有关的操作,以及iii)由可编程第二解析电路解析报头的第二部分,包括使用控制信息控制可编程第二解析电路的可配置电路系统。
在一个实施例中,方法900还包括:由第一解析电路生成位置的指示,该位置在来自分组的报头信息的集合内,可编程第二解析电路将在该位置处开始解析;以及由可编程第二解析电路使用与解析报头的第二部分有关的该位置的指示。
在另一实施例中,方法900还包括:由第一解析电路并且使用从分组的报头解析出的信息,确定可编程第二解析电路是否要解析报头的第二部分;以及响应于确定可编程第二解析电路要解析报头的第二部分,第一解析电路选择性地提示可编程第二解析电路解析报头的第二部分。
在一些实施例中,确定可编程第二解析电路是否解要析报头的第二部分包括:使用从分组的报头的第一部分解析出的信息确定可编程第二解析电路是否要解析报头的第二部分。
作为一个说明性实施例,确定可编程第二解析电路是否要解析报头的第二部分包括:使用从分组的报头解析出的端口信息,确定可编程第二解析电路是否要解析报头的第二部分。例如,如上参考图3所述,第一解析电路可以:根据外部UDP报头332的目的地端口字段384中包括的信息,确定可编程第二解析电路是否要解析报头的第二部分。
作为另一个说明性实施例,确定可编程第二解析电路是否要解析报头的第二部分包括:使用从分组的报头解析出的报头长度信息,确定可编程第二解析电路是否要解析报头的第二部分。例如,如上参考图4和图5所述,第一解析电路可以:根据包括在报头的长度字段中的信息,例如NSH 408的长度子字段448和/或CMD标签536的长度字段572,来确定可编程第二解析电路是否要解析报头的第二部分。
作为另一个说明性实施例,确定可编程第二解析电路是否要解析报头的第二部分包括:使用从分组的报头解析出的以太类型信息,确定可编程第二解析电路是否要解析报头的第二部分。例如,如上参考图5所述,第一解析电路可以:根据CMD标签536的CMD以太类型字段564中的信息,确定可编程第二解析电路是否要解析报头的第二部分。
在其他实施例中,确定所述可编程第二解析电路是否要解析报头的第二部分包括附加地或替代地使用从分组的报头的第二部分解析出的信息。
在一些实施例中,检索控制信息包括:使用来自报头中的信息生成密钥;向具有多个TCAM条目的TCAM提供密钥;由TCAM生成指示密钥与TCAM条目之一的匹配的索引输出;以及使用来自TCAM的索引输出从存储器中检索控制信息。作为一个说明性实施例,密钥生成器708可选地使用来自分组的报头的信息来生成密钥;密钥被提供给TCAM 712;并且由TCAM712生成的索引用于从存储器716中检索控制信息。
在框912,网络设备的转发引擎确定发送分组所经由的一个或多个出口网络接口。在一个实施例中,确定一个或多个出口网络接口包括转发引擎使用由i)第一解析电路和ii)可编程第二解析电路中的一个或两个从报头解析出的信息来确定一个或多个网络出口接口。
在框916中,网络设备经由在框912处确定的一个或多个网络接口发送分组。例如,根据一个说明性实施例,网络设备100经由一个或多个网络接口108发送分组。
实施例1:一种网络设备,包括:多个网络接口,被配置为与多个网络链路通信地耦合;以及耦合到多个网络接口的分组处理器,分组处理器包括:转发引擎,被配置为确定出口网络接口,经由多个网络接口而接收的分组将经由出口网络接口被发送;以及报头解析器,被配置为解析经由多个网络接口接收的分组中的报头信息;其中,报头解析器包括:第一解析电路,被配置为解析分组的报头的第一部分,并且提示可编程第二解析电路解析报头的第二部分,报头的第一部分具有第一解析电路已知的报头结构;以及可编程第二解析电路,可编程第二解析电路包括i)可配置电路系统和ii)存储控制信息的存储器,控制信息控制可配置电路系统的操作,以解析报头的第二部分。
实施例2:根据实施例1所述的网络设备,其中:第一解析电路进一步被配置为生成如下的位置的指示,位置在来自分组的报头信息的集合内,可编程第二解析电路将在位置处开始解析;并且可编程第二解析电路还被配置为使用与与解析报头的第二部分有关的位置的指示。
实施例3:根据实施例1或2所述的网络设备,其中,第一解析电路被配置为:使用从分组的报头解析出的信息,确定可编程第二解析电路是否要解析报头的第二部分;以及响应于确定可编程第二解析电路要解析报头的第二部分,选择性地提示可编程第二解析电路解析报头的第二部分。
实施例4:根据实施例3所述的网络设备,其中,第一解析电路被配置为:使用从分组的报头的第一部分解析出的信息,确定可编程第二解析电路是否要解析报头的第二部分。
实施例5:根据实施例3或4所述的网络设备,其中,第一解析电路被配置为:使用从分组的报头解析出的端口信息,确定可编程第二解析电路是否要解析报头的第二部分。
实施例6:根据实施例3-5中任一项所述的网络设备,其中,第一解析电路被配置为:使用从分组的报头解析出的报头长度信息,确定可编程第二解析电路是否要解析报头的第二部分。
实施例7:根据实施例3-6中任一项所述的网络设备,其中,第一解析电路被配置为:使用从分组的报头解析出的以太类型信息,确定可编程第二解析电路是否要解析报头的第二部分。
实施例8:根据实施例3-7中任一项所述的网络设备,其中,第一解析电路被配置为:使用从分组的报头的第二部分解析出的信息,确定可编程第二解析电路是否要解析报头的第二部分。
实施例9:根据实施例3-8中任一项所述的网络设备,其中,可编程第二解析电路包括:密钥生成器,被配置为使用来自报头的信息生成密钥;三态内容可寻址存储器(TCAM),包括多个TCAM条目,TCAM被配置为生成索引输出,该索引输出指示密钥与TCAM条目之一的匹配;存储器设备,用于将控制信息存储在与TCAM条目相对应的存储器条目中,以及输出相应存储器条目中的与由TCAM输出的索引输出相对应的控制信息的子集;以及可配置计算硬件电路系统,被配置为执行由存储器设备输出的控制信息的子集指定的计算操作。
实施例10:根据实施例3-9中任一项所述的网络设备,其中,可编程解析第二电路包括:存储器,存储机器可读指令;以及处理器,耦合到存储器,处理器被配置为执行存储在存储器中的机器可读指令。
实施例11:根据实施例3-10中任一项所述的网络设备,其中:分组处理器包括具有多个流水线级的分组处理流水线;转发引擎是多个流水线级中的第一流水线级;并且报头解析器是多个流水线级中的第二流水线级。
实施例12:一种用于在网络设备中处理分组的方法,方法包括:经由网络设备的网络接口接收分组;解析分组的报头,包括:由第一解析电路解析报头的第一部分,报头的第一部分具有第一解析电路已知的报头结构,由第一解析电路提示网络设备的可编程第二解析电路解析报头的第二部分,由可编程第二解析电路从可编程第二解析电路的存储器中检索控制信息,控制信息指示将执行的与解析报头的第二部分相关的操作,以及由可编程第二解析电路解析报头的第二部分,包括使用控制信息控制可编程第二解析电路的可配置电路系统;由转发引擎确定发送分组所经由的一个或多个出口网络接口,一个或多个出口网络接口是使用由i)第一解析电路和ii)可编程第二解析电路中的一个或两个从报头解析出的信息来确定的;以及经由由转发引擎确定的一个或多个出口网络接口,发送分组。
实施例13:根据实施例12所述的方法,还包括:由第一解析电路,生成如下的位置的指示,位置在来自分组的报头信息的集合内,可编程第二解析电路将在位置处开始解析;以及由可编程第二解析电路,使用与解析报头的第二部分相关的位置的指示。
实施例14:根据实施例12或13所述的方法,还包括:由第一解析电路、并且使用从分组的报头解析出的信息,确定可编程第二解析电路是否要解析报头的第二部分;其中,由第一解析电路提示网络设备的可编程第二解析电路解析报头的第二部分包括:响应于确定可编程第二解析电路要解析报头的第二部分,由第一解析电路选择性地提示可编程第二解析电路解析报头的第二部分。
实施例15:根据实施例14所述的方法,其中:确定可编程第二解析电路是否要解析报头的第二部分包括:使用从分组的报头的第一部分解析出的信息,确定可编程第二解析电路是否要解析报头的第二部分。
实施例16:根据实施例14或15所述的方法,其中:确定可编程第二解析电路是否要解析报头的第二部分包括:使用从分组的报头解析出的端口信息,确定可编程第二解析电路是否要解析报头的第二部分。
实施例17:根据实施例14-16中任一项所述的方法,其中:确定可编程第二解析电路是否要解析报头的第二部分包括:使用从分组的报头解析出的报头长度信息,确定可编程第二解析电路是否要解析报头的第二部分。
实施例18:根据实施例14-17中任一项所述的方法,其中:确定可编程第二解析电路是否要解析报头的第二部所述分包括:使用从分组的报头解析出的以太类型信息,确定可编程第二解析电路是否要解析报头的第二部分。
实施例19:根据实施例14-18中任一项所述的方法,其中:确定可编程第二解析电路是否要解析报头的第二部所述分包括:使用从分组的报头的第二部分解析出的信息,确定可编程第二解析电路是否要解析报头的第二部分。
实施例20:根据实施例12-19中任一项所述的方法,其中,检索控制信息包括:使用来自报头的信息生成密钥;向包括多个TCAM条目的三态内容可寻址存储器(TCAM)提供密钥;由TCAM生成索引输出,索引输出指示密钥与TCAM条目之一的匹配;以及使用来自TCAM的索引输出,从存储器中检索控制信息。
可利用硬件、执行固件指令的处理器、执行软件指令的处理器或其任意组合,实施上述各种框、操作和技术中的至少一些。当利用执行软件或固件指令的处理器来实现时,软件或固件指令可以存储在任何计算机可读存储器中,例如RAM、ROM、闪存、处理器的集成存储器等。软件或固件指令可以包括机器可读指令,当由处理器执行时,这些指令使得处理器执行各种动作。
在硬件中实施时,硬件可以包括一个或多个离散组件、一个或多个IC、专用集成电路(ASIC)、可编程逻辑装置(PLD)等。
虽然本发明已参照特定示例进行了描述,但这些示例仅用于说明,并不限制本发明,在不脱离本发明范围的情况下,可对公开的实施例进行变更、添加和/或删除。
Claims (20)
1.一种网络设备,包括:
多个网络接口,被配置为与多个网络链路通信地耦合;和
耦合到所述多个网络接口的分组处理器,所述分组处理器包括:
转发引擎,被配置为确定出口网络接口,经由所述多个网络接口而接收的分组将经由所述出口网络接口被发送,以及
报头解析器,被配置为解析经由所述多个网络接口接收的所述分组中的报头信息;
其中所述报头解析器包括:
第一解析电路,被配置为解析分组的报头的第一部分,并且提示可编程第二解析电路解析所述报头的第二部分,所述报头的所述第一部分具有所述第一解析电路已知的报头结构,以及
所述可编程第二解析电路,所述可编程第二解析电路包括i)可配置电路系统和ii)存储控制信息的存储器,所述控制信息控制所述可配置电路系统的操作以解析所述报头的所述第二部分。
2.根据权利要求1所述的网络设备,其中:
所述第一解析电路还被配置为生成如下位置的指示,所述位置在来自所述分组的报头信息的集合内,所述可编程第二解析电路将在所述位置处开始解析;以及
所述可编程第二解析电路还被配置为使用与解析所述报头的所述第二部分有关的所述位置的指示。
3.根据权利要求1所述的网络设备,其中所述第一解析电路被配置为:
使用从所述分组的报头解析出的信息,确定所述可编程第二解析电路是否要解析所述报头的所述第二部分;以及
响应于确定所述可编程第二解析电路要解析所述报头的所述第二部分,选择性地提示所述可编程第二解析电路解析所述报头的所述第二部分。
4.根据权利要求3所述的网络设备,其中所述第一解析电路被配置为:
使用从所述分组的报头的第一部分解析出的信息,确定所述可编程第二解析电路是否要解析所述报头的所述第二部分。
5.根据权利要求3所述的网络设备,其中所述第一解析电路被配置为:
使用从所述分组的报头解析出的端口信息,确定所述可编程第二解析电路是否要解析所述报头的所述第二部分。
6.根据权利要求3所述的网络设备,其中所述第一解析电路被配置为:
使用从所述分组的报头解析出的报头长度信息,确定所述可编程第二解析电路是否要解析所述报头的所述第二部分。
7.根据权利要求3所述的网络设备,其中所述第一解析电路被配置为:
使用从所述分组的报头解析出的以太类型信息,确定所述可编程第二解析电路是否要解析所述报头的所述第二部分。
8.根据权利要求3所述的网络设备,其中,所述第一解析电路被配置为:
使用从所述分组的报头的第二部分解析出的信息,确定所述可编程第二解析电路是否要解析所述报头的所述第二部分。
9.根据权利要求1所述的网络设备,其中,所述可编程解析第二电路包括:
密钥生成器,被配置为使用来自所述报头的信息生成密钥;
三态内容可寻址存储器(TCAM),包括多个TCAM条目,所述TCAM被配置为生成索引输出,所述索引输出指示所述密钥与所述TCAM条目之一的匹配;
存储器设备,用于将控制信息存储在与所述TCAM条目相对应的存储器条目中,并且输出相应存储器条目中的与所述TCAM的所述索引输出相对应的控制信息的子集;和
可配置计算硬件电路系统,被配置为执行由所述存储器设备输出的所述控制信息的子集指定的计算操作。
10.根据权利要求1所述的网络设备,其中所述可编程解析第二电路包括:
存储器,存储机器可读指令;和
处理器,耦合到所述存储器,所述处理器被配置为执行存储在所述存储器中的机器可读指令。
11.根据权利要求1所述的网络设备,其中:
所述分组处理器包括具有多个流水线级的分组处理流水线;
所述转发引擎是所述多个流水线级之中的第一流水线级;以及
所述报头解析器是所述多个流水线级之中的第二流水线级。
12.一种用于在网络设备中处理分组的方法,所述方法包括:
经由所述网络设备的网络接口接收分组;
解析所述分组的报头,包括:
由第一解析电路解析所述报头的第一部分,所述报头的第一部分具有第一解析电路已知的报头结构,
由所述第一解析电路提示所述网络设备的可编程第二解析电路解析所述报头的第二部分,
由所述可编程第二解析电路从所述可编程第二解析电路的存储器中检索控制信息,所述控制信息指示将被执行的与解析所述报头的所述第二部分有关的操作,以及
由所述可编程第二解析电路解析所述报头的所述第二部分,包括使用所述控制信息控制所述可编程第二解析电路的可配置电路系统;
由转发引擎确定发送所述分组所经由的一个或多个出口网络接口,所述一个或多个出口网络接口使用由以下项中的一者或两者从所述报头解析出的信息来确定:i)所述第一解析电路和ii)所述可编程第二解析电路;以及
经由由所述转发引擎确定的所述一个或多个出口网络接口,发送所述分组。
13.根据权利要求12所述的方法,进一步包括:
由所述第一解析电路,生成如下位置的指示,所述位置在来自所述分组的报头信息的集合内,所述可编程第二解析电路将在所述位置处开始解析;以及
由所述可编程第二解析电路,使用与解析所述报头的所述第二部分有关的位置的指示。
14.根据权利要求12所述的方法,进一步包括:
由所述第一解析电路并使用从所述分组的所述报头解析出的信息,来确定所述可编程第二解析电路是否要解析所述报头的所述第二部分;
其中由所述第一解析电路提示所述网络设备的所述可编程第二解析电路解析所述报头的所述第二部分包括:响应于确定所述可编程第二解析电路要解析所述报头的所述第二部分,由所述第一解析电路选择性地提示所述可编程第二解析电路解析所述报头的所述第二部分。
15.根据权利要求14所述的方法,其中:
确定所述可编程第二解析电路是否要解析所述报头的所述第二部分包括:使用从所述分组的所述报头的所述第一部分解析出的信息,确定所述可编程第二解析电路是否要解析所述报头的所述第二部分。
16.根据权利要求14所述的方法,其中:
确定所述可编程第二解析电路是否要解析所述报头的所述第二部分包括:使用从所述分组的报头解析出的端口信息,确定所述可编程第二解析电路是否要解析所述报头的所述第二部分。
17.根据权利要求14所述的方法,其中:
确定所述可编程第二解析电路是否要解析所述报头的所述第二部分包括:使用从所述分组的报头解析出的报头长度信息,确定所述可编程第二解析电路是否要解析所述报头的所述第二部分。
18.根据权利要求14所述的方法,其中:
确定所述可编程第二解析电路是否要解析所述报头的所述第二部分包括:使用从所述分组的报头解析出的以太类型信息,确定所述可编程第二解析电路是否要解析所述报头的所述第二部分。
19.根据权利要求14所述的方法,其中:
确定所述可编程第二解析电路是否要解析所述报头的所述第二部分包括:使用从所述分组的报头的所述第二部分解析出的信息,确定所述可编程第二解析电路是否要解析所述报头的所述第二部分。
20.根据权利要求12所述的方法,其中检索所述控制信息包括:
使用来自所述报头的信息生成密钥;
向包括多个TCAM条目的三态内容可寻址存储器(TCAM)提供所述密钥;
由所述TCAM生成索引输出,所述索引输出指示所述密钥与所述TCAM条目之一的匹配;和
使用来自所述TCAM的索引输出,从所述存储器中检索控制信息。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201962948043P | 2019-12-13 | 2019-12-13 | |
US62/948,043 | 2019-12-13 | ||
PCT/IB2020/001042 WO2021116770A1 (en) | 2019-12-13 | 2020-12-11 | Hybrid fixed/programmable header parser for network devices |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115088239A true CN115088239A (zh) | 2022-09-20 |
Family
ID=74853668
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080096569.6A Pending CN115088239A (zh) | 2019-12-13 | 2020-12-11 | 用于网络设备的混合固定/可编程报头解析器 |
Country Status (3)
Country | Link |
---|---|
US (1) | US12058231B2 (zh) |
CN (1) | CN115088239A (zh) |
WO (1) | WO2021116770A1 (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US12041252B2 (en) * | 2021-06-07 | 2024-07-16 | Sony Interactive Entertainment Inc. | Multi-threaded CABAC decoding |
US11711453B2 (en) * | 2021-10-24 | 2023-07-25 | Mellanox Technologies, Ltd. | Template-based packet parsing |
CN114356827B (zh) * | 2021-12-23 | 2024-03-22 | 海光信息技术股份有限公司 | 数据解析方法、装置、设备及介质 |
CN115633103B (zh) * | 2022-09-01 | 2024-08-13 | 篆芯半导体(南京)有限公司 | 数据包的混合解析方法及系统 |
CN115883681B (zh) * | 2023-02-08 | 2023-06-23 | 天翼云科技有限公司 | 报文解析方法、装置、电子设备及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110268123A1 (en) * | 2007-03-12 | 2011-11-03 | Yaniv Kopelman | Method and apparatus for determining locations of fields in a data unit |
US20130215906A1 (en) * | 2012-02-17 | 2013-08-22 | Takashi Hidai | Reconfigurable packet header parsing |
US20160139892A1 (en) * | 2014-11-14 | 2016-05-19 | Xpliant, Inc. | Parser engine programming tool for programmable network devices |
CN107529352A (zh) * | 2015-03-13 | 2017-12-29 | 凯为公司 | 用于软件定义的数据中心网络的协议独立的可编程交换机(pips) |
US20180041450A1 (en) * | 2013-12-30 | 2018-02-08 | Cavium, Inc. | Protocol independent programmable switch (pips) for software defined data center networks |
US20180287820A1 (en) * | 2017-03-28 | 2018-10-04 | Marvell World Trade Ltd. | Flexible processor of a port extender device |
US20190044866A1 (en) * | 2018-09-13 | 2019-02-07 | Intel Corporation | Technologies for filtering network traffic on ingress |
Family Cites Families (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FI104672B (fi) | 1997-07-14 | 2000-04-14 | Nokia Networks Oy | Kytkinjärjestely |
US6304903B1 (en) | 1997-08-01 | 2001-10-16 | Agilent Technologies, Inc. | State machine for collecting information on use of a packet network |
DE60045552D1 (de) | 1999-06-30 | 2011-03-03 | Apptitude Inc | Verfahren und gerät um den netzwerkverkehr zu überwachen |
US6741591B1 (en) | 1999-11-03 | 2004-05-25 | Cisco Technology, Inc. | Search engine interface system and method |
US8300534B2 (en) | 2000-05-24 | 2012-10-30 | Alcatel Lucent | Programmable packet processor with flow resolution logic |
US6904057B2 (en) | 2001-05-04 | 2005-06-07 | Slt Logic Llc | Method and apparatus for providing multi-protocol, multi-stage, real-time frame classification |
US7305492B2 (en) | 2001-07-06 | 2007-12-04 | Juniper Networks, Inc. | Content service aggregation system |
US7580408B2 (en) | 2001-11-21 | 2009-08-25 | Alcatel Lucent | Configurable packet processor |
US7212531B1 (en) | 2001-11-27 | 2007-05-01 | Marvell Semiconductor Israel Ltd. | Apparatus and method for efficient longest prefix match lookup |
US7046687B1 (en) | 2002-01-16 | 2006-05-16 | Tau Networks | Configurable virtual output queues in a scalable switching system |
US7177311B1 (en) | 2002-06-04 | 2007-02-13 | Fortinet, Inc. | System and method for routing traffic through a virtual router-based network switch |
US20040066748A1 (en) | 2002-10-04 | 2004-04-08 | Burnett Charles James | Method and apparatus for testing a data network |
US7356033B2 (en) | 2002-11-21 | 2008-04-08 | Lucent Technologies Inc. | Method and apparatus for performing network routing with use of power efficient TCAM-based forwarding engine architectures |
US7426608B1 (en) | 2003-12-12 | 2008-09-16 | Rmi Corporation | Method and apparatus for constructing a search key |
KR100564768B1 (ko) | 2003-12-26 | 2006-03-27 | 한국전자통신연구원 | 순차룩업에 의한 패킷헤더 룩업장치 및 방법 |
US8218539B2 (en) | 2006-10-18 | 2012-07-10 | Broadcom Corporation | Flexible packet field processor |
KR20080083828A (ko) | 2007-03-13 | 2008-09-19 | 삼성전자주식회사 | 상태기반 패킷필터링 장치 및 그 장치에서의 테이블 관리방법 |
US7924860B1 (en) | 2008-12-23 | 2011-04-12 | Juniper Networks, Inc. | Maintaining data unit order in a network switching device |
US8638793B1 (en) | 2009-04-06 | 2014-01-28 | Marvell Israle (M.I.S.L) Ltd. | Enhanced parsing and classification in a packet processor |
US8917738B2 (en) | 2009-04-27 | 2014-12-23 | Lsi Corporation | Multicasting traffic manager in a network communications processor architecture |
US8743877B2 (en) | 2009-12-21 | 2014-06-03 | Steven L. Pope | Header processing engine |
US8848715B2 (en) | 2010-03-16 | 2014-09-30 | Marvell Israel (M.I.S.L) Ltd. | Combined hardware/software forwarding mechanism and method |
US8611352B2 (en) | 2010-04-20 | 2013-12-17 | Marvell World Trade Ltd. | System and method for adapting a packet processing pipeline |
CN103004158B (zh) | 2011-01-06 | 2016-12-28 | 马维尔以色列(M.I.S.L)有限公司 | 具有可编程内核的网络设备 |
US9276851B1 (en) | 2011-12-20 | 2016-03-01 | Marvell Israel (M.I.S.L.) Ltd. | Parser and modifier for processing network packets |
US9455907B1 (en) | 2012-11-29 | 2016-09-27 | Marvell Israel (M.I.S.L) Ltd. | Multithreaded parallel packet processing in network devices |
CN104885422B (zh) | 2012-12-17 | 2019-03-22 | 马维尔以色列(M.I.S.L.)有限公司 | 在并行处理网络设备中维持分组顺序的方法和设备 |
US9553820B2 (en) | 2012-12-17 | 2017-01-24 | Marvell Israel (M.L.S.L) Ltd. | Maintaining packet order in a parallel processing network device |
CN104871145A (zh) | 2012-12-20 | 2015-08-26 | 马维尔国际贸易有限公司 | 网络设备中的存储器共享 |
CN105765928B (zh) | 2013-09-10 | 2019-02-15 | 马维尔国际贸易有限公司 | 用于处理网络分组的方法和网络设备 |
WO2015056095A1 (en) | 2013-10-17 | 2015-04-23 | Marvell World Trade Ltd. | Packet parsing and key generation in a network device |
US9467399B2 (en) | 2013-10-17 | 2016-10-11 | Marvell World Trade Ltd. | Processing concurrency in a network device |
US9923813B2 (en) | 2013-12-18 | 2018-03-20 | Marvell World Trade Ltd. | Increasing packet processing rate in a network device |
US9954771B1 (en) | 2015-01-30 | 2018-04-24 | Marvell Israel (M.I.S.L) Ltd. | Packet distribution with prefetch in a parallel processing network device |
US11343358B2 (en) | 2019-01-29 | 2022-05-24 | Marvell Israel (M.I.S.L) Ltd. | Flexible header alteration in network devices |
-
2020
- 2020-12-11 WO PCT/IB2020/001042 patent/WO2021116770A1/en active Application Filing
- 2020-12-11 US US17/119,985 patent/US12058231B2/en active Active
- 2020-12-11 CN CN202080096569.6A patent/CN115088239A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110268123A1 (en) * | 2007-03-12 | 2011-11-03 | Yaniv Kopelman | Method and apparatus for determining locations of fields in a data unit |
US20130215906A1 (en) * | 2012-02-17 | 2013-08-22 | Takashi Hidai | Reconfigurable packet header parsing |
US20180041450A1 (en) * | 2013-12-30 | 2018-02-08 | Cavium, Inc. | Protocol independent programmable switch (pips) for software defined data center networks |
US20160139892A1 (en) * | 2014-11-14 | 2016-05-19 | Xpliant, Inc. | Parser engine programming tool for programmable network devices |
CN107529352A (zh) * | 2015-03-13 | 2017-12-29 | 凯为公司 | 用于软件定义的数据中心网络的协议独立的可编程交换机(pips) |
US20180287820A1 (en) * | 2017-03-28 | 2018-10-04 | Marvell World Trade Ltd. | Flexible processor of a port extender device |
US20190044866A1 (en) * | 2018-09-13 | 2019-02-07 | Intel Corporation | Technologies for filtering network traffic on ingress |
Also Published As
Publication number | Publication date |
---|---|
US12058231B2 (en) | 2024-08-06 |
WO2021116770A1 (en) | 2021-06-17 |
US20210185153A1 (en) | 2021-06-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115088239A (zh) | 用于网络设备的混合固定/可编程报头解析器 | |
US10764181B2 (en) | Pipelined evaluations for algorithmic forwarding route lookup | |
US8638793B1 (en) | Enhanced parsing and classification in a packet processor | |
US8854996B2 (en) | Accelerating data packet parsing | |
US10805437B2 (en) | Compiler and hardware interactions to remove action dependencies in the data plane of a network forwarding element | |
CN105794172B (zh) | 网络设备和用于在网络设备中处理报文的方法 | |
EP3228060B1 (en) | Context-aware distributed firewall | |
US11425058B2 (en) | Generation of descriptive data for packet fields | |
CN105024985B (zh) | 一种报文处理方法及装置 | |
USRE50135E1 (en) | Forwarding of packets in a network based on multiple compact forwarding identifiers represented in a single internet protocol version 6 (IPv6) address | |
US10348603B1 (en) | Adaptive forwarding tables | |
JPWO2015125801A1 (ja) | ネットワーク制御方法、ネットワークシステムと装置及びプログラム | |
JP2000244577A (ja) | Trieメモリによって転送基準値をデータパケットと関連づける方法およびこの方法を用いたパケット処理装置 | |
US7403526B1 (en) | Partitioning and filtering a search space of particular use for determining a longest prefix match thereon | |
US7433963B2 (en) | Methods, systems, and computer program products for using a translation/instruction system to redirect a multiprotocol label switching (MPLS) packet | |
US9189218B2 (en) | Processing packets by generating machine code from pre-compiled code fragments | |
CN113986560B (zh) | 一种在智能网卡/DPU内实现P4与OvS逻辑复用的方法 | |
JP2009219065A (ja) | プロトコル処理装置及び処理方法 | |
CN113411290A (zh) | 一种分组头解析方法及装置 | |
US10887234B1 (en) | Programmatic selection of load balancing output amongst forwarding paths | |
WO2016176853A1 (zh) | 一种路由查询方法和网络设备 | |
US20140208016A1 (en) | System and Method for Filtering Addresses | |
US8040882B2 (en) | Efficient key sequencer | |
CN115633103B (zh) | 数据包的混合解析方法及系统 | |
CN117240947B (zh) | 一种报文处理方法、装置及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |