AN5516-01设备以太网OAM模块详细设计_第1页
AN5516-01设备以太网OAM模块详细设计_第2页
AN5516-01设备以太网OAM模块详细设计_第3页
AN5516-01设备以太网OAM模块详细设计_第4页
AN5516-01设备以太网OAM模块详细设计_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

AN5516AN5516-01设备以太网OAM模块软件详细设计软件详细设计设备型号:AN5516-01产品代号:项目代号:部门:烽火通信科技股份有限公司宽带产品部拟制:2009年5审核:年月日批准:年月日目录TOC\o"1-2"\h\z\u0 版本记录 41 参考资料 42 术语与缩写解释 43 需求概述 54 总体设计 5 软件结构 5 对外提供接口 6 需要外部提供接口 75 主控模块描述 8 功能 8 相关源文件 8 数据结构 8 全局变量 11 程序逻辑 12 主要函数定义 13 网管配置管理函数 21 Y1731网管配置管理函数 25 告警相关函数 28 本地命令行 29 Y1731本地命令行 306 CC模块描述 32 功能 32 相关源文件 32 数据结构 32 全局变量 33 程序逻辑 33 主要函数定义 367 LB模块描述 39 功能 39 相关源文件 39 数据结构 40 全局变量 40 程序逻辑 41 主要函数定义 438 LT模块描述 46 功能 46 相关源文件 46 数据结构 46 全局变量 47 程序逻辑 47 主要函数定义 509 OAM帧收发模块描述 54 功能 54 相关源文件 54 数据结构 54 全局变量 55 程序逻辑 55 主要函数定义 5710 定时器模块描述 59 功能 59 相关源文件 59 数据结构 59 全局变量 60 程序逻辑 60 主要函数定义 6011 告警 6212 测试方案 62 测试组网图 62 以太网连续性检查(ETH-CC) 62 以太网环回(ETH-LB) 63 以太网链路跟踪(ETH-LT) 64

版本记录序号版本号生成时间主要修改记录作者备注1RA2009-5-11初始化贺超234参考资料编号资料名称简介出版单位1以太网运行和维护要求2007信息产业部标准文本中华人民共和国信息产业部2ITU-TRecommendationY.1731(formerlyY.17ethoam),OAMfunctionsandmechanismsforEthernetbasednetworks.ITU-T3LocalandMetropolitanAreaNetworks—VirtualBridgedLocalAreaNetworks—Amendment5:ConnectivityFaultManagement.IEEE术语与缩写解释缩写、术语解释OAMOperation,AdministrationandMaintenance操作,管理,维护MDMaintenanceDomain维护域MAMaintenanceAssociation维护关联MDLMaintenanceDomainLevel维护域等级MEGMaintenanceEntityGroup维护实体组MELMaintenanceEntityGroupLevel维护实体组等级MEPMA/MEGEndPointMA/MEG端点MIPMD/MEGIntermediatePointMA/MEG中间点ETH-CCEthernetContinuityCheckfunction以太网连续性检查ETH-LBEthernetLoopBackfunction以太网环回ETH-LTEthernetLinkTracefunction以太网链路跟踪CCMContinuityCheckMessage连续性检查消息LBMLoopBackMessage环回消息LBRLoopBackReply环回响应LTMLinkTraceMessage链路跟踪消息LTRLinkTraceReply链路跟踪响应需求概述遵照《以太网运行和维护要求2007》、Y1731和标准,在AN5516-01设备的主控盘上,针对每个上联端口实现标准的以太网OAM协议。具体需求如下:同时支持Y1731和标准,其中Y1731支持最新的8.1版本。仅实现标准的连续性检测功能、环回功能监视功能、链路跟踪功能,对于Y1731中其他的功能如AIS,LCK,性能监测暂不实现;在每个上联端口上实现DOWNMEP,对于UPMEP和MIP暂不实现,如无特殊说明,本文档中提到的MEP均指DOWNMEP;每个上联端口可以配置多个MEP;每个上联端口可以配置独立的MAC地址;所有OAM帧必须携带VLAN,而且仅支持一层VLAN;总体设计软件结构由于Y1731是对Y1731中都有定义,虽然在具体的细节上有所差异,但差异部分很小,因此OAM模块对这两种协议将使用统一的数据结构管理。OAM模块分为以下几个子模块:主控模块,定时器模块,OAM帧收发模块,CC模块,LB模块和LT模块,每个模块的功能如下:主控模块:管理OAM协议中定义的对象的数据结构,包括MD,MA,MEP,MIP;提供本地命令行;处理网管模块下发的控制命令;收集CC,LB,LT模块的告警信息,上报给告警模块;对从OAM帧收发模块收到的合法OAM帧以及从定时器模块收到的超时事件进行解析,然后调用CC,LB,LT模块的接口进处理;定时器模块:定时器模块通过看门狗实现,提供相应的创建、删除、开始、停止等接口供CC,LB,LT模块调用;OAM帧收发模块:该模块对收到的OAM帧进行MAC地址、VLAN和OAM头部的合法性检测,丢弃非法的OAM帧,将合法的OAM帧发送到主控模块的队列。同时该模块还提供OAM消息的发送接口给CC,LB,LT模块调用;CC模块:该模块完成ETH-CC功能,包括CC使能的情况下,定时的发送CCM,并对收到的CCM帧进行处理;LB模块:该模块完成ETH-LB功能,包括使能LB时定时的发送一定数量的LBM消息,并对收到的LBR进行处理,同时LB模块还需要对收到的LBM进行合法性判断,对于合法的LBM应答相应的LBR;LT模块:该模块完成ETH-LT功能,包括使能LT时,发送一个LTM消息,然后对收到的LTR进行处理,同时LT模块还需要对收到的LTM进行合法性判断,对于合法的LTM应答相应的LTR;对外提供接口OAM模块初始化STATUSoamModuleInit()功能:初始化整个OAM模块,初始化的内容包括:模块版本信息、基础函数库、定时器、队列、OAM帧和事件处理任务、本地命令行、图形网管命令等。输入参数:输出参数:返回值:总是返回OK;接收OAM帧STATUSdot1agOamRecv(char*bufPtr,uint32len,uint16port,uint32vlanid)功能:提供给交换驱动模块调用,交换芯片收到OAM帧后,调用该接口将数据送到OAM模块处理;。输入参数:bufPtr:存放OAM帧的buf指针;len:OAM帧长度;port:接收OAM帧的端口号;vlanid:OAM帧携带的VLAN;输出参数:返回值:返回被调函数OAM_Recv的返回值;需要外部提供接口OAM帧发送函数STATUSoamSend(uint16port,char*bufPtr,uint32len)功能:向指定的端口发送OAM帧。输入参数:Port:物理端口号;bufPtr:数据包的buf;len:数据长度;输出参数:返回值:发送失败,返回ERROR,否则返回OK;获取系统MAC地址STATUSsysMacAddrGet(char*macAddrPtr)功能:获取系统的MAC地址。输入参数:输出参数:macAddrPtr:指向6个字节的数组,用于存放系统MAC地址;返回值:获取MAC地址失败,返回ERROR,否则返回OK;上报告警intraiseEv_trap(intalarmId,TRAP_DATA*trapdata)功能:向告警模块上报告警消息。输入参数:alarmId:告警ID;trapdata:告警信息;输出参数:返回值:上报告警失败,返回ERROR,否则返回OK;网管命令处理函数注册RegisterHookFunc(int(*writFunc)(...),int(*readFunc)(...),intMODULE_ID);功能:注册网管命令处理函数。输入参数:writFunc:配置命令的处理函数;readFunc:回读命令的处理函数;MODULE_ID:模块ID;输出参数:返回值:注册失败,返回ERROR,否则返回OK;主控模块描述功能主控模块功能如下:管理OAM协议中定义的对象的数据结构,包括MD,MA,MEP,MIP;提供本地命令行;处理网管模块下发的控制命令;收集CC,LB,LT模块的告警信息,上报给告警模块;对从OAM帧收发模块收到的合法OAM帧以及从定时器模块收到的超时事件进行解析,然后调用CC,LB,LT模块的接口进处理;相关源文件序号文件名称描述1基本bit和字符的操作函数2自定义数据类型3协议相关的宏定义4OAM帧和事件处理任务相关的函数5主要数据结构的定义,包括MD,MA,MEP等对MD,MA,MEP进行设置和读取相关的函数设置和读取相关的宏和枚举定义C网管命令相关函数C网管命令相关的宏和枚举定义CCY1731命令行数据结构MD信息typedefstructCfmMd{ u_intcfmMdIndex; /*MD节点的索引号*/ eCfmMdNameTypecfmMdFormat; /*MDNAME的格式*/ u_intcfmMdNameLen; /*MDNAME的长度*/ u_charcfmMdName[48]; /*存放MDNAME的数组*/ u_charcfmMdMdLevel; /*MDLEVEL*/ MdTypemdType; /*MD类型,如果该节点用于Y1731,取值为MD_TYPE_1731;如果用于802.1ag,取值为MD_TYPE_AG*/ LISTmaList; /*MD中的MA列表,一个MD中可以有0到多个MA*/}tCfmMd;MA信息typedefstructCfmMaNet{ u_intcfmMaIndex; /*MA节点的索引号*/ eCfmMaNameTypecfmMaNetFormat; /*MANAME的格式*/ u_intcfmMaNameLen; /*MANAME的长度*/ u_charcfmMaNetName[48]; /*存放MANAME的数组*/ eCfmCcmIntervalcfmMaNetCcmInterval; /*CC间隔*/ void*pParent; /*指向该MA所属的MD*/ LIST mepList; /*MA中的MEP列表,一个MA中可以有0到多个MEP*/ u_char vlanList[513]; /*MA包含的vlan集合*/ u_shortvid; /*MA使用的主VLAN*/ }tCfmMaNet;MEP协议相关信息typedefstructCfmIfMep{ u_intcfmMepIdentifier; /*MEPID*/ u_intcfmMepIfIndex; /*MEP所属的物理端口号*/ eCfmMepDirectioncfmMepDirection;/*MEP的方向,目前只支持DOWN*/ u_intcfmMepPrimaryVid; /*MEP的主VLAN*/ u_charcfmMepPriority; /*MEP的优先级,发送CCM时使用*/ u_charcfmMepCciEnabled; /*CC功能使能标志*/ u_charcfmMepLtmPriority; /*LTM优先级,发送LTM时使用*/ u_charcfmMepLbmPriority; /*LBM优先级,发送LBM时使用*/ u_charcfmMepMacAddress[6]; /*MEP的本地MAC地址,所有MEP可以使用相同的MAC地址也可以使用不同的MAC地址*/ u_intcfmMepTransmitLbmTimeout; /*LBM超时时间*/ u_charcfmMepTransmitLtmTargetMacAddress[6]; /*LTM的目标MAC地址*/ u_charcfmMepTransmitLtmTtl; /*LTM中的TTL*/ u_intcfmMepTransmitLtmSeqNumber; /*LTM使用的序号*/ void*pParent; /*指向MEP所属的MA*/ u_charccDestMac[6]; /*CCM的目的MAC地址*/ tOAMTimersendCcmTimer; /*CC发送定时器*/ }tCfmIfMep;OAM帧统计typedefstruct{ u_intccmSend; /*发送的CCM帧个数*/ u_intccmRecv; /*收到的CCM帧个数*/u_intccmErrorPktRecv; /*收到的错误CCM帧个数*/ u_intlbmSend; /*发送的LBM帧个数*/ u_intlbmRecv; /*收到的LBM帧个数*/ u_intlbmWrongPatternDrop;/*丢弃的LBM帧个数*/ u_intlbrSendPkt; /*发送的LBR帧个数*/ u_intlbrRecv; /*收到的LBR帧个数*/ u_intlbrOutOfOrder; /*收到的乱序的LBR帧个数*/ u_intlbrWrongPatternDrop; /*丢弃的LBR帧个数*/ u_intltmSend; /*发送的LTM帧个数*/ u_intltmRecv; /*收到的LTM帧个数*/ u_intltmWrongPatternDrop;/*丢弃的LTM帧个数*/ u_intltrSendPkt; /*发送的LTR帧个数*/ u_intltrRecv; /*收到的LTR帧个数*/ u_intltrOutOfOrder; /*收到的乱序的LTR帧个数*/ }PacketStatics;物理端口的MEP信息typedefstruct{ u_int unit; /*物理端口号*/ LIST mepList; /*该端口下配置的MEP列表*/ }tPortInfo;CC和LT定时器信息typedefstruct{ tOAMTimerccDbAgingTimer; /*远端MEP老化定时器*/ u_intccDbAging; /*远端MEP老化时间间隔*/ tOAMTimerltAgingTimer; /*LT节点老化定时器(间隔默认为10分钟)*/}tCfmGlobalPara;全局变量MD管理列表LISTgMdList;MD管理列表为一个三维单向链表,存储形式如下:端口MEP管理列表LISTgPortList;端口MEP管理为一个二维单向链表中,存储形式如下:每一个物理端口对应一个tPortInfo节点,该端口下的每一个MEP对应一个tCfmIfMep节点;全局定时器tCfmGlobalParagCfmPara;其中包括远端MEP的老化定时器和LT节点的老化定时器;OAM帧和定时器事件接收队列tOsixQIdOAMQId;AM帧和定时器事件处理任务tOsixTaskIdOAMTaskId;程序逻辑初始化AM帧和定时器事件处理任务流程主要函数定义添加MEGintadd1731Meg(intmdIndex,octetstring*namePtr,u_charlevel,u_shortvlanId)功能:添加一个新的MEG,由于Y1731和802.1ag公用相同的结构,因此一个MEG会被分解成一个MD和一个MA。添加MEG时,会添加一个新的MD,然后在这个MD中添加一个新的MA,而且MD和MA使用相同的索引号。输入参数:mdIndex:MEG的索引号,实际上是新添加的MD和MA的索引号;namePtr:MEG的NAME,实际上是新添加的MA的NAME;level:MEG的LEVEL,实际上是MD中的LEVEL;vlanId:MEG的VLAN,实际上是MA的主VLAN;输出参数:返回值:如果添加失败,返回ERROR,否则返回OK;添加MDintaddCfmMd(u_intmdIndex)功能:遍历MD列表,如果给定的MD索引号已经被使用,则添加失败,否则列表中添加一个新的MD节点,按索引号从小到大排序。输入参数:mdIndex:MD索引号;输出参数:返回值:如果添加失败,返回ERROR,否则返回OK;添加MAintaddCfmMa(u_intmdIndex,u_intmaIndex)功能:遍历指定MD的MA列表,如果给定的MA索引号已经被使用,则添加失败,否则列表中添加一个新的MA节点,按索引号从小到大排序。输入参数:mdIndex:MD索引号;maIndex:MA索引号;输出参数:返回值:如果添加失败,返回ERROR,否则返回OK;添加MEPintaddCfmMep(u_intmdIndex,u_intmaIndex,u_shortmepid)功能:遍历指定MA的MEP列表,如果给定的MEPID已经被使用,则添加失败,否则列表中添加一个新的MEP节点,按MEPID从小到大排序。输入参数:mdIndex:MD索引号;maIndex:MA索引号;mepid:MEPID;输出参数:返回值:如果添加失败,则返回ERROR,否则返回OK;添加物理端口节点tPortInfo*addCfmPortInfo(u_intunit)功能:向端口列表中添加一个端口节点。输入参数:Unit:物理端口号;输出参数:返回值:返回新添加的端口节点;在端口节点MEP列表中添加MEPintaddCfmMepInPort(tCfmMep*pMep)功能:向端口节点的MEP列表中添加一个新的MEP,首先根据pMep中的物理端口号找到对应的端口节点,然后在端口节点的MEP列表中添加新的MEP。输入参数:pMep:指向mep的指针;输出参数:返回值:如果添加失败,返回ERROR,否则返回OK;删除端口节点的MEP列表中的一个MEPintdelCfmMepInPort(tCfmMep*pMep)功能:从端口节点的MEP列表中删除一个存在的MEP,首先根据pMep中的物理端口号找到对应的端口节点,然后在端口节点的MEP列表中删除指定的MEP。输入参数:pMep:指向mep的指针;输出参数:返回值:如果删除失败,返回ERROR,否则返回OK;删除MEPintdelCfmMepFromIndex(u_intmdIndex,u_intmaIndex,u_shortmepid)功能:从一个特定的MA的MEP列表中删除特定的MEP。首先遍历MD列表,找到mdIndex对应的MD,然后遍历MD中的MA列表,找到maIndex对应的MA,然后遍历MA中的MEP列表,找到mepid对应的MEP,并删除该MEP;输入参数:mdIndex:MD索引号;maIndex:MA索引号;mepid:MEPID;输出参数:返回值:如果删除失败,返回ERROR,否则返回OK;删除MAintmaDelete(intmdIndex,intmaIndex)功能:从一个特定的MD的MA列表中删除特定的MA。首先遍历MD列表,找到mdIndex对应的MD,然后遍历MD中的MA列表,找到maIndex对应的MA,找到后,首先删除该MA下所有的MEP,然后删除该MEP;输入参数:mdIndex:MD索引号;maIndex:MA索引号;输出参数:返回值:如果删除失败,返回ERROR,否则返回OK;删除MDintmdDelete(intmdIndex)功能:删除一个特定的MD。首先遍历MD列表,找到mdIndex对应的MD,然后遍历MD中的MA列表,删除每个MA下的所有MEP,然后删除所有的MA,最后删除该MD;输入参数:mdIndex:MD索引号;输出参数:返回值:如果删除失败,返回ERROR,否则返回OK;删除MEGintdel1731Meg(intmdIndex)功能:删除一个特定的MEG,由于一个MEG有一个MD和MD中的一个MA组成,因此首先遍历MD列表,找到mdIndex对应的MD,然后遍历MD中的MA列表,删除每个MA下的所有MEP,然后删除所有的MA,最后删除该MD。输入参数:mdIndex:MD索引号;输出参数:返回值:如果删除失败,返回ERROR,否则返回OK;通过MEPID查找MEPtCfmMep*getCfmMepFromIndex(u_intmdIndex,u_intmaIndex,u_shortmepid)功能:根据MDINDEX/MAINDEX/MEPID查找相应的MEP,使用遍历的方式查找。输入参数:mdIndex:MD索引号;maIndex:MA索引号;mepid:MEPID;输出参数:返回值:如果找到,返回MEP节点的地址,否则返回NULL;通过VLAN查找MAtCfmMaNet*getCfmMaFromVlan(u_intmdIndex,u_shortvlan)功能:根据MDINDEX/VLAN查找相应的MA,使用遍历的方式查找。输入参数:mdIndex:MD索引号;vlan:MAVLANLIST包含的VLAN值;输出参数:返回值:如果找到,返回MA节点的地址,否则返回NULL;通过索引号查找MAtCfmMaNet*getCfmMaFromIndex(u_intmdIndex,u_intmaIndex)功能:根据MDINDEX/MAINDEX查找相应的MA,使用遍历的方式查找。输入参数:mdIndex:MD索引号;maIndex:MA索引号;输出参数:返回值:如果找到,返回MA节点的地址,否则返回NULL;通过LEVEL查找MDtCfmMd*getCfmMdFromLevel(u_charlevel)功能:根据MDLEVEL查找相应的MD,使用遍历的方式查找。输入参数:Level:MDLEVEL;输出参数:返回值:如果找到,返回MD节点的地址,否则返回NULL;通过索引号查找MDtCfmMd*getCfmMdFromIndex(u_intmdIndex)功能:根据MDINDEX查找相应的MD,使用遍历的方式查找。输入参数:mdIndex:MD索引号;输出参数:返回值:如果找到,返回MD节点的地址,否则返回NULL;通过端口号查找端口节点tPortInfo*getCfmPortInfoByIndex(u_intunit)功能:根据物理端口号在端口列表中查找相应的端口节点,使用遍历的方式查找。输入参数:unit:物理端口号;输出参数:返回值:如果找到,返回端口节点的地址,否则返回NULL;通过端口信息查找MEPtCfmIfMep*getMepFromPort(tPortInfo*pPortNode,u_charmdLevel,u_shortvlanId)功能:根据端口节点信息在端口列表中查找相应的端口节点,然后根据level、vlan在端口节点的MEP列表中查找对应的MEP。使用遍历的方式查找。输入参数:pPortNode:指向端口节点;mdLevel:MEP所在MD的LEVEL;vlanId:MEP所在MA的VLAN;输出参数:返回值:如果找到,返回MEP的地址,否则返回NULL;通过MEP查找对应端口节点tPortInfo*getPortNodeFromMep(tCfmMep*pMepNode)功能:根据MEP中的物理端口号,在端口列表中查找对应的端口节点。使用遍历的方式查找。输入参数:pMepNode:指向MEP;输出参数:返回值:如果找到,返回端口节点的地址,否则返回NULL;通过端口、VLAN和LEVEL确定对应的MP类型intgetMpRoleFromIf(tPortInfo*pPortNode,u_charmdLevel,u_shortvlanId)功能:在指定的端口节点中根据level,vlan查找匹配的MP的类型。输入参数:pPortNode:指向端口节点;mdLevel:MEP所在MD的LEVEL;vlanId:MEP所在MA的VLAN;输出参数:返回值:如果没有匹配的MP,返回CFM_ROLE_ERR,否则返回MP的类型,可能的取值为CFM_ROLE_MIP,CFM_ROLE_UP_MEP和CFM_ROLE_DOWN_MEP;获取MEP信息intcfmMepGetApi(void*index,unsignedintcmd,void*var)功能:获取指定MEP的信息,每次获取的并不是MEP的全部信息,而是由cmd来确定返回一部分参数,需要获取不同的参数,就选择不同的cmd。输入参数:index:整形数组,依次存放MDIndex,MAIndex,MEPID;cmd:需要获取的参数的ID;输出参数:var:返回需要获取的参数的值,根据cmd的不同,返回的var的内容也不相同。返回值:如果获取失败,返回ERROR,否则返回OK;获取MA信息intcfmMaNetGetApi(void*index,unsignedintcmd,void*var)功能:获取指定MA的信息,每次获取的并不是MA的全部信息,而是由cmd来确定返回一部分参数,需要获取不同的参数,就选择不同的cmd。输入参数:index:整形数组,依次存放MDIndex,MAIndex;cmd:需要获取的参数的ID;输出参数:var:返回需要获取的参数的值,根据cmd的不同,返回的var的内容也不相同。返回值:如果获取失败,返回ERROR,否则返回OK;获取MD信息intcfmMdGetApi(void*mdIndex,unsignedintcmd,void*var)功能:获取指定MD的信息,每次获取的并不是MD的全部信息,而是由cmd来确定返回一部分参数,需要获取不同的参数,就选择不同的cmd。输入参数:index:整形数组,存放MDIndex;cmd:需要获取的参数的ID;输出参数:var:返回需要获取的参数的值,根据cmd的不同,返回的var的内容也不相同。返回值:如果获取失败,返回ERROR,否则返回OK;设置MEP参数intcfmMepSetApi(void*index,unsignedintcmd,void*var)功能:设置指定MEP的参数,每次设置的并不是MEP的全部参数,而是由cmd来确定设置一部分参数,需要设置不同的参数,就选择不同的cmd。输入参数:index:整形数组,依次存放MDIndex,MAIndex,MEPID;cmd:需要设置的参数的ID;var:需要设置的参数的值,根据cmd的不同,var的内容也不相同。输出参数:返回值:如果设置失败,返回ERROR,否则返回OK;设置MA参数intcfmMaNetSetApi(void*index,unsignedintcmd,void*var)功能:设置指定MA的参数,每次设置的并不是MA的全部参数,而是由cmd来确定设置一部分参数,需要设置不同的参数,就选择不同的cmd。输入参数:index:整形数组,依次存放MDIndex,MAIndex;cmd:需要设置的参数的ID;var:需要设置的参数的值,根据cmd的不同,var的内容也不相同。输出参数:返回值:如果设置失败,返回ERROR,否则返回OK;设置MD参数intcfmMdSetApi(void*index,unsignedintcmd,void*var)功能:设置指定MD的参数,每次设置的并不是MD的全部参数,而是由cmd来确定设置一部分参数,需要设置不同的参数,就选择不同的cmd。输入参数:index:整形数组,依次存放MDIndex;cmd:需要设置的参数的ID;var:需要设置的参数的值,根据cmd的不同,var的内容也不相同。输出参数:返回值:如果设置失败,返回ERROR,否则返回OK;OAM模块初始化STATUSoamModuleInit()功能:初始化整个OAM模块,初始化的内容包括:模块版本信息、基础函数库、定时器、队列、OAM帧和事件处理任务、本地命令行、图形网管命令等。输入参数:输出参数:返回值:总是返回OK;网管配置管理函数说明:具体的网管协议命令ID及格式请参见《接入卡新参数类型申请(EPONHSWB(V1.0))》文档。配置MDintunpack_cfm_md_cfg(char*inBuf,intinBufLen,char*outBuf,int*outBufLen)功能:用全删全建的方式,配置MD。输入参数:inBuf:网管协议报文;inBufLen:报文长度;输出参数:outBuf:命令响应;outBufLen:命令响应的长度;返回值:总是返回OK;配置MAintunpack_cfm_ma_cfg(char*inBuf,intinBufLen,char*outBuf,int*outBufLen)功能:用全删全建的方式配置一个MD下的所有MA。输入参数:inBuf:网管协议报文;inBufLen:报文长度;输出参数:outBuf:命令响应;outBufLen:命令响应的长度;返回值:总是返回OK;配置MEPintunpack_cfm_mep_cfg(char*inBuf,intinBufLen,char*outBuf,int*outBufLen)功能:用全删全建的方式,配置一个MA下面所有的MEP。输入参数:inBuf:网管协议报文;inBufLen:报文长度;输出参数:outBuf:命令响应;outBufLen:命令响应的长度;返回值:总是返回OK;执行/停止LBintunpack_cfm_lb_ctrl(char*inBuf,intinBufLen,char*outBuf,int*outBufLen)功能:在一个指定的MEP上执行或停止LB操作。输入参数:inBuf:网管协议报文;inBufLen:报文长度;输出参数:outBuf:命令响应;outBufLen:命令响应的长度;返回值:总是返回OK;执行/停止LTintunpack_cfm_lt_ctrl(char*inBuf,intinBufLen,char*outBuf,int*outBufLen)功能:在一个指定的MEP上执行或停止LB操作。输入参数:inBuf:网管协议报文;inBufLen:报文长度;输出参数:outBuf:命令响应;outBufLen:命令响应的长度;返回值:总是返回OK;使能/去使能全局OAMintunpack_oam_enable_switch(char*inBuf,intinBufLen,char*outBuf,int*outBufLen)功能:使能/去使能全局的OAM功能。输入参数:inBuf:网管协议报文;inBufLen:报文长度;输出参数:outBuf:命令响应;outBufLen:命令响应的长度;返回值:总是返回OK;回读MD参数intpack_cfm_md_cfg(char*inBuf,intinBufLen,char*outBuf,int*outBufLen)功能:一次回读所有MD的信息。输入参数:inBuf:网管协议报文;inBufLen:报文长度;输出参数:outBuf:命令响应;outBufLen:命令响应的长度;返回值:总是返回OK;回读MA参数intpack_cfm_ma_cfg(char*inBuf,intinBufLen,char*outBuf,int*outBufLen)功能:回读一个指定MD下的所有MA的信息。输入参数:inBuf:网管协议报文;inBufLen:报文长度;输出参数:outBuf:命令响应;outBufLen:命令响应的长度;返回值:总是返回OK;回读MEP参数intpack_cfm_mep_cfg(char*inBuf,intinBufLen,char*outBuf,int*outBufLen)功能:回读一个指定MA下的所有MEP的信息。输入参数:inBuf:网管协议报文;inBufLen:报文长度;输出参数:outBuf:命令响应;outBufLen:命令响应的长度;返回值:总是返回OK;回读CC状态intpack_cfm_cc_result(char*inBuf,intinBufLen,char*outBuf,int*outBufLen)功能:回读一个指定MEP的CC状态和远端MEP信息。输入参数:inBuf:网管协议报文;inBufLen:报文长度;输出参数:outBuf:命令响应;outBufLen:命令响应的长度;返回值:总是返回OK;回读LB结果intpack_cfm_lb_result(char*inBuf,intinBufLen,char*outBuf,int*outBufLen)功能:回读一个指定MEP的最后一次LB结果。输入参数:inBuf:网管协议报文;inBufLen:报文长度;输出参数:outBuf:命令响应;outBufLen:命令响应的长度;返回值:总是返回OK;回读LT结果intpack_cfm_lt_result(char*inBuf,intinBufLen,char*outBuf,int*outBufLen)功能:回读一个指定MEP的最后一次LT结果。输入参数:inBuf:网管协议报文;inBufLen:报文长度;输出参数:outBuf:命令响应;outBufLen:命令响应的长度;返回值:总是返回OK;回读全局OAM使能/去使能状态intpack_oam_enable_switch(char*inBuf,intinBufLen,char*outBuf,int*outBufLen)功能:回读全局OAM使能/去使能状态。输入参数:inBuf:网管协议报文;inBufLen:报文长度;输出参数:outBuf:命令响应;outBufLen:命令响应的长度;返回值:总是返回OK;Y1731网管配置管理函数配置MEGintunpack_Y1731_meg_cfg(char*inBuf,intinBufLen,char*outBuf,int*outBufLen)功能:用全删全建的方式,配置MEG。输入参数:inBuf:网管协议报文;inBufLen:报文长度;输出参数:outBuf:命令响应;outBufLen:命令响应的长度;返回值:总是返回OK;配置MEPintunpack_Y1731_mep_cfg(char*inBuf,intinBufLen,char*outBuf,int*outBufLen)功能:用全删全建的方式,配置一个MEG下面所有的MEP。输入参数:inBuf:网管协议报文;inBufLen:报文长度;输出参数:outBuf:命令响应;outBufLen:命令响应的长度;返回值:总是返回OK;执行/停止LBintunpack_Y1731_lb_ctrl(char*inBuf,intinBufLen,char*outBuf,int*outBufLen)功能:在一个指定的MEP上执行或停止LB操作。输入参数:inBuf:网管协议报文;inBufLen:报文长度;输出参数:outBuf:命令响应;outBufLen:命令响应的长度;返回值:总是返回OK;执行/停止LTintunpack_Y1731_lt_ctrl(char*inBuf,intinBufLen,char*outBuf,int*outBufLen)功能:在一个指定的MEP上执行或停止LB操作。输入参数:inBuf:网管协议报文;inBufLen:报文长度;输出参数:outBuf:命令响应;outBufLen:命令响应的长度;返回值:总是返回OK;回读MEG参数intpack_Y1731_meg_cfg(char*inBuf,intinBufLen,char*outBuf,int*outBufLen)功能:一次回读所有MEG的信息。输入参数:inBuf:网管协议报文;inBufLen:报文长度;输出参数:outBuf:命令响应;outBufLen:命令响应的长度;返回值:总是返回OK;回读MEP参数intpack_Y1731_mep_cfg(char*inBuf,intinBufLen,char*outBuf,int*outBufLen)功能:回读一个指定MEG下的所有MEP的信息。输入参数:inBuf:网管协议报文;inBufLen:报文长度;输出参数:outBuf:命令响应;outBufLen:命令响应的长度;返回值:总是返回OK;回读CC状态intpack_Y1731_cc_result(char*inBuf,intinBufLen,char*outBuf,int*outBufLen)功能:回读一个指定MEP的CC状态和远端MEP信息。输入参数:inBuf:网管协议报文;inBufLen:报文长度;输出参数:outBuf:命令响应;outBufLen:命令响应的长度;返回值:总是返回OK;回读单播LB结果intpack_Y1731_lb_result(char*inBuf,intinBufLen,char*outBuf,int*outBufLen)功能:回读一个指定MEP的最后一次单播LB结果。输入参数:inBuf:网管协议报文;inBufLen:报文长度;输出参数:outBuf:命令响应;outBufLen:命令响应的长度;返回值:总是返回OK;回读组播LB结果intpack_Y1731_lb_mcast_result(char*inBuf,intinBufLen,char*outBuf,int*outBufLen)功能:回读一个指定MEP的最后一次组播LB结果。输入参数:inBuf:网管协议报文;inBufLen:报文长度;输出参数:outBuf:命令响应;outBufLen:命令响应的长度;返回值:总是返回OK;回读LT结果intpack_Y1731_lt_result(char*inBuf,intinBufLen,char*outBuf,int*outBufLen)功能:回读一个指定MEP的最后一次LT结果。输入参数:inBuf:网管协议报文;inBufLen:报文长度;输出参数:outBuf:命令响应;outBufLen:命令响应的长度;返回值:总是返回OK;告警相关函数说明:详细的告警ID和告警格式请参见《接入卡新参数类型申请(EPON上联盘(V1.0))》文档。告警上报intsend_alarm_trap(intalarmId,shortportNo,char*msg,intlen,chartype)功能:分配空间并按定义的格式组装告警信息,然后调用告警模块的raiseEv_trap接口上报一个告警。输入参数:alarmId:告警ID;portNo:告警产生的上联端口号;msg:告警附加信息;len:告警附加信息的长度;type:告警类型,0-告警消失,1-普通告警产生,2-无消失上报的告警产生;输出参数:返回值:如果分配空间失败,则返回ERROR,否则返回OK;增加MDmd<1-"CFM_MD_NUM">name<STRING>level<0-7>删除MDnomd[<1-"CFM_MD_NUM">|all]增加MAma<1-"CFM_MD_NUM"><1-"CFM_MA_NUM">name<STRING>vlan<0-4096>{vlanList<STRING>}*1删除MAnoma<1-"CFM_MD_NUM"><1-"CFM_MA_NUM">增加MEPmep<1-"CFM_MD_NUM"><1-"CFM_MA_NUM"><1-"CFM_MEP_NUM">portno<0-32>direction[up|down]删除MEPnomep<1-"CFM_MD_NUM"><1-"CFM_MA_NUM"><1-"CFM_MEP_NUM">增加远端MEPmep<1-"CFM_MD_NUM"><1-"CFM_MA_NUM"><1-"CFM_MEP_NUM">remote-mepid<1-"CFM_MEP_NUM">remote-mac<AA:BB:CC:DD:EE:FF>删除远端MEPnomep<1-"CFM_MD_NUM"><1-"CFM_MA_NUM"><1-"CFM_MEP_NUM">remote-mepid<1-"CFM_MEP_NUM">设置MA的CC间隔ma<1-"CFM_MD_NUM"><1-"CFM_MA_NUM">cc-interval[300Hz|10ms|100ms|10s|1min|10min|default]使能/去使能CCmep<1-"CFM_MD_NUM"><1-"CFM_MA_NUM"><1-"CFM_MEP_NUM">cc[enable|disable]执行LBloopbackmep<1-"CFM_MD_NUM"><1-"CFM_MA_NUM"><1-"CFM_MEP_NUM"><AA:BB:CC:DD:EE:FF>停止LBnoloopbackmep<1-"CFM_MD_NUM"><1-"CFM_MA_NUM"><1-"CFM_MEP_NUM">执行LTlinktracemep<1-"CFM_MD_NUM"><1-"CFM_MA_NUM"><1-"CFM_MEP_NUM"><AA:BB:CC:DD:EE:FF>显示MDshowmd显示MAshowma<1-"CFM_MD_NUM"><1-"CFM_MA_NUM">显示本地MEPshowlocalmep显示远端MEPshowremotemep<1-"CFM_MD_NUM"><1-"CFM_MA_NUM"><1-"CFM_MEP_NUM">显示CC状态showccstate显示LB结果showloopbackmep<1-"CFM_MD_NUM"><1-"CFM_MA_NUM"><1-"CFM_MEP_NUM">显示LT结果showlinktracemep<1-"CFM_MD_NUM"><1-"CFM_MA_NUM"><1-"CFM_MEP_NUM">[all|last]OAM全局使能/去使能oamctrl[enable|disable]"Y1731本地命令行增加MEGmeg<1-"Y1731_MEG_NUM">name<STRING>level<0-7>vlan<0-4096>{vlanList<STRING>}*1删除MEGnomeg[<1-"Y1731_MEG_NUM">|all]增加MEPmep<1-"Y1731_MEG_NUM"><1-"Y1731_MEP_NUM">portno<0-32>direction[up|down]删除MEPnomep<1-"Y1731_MEG_NUM"><1-"Y1731_MEP_NUM">设置MEPMAC地址和主VLANmep<1-"Y1731_MEG_NUM"><1-"Y1731_MEP_NUM">{[mac]<AA:BB:CC:DD:EE:FF>}*1{[priVlan]<0-4096>}*1增加远端MEPmep<1-"Y1731_MEG_NUM"><1-"Y1731_MEP_NUM">remote-mepid<1-"Y1731_MEP_INDEX">mac<AA:BB:CC:DD:EE:FF>删除远端MEPnomep<1-"Y1731_MEG_NUM"><1-"Y1731_MEP_NUM">remote-mepid<1-"Y1731_MEP_INDEX">设置CC间隔mep<1-"Y1731_MEG_NUM"><1-"Y1731_MEP_NUM">cc-interval[300Hz|10ms|100ms|10s|1min|10min|default]设置CC使能/去使能mep<1-"Y1731_MEG_NUM"><1-"Y1731_MEP_NUM">cc[enable|disable]{dstMac<AA:BB:CC:DD:EE:FF>}*1执行LBloopbackmep<1-"Y1731_MEG_NUM"><1-"Y1731_MEP_NUM"><AA:BB:CC:DD:EE:FF>停止LBnoloopbackmep<1-"Y1731_MEG_NUM"><1-"Y1731_MEP_NUM">执行LTlinktracemep<1-"Y1731_MEG_NUM"><1-"Y1731_MEP_NUM"><AA:BB:CC:DD:EE:FF>显示MEGshowmeg显示本地MEPshowmep<1-"Y1731_MEG_NUM"><1-"Y1731_MEP_NUM">显示远端MEPshowmep<1-"Y1731_MEG_NUM"><1-"Y1731_MEP_NUM">remote-mep显示LB结果showloopbackmep<1-"Y1731_MEG_NUM"><1-"Y1731_MEP_NUM">显示LT结果showlinktracemep<1-"Y1731_MEG_NUM"><1-"Y1731_MEP_NUM">[all|last]CC模块描述功能完成ETH-CC功能,在CC使能的情况下,定时的发送CCM,并对收到的CCM帧进行处理。相关源文件序号文件名称描述1CFMcc.cCc功能相关函数数据结构CCM远端MEP状态信息typedefstructcfmCcmDbItem{ u_shortcfmMepDbRMepIdentifier; /*远端MEPID*/ u_charcfmMepDbRdi; /*发送给该远端MEP的CCM帧中携带的RDI标志位的值。当本地MEP检测到连接异常时,如cc周期不正确等,该标志为会被置为1,否则为0*/ u_charcfmMepDbRecvRdi; /接收到的CCM帧中的RDI标志位的值*/ u_charlinkFlag; /*远端连接标志,如果和该远端MEP的链接正常,该标志置为0,否则为1*/ u_charcfmMepDbMacAddress[8]; /*远端MEP的MAC地址,高两个字节保留,始终为0*/ u_intrevcdCcmNum; /*从该远端MEP收到的CCM帧的个数*/ u_intlastRevcdCcmTick; /*最后一次从该远端MEP接受到的CCM帧的时间,用TICK数表示*/ u_longtick; /*创建该远端MEP节点的时间,用TICK数表示*/ tOAMTimerrecvdCcmTimer; /*CCM接收定时器,收到CCM帧时,重置定时器,如果定时器超时,则判断和该远端MEP连接中断*/ u_charstatus; /*远端MEP类型,1为静态,1为动态,静态远端MEP永久存在,动态远端MEP每隔一段时间(默认10分钟)会老化*/ u_charrecCcmTimerEnabled; /*CCM接收定时器状态,1表示定时器已经启动,0表示没有启动,只有使能CC功能后,接收定时器才启动*/ void*pParent; /*指向远端MEP所在的MA*/}tCfmCcmDbItem;本地MEP的远端MEP列表typedefstructcfmMepDbTable{ u_intcfmMdIndex; /*本地MEP所属的MDIndex*/ u_intcfmMaIndex; /*本地MEP所属的MAIndex*/ u_shortcfmMepIdentifier; /*本地MEP的MEPID*/ void*pParent; /*指向本地MEP所属的MA的地址*/ void*pMep; /*指向本地MEP信息的存储地址*/ LISTrmepList; /*远端MEP列表*/}tCfmCcmDbTable;全局变量远端MEP管理列表LIST gCcDbList; 每一个本地MEP都有一个远端MEP列表,所有的远端MEP存储与一个二维单向列表中,存储形式如下:其中,每一个本地MEP都有一个相应的tCfmCcmDbTable,每一个远端MEP都有一个相应的tCfmCcmDbItem。程序逻辑处理接收的CCM帧使能CC功能去使能CC功能CC发送定时器超时处理CC接收定时器超时处理主要函数定义构造Y1731标准的CCM帧intY1731FormCcm(tCfmMep*pMepNode,M_BLK_IDmblk)功能:根据mep的参数,构造Y1731标准的CCM帧,将构造好的帧存入mblk中。输入参数:pMepNode:指向mep的指针;输出参数:mblk:存放构造好的CCM帧;返回值:如果pMepNode指向为空地址,或者mblkbuf的空间不够,返回ERROR,否则返回OK;构造标准的CCM帧intCfmFormCcm(tCfmMep*pMepNode,M_BLK_IDmblk)功能:根据mep的参数,构造标准的CCM帧,将构造好的帧存入mblk中。输入参数:pMepNode:指向mep的指针;输出参数:mblk:存放构造好的CCM帧;返回值:如果pMepNode指向为空地址,或者mblkbuf的空间不够,返回ERROR,否则返回OK;处理本地MEP收到的CCM帧intcfmRecvCcmInMep(END_OBJ*pEnd,M_BLK_IDmblk,u_shortvlanId)功能:处理收到的CCM帧,并根据帧中的内容,刷新远端MEP列表的信息,对于非法的CCM帧,产生相应的告警。输入参数:pEnd:指向接收CCM帧的端口;mblk:存放接收到的CCM帧;vlanId:CCM帧中携带的VLAN;输出参数:返回值:如果收到的CCM帧中包含错误的信息,则返回ERROR,否则返回OK;处理接收到的CCM帧intcfmRecvCcm(END_OBJ*pEnd,M_BLK_IDmblk,u_shortvlanId)功能:对收到的CCM帧进行分析,根据帧中的携带的VLAN,LEVEL信息查找本地MP,如果找到相应的DOWNMEP,则调用cfmRecvCcmInMep函数进行处理,否则忽略该CCM帧。输入参数:pEnd:指向接收CCM帧的端口;mblk:存放接收到的CCM帧;vlanId:CCM帧中携带的VLAN;输出参数:返回值:如果CCM帧错误或者找不到对应的DOWNMEP,返回ERROR,否则返回OK;发送CCM帧intcfmSendCcm(tCfmMep*pMepNode)功能:根据mep的参数,调用FormCcm函数构造CCM帧,然后调用OAM帧收发模块的接口将该CCM帧发送出去,发送成功后,启动该MEP的CC发送定时器。输入参数:pMepNode:指向mep的指针;输出参数:返回值:如果构造失败或者发送失败,返回ERROR,否则返回OK;使能CC功能intenableCc(tCfmMep*pMepNode,char*dstMacAddr)功能:根据mep的参数,使能改MEP对应的远端MEP列表中所有成员的CC接收定时器,然后调用cfmSendCcm函数,发送CCM帧并启动CC发送定时器。输入参数:pMepNode:指向mep的指针;dstMacAddr:CCM发送的目的MAC地址,可以为单薄,也可以为组播;输出参数:返回值:如果MEP参数错误,返回ERROR,否则返回OK;去使能CC功能intdisableCc(tCfmMep*pMepNode)功能:根据mep的参数,去使能该MEP的CC发送定时器,并将该MEP对应的所有远端MEP的CC接收定时器去使能。输入参数:pMepNode:指向mep的指针;返回值:如果MEP参数错误,返回ERROR,否则返回OK;增加远端MEPintwriteCcmDatebase(u_intmdIndex,u_intmaIndex,tCfmIfMep*mepPtr,u_shortrMepId,u_char*mac)功能:向远端MEP列表中添加一个新的远端MEP节点。输入参数:mdIndex:MEP所在MD的索引号;maIndex:MEP所在MA的索引号;mepPtr:指向本地MEP;rMepId:远端MEPID;mac:远端MEP的MAC地址;输出参数:返回值:如果找不到对应的本地MEP节点,返回ERROR,否则返回OK;刷新远端MEPintupdateCcmDatebase(tCfmCcmDbItem*pRMep,tCfmMaNet*pMa,tCfmIfMep*pifMepNode)功能:刷新远端MEP的状态,主要是根据CC使能标志,重启远端MEP的接收定时器,进行连通性检查。输入参数:pRMep:指向远端MEP;pMa:指向本地MEP所在的MA;pifMepNode:指向本地MEP;输出参数:返回值:如果找不到对应的远端MEP,返回ERROR,否则返回OK;删除远端MEPintdeleteCcmDatabase(u_intmdIndex,u_intmaIndex,u_shortmepId,u_shortrMepId,intflag)功能:根据传入的参数,在远端MEP列表中删除相应的远端MEP节点。输入参数:mdIndex:MEP所在MD的索引号;maIndex:MEP所在MA的索引号;mepId:本地MEPID;rMepId:远端MEPID;flag:保留,暂不使用;返回值:如果找不到对应的远端MEP,返回ERROR,否则返回OK;LB模块描述功能该模块完成ETH-LB功能,包括使能LB时定时的发送一定数量的LBM消息,并对收到的LBR进行处理,同时LB模块还需要对收到的LBM进行合法性判断,对于合法的LBM应答相应的LBR;相关源文件序号文件名称描述1CFMlb.cLb功能相关函数数据结构LBM消息typedefstructLoopBackMsg{ u_charindex; /*节点索引号*/ u_chartimeOut; /*LB超时时间,如果过了超时时间还没有收到LBR,则认为LBR丢失,然后开始下一次的LBM发送*/ u_shortdataLen; /*LBM帧的长度*/ M_BLK_IDloopBackMsg; /*LBM帧内容存放的地址*/ u_shortLBMHdrOffset; /*LBM帧头部的长度*/ u_shortstate; /*LB节点使用标志,1标志该节点正在被使用,0表示该节点空闲*/ tOsixQIdlbQid; /*LBR队列,用于存放收到的LBR*/ u_shortsendLBMNum; /*LBM发送的次数*/ u_shortlbrReceived; /*LBR接收到的个数*/ u_intnextLbmTransID; /*下一个LBM的transId,每发送一个LBM,transId加一*/ u_intexpectedLbrTransID;/*预期的LBR的transId,用于匹配LBM和LBR*/ u_chartargetMacAddr[6];/*LBM的目的MAC地址*/ tCfmMep*pMep; /*指向使用该节点发送LBM的MEP*/ intlbTaskId; /*执行LB功能的任务ID,每次使能LB功能时都会创建一个临时的任务用于发送LBM和匹配LBR,当LB执行完成后,任务结束*/}tCfmLBMsg;LBR消息typedefstruct{ u_inttransId; /*LBR携带的transId,用于匹配相应的LBM*/ u_charsrcMacAddr[6]; /*LBR帧的源地址*/}LbrMsg;全局变量LB节点集tCfmLBMsgloopbackMsg[MAX_LOOPBACK_MSG]; 模块维护一个全局的LB节点集,组织方式为数组,大小为MAX_LOOPBACK_MSG(5)。当有MEP需要执行LB功能时,会从节点集中选取一个空闲的节点,将该节点的使用标志置为1,然后使用该节点进行LB的操作,当本次LB操作完成后,释放该节点。如果没有空闲节点,则本次LB功能执行失败。程序逻辑启动LB功能处理接收的LBR停止LB功能处理接收的LBM主要函数定义构造LBM帧intcfmFormLbm(tCfmLBMsg*pLbMsg,tCfmLbmHeader*pLbmHeader)功能:根据pLbMsg的参数,构造LBM帧,将构造好的帧存入pLbMsg的buf中。输入参数:pMepNode:指向mep的指针;输出参数:pLbmHeader:存放构造好的LBM帧的帧头信息;返回值:如果pLbMsg指向为空地址,或者buf的空间不够,返回ERROR,否则返回OK;处理MEP收到的LBM帧intcfmRecvdLbm(END_OBJ*pEnd,M_BLK_IDmblk,u_shortvlanId)功能:处理收到的LBM帧,并根据帧中的内容,对合法的LBM帧响应LBR,对非法的LBM帧丢弃。输入参数:pEnd:指向接收LBM帧的端口;mblk:存放接收到的LBM帧;vlanId:LBM帧中携带的VLAN;输出参数:返回值:如果收到的LBM帧中包含错误的信息,则返回ERROR,否则返回OK;启动MEP的LB功能intcfmLbStart(tCfmMep*pMepNode)功能:获取空闲的LB节点,初始化LB节点和LB任务。输入参数:pMepNode:指向mep的指针;输出参数:返回值:如果没有空闲节点或和节点初始化失败,返回ERROR,否则返回OK;停止MEP的LB功能intcfmLbStop(tCfmMep*pMepNode)功能:停止mep正在运行的LB功能,释放相应的LB节点。输入参数:pMepNode:指向mep的指针;输出参数:返回值:如果mep指针无效,返回ERROR,否则返回OK;初始化LB节点intlbMsgInit(tCfmLBMsg*pLbMsg,u_charindex,tCfmMep*pMepNode)功能:初始化LB节点,包括LBR接收队列的初始化以及LB任务的初始化。输入参数:pLbMsg:指向LB节点的指针;index:LB节点在LB节点集中的位置;pMepNode:指向mep的指针;输出参数:返回值:如果初始化节点失败,返回ERROR,否则返回OK;释放LB节点intlbMsgDeInit(tCfmLBMsg*pLbMsg)功能:释放LB节点资源,包括LBR的接收队列,以及LB任务。输入参数:pLbMsg:指向LB节点的指针;输出参数:返回值:如果pLbMsg为空,返回ERROR,否则返回OK;处理MEP收到的LBR帧intcfmRecvdLbr(END_OBJ*pEnd,M_BLK_IDmblk,u_shortvlanId)功能:处理收到的LBR帧,并根据帧中的内容,对合法的LBR帧发送到相应LB节点的LBR队列中,对非法的LBR帧丢弃。输入参数:pEnd:指向接收LBR帧的端口;mblk:存放接收到的LBR帧;vlanId:LBR帧中携带的VLAN;输出参数:返回值:如果收到的LBR帧中包含错误的信息或则找不到对应的LB节点,则返回ERROR,否则返回OK;发送LBM帧intcfmSendLbm(tCfmLBMsg*pLbMsg)功能:根据pLbMsg中的参数,发送一定数量的LBM消息,并对收到的LBR或者超时事件进行处理。输入参数:pLbMsg:指向LB节点的指针;输出参数:返回值:如果发送LBM失败,则返回ERROR,否则返回OK;LT模块描述功能该模块完成ETH-LT功能,包括使能LT时,发送一个LTM消息,然后对收到的LTR进行处理,同时LT模块还需要对收到的LTM进行合法性判断,对于合法的LTM应答相应的LTR;相关源文件序号文件名称描述1CFMlt.cLt功能相关函数数据结构LT节点typedefstructCfmLtr{ u_intcfmMdIndex; /*所属MEP的MDIndex*/ u_intcfmMaIndex; /*所属MEP的MAIndex*/ u_shortcfmMepid; /*所属MEP的MEPID*/ u_chartimeOut; /*LT的超时时间,发送LTM后,等待timeOut,超时后,对后续收到的LTR直接丢弃*/ u_shortdataLen; /*LTM帧的长度*/ u_intexpectedLtrTransID;/*LTM帧中携带的transId,返回的LTR必须携带同样的transId,否则视为非法的LTR*/ u_charltmHderOffset; /*LTM帧头部的长度*/ M_BLK_IDlinktraceMsg; /*保存LTM帧的buf*/ tOsixQIdltQid; /*接收LTR的消息队列*/ u_inttick; /*该LT节点的创建时间,LT节点有老化机制,目前默认的是LT节点创建10分钟后,会自动老化释放*/ intltTaskId; /*处理LT的任务ID,启动MEP的LT功能后,会创建一个临时的任务用来执行相应的LT操作,操作完成后,任务自动释放*/ chartargetMacAddr[6]; /*LTM的目标MAC地址*/ u_charttl; /*LTM帧中的最大跳数*/ tCfmMep*pMep; /*所属MEP的指针*/ LISTltrInfoList; /*收到的与该LTM对应的LTR列表,一个LTM可能会对应多个LTR*/}tCfmLtr;LTR信息typedefstructCfmLtrInfo{ u_intcfmLtrReceiveOrder; /*LTR在LTM的LTR列表中的顺序,按收到的先后顺序递增*/ u_charcfmLtrTtl; /*LTR消息携带的TTL*/ u_charcfmLtrForwarded; /*LTR消息中携带的转发标志:1yes0no*/ u_charcfmLtrTerminalMep; /*LTR消息携带的目的MEP标志:1yes0no*/ u_charcfmLtrLastEgressIdentifier[8];/*LTR中携带的LastEgress字段,标识入端口的信息,通常为M

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论