一种分布式LACP接收状态机死锁预防方法及装置转让专利

申请号 : CN201110267954.5

文献号 : CN102355367A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 石洪源于立元任化军

申请人 : 中兴通讯股份有限公司

摘要 :

本发明公开了分布式LACP接收状态机死锁预防方法及装置,所述方法包括,操作端口在收发LACPDU报文期间,实时监测操作端口线卡上运行的接收状态机的死锁状况;若未监测到所述接收状态机进入死锁状况,则保持所述接收状态机的当前状态;若监测到所述接收状态机已进入死锁状况,则将所述接收状态机从当前状态变迁到另一个状态。本发明通过改变LACP协议接收状态机LACP_DISABLED状态跃迁,解决了在某些异常情况下接收状态机存在死锁的问题,增强了LACP的自恢复能力。

权利要求 :

1.一种分布式LACP接收状态机死锁预防方法,其特征在于,所述方法包括:操作端口在收发链路聚合控制协议数据单元LACPDU报文期间,实时监测操作端口线卡上运行的接收状态机的死锁状况;

若未监测到所述接收状态机进入死锁状况,则保持所述接收状态机的当前状态;

若监测到所述接收状态机已进入死锁状况,则将所述接收状态机从当前状态变迁到另一个状态。

2.根据权利要求1所述的方法,其特征在于,监测到所述接收状态机已经进入死锁状况的步骤包括:在操作端口为可用状态port_enabled=TRUE、操作端口为非全双工模式LACP_Enabled=FALSE情况下,当所述操作端口设置为全双工模式即LACP_Enabled=TRUE时,经由所述线卡触发操作端口进行初始化;

若所述线卡未能触发操作端口进行初始化,则确定所述接收状态机进入死锁状况。

3.根据权利要求2所述的方法,其特征在于,将所述接收状态机从当前状态变迁到另一个状态的步骤包括:接收状态机将自身的状态从当前的非全双工模式状态LACP_DISABLED变迁到定时器超时状态EXPIRED。

4.根据权利要求2所述的方法,其特征在于,经由所述线卡触发操作端口进行初始化的步骤包括:操作端口主控生成线卡触发值BEGIN=TRUE数据,并将其下发给所述线卡;

线卡用主控下发的数据进行更新,并根据线卡更新结果触发操作端口执行初始化。

5.根据权利要求4所述的方法,其特征在于,若所述线卡更新成功,则触发操作端口执行初始化。

6.根据权利要求5所述的方法,其特征在于,操作端口执行初始化后,使接收状态机进入其他稳定状态。

7.根据权利要求4所述的方法,其特征在于,若所述线卡更新不成功,则不触发操作端口执行初始化。

8.一种分布式LACP接收状态机死锁预防装置,其特征在于,所述装置包括:接收状态机,用于在操作端口收发LACPDU报文期间实时监测自身的死锁状况,若未监测到自身进入死锁状况,则保持当前状态,若监测到自身进入死锁状况,则从当前的非全双工模式状态LACP_DISABLED变迁到定时器超时状态EXPIRED。

9.根据权利要求8所述的装置,其特征在于,所述装置还包括:主控,用于在操作端口双工模式变化时生成线卡触发值BEGIN=TRUE数据,并将所述数据下行同步到所述线卡。

10.根据权利要求9所述的装置,其特征在于,所述装置还包括:本线卡,用主控下发的数据进行更新,并根据更新结果触发接收状态机状态跃迁,从当前的非全双工模式状态LACP_DISABLED变迁到定时器超时状态EXPIRED。

说明书 :

一种分布式LACP接收状态机死锁预防方法及装置

技术领域

[0001] 本发明涉及数据通讯领域,特别涉及一种LACP(Link Aggregation Control Protocol,链路汇聚控制协议)的分布式接收状态机死锁预防技术。

背景技术

