一种报文处理方法及装置与流程

文档序号:16909209发布日期:2019-02-19 18:31阅读:263来源:国知局
一种报文处理方法及装置与流程

本发明涉及通信技术领域,尤其涉及一种报文处理方法及装置。



背景技术:

开放流(OpenFlow)技术实现了转发和控制的分离,可以通过在控制器上编程来控制报文转发。OpenFlow技术采用由多级流表组成的流水线执行对报文的转发处理。关于开放流技术,可以参考开放流交换机说明书第1.4.0版(OpenFlow Switch Specification version 1.4.0)。

报文处理装置对报文进行处理时,报文的处理流程中可能会涉及到多个指令块。例如,报文处理装置根据当前指令块获取下一个指令块的标识。报文处理装置根据下一个指令块的标识指示的下一个指令块对报文进行处理。

不同的报文的处理流程可能会涉及到同一个当前指令块以及同一个下一个指令块。报文处理装置可能需要保存多个下一个指令块的标识(Identifiers of The Next Instruction Block)。当下一个指令块的存储位置发生变化后,报文处理装置需要对多个下一个指令块的标识进行更新,开销比较大。

例如,报文1对应的当前指令块是指令块1,报文1对应的下一个指令块是指令块2。报文2对应的当前指令块是指令块1,报文2对应的下一个指令块是指令块2。报文处理装置对报文1进行处理流程包括,根据指令块1获取指令块2的标识,根据指令块2的标识对应的指令块2对报文1进行处理。报文处理装置对报文2进行处理流程包括,根据指令块1获取指令块2的标识,根据指令块2的标识对应的指令块2对报文2进行处理。报文处理装置需要保存报文1的处理流程涉及的指令块2的标识,报文处理装置也需要保存报文2的处理流程涉及的指令块2的标识。也就是说,报文处理装置需要保存2个指令块2的标识。如果指令块2的存储位置发生了变化,报文处理装置需要对2个指令块2的标识进行更新,开销比较大。



技术实现要素:

本发明的实施例提供一种报文处理方法及装置,解决了在指令块的存储位置发生变化后,报文处理装置需要对多个该指令块的标识进行更新,开销比较大的问题。

为达到上述目的,本发明的实施例采用如下技术方案:

第一方面,本发明实施例提供一种报文处理方法,该方法包括:

报文处理装置接收第一报文和第二报文;

所述报文处理装置确定与所述第一报文和所述第二报文对应的第一指令块;

所述报文处理装置根据所述第一指令块以及所述第一报文获取第一标识,根据所述第一指令块以及所述第二报文获取第二标识,所述第一标识用于指示第一表项,所述第二标识用于指示所述第一表项,所述第一表项包含第三标识,所述第三标识为第二指令块的存储地址;

所述报文处理装置通过访问所述第一标识指示的所述第一表项获取所述第三标识,通过访问所述第二标识指示的所述第一表项获取所述第三标识;

所述报文处理装置根据所述第三标识获取所述第二指令块;以及

所述报文处理装置根据所述第二指令块对所述第一报文以及所述第二报文进行处理。

在第一方面的第一种可能的实现方式中,所述报文处理装置根据所述第一指令块以及所述第一报文获取所述第一标识包括:

所述报文处理装置根据所述第一报文从所述第一指令块中获取第一跳转指令,所述第一标识是所述第一表项的存储地址,所述第一指令块包括所述第一跳转指令,所述第一跳转指令包括操作码和操作数,所述第一标识是所述操作数;

所述报文处理装置通过访问所述第一标识指示的所述第一表项获取所述第三标识包括:

所述报文处理装置通过执行所述第一跳转指令访问所述第一表项;以及

所述报文处理装置从所述第一表项中获取所述第三标识。

在第一方面的第二种可能的实现方式中,所述报文处理装置根据所述第一指令块以及所述第一报文获取所述第一标识,包括:

所述报文处理装置根据所述第一指令块从所述第一报文中获取查找关键字;

所述报文处理装置根据所述第一指令块获取第一流表的标识;

所述报文处理装置在所述第一流表的标识指示的所述第一流表中查找与所述查找关键字匹配的流表表项,所述流表表项中包括所述第一标识;以及

所述报文处理装置从所述流表表项中获取所述第一标识。

结合前述第一方面或者第一方面的第一种可能的实现方式至第一方面的第二种可能的实现方式中的任意一种,在第一方面的第三种可能的实现方式中,所述报文处理方法还包括:

所述报文处理装置删除所述第二指令块;

所述报文处理装置将所述第一表项中的所述第三标识设置为无效;

所述报文处理装置删除所述第一表项中的所述第三标识;或者

当所述第二指令块的存储位置从第一位置调整为第二位置,所述报文处理装置将所述第一表项中的所述第三标识替换为第四标识,所述第一位置对应所述第三标识,所述第二位置对应所述第四标识。

结合前述第一方面或者第一方面的第一种可能的实现方式至第一方面的第三种可能的实现方式中的任意一种,在第一方面的第四种可能的实现方式中,所述第一指令块为用户定义的指令块,所述报文处理装置确定与所述第一报文对应的所述第一指令块之前,所述方法还包括:

所述报文处理装置根据第三指令块获取第五标识,所述第五标识用于指示第二表项;以及

所述报文处理装置根据所述第五标识访问所述第二表项,所述第二表项包含第六标识,所述第六标识为所述第一指令块的存储地址;

