一种开放流OpenFlow消息循环执行方法及装置与流程

文档序号:12739656阅读:289来源:国知局
一种开放流OpenFlow消息循环执行方法及装置与流程

本发明涉及OpenFlow(开放流)技术领域,特别涉及一种开放流OpenFlow消息循环执行方法及装置。



背景技术:

SDN(Software Defined Network,软件定义网络),是一种新型网络创新架构,是网络虚拟化的一种实现方式。其核心思想是将网络设备的控制层与转发层分离,以实现对网络流量的灵活控制,为核心网络及应用的创新提供了良好的平台。

目前,SDN中的控制器和交换机之间采用OpenFlow协议作为控制层和转发层的信令通道,控制器通过该信令通道配置和管理交换机。OpenFlow协议中可以使用Bundle(捆绑)消息机制批量的执行操作,统一返回操作结果。控制器能够很方便的将一系列操作打包成原子操作在交换机上执行。

当控制器需要周期性循环的在交换机上执行某一OpenFlow消息时,需要控制器周期性向交换机发送相同的OpenFlow消息。控制器周期性向交换机发送OpenFlow消息占用控制器和交换机之间的信令通道资源和控制器CPU资源。



技术实现要素:

本发明实施例的目的在于提供一种开放流OpenFlow消息循环执行方法及装置,以减少控制器和交换机之间的信令通道资源和控制器CPU资源的占用。

为达到上述目的,本发明实施例公开了一种开放流OpenFlow消息循环执行方法,应用于交换机,所述交换机创建有捆绑Bundle缓存,所述方法包括:

接收控制器发送的捆绑添加消息Bundle Add Message;所述Bundle Add Message携带OpenFlow消息、OpenFlow消息对应的标识字段以及循环规则,所述标识字段中用于指示OpenFlow消息循环执行的标识位被置位;

在所述Bundle缓存中缓存所述OpenFlow消息、所述OpenFlow消息对应标识字段及循环规则;

在接收到控制器发送的针对所述Bundle缓存的执行指令后,若根据所述Bundle缓存中缓存的标识字段确定所述OpenFlow消息需要被循环执行,则根据所述循环规则循环执行所述OpenFlow消息。

为达到上述目的,本发明实施例公开了一种开放流OpenFlow消息循环执行装置,应用于交换机,所述交换机创建有捆绑Bundle缓存,所述装置包括:接收模块、缓存模块和循环执行模块,其中,

所述接收模块,用于接收控制器发送的捆绑添加消息Bundle Add Message;所述Bundle Add Message携带OpenFlow消息、OpenFlow消息对应的标识字段以及循环规则,所述标识字段中用于指示OpenFlow消息循环执行的标识位被置位;

所述缓存模块,用于在所述Bundle缓存中缓存所述OpenFlow消息、所述OpenFlow消息对应标识字段及循环规则;

所述循环执行模块,用于在接收到控制器发送的针对所述Bundle缓存的执行指令后,若根据所述Bundle缓存中缓存的标识字段确定所述OpenFlow消息需要被循环执行,则根据所述循环规则循环执行所述OpenFlow消息。

由上述的技术方案可见,本发明实施例提供了一种开放流OpenFlow消息循环执行方法及装置,应用于交换机,所述交换机创建有Bundle缓存。方法包括:接收控制器发送的Bundle Add Message;所述Bundle Add Message携带OpenFlow消息、OpenFlow消息对应的标识字段以及循环规则,所述标识字段中用于指示OpenFlow消息循环执行的标识位被置位;在所述Bundle缓存中缓存所述OpenFlow消息、所述OpenFlow消息对应标识字段及循环规则;在接收到控制器发送的针对所述Bundle缓存的执行指令后,若根据所述Bundle缓存中缓存的标识字段确定所述OpenFlow消息需要被循环执行,则根据所述循环规则循环执行所述OpenFlow消息。