[0002] 链路聚合(Link Aggregation),也称为端口捆绑、端口聚集或链路聚集,是将两个或更多物理链路虚拟成一个逻辑链路,逻辑链路作为一个整体,透明地呈现给上层应用;从上层业务角度来看,逻辑聚合端口同普通端口使用。
[0003] 基于IEEE802.3ad标准的LACP是一种实现链路动态汇聚的协议。LACP协议是控制链路聚合的标准协议,运行在对等的链路聚合体之间,通过LACPDU(LinkAggregation Control Protocol Data Unit,链路聚合控制协议数据单元)报文决定物理端口的加入和移出,并决定物理端口是否能够接收和发送数据报文与对端交互信息。
[0004] 标准的LACP协议包含运行在物理端口上相互联系的具有特定功能的五个协议状态机:
[0005] 接收状态机(Receive Machine):该状态机解析从对端(Partner)接收到的LACPDU,记录其中的信息并按照LACP设置的超时使用短超时或长超时使之超时,接收状态机评估从Partner来的信息,如果确定本端(Actor)和对端已经同意交换协议信息,例如,本端保留的对端的信息与从对端接收到的信息一致,那么根据该协议信息的内容以及相关的管理实体在一定程度上确定端口和其它端口是否聚合或是否成为独立端口。如果确定本端和对端不同意已经交换的协议信息,例如,本端保留的对端的信息与从对端接收到的信息不一致,那么接收状态机设置NTT(Need To Transmit,需要发送)以发送新的协议信息到Partner,如果Partner的协议信息超时,接收状态机设置默认的参数值以供其它状态机使用。
[0006] 周期状态机(Periodic Transmission machine)通过周期性发送LACPDU包来维护聚合。
[0007] 选择状态机(Selection Logic)负责为各物理端口选择一个聚合器。
[0008] Mux状态机(Mux machine)负责把端口附到选择好的聚合器,或把端口从聚合器剥离,并根据协议信息打开或关闭当前端口的收、发。
[0009] 发送状态机(Transmit machine)根据其它状态机的要求(包括周期性发送状态机)进行LACPDU的发送。
[0010] 图1是现有技术提供的接收状态机状态跃迁示意图。接收状态机主要包括以下状态:初始化状态INITIALIZE、端口不可用状态PORT_DISABLED、超时状态EXPIRED、缺省状态DEFAULTED、当前状态CURRENT、LACP禁止状态LACP_DISABLED。
[0011] 如图1所示,接收状态机可以从两个入口跃迁到PORT_DISABLED状态,其一是从BEGIN=True的初始化状态(INITIALIZE),其二是同时满足如下三个条件:BEGIN取值为FALSE、port_enabled取值为FALSE、port_moved取值为FALSE时。
[0012] 接收状态机从PORT_DISABLED状态跃迁到LACP_DISABLED状态。接收状态机当前是PORT_DISABLED状态,在操作端口同时满足如下两个条件时接收状态机由PORT_DISABLED跃迁到LACP_DISABLED:port_enabled取值为TRUE和LACP_Enabled取值为FALSE。其中,port_enabled=TRUE表明操作端口是可用状态,反之为不可用状态,LACP_Enabled=TRUE表明操作端口是全双工模式,反之为非全双工模式,LACP协议只支持全双工模式。
[0013] 从图1可以看出,当接收状态机处于LACP_DISABLED状态时,没有下一个跃迁状态,唯一可跃迁的条件是:操作端口重新初始化(BEGIN为TRUE),此时接收状态机才有可能进入其他稳定状态。所以,在操作端口从非全双工协商到全双工模式或者通过手动配置为全双工时,LACP操作端口必须设置BEGIN为TRUE进入初始化状态(INITIALIZE),LACP_Enabled取值为TRUE。
[0014] 在状态机分布式实现中,基于物理端口运行的四个状态机(接收状态机、周期状态机、MUX状态机、发送状态机)运行在本线卡,选择状态机运行在主控。操作端口的双工模式是可配置的,通常是在主控上下发配置。当操作端口全双工模式变化,在主控置BEGIN为TRUE,LACP_Enabled为TRUE,然后下行同步,在操作端口本线卡更新以上数据,并运行接收状态机,按照正常跃迁逻辑来处理,其中,本线卡是操作端口所在的线卡,其他的线卡叫非本线卡。BEGIN为TRUE的值是一个触发动作,当完成触发之后,需要在主控和操作端口本线卡将BEGIN关闭,即置BEGIN为FALSE。
[0015] 根据以上描述,当操作端口接收状态机在LACP_ISABLED状态时,其状态的变迁完全依赖于BEGIN值在本线卡的正确更新,否则即使LACP_Enabled为TRUE,接收状态机状态也永远无法跃迁,处于死锁状态,只能通过手工方式重新触发操作端口初始化。
[0016] 图2是接收状态机死锁示意图,如图2所示,接收状态机的死锁流程如下:
[0017] 1)操作端口双工模式变化事件,设置操作端口BEGIN取值为TRUE,LACP_Enabled取值为TRUE;
[0018] 2)数据由主控下行同步到操作端口本线卡和其他非本线卡;
[0019] 3)操作端口本线卡同步数据更新失败;
[0020] 4)操作端口本线卡和非本线卡上行同步;
[0021] 5)主控更新线卡同步数据,关闭操作端口BEGIN为FALSE;
[0022] 6)主控操作端口BEGIN为FALSE,LACP_Enabled为TRUE;
[0023] 7)下行同步操作端口数据;
[0024] 8)操作端口本线卡更新同步数据成功;
[0025] 9)操作端口本线卡BEGIN为FALSE,LACP_Enabled为TRUE。
[0026] 在第一次同步数据时,操作端口接收状态机处于LACP_DISABLED状态。如果操作端口本线卡同步更新失败(在分布式设备中,数据同步失败的因素有很多,如CPU忙,消息队列满等等原因),其接收状态机将一直处于LACP_DISABLED状态无法恢复,即使两端报文正常交互,LACP_DISABLED状态也无法跃迁。