所述报文处理装置确定与所述第一报文对应的所述第一指令块包括:

所述报文处理装置根据所述第二表项中的所述第六标识确定所述第一指令块。

第二方面,本发明实施例提供一种报文处理装置,该装置包括接收单元、确定单元、获取单元以及处理单元;

所述接收单元用于接收第一报文和第二报文;

所述确定单元用于确定与所述接收单元接收到的所述第一报文和所述第二报文对应的第一指令块;

所述获取单元用于根据所述确定单元确定的所述第一指令块以及所述接收单元接收的所述第一报文获取第一标识,根据所述确定单元确定的所述第一指令块以及所述接收单元接收的所述第二报文获取第二标识,所述第一标识用于指示第一表项,所述第二标识用于指示所述第一表项,所述第一表项包含第三标识,所述第三标识为第二指令块的存储地址;

所述获取单元还用于通过访问所述第一标识指示的所述第一表项获取所述第三标识,通过访问所述第二标识指示的所述第一表项获取所述第三标识;

所述获取单元还用于根据所述第三标识获取所述第二指令块;

所述处理单元用于根据所述获取单元获取到的所述第二指令块对所述接收单元接收的所述第一报文以及所述第二报文进行处理。

在第二方面的第一种可能的实现方式中,所述获取单元具体用于:

根据所述接收单元接收到的第一报文从所述确定单元确定的所述第一指令块中获取第一跳转指令,所述第一标识是所述第一表项的存储地址,所述第一指令块包括所述第一跳转指令,所述第一跳转指令包括操作码和操作数,所述第一标识是所述操作数;

通过执行所述第一跳转指令访问所述第一表项;以及

从所述第一表项中获取所述第三标识。

在第二方面的第二种可能的实现方式中,所述获取单元具体用于:

根据所述第一指令块从所述第一报文中获取查找关键字;

根据所述第一指令块获取第一流表的标识;

在所述第一流表的标识指示的所述第一流表中查找与所述查找关键字匹配的流表表项,所述流表表项中包括所述第一标识;以及

从所述流表表项中获取所述第一标识。

结合前述第二方面或者第一方面的第一种可能的实现方式至第二方面的第二种可能的实现方式中的任意一种,在第二方面的第三种可能的实现方式中,所述处理单元还用于:

删除所述第二指令块;

将所述第一表项中的所述第三标识设置为无效;

删除所述第一表项中的所述第三标识;或者

当所述第二指令块的存储位置从第一位置调整为第二位置,将所述第一表项中的所述第三标识替换为第四标识,所述第一位置对应所述第三标识,所述第二位置对应所述第四标识。

结合前述第二方面或者第一方面的第一种可能的实现方式至第二方面的第三种可能的实现方式中的任意一种,在第二方面的第四种可能的实现方式中,所述第一指令块为用户定义的指令块,

所述获取单元还用于:

在所述确定单元确定与所述第一报文对应的所述第一指令块之前,根据第三指令块获取第五标识,所述第五标识用于指示第二表项;以及

根据所述第五标识访问所述第二表项,所述第二表项包含第六标识,所述第六标识为所述第一指令块的存储地址;

所述确定单元用于根据所述获取单元访问的所述第二表项中的所述第六标识确定所述第一指令块。

根据上述技术方案,报文处理装置接收到第一报文和第二报文,确定与第一报文和第二报文对应的第一指令块,并根据第一指令块以及第一报文获取第一标识,根据第一指令块以及第二报文获取第二标识。其中,第一标识用于指示第一表项。第二标识用于指示第一表项。第一表项包含第三标识。第三标识为第二指令块的存储地址。报文处理装置通过访问第一标识指示的第一表项获取第三标识。通过访问第二标识指示的第一表项获取第三标识。报文处理装置根据第三标识获取第二指令块。并根据第二指令块对第一报文以及第二报文进行处理。

上述技术方案中,报文处理装置根据第一标识访问第一表项。根据第二标识访问第一表项。第一表项包含了第三标识。第三标识为第二指令块的存储地址。即第一表项中存储了第二指令块的存储地址。因此,报文处理装置能够根据第三标识获取第二指令块,并根据第二指令块对第一报文和第二报文进行处理。若第二指令块的存储位置发生了变化,报文处理装置仅需要对第一表项中存储的第三标识进行更新,即可获取存储位置发生变化后的第二指令块。现有技术中,报文处理装置中存储了多个标识,所述多个标识都用于标识同一个指令块。当所述同一个指令块的存储位置发生变化时,需要对所述多个标识进行更新。因此,上述技术方案需要对第一表项中的第三标识进行更新,不需要对多个标识进行更新,有助于降低开销,提高更新效率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例。

图1为报文处理装置采用OpenFlow技术进行报文处理的流程结构示意图;

图2为本发明实施例的报文处理方法的流程示意图;

图3为本发明实施例中第二标识的更新示意图;

图4为本发明实施例的报文处理装置的结构示意图一;

图5为本发明实施例的报文处理装置的结构示意图二。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。

本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于限定特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。

本申请中的指令块是指令序列。具体来说,指令序列是二进制指令序列。二进制指令序列也可以称为代码化指令序列。代码化指令序列可以通过符号化指令序列或者符号化语句序列得到。符号化指令序列可以是用汇编语言描述的指令序列。符号化语句序列可以是用高级编程语言描述的指令序列。