应用本发明实施例,控制器无需周期性向交换机发送OpenFlow消息,仅需向交换机发送一次OpenFlow消息,当交换机根据Bundle缓存中缓存的标识字段确定OpenFlow消息需要被循环执行时,即可根据循环规则循环执行该OpenFlow消息。减少了控制器和交换机之间的信令通道资源和控制器CPU资源的占用。

当然,实施本发明的任一产品或方法必不一定需要同时达到以上所述的所有优点。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种开放流OpenFlow消息循环执行方法的流程示意图;

图2为本发明实施例提供的一种开放流OpenFlow消息循环执行装置的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

为了解决现有技术问题,本发明实施例提供了一种开放流OpenFlow消息循环执行方法及装置。下面首先对本发明实施例所提供的一种开放流OpenFlow消息循环执行方法进行介绍。

需要说明的是,本发明实施例提供的一种开放流OpenFlow消息循环执行方法及装置,优选适用于交换机。在实际应用中,该交换机可以为专用的OpenFlow交换机或支持OpenFlow的交换机。其中,专用的OpenFlow交换机是专门为支持OpenFlow而设计的。它不支持现有的商用交换机上的正常处理流程,所有经过该交换机的数据都按照OpenFlow的模式进行转发。支持OpenFlow的交换机是在商业交换机的基础上添加流表、安全通道和OpenFlow协议来获得了OpenFlow特性的交换机。其既具有常用的商业交换机的转发模块,又具有OpenFlow的转发逻辑。该交换机中创建有捆绑Bundle缓存。在交换机中创建Bundle缓存为现有技术,本发明实施例在此不对其进行赘述。

图1为本发明实施例提供的一种开放流OpenFlow消息循环执行方法的流程示意图;该方法可以包括:

S101:接收控制器发送的Bundle Add Message(捆绑添加消息)。

其中,所述Bundle Add Message携带OpenFlow消息、OpenFlow消息对应的标识字段以及循环规则,所述标识字段中用于指示OpenFlow消息循环执行的标识位被置位。

S102:在所述Bundle缓存中缓存所述OpenFlow消息、所述OpenFlow消息对应标识字段及循环规则。

S103:在接收到控制器发送的针对所述Bundle缓存的执行指令后,若根据所述Bundle缓存中缓存的标识字段确定所述OpenFlow消息需要被循环执行,则根据所述循环规则循环执行所述OpenFlow消息。

控制器和交换机之间使用Bundle消息机制时,控制器将一系列的OpenFlow消息通过Bundle Add Message送到交换机;交换机将这些OpenFlow消息缓存到Bundle缓存中;当接收到捆绑触发消息Bundle Commit Message(即针对Bundle缓存的执行指令)时,会将该Bundle缓存内缓存的OpenFlow消息全部执行,并将执行结果返回到控制器。

目前,Bundle Add Message格式如下:

struct ofp_bundle_add_msg{

struct ofp_header header;

uint32_t bundle_id;/*Identify the bundle.*/

uint16_t pad;/*Align to 64bits.*/

uint16_t flags;/*Bitmap of OFPBF_*flags.*/

struct ofp_header message;/*Message added to the bundle.*/

/*If there is one property or more,’message’is followed by:

*-Exactly(message.length+7)/8*8-(message.length)(between 0 and 7)

*bytes of all-zero bytes*/

/*Bundle Property list.*/

//struct ofp_bundle_prop_header properties[0];/*Zero or more properties.*/};

Bundle Add Message中标识字段flags定义如下:

OFPBF_ATOMIC=1<<0表示含义为16位的flags中最后一位为1,规定OpenFlow消息被执行到、且仅执行一次后,该OpenFlow消息被从Bundle中清除。

OFPBF_ORDERED=1<<1表示含义为16位的flags中倒数第二位为1,规定OpenFlow消息被按顺序执行一次后,该OpenFlow消息被从Bundle中清除。

为了使OpenFlow消息可以被循环执行,将Bundle Add Message中flags进行扩展,扩展的Bundle Add Message中flags定义如下:

扩展的Bundle Add Message中flags增加了一个OFPBF_CYCLE字段表示用于循环执行OpenFlow消息。OFPBF_CYCLE=1<<2表示含义为16位的flags中倒数第三位为1,即标识字段flags中用于指示OpenFlow消息循环执行的标识位(16位的flags中倒数第三位)被置位。规定OpenFlow消息被按照循环条件执行后,该OpenFlow消息被从Bundle中清除。

假设控制器向交换机中的Bundle缓存中添加了5个OpenFlow消息,分别为OpenFlow消息1、OpenFlow消息2、OpenFlow消息3、OpenFlow消息4和OpenFlow消息5,其中,OpenFlow消息1对应的flags为:OFPBF_ORDERED=1<<1,OpenFlow消息2对应的flags为:OFPBF_CYCLE=1<<2,OpenFlow消息3对应的flags为:OFPBF_ORDERED=1<<1,OpenFlow消息4对应的flags为:OFPBF_ORDERED=1<<1,OpenFlow消息5对应的flags为:OFPBF_ORDERED=1<<1。当交换机接收到的控制器发送的针对Bundle缓存的执行指令后,根据Bundle缓存中缓存的标识字段(16位的flags中倒数第三位)确定出OpenFlow消息2需要被循环执行,则根据循环规则循环执行OpenFlow消息2。

在实际应用中,循环规则可以包括循环持续时间和循环执行频率两个循环条件;还可以包括循环次数和循环执行频率两个循环条件;还可以包括循环次数和循环持续时间两个循环条件。

在本发明的一实施例中,上述循环规则可以携带于Bundle Add Message的属性字段包含的Experiment(实验)字段中,其中,该Experiment字段携带有用户自定义数据,该用户自定义数据中包含有上述循环规则。

携带有循环规则的Bundle Add Message的属性字段包含的Experiment字段定义如下:

struct ofp_bundle_experimenter{

uint16_t type;/*OFPPDPT_EXPERIMENTER.*/

uint16_t length;/*Length in bytes of this property.*/

uint32_t experimenter;/*Experimenter ID which takes the same form as in struct ofp_experimenter_header.*/

uint32_t cycle_type;/*Experimenter defined.*/

uint32_t cycle_fre;/*Cycle excute frequency.循环执行频率*/

uint32_t cycle_duration;/*Cycle excute time.循环持续时间*/

uint32_t cycle_times;/*Cycle excute times.循环执行次数*/

};

在实际应用中,Bundle Add Message的属性字段包含的Experiment字段中可以仅携带循环持续时间、循环执行频率和循环执行次数中的任意一个;还可以携带循环持续时间、循环执行频率和循环次数中的任意两个;还可以同时循环持续时间、循环执行频率和循环执行次数。

在实际应用中,可以设置循环持续时间、循环执行频率和循环执行次数使用的优先级,比如优先级由高至低依次为循环执行次数、循环执行频率、循环持续时间。

当Bundle Add Message的属性字段包含的Experiment字段中仅携带循环持续时间、循环执行频率和循环执行次数中的任意一个时,比如携带循环执行频率,根据优先级确定出OpenFlow消息循环执行的另一个条件:循环执行次数,则根据默认的循环次数和携带的循环执行频率循环执行OpenFlow消息。

示例性的,假设针对上述OpenFlow消息2,OpenFlow消息2对应的Bundle Add Message的属性字段包含的Experiment字段中仅携带有循环执行频率为每秒1次,默认循环执行次数为60次,则按照每秒执行1次,执行60次(即持续时间1分钟)循环执行该OpenFlow消息2。

当Bundle Add Message的属性字段包含的Experiment字段中携带循环持续时间、循环执行频率和循环执行次数中的任意两个时,则根据携带的循环持续时间和循环执行频率、或循环执行次数和循环持续时间、或循环次数和循环执行频率,循环执行OpenFlow消息。

示例性的,假设针对上述OpenFlow消息2,OpenFlow消息2对应的Bundle Add Message的属性字段包含的Experiment字段中携带有循环持续时间为1天,循环执行频率为每秒1次,则按照每秒执行1次,执行1天循环执行该OpenFlow消息2。

假设针对上述OpenFlow消息2,OpenFlow消息2对应的Bundle Add Message的属性字段包含的Experiment字段中携带有循环执行次数为50,循环执行频率为每秒1次,则按照每秒执行1次,执行5次循环执行该OpenFlow消息2。

假设针对上述OpenFlow消息2,OpenFlow消息2对应的Bundle Add Message的属性字段包含的Experiment字段中携带有循环执行次数为60,循环持续时间为1小时,即每分钟执行1次;则按照每分钟执行1次,执行60次(即持续时间1小时)循环执行该OpenFlow消息2。

当Bundle Add Message的属性字段包含的Experiment字段中同时携带循环持续时间、循环执行频率和循环执行次数时,则根据优先级确定出控制循环的条件:循环执行次数和循环执行频率。根据循环执行次数和循环执行频率循环执行OpenFlow消息。

需要说明的是,上述以OpenFlow消息1、OpenFlow消息2、OpenFlow消息3、OpenFlow消息4和OpenFlow消息5为例进行说明,仅为本发明的一具体实例,并不构成对本发明的限定。

在本发明的另一实施例中,当接收到控制器发送的捆绑关闭消息Bundle Close Message(即针对Bundle缓存的关闭指令)或者捆绑销毁消息Bundle Discard Message(即针对Bundle缓存的销毁指令)时,停止执行该OpenFlow消息。具体的,当接收到控制器发送的Bundle Close Message或者Bundle Discard Message时,该Bundle缓存中的所有OpenFlow消息都会被删除,即使某些OpenFlow消息正在被循环执行也会被清除,执行的OpenFlow消息被停止。

应用本发明图1所示实施例,控制器无需周期性向交换机发送OpenFlow消息,仅需向交换机发送一次OpenFlow消息,当交换机根据Bundle缓存中缓存的标识字段确定OpenFlow消息需要被循环执行时,即可根据循环规则循环执行该OpenFlow消息。减少了控制器和交换机之间的信令通道资源和控制器CPU资源的占用。

与上述的方法实施例相对应,本发明实施例还提供一种开放流OpenFlow消息循环执行装置。

图2为本发明实施例提供的一种开放流OpenFlow消息循环执行装置的结构示意图;该装置可以包括:接收模块201、缓存模块202和循环执行模块203,其中,

接收模块201,用于接收控制器发送的捆绑添加消息Bundle Add Message;所述Bundle Add Message携带OpenFlow消息、OpenFlow消息对应的标识字段以及循环规则,所述标识字段中用于指示OpenFlow消息循环执行的标识位被置位;

在实际应用中,本发明实施例的循环规则可以包括:循环持续时间和循环执行频率;还可以包括循环次数和循环执行频率;还可以包括循环次数和循环持续时间。

在实际应用中,本发明实施例的循环规则可以携带于Bundle Add Message的属性字段包含的实验字段中。

缓存模块202,用于在所述Bundle缓存中缓存所述OpenFlow消息、所述OpenFlow消息对应标识字段及循环规则;

循环执行模块203,用于在接收到控制器发送的针对所述Bundle缓存的执行指令后,若根据所述Bundle缓存中缓存的标识字段确定所述OpenFlow消息需要被循环执行,则根据所述循环规则循环执行所述OpenFlow消息。

在本发明的另一实施例中,本发明实施例提供的OpenFlow消息循环执行装置还可以包括:停止模块(图中未示出),用于在接收到控制器发送的针对所述Bundle缓存的关闭或销毁指令后,停止执行所述OpenFlow消息。

应用本发明图2所示实施例,控制器无需周期性向交换机发送OpenFlow消息,仅需向交换机发送一次OpenFlow消息,当交换机根据Bundle缓存中缓存的标识字段确定OpenFlow消息需要被循环执行时,即可根据循环规则循环执行该OpenFlow消息。减少了控制器和交换机之间的信令通道资源和控制器CPU资源的占用。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本领域普通技术人员可以理解实现上述方法实施方式中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机可读取存储介质中,这里所称得的存储介质,如:ROM/RAM、磁碟、光盘等。

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

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