发明内容

[0027] 本发明的目的在于提供一种分布式LACP接收状态机死锁预防方法及装置,能更好地解决分布式LACP接收状态机死锁问题。
[0028] 根据本发明的一个方面,提供了一种分布式LACP接收状态机死锁预防方法,所述方法包括:
[0029] 操作端口在收发链路聚合控制协议数据单元LACPDU报文期间,实时监测操作端口线卡上运行的接收状态机的死锁状况;
[0030] 若未监测到所述接收状态机进入死锁状况,则保持所述接收状态机的当前状态;
[0031] 若监测到所述接收状态机已进入死锁状况,则将所述接收状态机从当前状态变迁到另一个状态。
[0032] 其中,监测到所述接收状态机已经进入死锁状况的步骤包括:
[0033] 在操作端口为可用状态port_enabled=TRUE、操作端口为非全双工模式LACP_Enabled=FALSE情况下,当所述操作端口设置为全双工模式即LACP_Enabled=TRUE时,经由所述线卡触发操作端口进行初始化;
[0034] 若所述线卡未能触发操作端口进行初始化,则确定所述接收状态机进入死锁状况。
[0035] 其中,将所述接收状态机从当前状态变迁到另一个状态的步骤包括:接收状态机将自身的状态从当前的非全双工模式状态LACP_DISABLED变迁到定时器超时状态EXPIRED。
[0036] 其中,经由所述线卡触发操作端口进行初始化的步骤包括:
[0037] 操作端口主控生成线卡触发值BEGIN=TRUE数据,并将其下发给所述线卡;
[0038] 线卡用主控下发的数据进行更新,并根据线卡更新结果触发操作端口执行初始化。
[0039] 其中,若所述线卡更新成功,则触发操作端口执行初始化。
[0040] 其中,操作端口执行初始化后,使接收状态机进入其他稳定状态。
[0041] 其中,若所述线卡更新不成功,则不触发操作端口执行初始化。
[0042] 根据本发明的另一方面,提供了一种分布式LACP接收状态机死锁预防装置,所述装置包括:
[0043] 接收状态机,用于在操作端口收发LACPDU报文期间实时监测自身的死锁状况,若未监测到自身进入死锁状况,则保持当前状态,若监测到自身进入死锁状况,则从当前的非全双工模式状态LACP_DISABLED变迁到定时器超时状态EXPIRED。
[0044] 其中,所述装置还包括:
[0045] 主控,用于在操作端口双工模式变化时生成线卡触发值BEGIN=TRUE数据,并将所述数据下行同步到所述线卡。
[0046] 其中,所述装置还包括:
[0047] 本线卡,用主控下发的数据进行更新,并根据更新结果触发接收状态机状态跃迁,从当前的非全双工模式状态LACP_DISABLED变迁到定时器超时状态EXPIRED。
[0048] 与现有技术相比较,本发明的有益效果在于:不但可以保证原有LACP的标准接收状态机的正常运行、保证不同厂商设备正常对接不会受到影响,而且有效地预防了分布式LACP接收状态机死锁问题,增强了LACP的自恢复能力,而且不需要增加额外成本,操作简单,易于实现,运行稳定。

附图说明

[0049] 图1是现有技术提供的接收状态机状态跃迁示意图;
[0050] 图2是接收状态机死锁示意图;
[0051] 图3是本发明实施例提供的一种接收状态机实施跃迁示意图;
[0052] 图4是本发明实施例提供的一种分布式LACP接收状态机死锁预防方法的流程图;
[0053] 图5是本发明实施例提供的一种分布式LACP接收状态机死锁预防装置的结构示意图。