本申请中的供应商定义的指令块是指报文处理装置的供应商定义的指令块。报文处理装置可以是路由器或者网络交换机。报文处理装置供应商可以是华为或者思科。供应商定义的指令块可以是引导程序。例如,路由器上电后,路由器初始化过程需要加载引导程序。用户不能通过应用程序接口修改供应商定义的指令块。

本申请中的用户定义的指令块是指报文处理装置的用户定义的指令块。报文处理装置的用户可以是固定网络的运营商或者移动网络的运营商。例如,固定网络可以是以太网或者软件定义网络(SDN,Software Defined Network)。固定网络的运营商可以是中国移动、法国电信或者德国电信。

举例来说,编译型协议无感知转发(POF,Protocol Oblivious Forwarding)的场景包含控制器以及开放流交换机。控制器和开放流交换机通过控制通道进行通信。控制器中可以包含前端编译器。开放流交换机中可以包含后端编译器。中国移动的工程师可以通过控制器编辑计算机程序。例如,控制器中包含了集成开发环境(IDE,Integrated Development Environment)。IDE可以包括代码编辑器(Code Editor)。此外,IDE还可以包括编译器、调试器(Debugger)和图形用户界面(GUI,Graphical User Interface)。用户可以通过物理键盘或者虚拟键盘向IDE提供输入。具体的,用户可以使用高级编程语言编辑计算机程序。高级编程语言可以是Java或者C++。编译器可以对通过高级编程语言描述的计算机程序进行编译,从而生成通过汇编语言描述的计算机程序。控制器可以通过控制通道将通过汇编语言描述的计算机程序发送至开放流交换机。具体来说,控制器可以将通过汇编语言描述的计算机程序封装在开放流消息中,通过南向接口向开放流交换机发送开放流消息。开放流交换机接收到通过汇编语言描述的计算机程序后,可以通过后端编译器将通过汇编语言描述的计算机程序编译为微码。开放流交换机将微码加载到开放流交换机的转发平面。开放流交换机接收到报文后,开放流交换机可以根据微码对报文进行处理。可以理解,此处微码是一种用户定义的指令块。用户也可以通过上述方式对微码进行修改。

本申请中的表可以路由表、媒体接入控制(Media Access Control,MAC)协议表或者入标签映射(incoming label map,ILM)表。

以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、接口、技术之类的具体细节,以便透切理解本发明。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况中,省略对众所周知的装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。

另外,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。

SDN是一种新型的网络架构。OpenFlow技术可以用于实现SDN。

OpenFlow技术采用多级流表的流水线执行对报文的转发处理。具体的,流表由多个表项组成,每个表项对应一个转发规则。流表包括匹配域、指令域以及计数器域。匹配域用于匹配报文。指令域用于说明对报文采用哪种方式进行处理,具体的处理方式如:表跳转(GOTO_TABLE)、丢弃(DROP)、输出(Output)、封装或解封装等。

如图1所示,报文处理装置采用OpenFlow技术对报文进行处理的流程可以是:当报文处理装置接收到一个报文时,报文处理装置解析该报文并获取报文的关键字。然后,报文处理装置根据其存储的流表中的表项的优先级,将该报文的关键字依次与该流表中的表项进行对比。最后,报文处理装置将与该报文的关键字相匹配的表项作为匹配结果,并根据该表项中存储的指令对报文进行操作。同时,一旦流表中的某个表项与报文匹配成功,该表项中的计数器数值将被更新,而如果在该流表中没能找到与报文匹配的表项,则报文处理装置将报文通过安全通道转发给控制器。报文处理装置可以是开放流交换机。

POF技术是对OpenFlow技术的增强,该技术具体可以是解释型POF技术或者编译型POF技术。解释型POF技术中,指令存储在流表的表项中。当报文处理装置接收到的报文与某个表项匹配时,报文处理装置解析并执行该表项中存储的指令。存储在流表的表项中的指令可以是开放流的指令(Instruction)。开放流的指令可以用于实现开放流的动作(Action)。举例来说,动作可以是推标签(Push-Tag)、弹标签(Pop-Tag)、Drop、Output或者组(Group)。关于开放流的指令或者开放流的动作,可以参考开放流交换机说明书第1.4.0版(OpenFlow Switch Specification version 1.4.0)。

对于编译型POF技术,指令没有存储在流表的表项中,而是以目标代码的形式在动态分配的指令存储空间中存储。指令存储空间可以位于存储器中。存储器可以是静态随机存储器(SRAM,Static Random Access Memory)。其中,目标代码在指令存储空间的存储地址保存在流表的表项中。

编译型POF技术中,报文处理装置对其接收到的报文进行处理时,根据多级指令块来完成报文的转发处理。具体包括:报文处理装置根据装置供应商定义的指令块对报文进行处理,并从装置供应商定义的指令块跳转至第一级用户定义的指令块且根据第一级用户定义的指令块对报文进行处理,和根据第N(N>1)级用户定义的指令块对报文进行处理,并从第N级用户定义的指令块跳转至第N+1级用户定义的指令块,且根据第N+1级用户定义的指令块对报文进行处理。

报文处理装置根据多级指令块完成报文的处理。具体的,报文处理装置根据当前指令块获取其下级指令块的存储地址,并根据获取到的存储地址从当前指令块跳转至其下级指令块,以便于根据下级指令块对报文进行处理。

