报文处理方法、装置和网络设备的制作方法

文档序号:7758713阅读:120来源:国知局
专利名称:报文处理方法、装置和网络设备的制作方法
技术领域
本发明涉及通信技术,尤其涉及一种报文处理方法、装置和网络设备。
背景技术
以太网交换机作为一种常用的网络设备,其主要完成网络的二层交换功能,可以 大致分为硬件交换机和软件交换机两种类型。硬件交换机通常使用特殊应用集成电路 (Application Specific Integrated Circuit ;以下简称ASIC),交换效率较高、成本低 廉,但功能较少、可扩展性不强。与使用ASIC实现交换功能的硬件交换机相比,软件交换机 基于其高性能CPU来实现交换功能,其功能丰富、可扩展性好。在现有技术中,在通过软件交换机对组播/广播报文进行发送时,由于这类报文 存在多个出口,假设为N个,而软件交换机中未设置有专用的硬件进行报文复制和发送,则 在报文发送之前,需要先将该报文复制成N份,将N个报文分别通过N个端口进行发送。且 通常交换机的不同端口可能具有不同的交换属性,报文通过不同属性的端口发出时,需要 根据端口的属性修改报文的内容。因此,现有技术中通过软件交换机发送组播/广播报文时,报文的复制拷贝过程 必须在软件交换机的内存中进行,复制过程相对较慢,特别是在报文的出口较多且报文较 长的情况下,会导致占用较多的软件交换机的CPU资源,严重影响软件交换机的交换效率。

