发明内容
本发明的实施例提供一种流表转换方法和装置,在软件到硬件实现过程中控制器无需适应硬件的下发规则,减小了控制器的负担和管理开销。
为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,提供一种流表转换方法,包括:
在控制和转发相分离的网络设备架构中,将软件形式的多级流表等价转换成软件形式的单级流表;其中,所述单级流表是单表多域的;
根据硬件所实现的多级流表将所述单级流表拆分成对应的硬件形式的多级流表。
在第一种可能的实现方式中,结合第一方面,所述在控制和转发相分离的网络设备架构中,将软件形式的多级流表等价转换成软件形式的单级流表,包括:
获取所述软件形式的多级流表中的所有的完整匹配流;
从所述所有的完整匹配流中选取待处理流;其中,所述待处理流指需要添加到所述软件形式的多级流表中的流表项或者需要在所述软件形式的多级流表中删除的流表项所在的所有的完整的匹配流;
将所述待处理流等价转换成所述单级流表。
在第二种可能的实现方式中,结合第一种可能的实现方式,利用N叉数表示所述软件形式的多级流表的流表项的关系,所述获取所述软形式的多级流表中的所有的完整匹配流,包括:
生成所述N叉数的根节点;其中,所述根节点为所述软件形式的多级流表的第一个流表的一个流表项;
生成所述根节点的子节点;其中,所述子节点为所述第一个流表的任一流表项跳转到指定流表且匹配域匹配成功后所得到的所有流表项;所述子节点与所述流表项具有一一对应的关系;
采用递归算法对所述根节点的所有子节点进行操作,建立所述N叉数;其中,所述N为一个正整数;
如果任一流表项含有跳转指令操作,根据所述跳转操作指令跳转到对应的流表中,未匹配到与所述任一流表项相同的匹配域,则删除所述任一流表项所代表的节点,得到更新后的二叉数;
遍历所述更新后的N叉数,得到所述更新后的N叉数的所有叶子节点;
采用递归算法查找所述所有叶子节点的父节点直到根节点,获得所述所有的完整匹配流。
在第三种可能的实现方式中,结合第二种可能的实现方式,所述从所述所有的完整匹配流中选取待处理流,包括:
判断所述N叉数的节点对应的流表项的匹配域与预先下发的匹配域是否相同;
如果存在某一节点对应的流表项的匹配域与所述预先下发的匹配域相同,则所述某一节点所在的完整匹配流为待处理流。
在第四种可能的实现方式中,结合第三种可能的实现方式,所述将所述待处理流等价转换成所述单级流表,包括:
构造一个单表多域的流表项;其中,所述流表项中包含匹配域和匹配域匹配成功后所要执行的策略;
遍历所述待处理流,将所述待处理流的所有流表项中的每一个匹配域依次填充到新构造的单表多域的流表项中;其中,所述待处理流的每个策略按顺序依次填充到所述单表多域的流表项的策略列表中。
在第五种可能的实现方式中,结合第四种可能的实现方式,
所述待处理流中具有跳转命令的策略和写入命令的策略不能填充到单表多域的策略列表中;
如果某个流表项中的操作是设置某个匹配域时,而所述流表项之后有匹配所述匹配域的操作,则所述匹配域不能添加到所述流表项中。
在第六种可能的实现方式中,结合第一方面,所述根据硬件所实现的多级流表将所述单级流表拆分成对应的硬件形式的多级流表,包括:
构造所述硬件对应的硬件形式的多级流表,并确定所述硬件形式的多级流表中流表的数目和每个所述流表的匹配域类型;
为每个所述流表创建一个新流表项;
遍历所述单级流表中的每个所述完整匹配流的所有匹配域;
判断所述单级流表中是否有未遍历的匹配域;
若有未遍历的匹配域,则在所述硬件形式的多级流表中查找与每个所述未遍历的匹配域类型对应的流表;
根据所述未遍历的匹配域类型对应的流表获取所述未遍历的匹配域对应的流表项;
将每个所述未遍历的匹配域类型和匹配域的值插入所述未遍历的匹配域对应的新流表项中,并执行所述遍历所述单级流表中的每个所述完整匹配流的所有匹配域。
在第七种可能的实现方式中,结合第六种可能的实现方式,所述方法还包括:
若没有未遍历的匹配域,则遍历所述新流表项;
判断所述新流表项中是否有未遍历的新流表项;
若所述新流表项中有未遍历的新流表项,则查找所述未遍历的新流表项的匹配域;
若所述未遍历的新流表项没有匹配域,则删除所述未遍历的新流表项,并执行所述遍历所述新流表项。
在第八种可能的实现方式中,结合第七种可能的实现方式,所述方法还包括:
若所述未遍历的新流表项含有匹配域,则在当前所述未遍历的新流表项中填充与所述完整匹配流中的匹配域类型相同的匹配域;
将所述填充后的新流表项插入对应的硬件形式的多级流表中,并执所述遍历所述新流表项。
在第九种可能的实现方式中,结合第六种至第八种间任一可能的实现方式,
所述单级流表中的策略列表填充到所述硬件形式的多级流表中最后一个新流表项中。
在第十种可能的实现方式中,结合第一方面或上述任一可能的实现方式,
所述OpenFlow中不能进行等价转换的软件形式的多级流表需要上传到软件进行处理。
第二方面,提供一种流表转换装置,包括:
转换单元,用于在控制和转发相分离的网络设备架构中,将软件形式的多级流表等价转换成软件形式的单级流表;其中,所述单级流表是单表多域的;
拆分单元,用于根据硬件所实现的多级流表将所述单级流表拆分成对应的硬件形式的多级流表。
在第一种可能的实现方式中,结合第二方面,所述转换单元包括:
获取子单元,用于获取所述软件形式的多级流表中的所有的完整匹配流;
选取子单元,用于从所述所有的完整匹配流中选取待处理流;其中,所述待处理流指需要添加到所述软件形式的多级流表中的流表项或者需要在所述软件形式的多级流表中删除的流表项所在的所有的完整的匹配流;
转换子单元,用于将所述待处理流等价转换成所述单级流表。
在第二种可能的实现方式中,结合第一种可能的实现方式,利用N叉数表示所述软件形式的多级流表的流表项的关系,所述获取子单元包括:
生成模块,用于生成所述N叉数的根节点;其中,所述根节点为所述软件形式的多级流表的第一个流表的一个流表项;
所述生成模块,还用于生成所述根节点的子节点;其中,所述子节点为所述第一个流表的任一流表项跳转到指定流表且匹配域匹配成功后所得到的所有流表项;所述子节点与所述流表项具有一一对应的关系;
处理模块,用于采用递归算法对所述根节点的所有子节点进行操作,建立所述N叉数;其中,所述N为一个正整数;
删除模块,用于如果任一流表项含有跳转指令操作,根据所述跳转操作指令跳转到对应的流表中,未匹配到与所述任一流表项相同的匹配域,则删除所述任一流表项所代表的节点,得到更新后的二叉数;
所述处理模块,还用于遍历所述更新后的N叉数,得到所述更新后的N叉数的所有叶子节点;
所述处理模块,还用于采用递归算法查找所述所有叶子节点的父节点直到根节点,获得所述所有的完整匹配流。
在第三种可能的实现方式中,结合第二种可能的实现方式,所述选取子单元,具体用于:
判断所述N叉数的节点对应的流表项的匹配域与预先下发的匹配域是否相同;
如果存在某一节点对应的流表项的匹配域与所述预先下发的匹配域相同,则所述某一节点所在的完整匹配流为待处理流。
在第四种可能的实现方式中,结合第三种可能的实现方式,所述转换子单元包括:
构造模块,用于构造一个单表多域的流表项;其中,所述流表项中包含匹配域和匹配域匹配成功后所要执行的策略;
填充模块,用于遍历所述待处理流,将所述待处理流的所有流表项中的每一个匹配域依次填充到新构造的单表多域的流表项中;其中,所述待处理流的每个策略按顺序依次填充到所述单表多域的流表项的策略列表中。
在第五种可能的实现方式中,结合第四种可能的实现方式,
所述待处理流中具有跳转命令的策略和写入命令的策略不能填充到单表多域的策略列表中;
如果某个流表项中的操作是设置某个匹配域时,而所述流表项之后有匹配所述匹配域的操作,则所述匹配域不能添加到所述流表项中。
在第六种可能的实现方式中,结合第二方面,所述拆分单元包括:
构造子单元,用于构造所述硬件形式的多级流表,并确定所述硬件形式的多级流表中流表的数目和每个所述流表的匹配域类型;
处理子单元,用于为每个所述流表创建一个新流表项;
所述处理子单元,还用于遍历所述单级流表中的每个所述完整匹配流的所有匹配域;
判断子单元,用于判断所述单级流表中是否有未遍历的匹配域;
所述处理子单元,还用于若有未遍历的匹配域,则在所述硬件形式的多级流表中查找与每个所述未遍历的匹配域类型对应的流表;
所述处理子单元,还用于根据所述未遍历的匹配域类型对应的流表获取所述未遍历的匹配域对应的流表项;
所述处理子单元,还用于将每个所述未遍历的匹配域类型和匹配域的值插入所述未遍历的匹配域对应的新流表项中,并执行所述遍历所述单级流表中的每个所述完整匹配流的所有匹配域。
在第七种可能的实现方式中,结合第六种可能的实现方式,
所述处理子单元,还用于若没有未遍历的匹配域,则遍历所述新流表项;
所述判断子单元,还用于判断所述新流表项中是否有未遍历的新流表项;
所述处理子单元,还用于若所述新流表项中有未遍历的新流表项,则查找所述未遍历的新流表项的匹配域;
所述处理子单元,还用于若所述未遍历的新流表项没有匹配域,则删除所述未遍历的新流表项,并执行所述遍历所述新流表项。
在第八种可能的实现方式中,结合第七种可能的实现方式,所述处理子单元还用于:
若所述未遍历的新流表项含有匹配域,则在当前所述未遍历的新流表项中填充与所述完整匹配流中的匹配域类型相同的匹配域;
将所述填充后的新流表项插入对应的硬件形式的多级流表中,并执行所述遍历所述新流表项。
在第九种可能的实现方式中,结合第六种至第八种间任一可能的实现方式,
所述单级流表中的策略列表填充到所述硬件形式的多级流表中最后一个新流表项中。
在第十种可能的实现方式中,结合第二方面或上述任一可能的实现方式,
所述OpenFlow中不能进行等价转换的软件形式的多级流表需要上传到软件进行处理。
本发明的实施例提供的流表转换方法和装置,通过将软件形式的多级流表转换成硬件形式的多级流表,在软件到硬件实现过程中控制器无需适应硬件的下发规则,减小了控制器的负担和管理开销。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的实施例提供一种流表转换方法,参照图1所示,包括:
101、在控制和转发相分离的网络设备架构中,将软件形式的多级流表等价转换成软件形式的单级流表。其中,单级流表是单表多域的。
具体的,本发明中的等价转换可以为匹配域匹配顺序上的等价,转换时执行动作上的等价。当然,并不限于此,在不同的应用场景可以根据实际的需求来定义等价的含义。
102、根据硬件所实现的多级流表将单级流表拆分成对应的硬件形式的多级流表。
其中,在流表的转换过程中同一个流表的各个流表项之间通过链表的形式来进行关联。
本发明的实施例提供的流表转换方法,通过将软件形式的多级流表转换成硬件形式的多级流表,在软件到硬件实现过程中控制器无需适应硬件的下发规则,减小了控制器的负担和管理开销。
本发明的实施例提供一种流表转换方法,参照图2所示,包括:
201、获取软件形式的多级流表中的所有的完整匹配流。
进一步,本发明的实施例中采用N叉数表示软件形式的多级流表的流表项的关系,步骤201具体包括以下步骤:
201a、生成该N叉数的根节点。其中,根节点为软件形式的多级流表的第一个流表的一个流表项。
201b、生成根节点的子节点。其中,子节点为第一个流表的任一流表项跳转到指定流表且匹配域匹配成功后所得到的所有流表项;子节点与流表项具有一一对应的关系。
201c、采用递归算法对根节点的所有子节点进行操作,建立N叉数。其中,N为一个正整数。
201d、如果任一流表项含有跳转指令操作,根据跳转操作指令跳转到对应的流表中,未匹配到与该任一流表项相同的匹配域,则删除该任一流表项所代表的节点,得到更新后的二叉数。
其中,本发明的实施例中需要得到的是完整的匹配流,如果当前流表项中含有例如goto的跳转指令操作,而跳转到指定的流表中没有匹配到与该当前流表项相同的匹配域,则说明该当前流表项属于不完整的流,因此需要对当前流表项所代表的节点进行删除的操作。从而,保证得到完整的匹配流。
201e、遍历更新后的N叉数,得到更新后的N叉数的所有叶子节点。
201f、采用递归算法查找所有叶子节点的父节点直到根节点,获得所有的完整匹配流。
202、从所有的完整匹配流中选取待处理流。
其中,待处理流指需要添加到所述软件形式的多级流表中的流表项或者需要在所述软件形式的多级流表中删除的流表项所在的所有的完整的匹配流。
对于待处理流的判断需要根据待处理流的定义来解决,本发明中定义的待处理流的概念主要是由于OpenFlow多级流表存在动态的改变,为了防止转换成单级流表时出现流表膨胀冗余的现象,即出现再次转换之前已经转换过的完整的流表的现象,从而提出待处理流的概念。在本实施例中根据对待处理流的定义,在查找待处理流时只需要找到将要添加或者删除的表项是否在当前需要检验是否为待处理流的完整匹配流之中,即与完整匹配流中的每个流表项进行比较直至匹配到相同流表项或者匹配完所有的流表项为止。对于,流表项与流表项之间的比较只需要对匹配域的类型和阈值进行比较即可。
进一步,步骤202具体包括以下步骤:
202a、判断N叉数的节点对应的流表项的匹配域与预先下发的匹配域是否相同。
202b、如果存在某一节点对应的流表项的匹配域与预先下发的匹配域相同,则某一节点所在的完整匹配流为待处理流。
203、将待处理流等价转换成单级流表。
进一步,步骤203具体包括:
203a、构造一个单表多域的流表项;其中,流表项中包含匹配域和匹配域匹配成功后所要执行的策略。
203b、遍历待处理流,将待处理流的所有流表项中的每一个匹配域依次填充到新构造的单表多域的流表项中。其中,待处理流的每个策略按顺序依次填充到单表多域的流表项的策略列表中。
其中,待处理流中具有跳转命令的策略和写入命令的策略不能填充到单表多域的策略列表中。
在本发明的实施例中跳转命令具体可以是OpenFlow_GOTO_TABLE,写入命令具体可以是OpenFlow_WRITE_METADATA。当然,跳转命令和写入命令并不限于此,在实际的应用场景中可以根据具体的需求来定义。
如果某个流表项中的操作是设置某个匹配域时,而流表项之后有匹配该匹配域的操作,则匹配域不能添加到流表项中。
在本发明的实施例中设置操作的命令具体可以是属于OpenFlow_APPLAY_ACTION_中的OpenFlow_SET_FIELD。当然,设置操作的命令并不限于此,在实际的应用场景中可以根据具体的需求来定义。
其中,在本实施例中等价转换具体是对于OpenFlow_PUSH/POP_VLAN、OpenFlow_PUSH/POP_MPLS类型的操作。具体为,若指令为POP VLAN/MPLS且之前没有PUSHVLAN/MPLS的操作,而其后有紧跟着对VLAN/MPLS域的匹配,此时这个完整的新流无法进行等价转换。对于无法进行等价转换的流,需要上传到相应的软件进行处理。如有PUSH VLAN/MPLS的操作,且之后有对VLAN/MPLS域进行匹配操作,但进行匹配域操作之前没有对应的POP操作,则该匹配域不需要添加到单表多域的流表项中。因此,只有先进行PUSH操作之后,再进行相应的与PUSH操作相同数量的POP操作,才可以进行等价的转换。
204、构造硬件对应的硬件形式的多级流表,并确定硬件形式的多级流表中流表的数目和每个流表的匹配域类型。
205、为每个硬件形式的多级流表创建一个新流表项。
其中,新流表项之间通过跳转操作goto与OpenFlow中定义的metadata进行关联。goto操作的构造符合跳转table id递增的原则。但是,metadata的构造可以是通过一条完整流的流表号和流表项号来组成。
206、遍历单级流表中的每个完整匹配流的所有匹配域。
207、判断单级流表中是否有未遍历的匹配域。
若单级流表中有未遍历的匹配域,则执行步骤208~210;若单级流表中没有未遍历的匹配域,则执行步骤211~217;
208、在硬件形式的多级流表中查找与每个未遍历的匹配域类型对应的流表。
209、根据未遍历的匹配域类型对应的流表获取未遍历的匹配域对应的流表项。
210、将每个未遍历的匹配域类型和匹配域的值插入未遍历的匹配域对应的新流表项中,并执行遍历单级流表中的每个完整匹配流的所有匹配域。
211、遍历新流表项。
212、判断新流表项中是否有未遍历的新流表项。
213、若新流表项中有未遍历的新流表项,则查找未遍历的新流表项的匹配域。
若新流表项中没有未遍历的新流表项,则结束整个流程的实施。
214、判断未遍历的新流表项是否含有匹配域。
若未遍历的新流表项没有匹配域,则执行步骤215;若未遍历的新流表项含有匹配域,则执行步骤216~217;
215、删除未遍历的新流表项,并返回步骤211。
216、在当前未遍历的新流表项中填充与完整匹配流中的匹配域类型相同的匹配域。
217、将填充后的新流表项插入对应的硬件形式的多级流表中,并返回步骤211。
其中,单级流表中的策略列表填充到硬件形式的多级流表中最后一个新流表项中。
其中,本发明中的硬件形式的多级流表中的流表项的匹配域采用链表的形式来构建,当然并不限于此。
具体的,OpenFlow中不能进行等价转换的软件形式的多级流表需要上传到软件进行处理。
其中,在整个流表的转换过程中会出现前一个数据包匹配第一个流表的多个流表项,但通过第一个匹配的流表项进行跳转并匹配后续域可能匹配失败,但通过第一个流表的与数据包匹配的除第一个流表项外的任意流表项进行跳转继续并匹配后续域可能匹配成功。但由于匹配时只能按照先后顺序进行,因此数据包只能匹配第一个流表的第一个匹配成功的流表项。此时,会出现数据包匹配失败。此时,则需要将数据包上传到软件层进行处理。
本发明的实施例提供的流表转换方法,通过将软件形式的多级流表转换成硬件形式的多级流表,在软件到硬件实现过程中控制器无需适应硬件的下发规则,减小了控制器的负担和管理开销。进而,通过对流表的整合和规划,可以更好地利用每个流表的匹配域资源,优化流表的结构。
本发明的实施例提供一种流表转换装置3,参照图3所示,包括转换单元31和拆分单元32,其中:
转换单元31,用于在控制和转发相分离的网络设备架构中,将软件形式的多级流表等价转换成软件形式的单级流表。其中,单级流表是单表多域的。
拆分单元32,用于根据硬件所实现的多级流表将单级流表拆分成对应的硬件形式的多级流表。
本发明的实施例提供的流表转换装置,通过将软件形式的多级流表转换成硬件形式的多级流表,在软件到硬件实现过程中控制器无需适应硬件的下发规则,减小了控制器的负担和管理开销。
进一步,参照图4所示,转换单元包括:获取子单元311、选取子单元312和转换子单元313,其中:
获取子单元311,用于获取软件形式的多级流表中的所有的完整匹配流。
选取子单元312,用于从所有的完整匹配流中选取待处理流。
其中,待处理流指需要添加到所述软件形式的多级流表中的流表项或者需要在所述软件形式的多级流表中删除的流表项所在的所有的完整的匹配流。
转换子单元313,用于将待处理流等价转换成单级流表。
进一步,利用N叉数表示软件形式的多级流表的流表项的关系,获取子单元311包括:生成模块、处理模块和删除模块,其中:
生成模块,用于生成N叉数的根节点。
其中,根节点为软件形式的多级流表的第一个流表的一个流表项。
生成模块,还用于生成根节点的子节点。
其中,子节点为第一个流表的任一流表项跳转到指定流表且匹配域匹配成功后所得到的所有流表项;子节点与流表项具有一一对应的关系。
处理模块,用于采用递归算法对根节点的所有子节点进行操作,建立N叉数。其中,N为一个正整数。
删除模块,用于如果任一流表项含有跳转指令操作,根据跳转操作指令跳转到对应的流表中,未匹配到与任一流表项相同的匹配域,则删除任一流表项所代表的节点,得到更新后的二叉数。
处理模块,还用于遍历更新后的N叉数,得到更新后的N叉数的所有叶子节点。
处理模块,还用于采用递归算法查找所有叶子节点的父节点直到根节点,获得所有的完整匹配流。
进一步,选取子单元312,具体用于:
判断N叉数的节点对应的流表项的匹配域与预先下发的匹配域是否相同。
如果存在某一节点对应的流表项的匹配域与预先下发的匹配域相同,则某一节点所在的完整匹配流为待处理流。
进一步,转换子单元313包括:构造模块和填充模块,其中:
构造模块,用于构造一个单表多域的流表项。
其中,该流表项中包含匹配域和匹配域匹配成功后所要执行的策略。
填充模块,用于遍历待处理流,将待处理流中的所有流表项中的每一个匹配域依次填充到新构造的单表多域的流表项中。
其中,待处理流的每个策略按顺序依次填充到单表多域的流表项的策略列表中。
具体的,待处理流中具有跳转命令的策略和写入命令的策略不能填充到单表多域的策略列表中。
如果某个流表项中的操作是设置某个匹配域时,而流表项之后有匹配该匹配域的操作,则该匹配域不能添加到流表项中。
进一步,参照图5所示,拆分单元32包括:构造子单元321、处理子单元322和判断子单元323,其中:
构造子单元321,用于构造硬件形式多级流表,并确定硬件形式的多级流表中流表的数目和每个流表的匹配域类型。
处理子单元322,用于为每个流表创建一个新流表项。
处理子单元322,还用于遍历单级流表中的每个完整匹配流的所有匹配域。
判断子单元323,用于判断单级流表中是否有未遍历的匹配域。
处理子单元322,还用于若有未遍历的匹配域,则在硬件形式的多级流表中查找与每个未遍历的匹配域类型对应的流表。
处理子单元322,还用于根据未遍历的匹配域类型对应的流表获取未遍历的匹配域对应的流表项。
处理子单元322,还用于将每个未遍历的匹配域类型和匹配域的值插入未遍历的匹配域对应的新流表项中,并执行遍历单级流表中的每个完整匹配流的所有匹配域。
处理子单元322,还用于若没有未遍历的匹配域,则遍历新流表项。
判断子单元323,还用于判断新流表项中是否有未遍历的新流表项。
处理子单元322,还用于若新流表项中有未遍历的新流表项,则查找未遍历的新流表项的匹配域。
若未遍历的新流表项没有匹配域,则删除未遍历的新流表项,并执行遍历新流表项。
若未遍历的新流表项含有匹配域,则在当前未遍历的新流表项中填充与完整匹配流中的匹配域类型相同的匹配域。
将填充后的新流表项插入对应的硬件形式的多级流表中,并执行遍历新流表项。
其中,单级流表中的策略列表填充到硬件形式的多级流表中最后一个新流表项中。
OpenFlow中不能进行等价转换的软件形式的多级流表需要上传到软件进行处理。
本发明的实施例提供的流表转换装置,通过将软件形式的多级流表转换成硬件形式的多级流表,在软件到硬件实现过程中控制器无需适应硬件的下发规则,减小了控制器的负担和管理开销。进而,通过对流表的整合和规划,可以更好地利用每个流表的匹配域资源,优化流表的结构。
本发明的实施例提供一种流表转换装置4,参照图6所示,包括:至少一个处理器41、存储器42、通信接口43和总线44,至少一个处理器41、存储器42和通信接口43通过总线44连接并完成相互间的通信,其中:
该总线44可以是工业标准体系结构(Industry StandardArchitecture,简称为ISA)总线、外部设备互连(Peripheral ComponentInterconnect,简称为PCI)总线或扩展工业标准体系结构(ExtendedIndustry Standard Architecture,简称为EISA)总线等。该总线44可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。其中:
存储器42用于存储可执行程序代码,该程序代码包括计算机操作指令。存储器62可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
处理器41可能是一个中央处理器(Central Processing Unit,简称为CPU),或者是特定集成电路(Application Specific IntegratedCircuit,简称为ASIC),或者是被配置成实施本发明实施例的一个或多个集成电路。
通信接口43,主要用于实现本实施例的装置之间的通信。
处理器41,还用于调用存储器42中的程序代码,用以执行以下操作:
在控制和转发相分离的网络设备架构中,将软件形式的多级流表等价转换成软件形式的单级流表;其中,单级流表是单表多域的。
根据硬件所实现的多级流表将单级流表拆分成对应的硬件形式的多级流表。
进一步,处理器41还用于执行以下操作:
获取软件形式的多级流表中的所有的完整匹配流。
从所有的完整匹配流中选取待处理流。
其中,待处理流指需要添加到所述软件形式的多级流表中的流表项或者需要在所述软件形式的多级流表中删除的流表项所在的所有的完整的匹配流。
将待处理流等价转换成单级流表。
进一步,处理器41还用于执行以下操作:
生成N叉数的根节点。其中,根节点为软件形式的多级流表的第一个流表的一个流表项。
生成根节点的子节点。其中,子节点为第一个流表的任一流表项跳转到指定流表且匹配域匹配成功后所得到的所有流表项;子节点与流表项具有一一对应的关系。
采用递归算法对根节点的所有子节点进行操作,建立N叉数。其中,N为一个正整数。
如果任一流表项含有跳转指令操作,根据跳转操作指令跳转到对应的流表中,未匹配到与任一流表项相同的匹配域,则删除任一流表项所代表的节点,得到更新后的二叉数。
遍历更新后的N叉数,得到更新后的N叉数的所有叶子节点。
采用递归算法查找所有叶子节点的父节点直到根节点,获得所有的完整匹配流。
进一步,可选的,处理器41还用于执行以下操作:
判断N叉数的节点对应的流表项的匹配域与预先下发的匹配域是否相同。
如果存在某一节点对应的流表项的匹配域与预先下发的匹配域相同,则某一节点所在的完整匹配流为待处理流。
进一步,可选的,处理器41还用于执行以下操作:
构造一个单表多域的流表项。其中,流表项中包含匹配域和匹配域匹配成功后所要执行的策略。
遍历待处理流,将待处理流的所有流表项中的每一个匹配域依次填充到新构造的单表多域的流表项中。其中,待处理流的每个策略按顺序依次填充到单表多域的流表项的策略列表中。
待处理流中具有跳转命令的策略和写入命令的策略不能填充到单表多域的策略列表中。
如果某个流表项中的操作是设置某个匹配域时,而流表项之后有匹配匹配域的操作,则匹配域不能添加到流表项中。
进一步,可选的,处理器41还用于执行以下操作:
构造硬件对应的硬件形式的多级流表,并确定硬件形式的多级流表中流表的数目和每个流表的匹配域类型。
为每个流表创建一个新流表项。
遍历单级流表中的每个完整匹配流的所有匹配域。
判断单级流表中是否有未遍历的匹配域。
若有未遍历的匹配域,则在硬件形式的多级流表中查找与每个未遍历的匹配域类型对应的流表。
根据未遍历的匹配域类型对应的流表获取未遍历的匹配域对应的流表项。
将每个未遍历的匹配域类型和匹配域的值插入未遍历的匹配域对应的新流表项中,并执行遍历单级流表中的每个完整匹配流的所有匹配域。
进一步,处理器41还用于执行以下操作:
若没有未遍历的匹配域,则遍历新流表项。
判断新流表项中是否有未遍历的新流表项。
若新流表项中有未遍历的新流表项,则查找未遍历的新流表项的匹配域。
若未遍历的表项没有匹配域,则删除未遍历的新流表项,并执行遍历新流表项。
若未遍历的新流表项含有匹配域,则在当前未遍历的新流表项中填充与完整匹配流中的匹配域类型相同的匹配域。
将填充后的新流表项插入对应的硬件形式的多级流表中,并执遍历新流表项。
单级流表中的策略列表填充到硬件形式的多级流表中最后一个新流表项中。
OpenFlow中不能进行等价转换的软件形式的多级流表需要上传到软件进行处理。
本发明的实施例提供的流表转换装置,通过将软件形式的多级流表转换成硬件形式的多级流表,在软件到硬件实现过程中控制器无需适应硬件的下发规则,减小了控制器的负担和管理开销。进而,通过对流表的整合和规划,可以更好地利用每个流表的匹配域资源,优化流表的结构。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。