具体实施方式

[0054] 以下结合附图对本发明的优选实施例进行详细说明,应当理解,以下所说明的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
[0055] 图3是本发明实施例提供的一种接收状态机实施跃迁示意图。为了便于描述,特对本发明实施例存在的环境说明如下:操作端口所在的线卡叫本线卡,其他的线卡叫非本线卡;LACP状态机基于分布式实现;接收状态机只在操作端口本线卡运行;LACP_Enabled的数据通过同步更新或者本线卡置位均可;操作端口双工模式配置变化,BEGIN只在主控置为TRUE,下行同步到线卡,操作端口同步更新数据。如图3所示,所述接收状态机在死锁时状态跃迁过程如下所述:
[0056] 操作端口加入LAG(Link Aggregation Group,链路聚合组)中。LAG是网络中将多个端口合并使用的技术,聚合后的链路是所有成员组端口带宽的总和,同时还可以为网络链路提供容灾可靠性,聚合后的链路组的成员中如果任意一条或多条物理链路意外中断后,仅带宽减少为所有正常成员的带宽总和,而不会导致网络链路完全中断。
[0057] 接收状态机进入死锁状态后,LACP_DISABLED状态跃迁到EXPIRED状态。操作端口本线卡运行接收状态机。操作端口当前是可用状态且非全双工模式,即port_enabled=TRUE,LACP_Enabled=FALSE;接收状态机为LACP_DISABLED状态;操作端口主控响应双工模式变化事件,置BEGIN=TRUE,数据下行同步;如果BEGIN值在操作端口本线卡更新成功,则操作端口进入初始化状态,否则BEGIN值更新失败,进入死锁状态,此时操作端口本线卡接收状态机应由LACP_DISABLED状态进入EXPIRED状态,进一步地,两端报文收发正常,接收状态机由EXPIRED状态跃迁到CURRENT的稳定状态,更进一步地,端口聚合成功,物理链路处于转发状态。
[0058] 图4是本发明实施例提供的接收状态机实施流程图,如图4所示,所述流程包括:
[0059] 步骤S401,操作端口本线卡运行接收状态机;
[0060] 操作端口加入LAG中,操作端口本线卡运行接收状态机,当前接收状态机为LACP_DISABLED状态。
[0061] 步骤S402,判断操作端口BEGIN值是否为TRUE;
[0062] 判断操作端口本线卡BEGIN是否为TRUE,如果为TURE,表明BEGIN值在操作端口本线卡更新成功,则端口进入初始化状态,执行步骤S403,否则,表明BEGIN值在操作端口本线卡更新未成功,执行步骤S407;
[0063] 步骤S403,操作端口进入初始化INITIALIZE状态;
[0064] 操作端口进入初始化状态,采用配置值作为对端信息,并置选择变量为未选择。
[0065] 步骤S404,操作端口跃迁到PORT_DISABLED状态;
[0066] 初始化完毕后,操作端口无条件转移到PORT_DISABLED状态。
[0067] 步骤S405,操作端口跃迁到EXPIRED状态;
[0068] 如果操作端口为可用状态,且全双工模式,即port_enabled为TRUE和LACP_Enabled为TRUE,则操作端口的接收状态机从PORT_DISABLED状态进入EXPIRED状态。
[0069] 步骤S406,操作端口跃迁到CURRENT稳定状态;
[0070] 在EXPIRED状态下,再等待一个短超时时间,若定时器又超时则进入缺省状态,对端值用配置值代替;若收到LACPDU包,则进入CURRENT稳定状态,流程结束。
[0071] 步骤S407,操作端口LACP_Enabled为TRUE;
[0072] 当LACP_Enabled为TRUE时,接收状态机此时进入了死锁状态。为了解决死锁问题,当处于LACP_DISABLED状态,且LACP_Enabled取值为TRUE时,将LACP_DISABLED跃迁到另外一个状态。
[0073] 下一个跃迁状态满足如下条件:
[0074] 1)可以解决由于数据同步更新失败导致的死锁问题,即可以通过其他入口来改变接收状态机状态;
[0075] 2)根据LACP_Enabled的取值条件来进行状态跃迁,即根据LACP_Enabled从FALSE到TRUE的变化条件,跃迁接收状态机LACP_DISABLED状态;
[0076] 3)通过下一个状态可以正常状态跃迁,同时不影响链路的正常聚合。
[0077] 从接收状态机跃迁图可以看出,PORT_DISABLED、EXPIRED和LACP_DISABLED三个状态之间,其共有跃迁条件是操作端口的LACP_Enabled,即操作端口全双工模式。
[0078] 由上述分析可见,EXPIRED状态满足上述条件,接收机状态由LACP_DISABLED跃迁到EXPIRED状态即可解决死锁问题。因此如果LACP_Enabled为TRUE,则执行步骤S408。
[0079] 步骤S408,操作端口状态由LACP_DISABLED跃迁到EXPIRED状态;
[0080] 在BEGIN为TRUE且LACP_Enabled为TRUE时,操作端口状态由LACP_DISABLED跃迁到EXPIRED状态。
[0081] 步骤S409,判断操作端口是否收到LACPDU报文;
[0082] 如果操作端口收到LACPDU报文,执行步骤S410,否则执行步骤S411。
[0083] 步骤S410,操作端口状态由EXPIRED状态跃迁到CURRENT稳定状态;
[0084] 操作端口状态收到LACPDU报文,操作端口由EXPIRED状态跃迁到CURRENT稳定状态。
[0085] 步骤S411,接收状态机定时器超时,进入DEFAULTED状态;
[0086] 当接收状态机定时器超时,进入DEFAULTED状态;
[0087] 由上述步骤可见,当由LACP_DISABLED状态跃迁到EXPIRED状态之后,通过接收LACPDU报文,或定时器超时触发条件,接收状态机可以进入到CURRENT稳定状态,从而解除了接收状态机死锁。
[0088] 图5是本发明实施例提供的一种分布式LACP接收状态机死锁预防装置的结构示意图,所述装置包括主控、本线卡、非本线卡、接收状态机、周期状态机、MUX状态机、发送状态机、配置数据和线卡端口状态同步逻辑模块。其中,接收状态机、周期状态机、MUX状态机、发送状态机运行在本线卡,配置数据和线卡端口状态同步逻辑模块运行在主控上。操作端口的双工模式是可配置的,通常是在主控上下发配置。
[0089] 接收状态机,用于解析从对端接收到的LACPDU报文以及主控下发的配置数据,控制其自身的状态变迁,监测其自身是否进入死锁状态。
[0090] 主控,用于将操作端口的配置数据下行同步给所有线卡端口,更新并下行同步其他非本线卡端口运行数据给本线卡。其中,运行在主控上的配置数据和线卡端口状态同步逻辑模块用于将主控数据同步到本线卡。
[0091] 本线卡,同步更新主控同步的配置数据,并接收保存非本线卡端口的运行数据,同时上行同步本线卡端口运行数据;
[0092] 非本线卡,同步更新主控同步的配置数据,并接收保存本线卡端口的运行数据,同时上行同步非本线卡端口运行数据。
[0093] LACP其他状态机,如选择接收状态机、周期状态机、MUX状态机、发送状态机在以上处理逻辑中正常运行,基于本发明其功能是现有技术,此处不再赘述。
[0094] 所述装置具体工作过程如下:
[0095] 接收状态机进入死锁状态。操作端口加入LAG中,操作端口本线卡运行接收状态机,当前接收状态机为LACP_DISABLED状态。主控在操作端口双工模式变化时生成线卡触发值BEGIN=TRUE数据,并将所述数据下行同步到所述本线卡。所述本线卡用主控下发的数据更新BEGIN。如果本线卡更新BEGIN失败,即本线卡上的BEGIN=FALSE,而LACP_Enabled又为TRUE时,接收状态机进入了死锁状态。
[0096] 接收状态机检测到其进入死锁后,从当前的非全双工模式状态LACP_DISABLED变迁到定时器超时状态EXPIRED。如果操作端口收到LACPDU报文,接收状态机再由EXPIRED状态跃迁到CURRENT稳定状态,如果没有收到LACPDU报文,当接收状态机定时器超时,接收状态机进入DEFAULTED状态。
[0097] 综上所述,本发明在遵循标准LACP协议的基础上、分布式实现LACP状态机的情况下,通过改变LACP协议接收状态机LACP_DISABLED状态跃迁,解决了在某些异常情况下接收状态机存在死锁的问题,增强了LACP的自恢复能力,同时,本发明不需要增加额外成本,具有操作简单,易于实现,运行稳定,兼容标准LACP协议的特点。
[0098] 尽管上文对本发明进行了详细说明,但是本发明不限于此,本技术领域技术人员可以根据本发明的原理进行各种修改。因此,凡按照本发明原理所作的修改,都应当理解为落入本发明的保护范围。