其中,报文处理装置可以从当前指令块对应的流表表项中获取其下级指令块的存储地址。例如,报文处理装置首先根据第N级指令块获取报文的查找关键字,并从第N级指令块中获取流表标识,然后,报文处理装置在流表标识指示的流表中查找与报文的查找关键字匹配的流表表项,最后,报文处理装置从与报文的查找关键字匹配的流表表项获取第N+1级指令块的存储地址。若第N+1级动态加载指令块的存储位置发生了变化,报文处理装置则需要对其存储的流表中包含有第N+1级动态加载指令块的存储地址的表项的内容进行更新,这样,报文处理装置才能将报文从第N级动态加载指令块跳转至第N+1级动态加载指令块。由于报文处理装置中包含有第N+1级动态加载指令块的存储地址的流表表项的数量较多,因此,报文处理装置需要对多个表项的内容进行更新,开销比较大。

此外,若各级指令块中有多条指令包含有其下一级指令块的存储地址,则报文处理装置从当前指令块中获取其下一级指令块的存储地址。同理,若第N+1级用户定义的指令块的存储位置发生了变化,报文处理装置也需要对第N级用户定义的指令块中包含有第N+1级用户定义的指令块的存储地址的指令的内容进行更新。由于第N级用户定义的指令块中包含有第N+1级用户定义的指令块的存储地址的指令的数量较多,因此,报文处理装置需要对多条指令的内容进行更新,开销较大。

为了减轻指令块的存储位置发生变化后,报文处理装置需要对多个该指令块的标识(Identifiers of The Instruction Block)进行更新,而导致的开销比较大的问题,本发明实施例提供一种处理处理方法。

本发明描述的各种方案适用于对报文进行处理的应用场景。

优选的,本发明描述的方案适用于编译型POF技术。

实施例一

实施例提供一种报文处理方法,如图2所示,该方法包括:

S101、报文处理装置接收第一报文和第二报文。

S102、报文处理装置确定与第一报文和第二报文对应的第一指令块。

S103、报文处理装置根据第一指令块以及第一报文获取第一标识,根据第一指令块以及第二报文获取第二标识。

其中,第一标识用于指示第一表项,第二标识用于指示第一表项,第一表项包含第三标识,第三标识为第二指令块的存储地址。

S104、报文处理装置通过访问第一标识指示的第一表项获取第三标识,通过访问第二标识指示的第一表项获取第三标识。

S105、报文处理装置根据第三标识获取第二指令块。

S106、报文处理装置根据第二指令块对第一报文以及第二报文进行处理。

具体的,第二指令块是用户定义的指令块。

需要说明的是,本发明实施例中的报文处理装置对第一报文的处理独立于报文处理装置对第二报文的处理。报文处理装置可以先对第一报文进行处理,再对第二报文进行处理。报文处理装置也可以先对第二报文进行处理,再对第一报文进行处理。另外,报文处理装置还可以同时对第一报文以及第二报文进行处理。

具体的,S101具体包括接收第一报文以及接收第二报文。

可选的,报文处理装置可以先接收第一报文再接收第二报文。报文处理装置也可以先接收第二报文再接收第一报文。

S102具体包括确定与第一报文对应的第一指令块,以及确定与第二报文对应的第一指令块。

可选的,报文处理装置可以先确定与第一报文对应的第一指令块,再接收第二报文。报文处理装置也可以先确定与第二报文对应的第一指令块,再接收第一报文。报文处理装置还可以先接收第一报文以及第二报文,再确定与第一报文对应的第一指令块以及与第二报文对应的第一指令块。

S103具体包括根据第一报文获取第一标识,以及根据第二报文获取第二标识。

具体的,报文处理装置先确定与第一报文对应的第一指令块,再根据第一报文获取第一标识。报文处理装置先确定与第二报文对应的第一指令块,再根据第二报文获取第二标识。

可选的,报文处理装置可以先根据第一报文获取第一标识,再接收第二报文。报文处理装置也可以先根据第二报文获取第二标识,再接收第一报文。

S104具体包括报文处理装置通过访问第一标识指示的第一表项获取第三标识,以及报文处理装置通过访问第二标识指示的第一表项获取第三标识。

具体的,报文处理装置先根据第一报文获取第一标识,再通过访问第一标识指示的第一表项获取第三标识。报文处理装置先根据第二报文获取第二标识,再通过访问第二标识指示的第一表项获取第三标识。

可选的,报文处理装置可以先通过访问第一标识指示的第一表项获取第三标识,再接收第二报文。报文处理装置也可以先通过访问第二标识指示的第一表项获取第三标识,再接收第一报文。

S105包括根据第三标识获取第二指令块。

具体的,获取第二指令块可以由第一报文触发,也可以由第二报文触发。

本发明实施例中的报文处理是报文处理装置执行的。其中,报文处理可以是对报文进行转发、对报文进行丢弃、对报文进行修改(例如,对报文进行封装或者解封装)、对报文进行承诺接入速率(CAR,Committed Access Rate)操作或者对报文执行计数(Counter)操作。具体的,对报文进行转发可以具体包括确定查找关键字(Search Key)、查找流表表项、获取下一级指令块的存储地址以及对生存时间(TTL,Time To Live)域的值减1。

本发明实施例提供的报文处理方法可以通过对报文进行转发实现转发业务。转发业务可以是二层转发业务、三层转发业务、四层转发业务、多协议标签交换(MPLS,Multiprotocol Label Switching)转发业务或者虚拟专用网(VPN,Virtual Private Network)转发业务。二层转发业务可以是MAC协议转发业务。三层转发业务可以是网际协议(IP,Internet Protocol,)转发业务。四层转发业务可以是传输控制协议(TCP,Transmission Control Protocol)转发业务或者用户数据报协议(UDP,User Datagram Protocol)转发业务。VPN转发业务可以是二层虚拟专用网(L2VPN,Layer 2virtual private network)转发业务或者三层虚拟专用网(L3VPN,Layer 3 virtual private network)转发业务。转发业务可以对某种协议的报文进行处理。例如,MAC协议转发业务可以对MAC协议报文进行处理。IP转发业务可以对IP报文进行处理。TCP转发业务可以对TCP报文进行处理。UDP转发业务可以对UDP报文进行处理。

报文处理装置可以是路由器、网络交换机、防火墙、负载均衡器、波分复用设备、分组传送网设备、基站、基站控制器或者数据中心。具体的,报文处理可以是报文处理装置的处理器执行的。其中,处理器可以是网络处理器(NP,Network Processer)或者中央处理器(CPU,Central Processing Unit)。

下面结合具体实施例对图2所示的方法作进一步说明。

报文处理装置执行S101。S101包括报文处理装置接收第一报文以及第二报文。

报文处理装置执行S102。S102包括报文处理装置确定与第一报文和第二报文对应的第一指令块。

可选的,报文处理装置可以根据接收第一报文和第二报文的接口类型,确定与第一报文和第二报文对应的第一指令块。

其中,本发明实施例中报文处理装置接收第一报文的接口与接收第二报文的接口可以是同一个接口,也可以是不同的接口。

可选的,报文处理装置的接口可以是以太网接口,同步数字体系承载数据包(Packet over SDH)接口或者异步传输模式(ATM,Asynchronous Transfer Mode)接口。

本发明实施例中的第一报文和第二报文可以对应一个相同的协议,也可以分别对应不同的协议。例如,第一报文可以是网际协议(IP,Internet Protocol)报文、以太网帧(Ethernet Frame)或者多协议标签交换(MPLS,Multiprotocol Label Switching)协议报文。第二报文可以是IP报文、Ethernet Frame或者MPLS协议报文。

具体的,报文处理装置预先保存了第一指令块。报文处理装置预先保存了第一接口与第一指令块的对应关系。报文处理装置可以通过链表、结构体、指针、数组或者其他数据结构实现第一接口与第一指令块的对应关系。若报文处理装置通过第一接口接收第一报文和第二报文,则报文处理装置可以根据预先保存的第一接口与第一指令块的对应关系确定与第一接口对应的第一指令块。该场景中,第一指令块为装置供应商定义的指令块。

可选的,报文处理装置也可以根据第一指令块的上一级指令块(即第三指令块),确定与第一报文和第二报文对应的第一指令块。该场景中,第一指令块是用户定义的指令块。

具体的,报文处理装置根据第三指令块获取第五标识,第五标识用于指示第二表项;根据第五标识访问第二表项,第二表项包含第六标识,第六标识为第一指令块的存储地址;根据第六标识确定第一指令块。该应用场景中,第一指令块为用户定义的指令块。

其中,第三指令块可以是装置供应商定义的指令块,也可以是用户定义的指令块,本发明实施例对此不作具体限定。

示例性的,若第三指令块为装置供应商定义的指令块,则报文处理装置预先保存了第三指令块。报文处理装置预先保存了接收报文的接口与第三指令块的对应关系。报文处理装置可以通过链表、结构体、指针、数组或者其他数据结构实现接收报文的接口与第三指令块的对应关系。若报文处理装置通过接收报文的接口接收第一报文和第二报文,则报文处理装置可以根据预先保存了接收报文的接口与第三指令块的对应关系确定第三指令块。

其中,报文处理装置根据第二指令块确定与第二报文对应的第一指令块的方法与报文处理根据第二指令块确定与第一报文对应的第一指令块的方法相同,此处不再赘述。

可以看出,本发明实施例中的第一指令块可以为装置供应商定义的指令块,也可以为用户定义的指令块。

进一步地,报文处理装置在确定与第一报文和第二报文对应的第一指令块后,根据第一指令块以及第一报文获取第一标识,并根据第一指令块以及第二报文获取第二标识。

报文处理装置执行S103。S103包括报文处理装置根据第一指令块以及第一报文获取第一标识,根据第一指令块以及第二报文获取第二标识。

其中,第一标识用于指示第一表项,第二标识用于指示第一表项,第一表项包含第三标识,第三标识为第二指令块的存储地址。

可选的,第一标识可以为第一表项在预设的指令映射表中的序号,也可以为第一表项的指针,也可以为数组的名称(当第一表项保存在数组中时),也可以为第一表项的存储地址,还可以为其它用以表示第一表项的信息,在此不再逐一举例说明。

同理,第二标识可以为第一表项在预设的指令映射表中的序号,也可以为第一表项的指针,也可以为数组的名称(当第一表项保存在数组中时),也可以为第一表项的存储地址,还可以为其它用以表示第一表项的信息,在此不再逐一举例说明。

需要说明的是,本发明实施例中的第一标识和第二标识可以相同,也可以不相同,本发明实施例对此不作具体限定。

