📄 mplsfun.c
字号:
mplsLdpAtmSessionEntry[num3].ifIndex = sessionData.req.set.ifIndex;
mplsLdpAtmSessionEntry[num3].lowerVpi =
sessionData.req.set.LdpLblRng.atmlblrnglist[0].flags.flags.minVpi;
mplsLdpAtmSessionEntry[num3].lowerVci =
sessionData.req.set.LdpLblRng.atmlblrnglist[0].flags.flags.minVci;
mplsLdpAtmSessionEntry[num3].UpperVpi =
sessionData.req.set.LdpLblRng.atmlblrnglist[0].flags.flags.maxVpi;
mplsLdpAtmSessionEntry[num3].UpperVci =
sessionData.req.set.LdpLblRng.atmlblrnglist[0].flags.flags.maxVci;
mplsLdpAtmSessionEntry[num3].module = module;
}
else if(sessionData.req.set.lblflag==IF_TYPE_FR)
{
;
}
/* 写HELLO表的connect */
num1 = arrayLen[NOADJACENCY];
for(num2=0; num2<num1; num2++)
{
if(mplsLdpSessionEntry[num].ifIndex == mplsLdpHelloAdjacencyEntry[num2].ifIndex &&
mplsLdpSessionEntry[num].ifName.module == mplsLdpHelloAdjacencyEntry[num2].ifName.module)
{
mplsLdpHelloAdjacencyEntry[num2].connect = mplsLdpSessionEntry[num].connect;
break;
}
}
}
else if(sessionData.operateType==MPLS_OAM_SEARCH)
{ ; }
else
{
for(num1=0; num1<num; num1++)
{
/*2004-6-5 lixia 修改匹配条件,防止删除错误*/
if(mplsLdpSessionEntry[num1].ifName.module == module &&
mplsLdpSessionEntry[num1].ifIndex == sessionData.req.set.ifIndex&&
mplsLdpSessionEntry[num1].entityLdpId.labelSpace == sessionData.req.set.entityLdpId.labelSpace&&
mplsLdpSessionEntry[num1].peerLdpId.labelSpace == sessionData.req.set.peerLdpId.labelSpace)
// if(mplsLdpSessionEntry[num1].ifName.module == module &&
/*mplsLdpSessionEntry[num1].ifIndex == sessionData.req.del.ifIndex)*/
// mplsLdpSessionEntry[num1].ifIndex == sessionData.req.set.ifIndex)
{
for( ; num1<num-1; num1++)
{
mplsLdpSessionEntry[num1]=mplsLdpSessionEntry[num1+1];
}
if(arrayLen[NOSESSION]>0)
arrayLen[NOSESSION]--;
MPLS_MEMSET(&mplsLdpSessionEntry[num-1],0,sizeof(MplsLdpSessionTable_t));
break;
}
}
}
/* 暂时不回
sessionAck.result = OAM_MPLS_RCV;
mplsLdpOamData.msg = MPLS_MIB_LDP_SESSION;
mplsLdpOamData.data.ssnDataAck = sessionAck;
ASEND(MPLS_LDP_OAM_MESSAGE,&mplsLdpOamData,sizeof(MIB_LDP_SESSION_ACK)+100,sendPid);
*/
}
/*********************************************************************************
* 函 数 名: mplsPeerRecv()
* 功 能: 接收peer数据
* 输 入: sPid: 发送方的PID
* data: 接收的数据
* 输 出: 无
* 返 回: 无
* 全局变量: mplsInterfaceConfEntry 、MplsPortDataTable1
* 修改记录:
- 修改日期 版本 修 改 人 修改原因及内容
=========================================================
- 2001-8-14 2.1.2 孙保平 创建
*********************************************************************************/
void mplsPeerRecv(mplsOAMLdpMessage_t *data)
{
/*PID *sendPid;*/
int i;
ushort num;
ushort num1;
ushort num2,num3;
ushort moduleNum,portNum;
ulong timeh;
MIB_LDP_PEER_REQ peerData;
MIB_LDP_PEER_ACK peerAck;
uchar module;
/* mplsOAMLdpMessage_t mplsLdpOamData; */
/*sendPid = sPid; */
num = arrayLen[NOPEER];
peerData = data->data.peerDataReq;
num3 = num;
/*MPLS_MEMCPY(peerData, data,sizeof(MIB_LDP_PEER_REQ));*/
module = mplsGetModuleDynamic(peerData.req.set.ldpId,peerData.req.set.ifIndex);
if(module == MPLS_MODULE_ERROR)
{
// #if _MPLS_DEBUG
DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_SESSION,"======mplsPeerRecv,ldp to OAM ldp entity stats module error=======\n ");
printf("======peer,ldp to OAM ldp entity stats module error=======");
// #endif
return;
}
if(peerData.operateType==MPLS_OAM_SETUP)
{
for(num1=0; num1<num3; num1++)
{
/*2004-6-5 lixia 修改匹配条件,防止增加错误,覆盖原来正确的*/
if((mplsLdpPeerEntry[num1].peerLdpId.lsrAddress == peerData.req.set.ldpId.lsrAddress)&&
(mplsLdpPeerEntry[num1].peerLdpId.labelSpace == peerData.req.set.ldpId.labelSpace)&&
(peerData.req.set.ifIndex==mplsLdpPeerEntry[num1].ifIndex)&&
module==mplsLdpPeerEntry[num1].ifName.module )
// if(peerData.req.set.ifIndex==mplsLdpPeerEntry[num1].ifIndex &&
// module==mplsLdpPeerEntry[num1].ifName.module )
{
num = num1;
break;
}
}
for(i = 0; i < arrayLen[NOSESSION]; i++)
{
if(mplsLdpSessionEntry[i].peerLdpId.lsrAddress == peerData.req.set.ldpId.lsrAddress &&
mplsLdpSessionEntry[i].peerLdpId.labelSpace == peerData.req.set.ldpId.labelSpace)
{
mplsLdpPeerEntry[num].entityLdpId = mplsLdpSessionEntry[i].entityLdpId;
break;
}
}
mplsLdpPeerEntry[num].entityindex = peerData.req.set.index;
mplsLdpPeerEntry[num].ifIndex = peerData.req.set.ifIndex;
mplsLdpPeerEntry[num].peerLdpId = peerData.req.set.ldpId;
mplsLdpPeerEntry[num].state = OPERATIONAL;
mplsLdpPeerEntry[num].peerlabeldistributionmethod = peerData.req.set.labelDistributionMethod;
mplsLdpPeerEntry[num].peerloopdetectionforpv = peerData.req.set.loopDetectionForPV;
mplsLdpPeerEntry[num].peerpathvectorlimit = peerData.req.set.pathVectorLimit;
/* 填connect of peer table in session receive function
num1 = arrayLen[NOSESSION];
for(num2=0; num2<num1; num2++)
{
if(module==mplsLdpSessionEntry[num2].ifName.module &&
peerData.req.set.ifIndex == mplsLdpSessionEntry[num2].ifIndex )
{
mplsLdpPeerEntry[num].connect=mplsLdpSessionEntry[num2].connect;
}
}*/
#if 0/* 注意、保留*/
mplsLdpPeerEntry[num].downstream = peerData.req.set.ldpId;
mplsLdpPeerEntry[num].PIEsSent = peerData.req.set.ldpId;
mplsLdpPeerEntry[num].PIEsRcvd = peerData.req.set.ldpId;
mplsLdpPeerEntry[num].state = peerData.req.set.ldpId;
#endif
#if 0 /* 注意、保留*/
mplsLdpPeerEntry[num].AddressSources = peerData.req.set.ldpId;
mplsLdpPeerEntry[num].LdpIdent = peerData.req.set.ldpId;
mplsLdpPeerEntry[num].entityLdpId = peerData.req.set.ldpId;
mplsLdpPeerEntry[num].entityLdpId = peerData.req.set.ldpId;
mplsLdpPeerEntry[num].entityLdpId = peerData.req.set.ldpId;
mplsLdpPeerEntry[num].entityLdpId = peerData.req.set.ldpId;
mplsLdpPeerEntry[num].entityLdpId = peerData.req.set.ldpId;
#endif
if(num==num3)
CURRENT_TIME(&timeh,&mplsLdpPeerEntry[num].oldtime); /* = glue_now();*/
mplsLdpPeerEntry[num].ifName.module = module;
for(moduleNum=0; moduleNum<MplsPortDataTable1.num; moduleNum++)
{
if(module==MplsPortDataTable1.mplsModule[moduleNum].module )
{
for(portNum=0; portNum<MplsPortDataTable1.mplsModule[moduleNum].num; portNum++)
{
if(peerData.req.set.ifIndex==MplsPortDataTable1.mplsModule[moduleNum].portData[portNum].ifIndex)
{
mplsLdpPeerEntry[num].ifName.port=MplsPortDataTable1.mplsModule[moduleNum].portData[portNum].port;
break;
}
}
break;
}
}
if(num==num3)
arrayLen[NOPEER]++;
}
else if(peerData.operateType==MPLS_OAM_SEARCH)
{ ; }
else
{
for(num1=0; num1<num; num1++)
{
/*2004-6-5 lixia 修改匹配条件,防止删除错误*/
if((mplsLdpPeerEntry[num1].peerLdpId.lsrAddress == peerData.req.set.ldpId.lsrAddress)&&
(mplsLdpPeerEntry[num1].peerLdpId.labelSpace == peerData.req.set.ldpId.labelSpace)&&
(peerData.req.set.ifIndex==mplsLdpPeerEntry[num1].ifIndex)&&
module==mplsLdpPeerEntry[num1].ifName.module)
/* labelspace就是ifIndex 2001-11-27 */
// if(peerData.req.set.ifIndex==mplsLdpPeerEntry[num1].ifIndex &&
/* (peerData.req.del.labelSpace==mplsLdpPeerEntry[num1].ifIndex && */
// module==mplsLdpPeerEntry[num1].ifName.module )
{
for(;num1<num-1; num1++)
{
mplsLdpPeerEntry[num1]=mplsLdpPeerEntry[num1+1];
}
MPLS_MEMSET(&mplsLdpPeerEntry[num-1],0,sizeof(mplsLdpPeerTable_t));
if(arrayLen[NOPEER] >0)
arrayLen[NOPEER]--;
break;
}
}
}
/* 暂时不回
peerAck.result = OAM_MPLS_RCV;
mplsLdpOamData.msg = MPLS_MIB_LDP_PEER;
ASEND(MPLS_LDP_OAM_MESSAGE,&mplsLdpOamData,sizeof(MIB_LDP_PEER_ACK)+100,sendPid);
*/
}
/*********************************************************************************
* 函 数 名: mplsEntityStatsRecv()
* 功 能: 接收Entity Stats数据
* 输 入: sPid: 发送方的PID
* data: 接收的数据
* 输 出: 无
* 返 回: 无
* 全局变量: mplsInterfaceConfEntry 、MplsPortDataTable1
* 修改记录:
- 修改日期 版本 修 改 人 修改原因及内容
=========================================================
- 2001-8-14 2.1.2 孙保平 创建
*********************************************************************************/
void mplsEntityStatsRecv(mplsOAMLdpMessage_t *data)
{
/* PID *sendPid; */
ushort num;
ushort num1;
ushort num2;
ushort num3,num4;
uchar cardType,module;
ushort moduleNum,portNum;
uchar numFnd;
entityStats_t entityStatData;
/* mplsOAMLdpMessage_t mplsLdpOamData; */
/* sendPid = sPid; */
num = arrayLen[NOENTITYSTATS];
num1 = num1;
entityStatData = data->data.entityStatsData;
for(num2=0; num2<entityStatData.num; num2++)
{
numFnd = 0;
module = mplsGetModuleDynamic(entityStatData.entity[num2].entityLdpId,entityStatData.entity[num2].ifIndex);
if(module == MPLS_MODULE_ERROR)
{
#if _MPLS_DEBUG
DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_SESSION,"======mplsEntityStatsRecv,ldp to OAM ldp entity stats module error=======\n ");
printf("======ldp to OAM ldp entity stats module error=======");
#endif
continue;
}
for(num4=0; num4<num; num4++)
{
if(entityStatData.entity[num2].ifIndex == mplsLdpEntityStatsEntry[num4].ifIndex&&
module == mplsLdpEntityStatsEntry[num4].ifName.module)
{ /* 已存在的统计信息的变化,则更新 */
num1=num4;
numFnd = 1;
}
}
if(numFnd==1)
{
mplsLdpEntityStatsEntry[num1].attemptedsessions = entityStatData.entity[num2].attemptedsessions;
mplsLdpEntityStatsEntry[num1].sessionrejectednohelloerrors = entityStatData.entity[num2].sessionrejectednohelloerrors;
mplsLdpEntityStatsEntry[num1].sessionrejectedadvertisementerrors = entityStatData.entity[num2].sessionrejectedadvertisementerrors;
mplsLdpEntityStatsEntry[num1].sessionrejectedmaxpduerrors = entityStatData.entity[num2].sessionrejectedmaxpduerrors;
mplsLdpEntityStatsEntry[num1].sessionrejectedlabelrangeerrors = entityStatData.entity[num2].sessionrejectedlabelrangeerrors;
mplsLdpEntityStatsEntry[num1].badldpidentifiererrors = entityStatData.entity[num2].badldpidentifiererrors;
mplsLdpEntityStatsEntry[num1].badpdulengtherrros = entityStatData.entity[num2].badpdulengtherrros;
mplsLdpEntityStatsEntry[num1].badmessagelengtherrors = entityStatData.entity[num2].badmessagelengtherrors;
mplsLdpEntityStatsEntry[num1].badtlvlengtherrors = entityStatData.entity[num2].badtlvlengtherrors;
mplsLdpEntityStatsEntry[num1].malformedtlvvalueErrors = entityStatData.entity[num2].malformedtlvvalueErrors;
mplsLdpEntityStatsEntry[num1].KeepAliveTimerExpiredErrors = entityStatData.entity[num2].KeepAliveTimerExpiredErrors;
mplsLdpEntityStatsEntry[num1].ShutdownNotifReceived = entityStatData.entity[num2].ShutdownNotifReceived;
mplsLdpEntityStatsEntry[num1].ShutdownNotifSent = entityStatData.entity[num2].ShutdownNotifSent;
}
/* 该实体的统计信息不存在,则加入 */
#if 0 /* 实体信息不在,报上为错误,不用加入 */
else
{
mplsLdpEntityStatsEntry[num] = entityStatData.entity[num2];
mplsLdpEntityStatsEntry[num].ifName.module = module;
for(moduleNum=0; moduleNum<MplsPortDataTable1.num; moduleNum++)
{
if(module==MplsPortDataTable1.mplsModule[moduleNum].module )
{
cardType = MplsPortDataTable1.mplsModule[moduleNum].cardType;
for(portNum=0; portNum<MplsPortDataTable1.mplsModule[moduleNum].num; portNum++)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -