发明内容
有鉴于此,本发明的一个目的在于提供一种实现接口状态同步的方法,本发明的另一个目的在于提供一种实现接口状态同步的装置,以便于减少接口状态同步的时间。
为了达到上述目的,本发明的技术方案是这样实现的:
一种实现接口状态同步的方法,该方法包括:
设置不同的接口联动组对应不同的链表;
将同一个接口联动组中所有接口链接在该接口联动组对应的链表中;
当接口联动组中的一个接口发生状态变化时,根据变化后的状态,对该接口所在链表中链接的其他接口的状态进行同步。
所述链表为双向链表;
所述根据变化后的状态对该接口所在链表中链接的其他接口的状态进行同步的步骤包括:从状态变化的接口开始,向该接口所在链表的头部和尾部进行搜索,根据所述变化后的状态,对搜索到的每一个接口的状态进行修改。
所述发生状态变化为:状态从故障变为正常;
在所述一个接口发生状态变化之后,并在对该接口所在链表中链接的其他接口的状态进行同步之前,进一步包括:在状态变化的接口所在链表中,按照从头部至尾部的顺序,依次向链表链接的每一个接口传递协商检测信号,每一个接口在物理可用的情况下,传递接收到的协商检测信号;判断是否接收到最后一个接口传递的协商检测信号,如果是,则继续执行所述的对该接口所在链表中链接的其他接口的状态进行同步。
所述链表为双向链表;
所述发生状态变化为:状态从故障变为正常;
在所述一个接口发生状态变化之后,并在对该接口所在链表中链接的其他接口的状态进行同步之前,进一步包括:在状态变化的接口所在链表中,从状态变化的接口开始,分别向链表的头部和尾部的每一个接口依次传递协商检测信号,每一个接口在物理可用的情况下,传递接收到的协商检测信号;判断是否接收到第一个接口和最后一个接口分别传递的协商检测信号,如果是,则继续执行所述的对该接口所在链表中链接的其他接口的状态进行同步。
在判断出未接收到之后,该方法进一步包括:将状态变化的接口所在链表中的所有接口的状态修改为故障,结束当前流程。
一种实现接口状态同步的装置,包括:
链表建立单元,用于建立对应于不同接口联动组的不同链表,将同一个接口联动组中的所有接口链接在该接口联动组对应的链表中;
同步处理单元,用于在接口联动组中的一个接口发生状态变化时,根据变化后的状态,对链表建立单元中该状态变化接口所在链表中链接的其他接口的状态进行同步。
所述链表建立单元用于建立对应于不同接口联动组的不同双向链表;
所述同步处理单元,用于从状态变化的接口开始,向链表建立单元中该状态变化的接口所在链表的头部和尾部进行搜索,根据所述变化后的状态,对搜索到的每一个接口的状态进行修改。
所述同步处理单元进一步用于在接口发生的状态变化是从故障变为正常时,首先在链表建立单元中该状态变化的接口所在链表中,按照从头部至尾部的顺序,依次向链表中链接的每一个接口传递协商检测信号,每一个接口在物理可用的情况下,传递接收到的协商检测信号;所述同步处理单元判断是否接收到最后一个接口传递的协商检测信号,如果是,则继续执行所述的根据变化后的状态对该状态变化接口所在链表中链接的其他接口的状态进行同步。
所述链表建立单元用于建立对应于不同接口联动组的不同双向链表;
所述同步处理单元,进一步用于在接口发生的状态变化是从故障变为正常时,首先在链表建立单元中该状态变化的接口所在链表中,从状态变化的接口开始,分别向链表的头部和尾部的每一个接口依次传递协商检测信号,每一个接口在物理可用的情况下,传递接收到的协商检测信号;所述同步处理单元判断是否接收到第一个接口和最后一个接口分别传递的协商检测信号,如果是,则继续执行所述的根据变化后的状态对状态变化的接口所在链表中链接的其他接口的状态进行同步。
所述同步处理单元,进一步用于在判断出未接收到协商检测信号后,将链表建立单元中状态变化的接口所在链表中链接的所有接口的状态修改为故障。
由此可见,在本发明中,每一个接口联动组均有专有的链表,也就是说,在一个链表中链接的都是属于同一接口联动组的接口,这样,当一个接口联动组如接口联动组1中一个接口的状态发生变化后,只需搜索该接口联动组1对应的链表,由于该链表中链接的都是属于接口联动组1的接口,因此,接口数量较少,相对于现有技术遍历接口数量众多的全局接口链表,盲目查找属于接口联动组1的接口的做法,则大大提高了系统的处理速度,从而大大减少了接口状态同步的时间。
同时,由于本发明无需遍历查找接口数量众多的全局接口链表,而只需搜索专用链表,因此,减少了对CPU处理资源的占用,提高了系统的性能。
较佳地,在本发明中,当一个接口联动组中一个接口的状态发生变化后,可以从该状态变化的接口开始,向链表的头部和尾部同时进行搜索,因此,进一步提高了系统的处理速度,进一步减少了接口状态同步的时间。
较佳地,在本发明中,当一个接口联动组中一个接口的状态从故障变为正常后,不是立即执行将该接口联动组中其他接口的状态修改为正常,而是首先利用所有接口传递协商检测信号的做法来检测其他接口是否均正常,在检测出均正常后,再将所有接口的状态同步为正常,因此,如果在检测过程中其他接口发生了故障,那么,则不会再进行所有接口状态同步为正常的处理,而是将所有接口状态同步为故障,因此,避免了现有技术中一个接口联动组中所有接口状态不同步的缺点。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面结合附图及具体实施例对本发明作进一步地详细描述。
图2是在本发明一个实施例中实现接口状态同步的流程图。参见图2,在本发明一个实施例中,实现一个接口联动组中所有接口状态同步的过程具体包括以下步骤:
步骤201:设置不同的接口联动组对应不同的链表。
步骤202:将同一个接口联动组中所有接口链接在该接口联动组对应的链表中。
在接口联动组中,只有属于同一个接口联动组的各个接口的状态才会相互影响,属于不同接口联动组的接口状态不会相互影响,因此,在上述步骤201和步骤202中,可以设置不同的接口联动组对应不同的链表,并将同一个接口联动组中所有接口链接在该接口联动组对应的链表中。
为了便于后续过程中能够在接口联动组对应链表中进行两个方向的搜索接口的处理,进一步提高接口状态同步的时间,较佳地,在步骤201中,所设置的对应于各个接口联动组的各个链表可以是双向链表,这样,在本步骤202中,每一个接口联动组中所有的接口均链接在对应的双向链表中。
图3是在本发明实施例中接口联动组1对应的双向链表的结构示意图。参见图3,以接口联动组1为例,假如接口联动组1中包括3个接口:接口A,接口X,接口N,那么,可以得到接口联动组1中各个接口的组织结构如下表1所示。
当前接口 |
前一个接口 |
后一个接口 |
接口A |
Head |
接口X |
|
(表头,相当于串联电路的电源正极) |
|
接口X |
接口A |
接口N |
接口N |
接口X |
Tail(表尾,相当于串联电路的电源负极) |
表1
在具体实现中,接口联动组1中各个接口的数据结构的定义可以为:
typedef struct tagLINKGROUP_IFNET
{
unsigned long ulIfIndex;/*current interface*/
struct tagLINKGROUP_IFNET*pstNextLinkGroup;/*next link-group interface*/
struct tagLINKGROUP_IFNET*pstPreLinkGroup;/*previous link-group interface*/
}LINKGROUP_IFNET_S;
typedef struct tagLINKGROUP
{
unsigned short usStatus;/*Link-Group Status*/
LINKGROUP_IFNET_S*pstLinkGroup;/*Link-Group Table*/
}LINKGROUP_S;
步骤203:接口联动组如接口联动组1中的一个接口如接口X发生状态变化。
在本步骤中,所述接口X的状态发生变化可以举例为:接口X的状态从正常变为故障,或者从故障变为正常;接口X的表征每秒能传输的最大字节数(MTU)的状态参数值改变等。
步骤204:根据接口X变化后的状态,对接口X所在链表中链接的其他接口的状态进行同步。
这里,参见图3,对接口X所在链表中链接的其他接口的状态进行同步,是指将图3所示链表中链接的接口A和接口N的状态修改为与接口X状态变化后的状态一致。比如,在步骤203中,接口X的状态从故障变为正常,那么,在本步骤204中,可以在接口X所在链表中按照从链表头到链表尾的顺序开始搜索,将搜索到的接口A和接口N的状态均修改为正常。
可见,由于接口联动组1中的所有接口均通过图3所示的专用链表链接,因此,无需现有技术的查找过程,直接对该链表中链接的其他所有接口进行状态同步即可,从而大大减少了接口状态同步的时间。
较佳地,参见图3,由于链接接口X、接口A和接口N的链表为双向链表,因此,在本步骤中,也可以不按照上述从链表头到链表尾的顺序进行搜索,而是利用双向链表可以进行双向搜索的特点,从状态变化的接口X开始,向接口X所在链表的头部和尾部同时进行搜索,将搜索到的接口A和接口N的状态均修改为正常。由于进行双向搜索,因此,能够进一步减少接口状态同步的时间。在本步骤中,以接口X发生的状态变化为发生故障为例,采用双向搜索时的数据结构的定义可以举例为:
/*以故障点为中心,两头扩散状态*/
ulRet+=IF_LinkGroup_BackwardSynStatus(ulIfnet,STATUS_DOWN);
ulRet+=IF_LinkGroup_ForwardSynStatus(ulIfnet,STATUS_DOWN);
在上述图2所示过程中,如果步骤203中接口X发生的状态变化为从故障变为正常时,为了进一步保证最终所有接口的状态完全一致,可以首先不执行步骤204中根据接口X变化后的状态修改其他接口状态的处理,而是,首先需要检测接口联动组1中其他接口是否也处于正常状态,从而决定后续所有接口同步的状态,也就是说,在步骤203与步骤204之间还可以包括如下任一种方式的处理:
方式一、
在状态变化的接口X所在链表中,按照从头部至尾部的顺序,依次向链表链接的接口A、接口X和接口N传递协商检测信号,此时,为了保证能够检测出接口联动组1中每个接口实际上是否可用,而不受其状态值的影响,在本实施例中,无论接口A、接口X和接口N的当前状态如何(即无论其记录的当前状态为故障还是正常),在接收到协商检测信号时,接口只要物理可用(物理可用是指不考虑接口对应的状态,接口实际上具有传递信息的能力)就向其链接的下一个接口发送协商检测信号,直至表尾,判断是否接收到最后一个接口传递的协商检测信号,如果是,则证明当前接口联动组1中所有接口的状态均为正常,可以按照接口X变化后的状态修改其他接口的状态,即继续执行步骤204,如果否,则证明虽然接口X的状态变为正常,但是接口联动组1中其他接口又发生了故障,因此,不能执行后续步骤204,而应该接口X所在链表中的所有接口的状态修改为故障。此时,其数据结构的定义可以举例为:
/*以故障点恢复为触发,对Link-Group接口组,以表首为起点,对所有接口PowerUP
*并同时以表首为起点再次检测是否均已经真正UP,否则若发现有Down接口,执*行向两头Shut Down扩善*/
IF_LinkGroup_SynStatus(ulIfnet,STATUS_UP);
if(IF_LinkGroup_StatusCheck(ulIfnet,STATUS_DOWN,ulDownIfnet)==OK)
{
/*发现新的故障点,扩散*/
ulRet+=IF_LinkGroup_BackwardSynStatus(ulDownIfnet,STATUS_DOWN);
ulRet+=IF_LinkGroup_ForwardSynStatus(ulDownIfnet,STATUS_DOWN);
}
方式二、
由于接口X所在链表为双向链表,因此,在状态变化的接口X所在链表中,从状态变化的接口X开始,分别向链表的头部和尾部的每一个接口即接口A和接口N依次传递协商检测信号,此时,为了保证能够检测出接口联动组1中每个接口实际上是否可用,而不受其状态值的影响,在本实施例中,无论接口A和接口N的当前状态如何(即无论其记录的当前状态为故障还是正常),在接收到协商检测信号时,接口只要物理可用(物理可用是指不考虑接口对应的状态,接口实际上具有传递信息的能力)就传递协商检测信号;判断是否接收到第一个接口即接口A和最后一个接口即接口N分别传递的协商检测信号,如果是,则证明当前接口联动组1中所有接口的状态均为正常,可以按照接口X变化后的状态修改其他接口的状态,即继续执行步骤204,如果没有都接收到,则证明虽然接口X的状态变为正常,但是接口联动组1中其他接口又发生了故障,因此,不能执行后续步骤204,而应该接口X所在链表中的所有接口的状态修改为故障。
另外,本发明还提出了一种实现接口状态同步的装置。参见图4,该装置可以包括:
链表建立单元,用于建立对应于不同接口联动组的不同链表,将同一个接口联动组中的所有接口链接在该接口联动组对应的链表中;
同步处理单元,用于在接口联动组中的一个接口发生状态变化时,根据变化后的状态,对链表建立单元中该状态变化接口所在链表中链接的其他接口的状态进行同步。
在本发明装置中,所述链表建立单元建立的可以是对应于不同接口联动组的不同双向链表;此时,
所述同步处理单元,用于从状态变化的接口开始,向链表建立单元中该状态变化的接口所在链表的头部和尾部进行搜索,根据所述变化后的状态,对搜索到的每一个接口的状态进行修改。
在本发明装置中,所述同步处理单元,进一步用于在接口发生的状态变化是从故障变为正常时,首先在链表建立单元中该状态变化的接口所在链表中,按照从头部至尾部的顺序,依次向链表中链接的每一个接口传递协商检测信号,每一个接口在物理可用的情况下,传递接收到的协商检测信号;所述同步处理单元判断是否接收到最后一个接口传递的协商检测信号,如果是,则继续执行所述的根据变化后的状态对该状态变化接口所在链表中链接的其他接口的状态进行同步。
在本发明装置中,所述链表建立单元用于建立对应于不同接口联动组的不同双向链表;
所述同步处理单元,进一步用于在接口发生的状态变化是从故障变为正常时,首先在链表建立单元中该状态变化的接口所在链表中,从状态变化的接口开始,分别向链表的头部和尾部的每一个接口依次传递协商检测信号,每一个接口在物理可用的情况下,传递接收到的协商检测信号;所述同步处理单元判断是否接收到第一个接口和最后一个接口分别传递的协商检测信号,如果是,则继续执行所述的根据变化后的状态对状态变化的接口所在链表中链接的其他接口的状态进行同步。
在本发明装置中,所述同步处理单元,进一步用于在判断出未接收到协商检测信号后,将链表建立单元中状态变化的接口所在链表中链接的所有接口的状态修改为故障。
总之,以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。