可选的,本发明实施例中的报文处理装置获取第一标识的方法可以为:报文处理装置根据第一报文从第一指令块中获取第一跳转指令,并从第一跳转指令中获取第一标识,其中,第一标识是第一表项的存储地址,第一指令块包括第一跳转指令,第一跳转指令包括操作码和操作数,第一标识是操作数。

其中,第一跳转指令可以为goto(x),也可以为jump(y),还可以为其他用于指示跳转的指令语句,本发明实施例对此不作具体限定。goto和jump为操作码,用于指示跳转。x和y为操作数,用于表示跳转的目的标识,该目的标识为第一标识。

示例性的,若第一指令块中包含有分支语句a,该分支语句a包含条件语句a1和动作语句a2。其中,条件语句a1中的变量为第一报文的某一字段或者与第一报文的某一字段相对应的函数,动作语句a2包含第一跳转指令jump(y),y为第一标识。报文处理装置根据第一报文和分支语句a,能够获取到第一标识y。

可选的,本发明实施例中的报文处理装置获取第一标识的方法可以为:报文处理装置根据第一指令块从第一报文中获取查找关键字;报文处理装置根据第一指令块获取第一流表的标识;报文处理装置在第一流表的标识指示的第一流表中查找与查找关键字匹配的流表表项,流表表项中包括第一标识;报文处理装置从流表表项中获取第一标识。

具体的,报文处理装置根据第一指令块从第一报文中获取查找关键字的方法为:报文处理装置从第一指令块中获取查找关键字的位置参数,并根据查找关键字的位置参数,从第一报文中获取查找关键字。

其中,查找关键字的位置参数用于指示查找关键字在第一报文中的位置。

本发明实施例中查找关键字的位置参数包含第一参数和第二参数,其中,第一参数为查找关键字的起始比特位距离报文的第一比特位的偏移值,第二参数为查找关键字的长度值;或者,第一参数为查找关键字的结束比特位距离报文的第一比特位的偏移值,第二参数为查找关键字的长度值。

可选的,报文处理装置根据第一指令块获取第一流表的标识的方法可以为报文处理装置从第一指令块中获取第一流表的标识,还可以为报文处理装置从第一指令块中获取预设的流表信息表的标识,根据预设的流表信息表的标识,访问预设的流表信息表,并从预设的流表信息表中获取第一流表的标识。本发明实施例对此不做具体限定。

具体的,报文处理装置在获取到第一报文的查找关键字和第一流表的标识后,报文处理装置根据第一流表的标识在该第一流表的标识指示的第一流表中查找与查找关键字匹配的流表表项。

需要说明的是,本发明实施例中报文处理装置根据第一指令块以及第二报文获取第二标识的方法与报文处理装置根据第一指令块以及第一报文获取第一标识的方法相同,此处不再详细赘述。

进一步地,在获取到用于指示第一表项的第一标识后,报文处理装置根据该第一标识访问第一表项。

报文处理装置执行S104。S104包括报文处理装置通过访问第一标识指示的第一表项获取第三标识,通过访问第二标识指示的第一表项获取第三标识。

优选的,第三标识用立即数进行表示,该立即数代表第二指令块的存储地址。

需要说明的是,本发明实施例中的报文处理装置在接收第一报文和第二报文之前,将第三标识存储于第一表项中。也就是说,报文处理装置在执行S101之前,将第三标识存储于第一表项中。

具体的,若第一标识为第一表项的存储地址,则报文处理装置可利用第一标识进行寻址操作,以访问第一表项。若第一标识为第一表项在预设的指令映射表中的序号,则报文处理装置可以根据该序号访问第一表项。

同理,若第二标识为第一表项的存储地址,则报文处理装置可利用第二标识进行寻址操作,以访问第一表项。若第二标识为第一表项在预设的指令映射表中的序号,则报文处理装置可以根据该序号访问第一表项。

可选的,若第一指令块包括第一跳转指令,第一跳转指令包括操作码和操作数,第一标识是操作数,则报文处理装置通过访问第一标识指示的第一表项获取第三标识的方法为报文处理装置通过执行第一跳转指令访问第一表项,并从第一表项中获取第三标识。

可选的,若与查找关键字匹配的流表表项中除了包括第一标识之外,还包括用于指示跳转的操作码,该操作码与第一标识组成第二跳转指令,则报文处理装置通过访问第一标识指示的第一表项获取第三标识的方法为报文处理装置通过执行与查找关键字匹配的流表表项中的第二跳转指令访问第一表项,并从第一表项中获取第三标识。

可选的,若与查找关键字匹配的流表表项中仅包括第一标识,第一指令块中包含有与第一标识相对应的操作码,则报文处理装置通过访问第一标识指示的第一表项获取第三标识的方法为报文处理装置根据第一指令块中与第一标识相对应的操作码和第一标识访问第一表项,并从第一表项中获取第三标识。

具体的,由于第一表项中包含第三标识,因此,报文处理装置根据第一标识访问第一表项时,报文处理装置能够读取到第一表项中包含的第三标识,并根据该第三标识查找到第二指令块。

第三标识为第二指令块的存储地址。若第二指令块的存储位置发生变化,则报文处理装置可以更新第三标识。本发明实施例中第一表项中包含有第三标识。因此,若第二指令块的存储位置发生变化,报文处理装置只需更新第一表项中的第三标识即可。

