实现交换机芯片Openflow流表优先级的方法及系统技术领域
本发明涉及以太网通信技术,尤其涉及一种实现交换机芯片Openflow流表优先级的方法及系统。
背景技术
目前互联网发展迅速,其应用规模的庞大及其地位的重要性,远远超出了设计者们的想象,而现在的互联网主要有以下弊端:特定的范围内没有统一的管理、网络转发机制与策略单一、运营商难以最大限度优化自身网络、以及传统交换机用于转发的功能和协议多且杂,很难配置,系统容易出错等问题。为应对上述弊端,人们提出了Openflow交换机,其将传统交换机上的报文转发和转发策略分离开来,采用专门的一台控制器(controller)通过网线和交换机连接。这样原来同在一台交换机设备上的报文转发功能(硬件芯片实现)和报文转发策略(各种软件协议)就被分开到了不同的硬件设备上。而一台控制器还可以控制多台Openflow交换机,从而实现了统一的转发控制端,更有效地控制了网络。
现有技术中,普遍地通过访问控制列表(ACL)来实现流表,并通过ACL的entry_id来指定流表的优先级。然而,传统交换机芯片必须要用户指定一个值(entry_id)代表其在TCAM里的位置顺序(即优先级),而这个值必须是唯一的,而Openflow的优先级是可以有相同值的,即并不是唯一的,故,采用传统交换机ACL里的entry_id来指定流的优先级的技术无法满足Openflow的协议要求。
发明内容
本发明的目的在于提供一种实现交换机芯片Openflow流表优先级的方法。
相应于上述方法,本发明的另一发明目的还在于提供一种实现交换机芯片Openflow流表优先级的系统。
为实现上述发明目的,本发明的技术方案为:一种实现交换机芯片Openflow流表优先级的方法,其包括:
S1、建立一存储有若干Openflow流的优先级值的哈希表,并相应建立一将哈希表中所有优先级值从大到小进行排序的排序表;
S2、将每一优先级值与一组哈希数据相对应,每一组哈希数据包括若干与ACL表对应的entry_id值,其中,所述entry_id值存储于entry_id链表中;
S3、按照所述排序表中的优先级值的次序,对所述哈希表中的所有优先级值进行重排序;
S4、根据排序后的哈希表,获取所述entry_id值的优先级次序,并根据所述优先级次序对交换机的ACL表作相应地排序。
作为本发明的进一步改进,该方法S1步骤还包括:新建一优先级值Priority_new;判断所述优先级值Priority_new是否存在于当前哈希表中,若是,不作操作;若否,在所述哈希表及排序表中分别插入该优先级值Priority_new。
作为本发明的进一步改进,所述步骤S2还具体包括:为所述优先级值Priority_new对应维护一个或多个entry_id值entry_id_new;在该优先级值Priority_new所对应的哈希数据中插入所述一个或多个entry_id值entry_id_new。
作为本发明的进一步改进,所述“在该优先级值Priority_new所对应的哈希数据中插入所述一个或多个entry_id值entry_id_new”的步骤中,所述entry_id值entry_id_new插置于对应的哈希数据的最后面。
作为本发明的进一步改进,所述步骤S4还具体包括:按照优先级由高到低的次序,逐一读出与每一优先级值相对应的entry_id值;根据entry_id值的读出先后顺序来获取所述entry_id值的优先级次序。
相应地,本发明提供的一种实现交换机芯片Openflow流表优先级的系统,其包括:
软表建立单元、用于建立一存储有若干Openflow流的优先级值的哈希表,并相应建立一将哈希表中所有优先级值从大到小进行排序的排序表;
哈希数据对应单元、用于将每一优先级值与一组哈希数据相对应,每一组哈希数据包括若干与ACL表对应的entry_id值,其中,所述entry_id值存储于entry_id链表中;
哈希表排序单元、用于按照所述排序表中的优先级值的次序,对所述哈希表中的所有优先级值进行重排序;
ACL表排序单元、用于根据排序后的哈希表,获取所述entry_id值的优先级次序,并根据所述优先级次序对交换机的ACL表作相应地排序。
作为本发明的进一步改进,所述软表建立单元还用于:新建一优先级值Priority_new;判断所述优先级值Priority_new是否存在于当前哈希表中,若是,不作操作;若否,在所述哈希表及排序表中分别插入该优先级值Priority_new。
作为本发明的进一步改进,所述哈希数据对应单元还用于:为所述优先级值Priority_new对应维护一个或多个entry_id值entry_id_new;在该优先级值Priority_new所对应的哈希数据中插入所述一个或多个entry_id值entry_id_new。
作为本发明的进一步改进,在所述哈希数据对应单元中,所述entry_id值entry_id_new插置于对应的哈希数据的最后面。
作为本发明的进一步改进,所述ACL表排序单元还具体用于:按照优先级由高到低的次序,逐一读出与每一优先级值相对应的entry_id值;根据entry_id值的读出先后顺序来获取所述entry_id值的优先级次序。
本发明的有益效果是:本发明的技术方案通过建立维护Priority及entry_id的关系的哈希表及排序表,利用传统交换机的芯片上的ACL功能,实现满足Openflow协议的流表优先级功能,且实现方式简单。
附图说明
图1是本发明具体实施方式中实现交换机芯片Openflow流表优先级的方法的流程图;
图2是本发明具体实施方式中未排序的哈希表、排序表及相对应的哈希数据的示意图;
图3是本发明具体实施方式中已排序的哈希表、排序表及相对应的哈希数据的示意图;
图4是本发明具体实施方式中实现交换机芯片Openflow流表优先级的系统的单元示意图。
具体实施方式
以下将结合附图所示的具体实施方式对本发明进行详细描述。但这些实施方式并不限制本发明,本领域的普通技术人员根据这些实施方式所做出的结构、方法、或功能上的变换均包含在本发明的保护范围内。
参图1至图3所示,其为本发明实现交换机芯片Openflow流表优先级的方法的一具体实施方式。在本实施方式中,其通过构建ACL的entry_id和Openflow流的priority对应关系,重新建立传统交换机ACL的entry_id的排列顺序。如图1所示,所述实现交换机芯片Openflow流表优先级的方法,包括如下步骤:
S1、建立一存储有若干Openflow流的优先级值的哈希表,并相应建立一将哈希表中所有优先级值从大到小进行排序的排序表;
本发明为利用传统交换机的芯片上的ACL功能来完全满足Openflow协议上提出的流表优先级,首先需要建立2张软表来建立entry_id和priority的值,其具体数据结构如下:
第一张表(哈希表,Hash表),Hash键值为优先级(priority),Hash数据为一张存储entry_id的链表,由于Hash实现原理的原因,Hash表的优先级值是乱序的,如图2所示,图中哈希表包括4个优先级键值:65535、2、3、100,其排序未按照键值大小进行。
第二张表(排序表),一张存储优先级值的排序表,不同之处在于:其需要按照优先级值大小插入相应位置,以弥补哈希表内键值乱序的问题,依旧参图2所示,图中排序表包括4个优先级值,其排序为:65535、100、3、2,并且是按照从高到低的顺序依次排列。
值得一提的是,排序表可以使用“平衡二叉树”或“红黑树”结构,以加快排序速度。
S2、将每一优先级值与一组哈希数据相对应,每一组哈希数据包括若干与ACL表对应的entry_id值;
如图2所示,在本实施方式中,维护多个存储entry_id值的entry_id链表(图中链表1~11),其中,entry_id为传统交换机芯片中用户指定其代表ACL表(TCAM)的位置顺序,图中所示,四个优先级值65535、2、3、100分别各自对应一组哈希数据,而每一组哈希数据可包括一个或者多个entry_id值,比如,优先级值65535对应于第一组哈希数据:链表节点1、链表节点2、链表节点3、链表节点4;优先级值2对应于第二组哈希数据:链表节点5、链表节点7、链表节点6;优先级值3对应于第三组哈希数据:链表节点8、链表节点10;优先级值100对应于第四组哈希数据:链表节点9、链表节点11。其中,上述的每一组哈希数据中的entry_id值均是按照一定的次序进行排序。
于本发明中,因为上述哈希表及排序表中的优先级值会不断需要查找和更新,为了更好地实现本发明,上述方法的S1步骤还包括:
新建一优先级值Priority_new;该优先级值Priority_new被作为目标查找对象。
判断所述优先级值Priority_new是否存在于当前哈希表中,若是,不作操作;若否,在所述哈希表及排序表中分别插入该优先级值Priority_new。
相应地,在更具体的实施方式中,上述方法的步骤S2也还包括如下步骤:
为所述优先级值Priority_new对应维护一个或多个entry_id值entry_id_new;
在该优先级值Priority_new所对应的哈希数据中插入所述一个或多个entry_id值entry_id_new。
具体地来说明上述查找过程,其分为两种情况:
1、如果新添加流的优先级值在2张表里都没有,那么在排序表里按照优先级值大小插入优先级值,在Hash表的键值里插入优先级值,在Hash表数据里相应地新建一个或多个entry_id链表,并插入用户自己指定的一个或多个entry_id,其中,entry_id和Openflow流的对应关系需要用户自己维护。注意:排序表里插入priority值,插入后的顺序必须是倒序。如已存在优先级值:65535和3,那么新的优先级值100应当插在65535和3中间,那么就变成65535,100,3这个顺序。
2、如果新添加流的优先级值在2张表里都有,那么在排序链表里不用插入优先级值,在Hash表的键值里找到已经存在的优先级值,并在相对应的Hash表数据里插入一个或多个新的entry_id值。
值得一提的是,上述“在该优先级值Priority_new所对应的哈希数据中插入所述一个或多个entry_id值entry_id_new”的步骤中,所述entry_id值entry_id_new插置于对应的哈希数据的最后面。这样的话,TCAM排序时可以只需要排序此条目之后的,从而高了排序速度。
S3、按照所述排序表中的优先级值的次序,对所述哈希表中的所有优先级值进行重排序;参图3所示,其为排序过的哈希表示意图。
S4、根据排序后的哈希表,获取所述entry_id值的优先级次序,并根据所述优先级次序对交换机的ACL表作相应地排序。其中,所述步骤S4还具体包括:按照优先级由高到低的次序,逐一读出与每一优先级值相对应的entry_id值;根据entry_id值的读出先后顺序来获取所述entry_id值的优先级次序。如图3所示,在本实施方式中,从整理过的Hash表中最高的priortiy开始,依次得到Hash数据链表中的entry_id,然后得到次优先priority的entry_id,直到读完所有数据。最后可以得到entry_id值的优先级次序为:1,2,3,4,9,11,8,10,5,7,6。在此之后,再根据得到的entry_id值的优先级次序,我们可以把传统以太网交换机里的ACL表(TCAM)重新按照步骤5里新的顺序进行排序,就可以实现带优先级的Openflow的流表顺序了,从而满足了Openflow协议上的要求。
接下来,将介绍本发明的与上述方法相应的系统。如图4所示,所述实现交换机芯片Openflow流表优先级的系统,包括如下单元:
软表建立单元101、用于建立一存储有若干Openflow流的优先级值的哈希表,并相应建立一将哈希表中所有优先级值从大到小进行排序的排序表;
本发明为利用传统交换机的芯片上的ACL功能来完全满足Openflow协议上提出的流表优先级,首先需要建立2张软表来建立entry_id和priority的值,其具体数据结构如下:
第一张表(哈希表,Hash表),Hash键值为优先级(priority),Hash数据为一张存储entry_id的链表,由于Hash实现原理的原因,Hash表的优先级值是乱序的,如图2所示,图中哈希表包括4个优先级键值:65535、2、3、100,其排序未按照键值大小进行。
第二张表(排序表),一张存储优先级值的排序表,不同之处在于:其需要按照优先级值大小插入相应位置,以弥补哈希表内键值乱序的问题,依旧参图2所示,图中排序表包括4个优先级值,其排序为:65535、100、3、2,并且是按照从高到低的顺序依次排列。
值得一提的是,排序表可以使用“平衡二叉树”或“红黑树”结构,以加快排序速度。
哈希数据对应单元102、用于将每一优先级值与一组哈希数据相对应,每一组哈希数据包括若干与ACL表对应的entry_id值;
如图2所示,在本实施方式中,维护多个存储entry_id值的entry_id链表(图中链表1~11),其中,entry_id为传统交换机芯片中用户指定其代表ACL表(TCAM)的位置顺序,图中所示,四个优先级值65535、2、3、100分别各自对应一组哈希数据,而每一组哈希数据可包括一个或者多个entry_id值,比如,优先级值65535对应于第一组哈希数据:链表节点1、链表节点2、链表节点3、链表节点4;优先级值2对应于第二组哈希数据:链表节点5、链表节点7、链表节点6;优先级值3对应于第三组哈希数据:链表节点8、链表节点10;优先级值100对应于第四组哈希数据:链表节点9、链表节点11。其中,上述的每一组哈希数据中的entry_id值均是按照一定的次序进行排序。
于本发明中,因为上述哈希表及排序表中的优先级值会不断需要查找和更新,为了更好地实现本发明,上述软表建立单元101还用于:
新建一优先级值Priority_new;该优先级值Priority_new被作为目标查找对象。
判断所述优先级值Priority_new是否存在于当前哈希表中,若是,不作操作;若否,在所述哈希表及排序表中分别插入该优先级值Priority_new。
相应地,在更具体的实施方式中,上述哈希数据对应单元102也还用于:
为所述优先级值Priority_new对应维护一个或多个entry_id值entry_id_new;
在该优先级值Priority_new所对应的哈希数据中插入所述一个或多个entry_id值entry_id_new。
具体地来说明上述查找过程,其分为两种情况:
1、如果新添加流的优先级值在2张表里都没有,那么在排序表里按照优先级值大小插入优先级值,在Hash表的键值里插入优先级值,在Hash表数据里相应地新建一个或多个entry_id链表,并插入用户自己指定的一个或多个entry_id,其中,entry_id和Openflow流的对应关系需要用户自己维护。注意:排序表里插入priority值,插入后的顺序必须是倒序。如已存在优先级值:65535和3,那么新的优先级值100应当插在65535和3中间,那么就变成65535,100,3这个顺序。
2、如果新添加流的优先级值在2张表里都有,那么在排序链表里不用插入优先级值,在Hash表的键值里找到已经存在的优先级值,并在相对应的Hash表数据里插入一个或多个新的entry_id值。
值得一提的是,在所述哈希数据对应单元中,所述entry_id值entry_id_new插置于对应的哈希数据的最后面。这样的话,TCAM排序时可以只需要排序此条目之后的,从而提高了排序速度。
哈希表排序单元103、用于按照所述排序表中的优先级值的次序,对所述哈希表中的所有优先级值进行重新排序;参图3所示,其为排序过的哈希表示意图。
ACL表排序单元104、用于根据排序后的哈希表,获取所述entry_id值的优先级次序,并根据所述优先级次序对交换机的ACL表作相应地排序。其中,所述ACL表排序单元104还具体用于:按照优先级由高到低的次序,逐一读出与每一优先级值相对应的entry_id值;根据entry_id值的读出先后顺序来获取所述entry_id值的优先级次序。如图3所示,在本实施方式中,从整理过的Hash表中最高的priortiy开始,依次得到Hash数据链表中的entry_id,然后得到次优先priority的entry_id,直到读完所有数据。最后可以得到entry_id值的优先级次序为: 1,2,3,4,9,11,8,10,5,7,6。在此之后,再根据得到的entry_id值的优先级次序,我们可以把传统以太网交换机里的ACL表(TCAM)重新按照步骤5里新的顺序进行排序,就可以实现带优先级的Openflow的流表顺序了,从而满足了Openflow协议上的要求。
本发明所描述的方法及系统可通过建立维护Priority及entry_id的关系的哈希表及排序表,利用传统交换机的芯片上的ACL功能,实现满足Openflow协议的流表优先级功能,且流的Priority值可以是相同的,而一般的Openflow交换机用ACL功能并不能完全实现,且上述技术方案实现方式简单易行。
值得一提的是,本发明所介绍的方法中,所提及的步骤序号“S1”、“S2”…“Sn”等之间并不一定存在先后顺序,特此声明。
以上所描述的装置实施方式仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施方式方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施方式中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。
上文所列出的一系列的详细说明仅仅是针对本发明的可行性实施方式的具体说明,它们并非用以限制本发明的保护范围,凡未脱离本发明技艺精神所作的等效实施方式或变更均应包含在本发明的保护范围之内。