发明内容
本发明提供了一种Open flow流表刷新方法,用以解决现有技术中Open flow流表处理过程耗时长且效率低下的问题,该方法包括:
根据表项查找芯片中的Open flow流表确定需要在所述Open flow流表中增加新表项;
根据所述新表项所对应的优先级以及所述Open flow流表中各表项所对应的优先级判断是否需要将所述新表项进行插入;其中,所述各表项按照优先级被划分为多个位置区间,同一位置区间中的多个连续表项具有相同的优先级;
若所述新表项需要进行插入,确定所述Open flow流表中优先级低于所述新表项的表项,并依次将与所述表项对应的各位置区间中的首表项置于本位置区间的尾表项之后;
将所述新表项插入具有与所述新表项相同优先级的表项之后的空余位置。
相应的,本发明还提出了一种路由设备,包括表项查找芯片,还包括:
确定模块,用于根据表项查找芯片中的Open flow流表确定需要在所述Open flow流表中增加新表项;
判断模块,用于根据所述新表项所对应的优先级以及所述Open flow流表中各表项所对应的优先级判断是否需要将所述新表项进行插入;其中,所述各表项按照优先级被划分为多个位置区间,同一位置区间中的多个连续表项具有相同的优先级;
置位模块,用于在所述判断模块判断所述新表项需要进行插入后,确定所述Openflow流表中优先级低于所述新表项的表项,并依次将与所述表项对应的各位置区间中的首表项置于本位置区间的尾表项之后;
插入模块,用于将所述新表项插入具有与所述新表项相同优先级的表项之后的空余位置。
通过应用以上技术方案,表项查找芯片中的各表项按照优先级被划分为多个位置区间,使同一位置区间中的多个连续表项具有相同的优先级,在判断需要将所述新表项进行插入时,确定Open flow流表中优先级低于新表项的表项,并依次将与表项对应的各位置区间中的首表项置于本位置区间的尾表项之后,从而使新表相能够被插入与该新表项相同优先级的表项之后的空余位置。在保证处理正确率的前提下,有效地提高了表项查找芯片中Open flow流表的更新效率。
具体实施方式
如背景技术所述,现有的基于表项查找芯片进行的Open flow流表刷新,是将流表一次性下发到芯片中,当流表发生变化时需要重新将整表再次下刷。鉴于该方式所存在的效率低、易出错等问题,本发明提出了一种Open flow流表刷新方法,基于Open flow流表的特性,将TCAM芯片中的表项划分为不同的优先级,使每一个优先级内部存在多条表项。针对于不同的优先级有匹配顺序上的要求,而对于同一个优先级中的表项没有匹配顺序上的要求,这样在流表刷新时,只需完成将优先级首尾表项位置交换便可以完成新表项空间释放或删除表项空间回收,对TCAM芯片的操作次数仅相关于确实存在表项的优先级的个数。从而实现了Open flow流表的快速刷新。
如图1所示,该方法具体包括以下步骤:
S101,根据表项查找芯片中的Open flow流表确定需要在所述Open flow流表中增加新表项。
在该步骤之前,当对所述表项查找芯片进行初始化配置时,可直接按照配置顺序将初始的Open flow流表下发至所述表项查找芯片中,需要说明的是,初始的Open flow流表中的各表项均已按照优先级顺序排列完毕,本发明将各 表项按照优先级被划分为多个位置区间,使同一位置区间中的多个连续表项具有相同的优先级。
基于表项查找芯片中初始化完毕的Open flow流表,当需要对该Open flow流表中的各表项进行变动时,即可根据该下发的Open flow流表确定是需要在流表中增加新表项或是删除表项。
S102,根据所述新表项所对应的优先级以及所述Open flow流表中各表项所对应的优先级判断是否需要将所述新表项进行插入;其中,所述各表项按照优先级被划分为多个位置区间,同一位置区间中的多个连续表项具有相同的优先级。
本发明将表项查找芯片的Open flow流表中的各表项按照优先级划分为多个位置区间,使同一位置区间中的多个连续表项具有相同的优先级。随后判断新表项的优先级是否高于Open flow流表中优先级最低的表项的优先级,如果是的话则确定所述表项需要进行插入,否则确定所述新表项无需进行插入,直接将该新表项置于至Open flow流表的末位表项之后。
S103,若所述新表项需要进行插入,确定所述Open flow流表中优先级低于所述新表项的表项,并依次将与所述表项对应的各位置区间中的首表项置于本位置区间的尾表项之后。
需要说明的是,如果根据Open flow流表确定需要在Open flow流表中删除表项的话,首先根据所述待删除表项的优先级确定所述待删除表项所在的位置区间;然后将所述待删除表项所在的位置区间中的尾表项覆盖所述待删除表项,并依次将所述待删除表项所在的位置区间之后的各位置区间中的尾表项覆盖至前一位置区间的尾表项。
S104,将所述新表项插入具有与所述新表项相同优先级的表项之后的空余位置。
为了进一步阐述本发明的技术思想,现结合具体的应用场景,对本发明的技术方案进行说明。
/*优先级维护结构体*/
表1
如上表1所示,为本发明具体实施例中TCAM芯片的的流表项位置维护结构体,TCAM芯片中流表项位置的维护仅需使用一个结构体记录每个优先级流表的第一条表项和最后一条表项位置即可。
具体地,首次(初始化)配置时按照配置顺序下发得到表2所示的流表状态:
P1R1 |
P1R2 |
P1R3 |
|
P2R2 |
P2R3 |
P2R4 |
P2R1 |
P4R2 |
P4R3 |
P4R1 |
|
|
|
|
表2
以上流表状态在优先级维护表中体现的状态如下:
优先级一:首表相位置0,末表相位置2,状态uiEN置1;
优先级二:首表相位置3,末表相位置6,状态uiEN置1;
优先级三:首表相位置7,末表相位置7,状态uiEN置0;
优先级四:首表相位置7,末表相位置9,状态uiEN置1;
其他优先级:首表相位置10,末表相位置10,状态uiEN置1。
基于上述配置,以下将分别对插入流表操作处理流程以及删除表相操作处理流程进行描述:
(1)插入流表操作处理流程:
在下发了新的Open flow流表后,首先根据新增加的表项的优先级判断是 否需要进行插入,若是不需要插入的话,那么直接将该表项增加到流表尾部即可。若是需要进行插入的话,那么将按照以下流程处理:
在增加一条优先级一的表相时,将优先级一之后优先级第一个表相与其之后的优先级首条表相交换位置,从而获得一条表相的插入空间,交换后的排步如下表3所示:
P1R1 |
P1R2 |
P1R3 |
|
P2R2 |
P2R3 |
P2R4 |
P2R1 |
P4R2 |
P4R3 |
P4R1 |
|
|
|
|
表3
这样就可以将新表相插入在优先级一的底部,实际上对于其他表相的移动只有两次,插入后的优先级维护表状态如下:
优先级一:首表相位置0,末表相位置3,状态uiEN置1
优先级二:首表相位置4,末表相位置7,状态uiEN置1
优先级三:首表相位置8,末表相位置8,状态uiEN置0
优先级四:首表相位置8,末表相位置10,状态uiEN置1
其他优先级:首表相位置11,末表相位置11,状态uiEN置1
需要指出的是,由于其中优先级三由于并不存在表相,在移动操作时首先判断uiEN状态是否置位,如果状态为0则认为该优先级表相为空,不做硬件搬移操作,只是将软件维护表信息做相应修改。
(2)删除表相操作处理流程:
以表2所示的状态为当前状态,在删除表相时,将本优先级最后一条表相移动覆盖需要删除的表相,同时将后续每个优先级的末尾表相向前移动覆盖前一优先级的末尾位置,最后一个优先级的末尾表相设置无效。这样完成一次删除并整理空间的操作,在只有三个优先级存在的情况下只需要操作三次表相。具体地,删除表相P1R2,移动后的表相如下表4所示:
P1R1 |
P1R3 |
P2R4 |
P2R1 |
P2R2 |
P2R3 |
P4R3 |
P4R1 |
P4R2 |
|
|
|
|
|
|
表4
为达到以上技术目的,本发明还提供了一种路由设备,如图2所示,该路由设备包括表项查找芯片210,还包括:
确定模块220,用于根据表项查找芯片210中的Open flow流表确定需要在所述Open flow流表中增加新表项;
判断模块230,用于根据所述新表项所对应的优先级以及所述Open flow流表中各表项所对应的优先级判断是否需要将所述新表项进行插入;其中,所述各表项按照优先级被划分为多个位置区间,同一位置区间中的多个连续表项具有相同的优先级;
置位模块240,用于在所述判断模块判断所述新表项需要进行插入后,确定所述Open flow流表中优先级低于所述新表项的表项,并依次将与所述表项对应的各位置区间中的首表项置于本位置区间的尾表项之后;
插入模块250,用于将所述新表项插入具有与所述新表项相同优先级的表项之后的空余位置。
在具体的应用场景中,所述判断模块230,具体用于判断所述新表项的优先级是否高于所述Open flow流表中优先级最低的表项的优先级;
若是,所述判断模块确定所述表项需要进行插入;
若否,所述判断模块确定所述新表项无需进行插入。
在具体的应用场景中,所述置位模块240,还用于在当所述判断模块230确定所述新表项不需要进行插入时,将所述新表项置于至所述Open flow流表的末位表项之后。
在具体的应用场景中,还包括:初始化模块260,用于在当对所述表项查找芯片进行初始化配置时,按照配置顺序将初始Open flow流表下发至所述表项查找芯片中。
在具体的应用场景中,还包括:删除模块270,用于根据所述Open flow流表确定需要在所述Open flow流表中删除表项,并根据所述待删除表项的优先级确定所述待删除表项所在的位置区间;
所述置位模块240,还用于将所述待删除表项所在的位置区间中的尾表项 覆盖所述待删除表项,并依次将所述待删除表项所在的位置区间之后的各位置区间中的尾表项覆盖至前一位置区间的尾表项。
由此可见,通过应用以上技术方案,表项查找芯片中的各表项按照优先级被划分为多个位置区间,使同一位置区间中的多个连续表项具有相同的优先级,在判断需要将所述新表项进行插入时,确定Open flow流表中优先级低于新表项的表项,并依次将与表项对应的各位置区间中的首表项置于本位置区间的尾表项之后,从而使新表相能够被插入与该新表项相同优先级的表项之后的空余位置。在保证处理正确率的前提下,有效地提高了表项查找芯片中Open flow流表的更新效率。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施场景所述的方法。
本领域技术人员可以理解附图只是一个优选实施场景的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施场景中的装置中的模块可以按照实施场景描述进行分布于实施场景的装置中,也可以进行相应变化位于不同于本实施场景的一个或多个装置中。上述实施场景的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本发明序号仅仅为了描述,不代表实施场景的优劣。
以上公开的仅为本发明的几个具体实施场景,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。