具体的,报文处理装置删除第二指令块时,报文处理装置将第一表项中的第三标识设置为无效。

具体的,报文处理装置删除第二指令块时,报文处理装置删除第一表项中的第三标识。

具体的,当第二指令块的存储位置从第一位置调整为第二位置,报文处理装置将第一表项中的第三标识替换为第四标识,第一位置对应第三标识,第二位置对应第四标识。也就是说,第三标识代表第二指令块的存储地址为第一位置,第四标识代表第二指令块的存储地址为第二位置。

示例性的,如图3所示,第一表项包含指令块1的存储地址A,若指令块1的存储位置调整为B,则报文处理装置将第一表项中的“指令块1的存储地址A”更新为“指令块1的存储地址B”。

进一步地,报文处理装置根据第三标识获取第二指令块,即执行S105。

具体的,报文处理装置根据第三标识从该报文处理装置的SRAM的指令存储(IMEM,Instruction Memory)模块中读取第二指令块,并将第二指令块保存到寄存器。

进一步地,报文处理装置根据第三标识从第一指令块跳转至第二指令块。

可选的,若第一表项中还包括用于指示跳转的操作码,该操作码与第三标识组成第三跳转指令,则报文处理装置通过执行第三跳转指令实现从第一指令块跳转至第二指令块。

可选的,若第一表项中仅包括第三标识,第一指令块中包含有与第三标识相对应的操作码,则报文处理装置第一指令块中与第三标识相对应的操作码和第三标识实现从第一指令块跳转至第二指令块。

报文处理装置在获取到第二指令块后,根据该第二指令块对第一报文以及第二报文进行处理。

报文处理装置执行S106。S106包括报文处理装置根据第二指令块对第一报文以及第二报文进行处理。

具体的,报文处理装置在寄存器中根据第二指令块对第一报文和第二报文进行转发,或对第一报文和第二报文进行丢弃,或对第一报文和第二报文进行修改,或对第一报文和第二报文进行承诺接入速率操作,或对第一报文和第二报文执行计数操作。

该方案中报文处理装置根据第一标识访问第一表项。根据第二标识访问第一表项。第一表项包含了第三标识。第三标识为第二指令块的存储地址。即第一表项中存储了第二指令块的存储地址。因此,报文处理装置能够根据第三标识获取第二指令块,并根据第二指令块对第一报文和第二报文进行处理。若第二指令块的存储位置发生了变化,报文处理装置仅需要对第一表项中存储的第三标识进行更新,即可获取存储位置发生变化后的第二指令块。现有技术中,报文处理装置中存储了多个标识,所述多个标识都用于标识同一个指令块。当所述同一个指令块的存储位置发生变化时,需要对所述多个标识进行更新。因此,上述技术方案需要对第一表项中的第三标识进行更新,不需要对多个标识进行更新,有助于降低开销,提高更新效率。

此外,本发明实施例中的第一指令块可以为装置供应商定义的指令块。

现有技术中,与装置供应商定义的指令块所对应的流表表项中存储有第一级用户定义的指令块的存储地址,由于装置供应商定义的指令块是报文处理装置中无法被修改的程序,与装置供应商定义的指令块所对应的流表的内容也是无法被修改的,因此,与装置供应商定义的指令块所对应的流表表项中存储的第一级用户定义的指令块的存储地址也是不能够被修改的。因此,若第一级用户定义的指令块的存储位置发生变化,报文处理装置无法根据与装置供应商定义的指令块所对应的流表表项中存储的第一级用户定义的指令块的存储地址访问存储位置发生变化的第一级用户定义的指令块。

现有技术中,装置供应商定义的指令块中存储有第一级用户定义的指令块的存储地址,由于装置供应商定义的指令块是报文处理装置中无法被修改的程序,因此,装置供应商定义的指令块中存储的第一级用户定义的指令块的存储地址也是不能够被修改的。因此,若第一级用户定义的指令块的存储位置发生变化,报文处理装置无法根据装置供应商定义的指令块中存储的第一级用户定义的指令块的存储地址访问存储位置发生变化的第一级用户定义的指令块。

本发明实施例中,若第一指令块为装置供应商定义的指令块,则第二指令块可以为第一级用户定义的指令块。报文处理装置根据装置供应商定义的指令块获取到的第一标识是用于指示第一表项的。第一表项中包含有用于表示第一级用户定义的指令块的存储地址的第三标识。因此,报文处理装置根据装置供应商定义的指令块在获取到第三标识后,能够通过访问第三标识指示的第一表项来获取第一级用户定义的指令块的存储地址。根据第一级用户定义的指令块对报文进行处理。

进一步地,若第一级用户定义的指令块的存储位置从第一位置调整为第二位置,报文处理装置可以将第一表项中的第三标识替换为第四标识。这样,报文处理装置能够实现从装置供应商定义的指令块到第一级用户定义的指令块的跳转。其中,第一位置对应第三标识,第二位置对应第四标识。

实施例二

本发明实施例提供报文处理装置1。报文处理装置1可以用于执行图2所示的方法。关于报文处理装置1如何实现,请参考图2对应的实施例中的描述。

如图4所示,报文处理装置1包括接收单元10、确定单元11、获取单元12以及处理单元13。

接收单元10,用于接收第一报文和第二报文。