发明内容
本发明提供一种报文处理方法、装置和网络设备,用以解决现有技术中组播/广 播报文发送时占用较多CPU资源的缺陷,避免报文复制占用过多CPU资源,提高网络设备的 交换效率,且可以灵活适应各种出口,提高网络设备的扩展性。本发明提供一种报文处理方法,包括获取待发送组播/广播报文的所有出口,根据各所述出口的交换属性分别生成对 应的出口数据结构,并记录所述所有出口对应的出口数据结构;按照预设的顺序获取当前下一个出口对应的出口数据结构,根据所述出口数据结 构将所述待发送组播/广播报文在所述出口发送,重复该步骤,直到将所述待发送组播/广 播报文在所述所有出口发送为止。本发明提供一种报文处理装置,包括预处理模块,用于获取待发送组播/广播报文的所有出口,根据各所述出口的交 换属性分别生成对应的出口数据结构,并记录所述所有出口对应的出口数据结构;发送模块,用于按照预设的顺序获取当前下一个出口对应的出口数据结构,根据 所述出口数据结构将所述待发送组播/广播报文在所述出口发送,重复该步骤,直到将所 述待发送组播/广播报文在所述所有出口发送为止。本发明提供一种网络设备,包括上述报文处理装置。本发明的报文处理方法、装置和网络设备,通过获取待发送组播/广播报文的所有出口,根据各出口的交换属性分别生成对应的出口数据结构,并将出口数据结构记录在 该报文的数据结构或额外添加的数据结构中,在进行报文发送时,按照预设的顺序获取当 前情况下的下一个出口对应的出口数据结构,根据该出口数据结构在对应的出口上发送该 待发送组播/广播报文,并重复该发送过程,直到将该报文在其对应的所有出口上均实现 发送为止。本实施例通过对组播或广播报文进行顺序发送,而避免了现有技术中在发送前 对报文的复制拷贝,解决了现有技术中组播/广播报文发送时占用较多CPU资源的缺陷,避 免了报文复制占用过多CPU资源,提高了网络设备的交换效率,且本实施提供的方法通过 将各出口的交换属性提取记录为对应的出口数据结构,则其可以灵活适应各种出口,提高 了网络设备的扩展性。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发 明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以 根据这些附图获得其他的附图。图1为本发明报文处理方法实施例一的流程图;图2为本发明报文处理方法实施例二的流程图;图3为本发明报文处理方法实施例三的流程图;图4为本发明报文处理装置实施例一的结构示意图;图5为本发明报文处理装置实施例二的结构示意图。
具体实施例方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例 中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是 本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员 在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。图1为本发明报文处理方法实施例一的流程图,如图1所示,本实施例提供了一种 报文处理方法,可以具体包括如下步骤步骤101,网络设备获取待发送组播/广播报文的所有出口,根据各所述出口的交 换属性分别生成对应的出口数据结构,并记录所述所有出口对应的出口数据结构。本实施例针对的情况为组播或广播报文在网络设备上的发送情景,在本实施例 中,在通过网络设备发送组播或广播报文之前,先对待发送组播/广播报文进行预处理。具 体地,本实施例中的网络设备可以具体为软件交换机。此处的预处理可以为网络设备针对 待发送组播/广播报文,根据交换规则获取该报文将要发送的所有出口。由于各出口均对 应不同的交换属性,本步骤根据获取到的待发送组播/广播报文的各出口的交换属性,分 别生成各出口对应的出口数据结构,该出口数据结构用于指示待发送组播/广播报文在该 出口上进行发送时需要修改的相关信息以及报文在修改之后需要修复的相关信息。网络设 备将生成的所有出口的出口数据结构进行记录,可以将其记录在待发送组播/广播报文的 报文数据结构中,也可以添加额外的数据结构,将出口数据结构记录在额外的数据结构中,但所添加的额外的数据结构需要满足后续报文发送时可以从报文携带的数据中获取得到 的要求,可以在待发送组播/广播报文中携带该额外的数据结构的标识信息等。步骤102,网络设备按照预设的顺序获取当前下一个出口对应的出口数据结构,根 据所述出口数据结构将所述待发送组播/广播报文在所述出口发送,重复该步骤,直到将 所述待发送组播/广播报文在所述所有出口发送为止。在完成待发送组播/广播报文的所有出口的预处理之后,网络设备可以在各个出 口上对该报文进行发送。尽管该待发送组播/广播报文需要在多个出口上发送,但本实施 例无需执行现有技术中的对该报文的复制拷贝操作,而按照预设的顺序在各个出口上对该 待发送组播/广播报文进行依次发送。此处所指的预设的顺序为预先设定的待发送组播/ 广播报文在其对应的各出口上的发送顺序,可以以出口的索引信息作为设定的依据,当然 也可以为本领域技术人员根据实际情况设定的其他顺序。本步骤为按照预设的顺序先获取 当前下一个出口对应的出口数据结构;如果当前发送过程为对待发送组播/广播报文的第 一次发送,即在第一个出口上发送该报文,则此处的当前下一个出口为选择的第一个出口 ; 如果当前发送过程不是第一次发送,则此处的当前下一个出口指的是经过前次发送之后的 预设的顺序中指示的下一个出口。本实施例通过重复该步骤102,根据不同出口对应的出口 数据结构将待发送组播/广播报文在不同出口上进行发送,直到将该报文在其对应的所有 出口发送为止,即直到当前下一个出口为预设的顺序中的最后一个出口,并在该出口上将 该报文发送为止。本实施例提供了一种报文处理方法,通过获取待发送组播/广播报文的所有出 口,根据各出口的交换属性分别生成对应的出口数据结构,并将出口数据结构记录在该报 文的数据结构或额外添加的数据结构中,在进行报文发送时,按照预设的顺序获取当前情 况下的下一个出口对应的出口数据结构,根据该出口数据结构在对应的出口上发送该待发 送组播/广播报文,并重复该发送过程,直到将该报文在其对应的所有出口上均实现发送 为止。本实施例通过对组播或广播报文进行顺序发送,而避免了现有技术中在发送前对报 文的复制拷贝,解决了现有技术中组播/广播报文发送时占用较多CPU资源的缺陷,避免了 报文复制占用过多CPU资源,提高了网络设备的交换效率,且本实施提供的方法通过将各 出口的交换属性提取记录为对应的出口数据结构,则其可以灵活适应各种出口,提高了网 络设备的扩展性。图2为本发明报文处理方法实施例二的流程图,如图2所示,本实施例提供了一 种报文处理方法,本实施例采用中断方式对报文发送过程进行控制,可以具体包括如下步 骤步骤201,网络设备获取待发送组播/广播报文的所有出口,根据各所述出口的交 换属性分别生成对应的出口数据结构,并记录所述所有出口对应的出口数据结构。本实施例在通过网络设备发送组播或广播报文之前,网络设备先针对待发送组播 /广播报文,根据交换规则获取该报文将要发送的所有出口。本步骤根据获取到的待发送组 播/广播报文的各出口的交换属性,分别生成各出口对应的出口数据结构,该出口数据结 构用于指示待发送组播/广播报文在该出口上进行发送时需要修改的相关信息以及报文 在修改之后需要修复的相关信息。网络设备将生成的所有出口的出口数据结构进行记录, 可以将其记录在待发送组播/广播报文的报文数据结构中,也可以添加额外的数据结构,将出口数据结构记录在额外的数据结构中,但所添加的额外的数据结构需要满足后续报文 发送时可以从报文携带的数据中获取得到的要求,可以在待发送组播/广播报文中携带该 额外的数据结构的标识信息等。步骤202,网络设备按照预设的顺序获取当前下一个出口对应的出口数据结构。本步骤为按照预设的顺序先获取当前下一个出口对应的出口数据结构;如果当前 发送过程为对待发送组播/广播报文的第一次发送,即在第一个出口上发送该报文,则此 处的当前下一个出口为选择的第一个出口 ;如果当前发送过程不是第一次发送,则此处的 当前下一个出口指的是经过前次发送之后的预设的顺序中指示的下一个出口。网络设备可 以通过待发送组播/广播报文的报文数据结构或其中携带的额外的数据结构的标识信息 来获取出口对应的出口数据结构。具体地,本实施例中各出口对应的出口数据结构可以包 括但不限于所述出口的索引信息IFINDEX、所述出口的修改函数MODIFY、所述出口的修复 函数RECOVER、所述修改函数的参数个数M0DIFY_ARGC、所述修改函数的参数向量M0DIFY_ ARGV、所述修复函数的参数个数REC0VER_ARGC和所述修复函数的参数向量REC0VER_ARGV。 其中,出口的索引信息IFINDEX用于标识报文出口的索引,其为出口数据结构中的必要字 段。出口的修改函数MODIFY为报文在从该出口发送之前,必须运行的修改函数,用于在报 文发送前修改报文内容。如对于802. Iq中的VALN TAG来说,报文在有些出口上发送时必 须携带TAG,而有些则不能携带TAG,根据不同出口的交换属性来设定该修改函数;再比如 报文从隧道出口发送时,需要对报文进行特殊的封装。当报文在该出口发送时无需任何修 改时,则这个字段可以置成空NULL。出口的修复函数RECOVER为报文从该出口发送后,必 须运行的修复函数,用于在报文发送后回退针对该出口的所有修改内容,将报文恢复到发 送前的状态,比如针对之前所述隧道出口的封装的解封装。而修改函数的参数个数M0DIFY_ ARGC和修改函数的参数向量M0DIFY_ARGV为修改函数的两个参量,修复函数的参数个数 REC0VER_ARGC和修复函数的参数向量REC0VER_ARGV为修复函数的两个参量。步骤203,网络设备判断该出口对应的出口数据结构中是否包含可用的出口的修 改函数,如果是,则执行步骤204,否则执行步骤206。网络设备在获取到出口对应的出口数据结构后,判断其中是否包含可用的出口的 修改函数,即出口的修改函数是否为空。如果出口的修改函数不为空,则表明待发送组播/ 广播报文在从该出口发送时需要修改报文的内容,则执行步骤204,对该报文进行相应的修 改。如果出口的修改函数为空,则表明待发送组播/广播报文在从该出口发送时不需要修 改报文的内容,则执行步骤206,不对该报文进行修改。步骤204,网络设备利用所述修改函数的参数个数和所述修改函数的参数向量调 用所述出口的修改函数对所述待发送组播/广播报文进行修改。当该出口的修改函数不为空时,网络设备利用出口数据结构中记录的修改函数 的参数个数M0DIFY_ARGC和修改函数的参数向量M0DIFY_ARGV来调用该出口的修改函数 MODIFY,对待发送组播/广播报文进行修改,使其符合该出口的交换属性。步骤205,网络设备将修改后的组播/广播报文在所述出口发送。当通过修改函数对待发送组播/广播报文进行修改后,网络设备将该修改后的组 播/广播报文挂载到该出口的发送队列上,并启动网络设备的端口硬件,比如写一个寄存 器,通过硬件对报文进行发送。
步骤206,网络设备直接将所述待发送组播/广播报文在所述出口发送。当该出口的修改函数为空时,网络设备直接将所述待发送组播/广播报文在所述 出口发送,即网络设备直接将该待发送组播/广播报文挂载到该出口的发送队列上,并启 动网络设备的端口硬件,比如写一个寄存器,通过硬件对报文进行发送。步骤207,网络设备接收硬件返回的中断信号,根据中断信号获取发送完毕的报文 和发送报文的出口,并根据发送报文的出口获取对应的出口数据结构。硬件在完成报文的发送之后,产生一个中断信号,以表明报文在当前出口上已发 送完毕,在中断信号中可以携带发送完毕的报文和发送该报文的出口。网络设备接收到硬 件返回的中断信号后,从中断信号中获取发送完毕的报文和发送报文的出口信息,并根据 该出口信息获取该出口对应的出口数据结构。步骤208,网络设备根据该出口数据结构判断其中是否包含有可用的出口的修复 函数,如果是,则执行步骤209,否则执行步骤210。网络设备根据获取到的发送报文的出口对应的出口数据结构后,根据该出口数据 结构判断其中是否包含有可用的该出口的修复函数,即其中包含的出口的修复函数是否为 空。如果该出口的修复函数不为空时,则执行步骤209,利用修复函数对发送完毕的报文进 行修复;如果出口的修复函数为空时,则执行步骤210,无需对发送完毕的报文进行修复。步骤209,网络设备利用所述修复函数的参数个数和所述修复函数的参数向量调 用所述出口的修复函数对所述发送完毕的报文进行修复,以重新生成所述待发送组播/广 播报文,并返回执行步骤202,直到将待发送组播/广播报文在所述所有出口发送为止。当出口对应的出口数据结构中包含有用的修复函数时,表明之前报文在从该出口 发送前经过了修改,为了在后续其他出口上正确地发送原始的待发送组播/广播报文,则 需要将修改后的报文恢复为原始状态,网络设备利用出口数据结构中记录的修复函数的参 数个数REC0VER_ARGC和修复函数的参数向量REC0VER_ARGV来调用出口的修复函数,对之 前获取到的发送完毕的报文进行修复,将其修复为原始状态的待发送组播/广播报文。网 络设备再返回执行步骤202,继续获取下一个出口,将重新获取到的待发送组播/广播报文 在下一个出口上进行发送,直到将待发送组播/广播报文在所述所有出口发送为止。步骤210,网络设备直接将所述发送完毕的报文作为所述待发送组播/广播报文, 并返回执行步骤202,直到将待发送组播/广播报文在所述所有出口发送为止。当出口对应的出口数据结构中未包含有用的修复函数时,表明之前报文在从该出 口发送前未经过修改,则之前获取到的发送完毕的报文即为原始的待发送组播/广播报 文,本步骤无需对其进行修复处理。网络设备再返回执行步骤202,继续获取下一个出口,将 待发送组播/广播报文在下一个出口上进行发送,直到将待发送组播/广播报文在所述所 有出口发送为止。下述以一个例子对本发明的实施例进行进一步的具体说明,假设待发送组播/广 播报文为报文PKT,其出口为Pl和P2。其中,Pl为trunk 口,该出口在发送报文时需要插 入vlan tag VTAG, P2为access 口,该出口在发送报文时则不能携带vlan tag VTAG。网 络设备在发送报文前,先进行预处理,在报文的数据结构中记录出口 Pl的出口数据结构和 出口 P2的出口数据结构。其中,出口 Pl的出口数据结构记录如下
{IFINDEX = Pl;MODIFY = insert_vlan_tag ;RECOVER = remove一vlan_tag ;MODIFY_ARGC = VTAG ;MODIFY_ARGV = NULL ;RECOVER_ARGC = NULL ;RECOVER_ARGV = NULL ;}出口 P2的出口数据结构记录如下{IFINDEX = P2 ;MODIFY = NULL ;RECOVER = NULL ;MODIFY_ARGC = NULL ;MODIFY_ARGV = NULL ;RECOVER_ARGC = NULL ;RECOVER_ARGV = NULL ;}其中,修改函数的实现如下void insert_vlan_tag (pkt_t*pkt, int argc, int*argv) {/* argv T^MilJ/* 将 argc 作为 vlan tag 插入 艮文 pkt 中 */......}其中,修复函数的实现如下void remove_vlan一tag(pkt_t*pkt, int argc, int*argv) {/* 参数 argc 禾口 argv
未用到*//* 移除报文 pkt 的 vlan tag*/......}如果修改函数或修复函数具有多个参数,则*argv为第一个参数,* (argv+Ι)为第 二个参数,*(argv+2)为第三个参数,……,以此类推。例如,出口 X对应的出口数据结构 可以如下所示{IFINDEX = Pn ;MODIFY = modify_with_multi-arg ;RECOVER = recover_with_multi-arg ;M0DIFY_ARGC = η ;
M0DIFY_ARGV = (int*)memory_point_m ;(*M0DIFY_ARGV) = margl ;(*M0DIFY_ARGV+1) = marg2 ;(*M0DIFY_ARGV+2) = marg3 ;......(*M0DIFY_ARGV+n-l) = margn ;REC0VER_ARGC = m ;REC0VER_ARGV = (int*)memory一point一r ;(*REC0VER_ARGV) = rargl ;(*REC0VER_ARGV+1) = rarg2 ;(*REC0VER_ARGV+2) = rarg3 ;......(*RECOVER_ARGV+n-l) = rargm ;}其中,修改函数的实现如下void modify_with_multi-arg(pkt_t*pkt, int argc, int^argv){/* 第 η 个参数(* (argv+n)) */......}其中,修复函数的实现如下void recover_with_multi-arg(pkt_t*pkt, int argc, int^argv){/* 第 η 个参数(* (argv+n)) */......}当网络设备在出口 Pl上发送报文PKT时,先获取到Pl对应的出口数据结构,根 据该出口数据结构可知其中包含可用的修改函数,则网络设备使用PKT、M0DIFY_ARGC和 M0DIFY_ARGV调用该出口的MODIFY函数修改报文,即使用参数PKT、VTAG和NULL调用函数 insert_Vlan_tag,完成tag的插入,然后将PKT挂到Pl的硬件发送队列进行发送。硬件发 送完毕后产生中断信号,网络设备使用PKT、REC0VER_ARGC和REC0VER_ARGV调用该出口的 RECOVER函数修复该报文,即使用参数PKT、NULL、NULL调用函数remove_vlan_tag,将报文 PKT的vlan tag移除,使得报文PKT恢复原始状态,PKT接着从P2发送。网络设备获取到出口 2的出口结构数据后,由于P2的MODIFY为NULL,便不再修 改报文,直接将PKT挂到端口 P2的硬件发送队列进行发送。硬件发送完毕后,产生中断信 号,网络设备发现RECOVER为NULL,就不会对报文进行修复。此时,网络设备获知PKT的所 有出口均已发送完毕,则直接释放该报文。本实施例提供了一种报文处理方法,通过获取待发送组播/广播报文的所有出 口,根据各出口的交换属性分别生成对应的出口数据结构,并将出口数据结构记录在该报 文的数据结构或额外添加的数据结构中,在进行报文发送时,按照预设的顺序获取当前情 况下的下一个出口对应的出口数据结构,根据该出口数据结构在对应的出口上发送该待发
10送组播/广播报文,并重复该发送过程,直到将该报文在其对应的所有出口上均实现发送 为止。本实施例通过对组播或广播报文进行顺序发送,而避免了现有技术中在发送前对报 文的复制拷贝,解决了现有技术中组播/广播报文发送时占用较多CPU资源的缺陷,避免了 报文复制占用过多CPU资源,提高了网络设备的交换效率,且本实施提供的方法通过将各 出口的交换属性提取记录为对应的出口数据结构,则其可以灵活适应各种出口,提高了网 络设备的扩展性。图3为本发明报文处理方法实施例三的流程图,如图3所示,本实施例提供了一种 报文处理方法,本实施例为采用轮询方式对报文的发送过程进行控制,可以具体包括如下 步骤步骤301,网络设备获取待发送组播/广播报文的所有出口,根据各所述出口的交 换属性分别生成对应的出口数据结构,并记录所述所有出口对应的出口数据结构,此步骤 与上述步骤201类似,此处不再赘述。步骤302,网络设备将待发送组播/广播报文的发送状态设置为可发送状态,并将 该报文挂载到一个待发送队列中。步骤303,网络设备通过启动轮询进程对待发送队列中的待发送组播/广播报文 的发送状态进行定时检查,对待发送组播/广播报文的发送状态进行判断,当该发送状态 为可发送状态时,执行步骤304,当该发送状态为发送完毕状态时,执行步骤312,当该发送 状态为不可发送状态时,返回对待发送队列中的下一个报文进行发送处理。步骤304,网络设备判断该待发送组播/广播报文的出口数据结构中是否存在下 一个出口,如果是,则执行步骤305,否则执行步骤306。步骤305,网络设备将该待发送组播/广播报文的下一个出口设置为当前出口。步骤306,网络设备从待发送队列中取下该待发送组播/广播报文,并释放其所占 有的内存空间,并返回执行步骤303,对待发送队列中的下一个报文进行发送处理。步骤307,网络设备判断该出口的出口数据结构中是否包含可用的出口的修改函 数,如果是,则执行步骤308,否则执行步骤310。步骤308,网络设备利用所述修改函数的参数个数和所述修改函数的参数向量调 用所述出口的修改函数对所述待发送组播/广播报文进行修改。步骤309,网络设备将修改后的组播/广播报文在该出口发送,并将报文的发送状 态设置为不可发送状态。步骤310,网络设备直接将所述待发送组播/广播报文在所述出口发送,并将报文 的发送状态设置为不可发送状态。步骤311,硬件在发送完毕报文后,自动将报文的发送状态设置为发送完毕状态。步骤312,网络设备获取到当前出口对应的出口数据结构,判断该出口数据结构中 是否包含可用的出口的修复函数,如果是,则执行步骤313,否则执行步骤314。步骤313,网络设备利用所述修复函数的参数个数和所述修复函数的参数向量调 用所述出口的修复函数对所述发送完毕的报文进行修复,以重新生成所述待发送组播/广 播报文,将报文的发送状态设置为可发送状态,并返回执行步骤304,直到将待发送组播/ 广播报文在所述所有出口发送为止。步骤314,网络设备直接将所述发送完毕的报文作为所述待发送组播/广播报文,将报文的发送状态设置为可发送状态,并返回执行步骤304,直到将待发送组播/广播报文 在所述所有出口发送为止。本领域普通技术人员可以理解实现上述方法实施例的全部或部分步骤可以通过 程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序 在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括R0M、RAM、磁碟或者 光盘等各种可以存储程序代码的介质。图4为本发明报文处理装置实施例一的结构示意图,如图4所示,本实施例提供了 一种报文处理装置,可以具体执行上述方法实施例一中的各个步骤,此处步骤赘述。本实 施例提供的报文处理装置可以具体包括预处理模块401和发送模块402。预处理模块401 用于获取待发送组播/广播报文的所有出口,根据各所述出口的交换属性分别生成对应的 出口数据结构,并记录所述所有出口对应的出口数据结构。发送模块402用于按照预设的 顺序获取当前下一个出口对应的出口数据结构,根据所述出口数据结构将所述待发送组播 /广播报文在所述出口发送,重复该步骤,直到将所述待发送组播/广播报文在所述所有出 口发送为止。图5为本发明报文处理装置实施例二的结构示意图,如图5所示,本实施例提供了 一种报文处理装置,可以具体执行上述方法实施例二或实施例三中的各个步骤,此处步骤 赘述。本实施例提供的报文处理装置在上述图4所示的基础之上,所述出口对应的出口数 据结构包括所述出口的索引信息、所述出口的修改函数、所述出口的修复函数、所述修改函 数的参数个数、所述修改函数的参数向量、所述修复函数的参数个数和所述修复函数的参 数向量。具体地,发送模块402可以具体包括第一发送单元412和第二发送单元422。第 一发送单元412用于当所述出口数据结构中包含可用的出口的修改函数时,利用所述修改 函数的参数个数和所述修改函数的参数向量调用所述出口的修改函数对所述待发送组播/ 广播报文进行修改,并将修改后的组播/广播报文在所述出口发送,重复该步骤,直到将所 述待发送组播/广播报文在所述所有出口发送为止。第二发送单元422用于当所述出口数 据结构中未包含可用的出口的修改函数时,直接将所述待发送组播/广播报文在所述出口 发送,重复该步骤,直到将所述待发送组播/广播报文在所述所有出口发送为止。进一步地,本实施例提供的报文处理装置还可以包括第一获取模块403和第二获 取模块404。其中,第一获取模块403用于在所述根据所述出口数据结构将所述待发送组播 /广播报文在所述出口发送之后,根据硬件发送的中断信号或报文的发送完毕状态获取发 送完毕的报文和发送报文的出口,并根据所述发送报文的出口获取对应的出口数据结构。 第二获取模块404用于根据所述出口数据结构重新获取所述待发送组播/广播报文。具体地,第二获取模块404可以具体包括第一获取单元414和第二获取单元424。 其中,第一获取单元414用于当所述出口数据结构中包含可用的出口的修复函数时,利用 所述修复函数的参数个数和所述修复函数的参数向量调用所述出口的修复函数对所述发 送完毕的报文进行修复,以重新生成所述待发送组播/广播报文。第二获取单元424用于 当所述出口数据结构中未包含可用的出口的修复函数时,直接将所述发送完毕的报文作为 所述待发送组播/广播报文。本实施例提供了一种报文处理装置,通过获取待发送组播/广播报文的所有出口,根据各出口的交换属性分别生成对应的出口数据结构,并将出口数据结构记录在该报 文的数据结构或额外添加的数据结构中,在进行报文发送时,按照预设的顺序获取当前情 况下的下一个出口对应的出口数据结构,根据该出口数据结构在对应的出口上发送该待发 送组播/广播报文,并重复该发送过程,直到将该报文在其对应的所有出口上均实现发送 为止。本实施例通过对组播或广播报文进行顺序发送,而避免了现有技术中在发送前对报 文的复制拷贝,解决了现有技术中组播/广播报文发送时占用较多CPU资源的缺陷,避免了 报文复制占用过多CPU资源,提高了网络设备的交换效率,且本实施提供的方法通过将各 出口的交换属性提取记录为对应的出口数据结构,则其可以灵活适应各种出口,提高了网 络设备的扩展性。本实施例还提供了一种网络设备,可以包括上述图4或图5所示的报文处理装置, 本实施例中的网络设备可以为软件交换机。最后应说明的是以上实施例仅用以说明本发明的技术方案,而非对其限制;尽 管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然 可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替 换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精 神和范围。
权利要求
一种报文处理方法,其特征在于,包括获取待发送组播/广播报文的所有出口,根据各所述出口的交换属性分别生成对应的出口数据结构,并记录所述所有出口对应的出口数据结构;按照预设的顺序获取当前下一个出口对应的出口数据结构,根据所述出口数据结构将所述待发送组播/广播报文在所述出口发送,重复该步骤,直到将所述待发送组播/广播报文在所述所有出口发送为止。
2.根据权利要求1所述的方法,其特征在于,在所述根据所述出口数据结构将所述待 发送组播/广播报文在所述出口发送之后,还包括根据硬件发送的中断信号或报文的发送完毕状态获取发送完毕的报文和发送报文的 出口,并根据所述发送报文的出口获取对应的出口数据结构;根据所述出口数据结构重新获取所述待发送组播/广播报文。
3.根据权利要求2所述的方法,其特征在于,所述出口对应的出口数据结构包括所述 出口的索引信息、所述出口的修改函数、所述出口的修复函数、所述修改函数的参数个数、 所述修改函数的参数向量、所述修复函数的参数个数和所述修复函数的参数向量。
4.根据权利要求3所述的方法,其特征在于,所述根据所述出口数据结构将所述待发 送组播/广播报文在所述出口发送包括当所述出口数据结构中包含可用的出口的修改函数时,利用所述修改函数的参数个数 和所述修改函数的参数向量调用所述出口的修改函数对所述待发送组播/广播报文进行 修改,并将修改后的组播/广播报文在所述出口发送;当所述出口数据结构中未包含可用的出口的修改函数时,直接将所述待发送组播/广 播报文在所述出口发送。
5.根据权利要求3所述的方法,其特征在于,所述根据所述出口数据结构重新获取所 述待发送组播/广播报文包括当所述出口数据结构中包含可用的出口的修复函数时,利用所述修复函数的参数个数 和所述修复函数的参数向量调用所述出口的修复函数对所述发送完毕的报文进行修复,以 重新生成所述待发送组播/广播报文;当所述出口数据结构中未包含可用的出口的修复函数时,直接将所述发送完毕的报文 作为所述待发送组播/广播报文。
6.一种报文处理装置,其特征在于,包括预处理模块,用于获取待发送组播/广播报文的所有出口,根据各所述出口的交换属 性分别生成对应的出口数据结构,并记录所述所有出口对应的出口数据结构;发送模块,用于按照预设的顺序获取当前下一个出口对应的出口数据结构,根据所述 出口数据结构将所述待发送组播/广播报文在所述出口发送,重复该步骤,直到将所述待 发送组播/广播报文在所述所有出口发送为止。
7.根据权利要求6所述的报文处理装置,其特征在于,还包括第一获取模块,用于在所述根据所述出口数据结构将所述待发送组播/广播报文在所 述出口发送之后,根据硬件发送的中断信号或报文的发送完毕状态获取发送完毕的报文和 发送报文的出口,并根据所述发送报文的出口获取对应的出口数据结构;第二获取模块,用于根据所述出口数据结构重新获取所述待发送组播/广播报文。
8.根据权利要求7所述的报文处理装置,其特征在于,所述出口对应的出口数据结构 包括所述出口的索引信息、所述出口的修改函数、所述出口的修复函数、所述修改函数的参 数个数、所述修改函数的参数向量、所述修复函数的参数个数和所述修复函数的参数向量。
9.根据权利要求8所述的报文处理装置,其特征在于,所述发送模块包括第一发送单元,用于当所述出口数据结构中包含可用的出口的修改函数时,利用所述 修改函数的参数个数和所述修改函数的参数向量调用所述出口的修改函数对所述待发送 组播/广播报文进行修改,并将修改后的组播/广播报文在所述出口发送,重复该步骤,直 到将所述待发送组播/广播报文在所述所有出口发送为止;第二发送单元,用于当所述出口数据结构中未包含可用的出口的修改函数时,直接将 所述待发送组播/广播报文在所述出口发送,重复该步骤,直到将所述待发送组播/广播报 文在所述所有出口发送为止。
10.根据权利要求8所述的报文处理装置,其特征在于,所述第二获取模块包括第一获取单元,用于当所述出口数据结构中包含可用的出口的修复函数时,利用所述 修复函数的参数个数和所述修复函数的参数向量调用所述出口的修复函数对所述发送完 毕的报文进行修复,以重新生成所述待发送组播/广播报文;第二获取单元,用于当所述出口数据结构中未包含可用的出口的修复函数时,直接将 所述发送完毕的报文作为所述待发送组播/广播报文。
11.一种网络设备,其特征在于,包括权利要求6-10中任一项所述的报文处理装置。
全文摘要
本发明提供一种报文处理方法、装置和网络设备,其中方法包括获取待发送组播/广播报文的所有出口,根据各所述出口的交换属性分别生成对应的出口数据结构,并记录所述所有出口对应的出口数据结构;按照预设的顺序获取当前下一个出口对应的出口数据结构,根据所述出口数据结构将所述待发送组播/广播报文在所述出口发送,重复该步骤,直到将所述待发送组播/广播报文在所述所有出口发送为止。报文处理装置包括预处理模块和发送模块。网络设备包括上述报文处理装置。本发明解决了现有技术中组播/广播报文发送时占用较多CPU资源的缺陷,避免了报文复制占用过多CPU资源,提高了网络设备的交换效率。
文档编号H04L12/18GK101945040SQ201010269269
公开日2011年1月12日 申请日期2010年8月31日 优先权日2010年8月31日
发明者梁星 申请人:北京星网锐捷网络技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1