确定单元11,用于确定与接收单元10接收到的第一报文和第二报文对应的第一指令块。

获取单元12,用于根据确定单元11确定的第一指令块以及接收单元10接收的第一报文获取第一标识,根据确定单元11确定的第一指令块以及接收单元10接收的第二报文获取第二标识,第一标识用于指示第一表项,第二标识用于指示第一表项,第一表项包含第三标识,第三标识为第二指令块的存储地址。

具体的,第二指令块是用户定义的指令块。

获取单元12还用于通过访问第一标识指示的第一表项获取第三标识,通过访问第二标识指示的第一表项获取第三标识。

获取单元12还用于根据第三标识获取第二指令块。

处理单元13用于根据获取单元12获取到的第二指令块对接收单元10接收的第一报文以及第二报文进行处理。

接收单元10可以用于执行S101。

确定单元11可以用于执行S102。

获取单元12可以用于执行S103、S104以及S105。

处理单元13可以用于执行S106。

进一步地,获取单元12,具体用于:

根据接收单元10接收到的第一报文从确定单元11确定的第一指令块中获取第一跳转指令,第一标识是第一表项的存储地址,第一指令块包括第一跳转指令,第一跳转指令包括操作码和操作数,第一标识是操作数;

通过执行第一跳转指令访问第一表项;以及

从第一表项中获取第三标识。

进一步地,获取单元12,具体用于:

根据第一指令块从第一报文中获取查找关键字;

根据第一指令块获取第一流表的标识;

在第一流表的标识指示的第一流表中查找与查找关键字匹配的流表表项,流表表项中包括第一标识;以及

从流表表项中获取第一标识。

进一步地,处理单元13,还用于:

删除第二指令块;

将第一表项中的第三标识设置为无效;

删除第一表项中的第三标识;或者

当第二指令块的存储位置从第一位置调整为第二位置,将第一表项中的第三标识替换为第四标识。第一位置对应第三标识,第二位置对应第四标识。

进一步地,第一指令块为用户定义的指令块。

获取单元12,还用于:

在确定单元11确定与第一报文对应的第一指令块之前,根据第三指令块获取第五标识,第五标识用于指示第二表项。

根据第五标识访问第二表项,第二表项包含第六标识,第六标识为第一指令块的存储地址。

进一步地,确定单元11,还用于根据获取单元12访问的所述第二表项中的第六标识确定第一指令块。

实施例三

本发明实施例提供一种报文处理装置。图5中的报文处理装置可以用于实现图4所示的报文处理装置1。如图5所示,该报文处理装置包括处理器20、收发器21、存储器22和系统总线23。

处理器20、收发器21和存储器22之间通过系统总线23连接。

处理器20可能为单核或多核中央处理器,或者为特定集成电路,或者为被配置成实施本发明实施例的一个或多个集成电路。

存储器22可以为RAM,也可以为非易失性存储器。例如,存储器22可以是磁盘存储器。存储器22用于将第三标识存储于第一表项中,其中,第三标识为第二指令块的存储地址。

具体的,存储器22中存储计算机程序。处理器20可以通过访问存储器22中的计算机程序执行图2所示的方法。

具体的,收发器21可以用于执行S101。处理器20可以执行S102-S106。处理器20执行S102-S106时,可以从收发器21获取第一报文和第二报文。

本发明实施例中的报文处理装置可以为网络设备,具体的,网络设备可以是路由器、网络交换机、防火墙、分组传送网设备或者数据中心,本发明实施对此不作具体限定。

具体的,收发器21,用于接收第一报文和第二报文。

具体的,处理器20,用于:

确定与收发器21接收到的第一报文和第二报文对应的第一指令块;

根据第一指令块以及第一报文获取第一标识,根据第一指令块以及第二报文获取第二标识,第一标识用于指示第一表项,第二标识用于指示第一表项,第一表项包含第三标识,第三标识为第二指令块的存储地址;

通过访问第一标识指示的第一表项获取第三标识,通过访问第二标识指示的第一表项获取第三标识;

根据第三标识获取第二指令块;以及

根据第二指令块对第一报文以及第二报文进行处理。

进一步地,处理器20,具体用于:

根据收发器21接收到的第一报文从第一指令块中获取第一跳转指令,第一标识是第一表项的存储地址,第一指令块包括第一跳转指令,第一跳转指令包括操作码和操作数,第一标识是操作数;

通过执行第一跳转指令访问第一表项;以及

从所述第一表项中获取第三标识。

进一步地,处理器20,具体用于:

根据第一指令块从第一报文中获取查找关键字;

根据第一指令块获取第一流表的标识;

在第一流表的标识指示的第一流表中查找与查找关键字匹配的流表表项,流表表项中包括第一标识;

从流表表项中获取第一标识。

进一步地,处理器20,还用于:

删除第二指令块;

将第一表项中的第二标识设置为无效;

删除第一表项中的第三标识;或者

当第二指令块的存储位置从第一位置调整为第二位置,将第一表项中的第三标识替换为第四标识,第一位置对应第三标识,第二位置对应第四标识。

进一步地,第一指令块为用户定义的指令块。

处理器20,还用于:

在确定与第一报文对应的第一指令块之前,根据第三指令块获取第五标识,第五标识用于指示第二表项;以及

根据第五标识访问第二表项,第二表项包含第六标识,第六标识为第一指令块的存储地址;

根据第六标识确定第一指令块。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。

以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1