📄 mplsfun.c
字号:
- 2001-8-14 2.1.2 孙保平 创建
*********************************************************************************/
void mplsHelloRecv(mplsOAMLdpMessage_t *data)
{
/*PID *sendPid;*/
ushort num;
ushort num1;
ushort num2;
ushort num3,num4;
ushort moduleNum,portNum;
MIB_LDPHELLO_REQ helloData;
MIB_LDPHELLO_ACK helloAck;
uchar module;
/* mplsOAMLdpMessage_t mplsLdpOamData; */
/*sendPid = sPid;*/
helloData = data->data.helloDataReq;
num = arrayLen[NOADJACENCY];
num3 = num;
module = mplsGetModuleDynamic(helloData.req.set.entityLdpId,helloData.req.set.ifIndex);
if(module == MPLS_MODULE_ERROR)
{
// #if _MPLS_DEBUG
DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_SESSION,"======mplsHelloRecv,ldp to OAM ldp entity stats module error=======\n ");
printf("======hello,ldp to OAM ldp entity stats module error=======");
// #endif
return;
}
if(helloData.operateType==MPLS_OAM_SETUP)
{
/*2004-6-5 lixia dele it,when setting up,it's new and needn't find */
/*for(num4=0;num4<num3;num4++)
{
if(mplsLdpHelloAdjacencyEntry[num4].ifIndex == helloData.req.set.ifIndex &&
mplsLdpHelloAdjacencyEntry[num4].ifName.module == module)
{
num = num4;
break;
}
}*/
mplsLdpHelloAdjacencyEntry[num].entityLdpId = helloData.req.set.entityLdpId;
mplsLdpHelloAdjacencyEntry[num].entityindex = helloData.req.set.index;
mplsLdpHelloAdjacencyEntry[num].ifIndex = helloData.req.set.ifIndex;
mplsLdpHelloAdjacencyEntry[num].peerLdpId = helloData.req.set.peerLdpId;
mplsLdpHelloAdjacencyEntry[num].adjacencyindex = helloData.req.set.sessionIndex;
mplsLdpHelloAdjacencyEntry[num].adjacencyholdtimeremaining
= helloData.req.set.holdTimeRemaining;
mplsLdpHelloAdjacencyEntry[num].adjacencytype = helloData.req.set.helloType;
mplsLdpHelloAdjacencyEntry[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(helloData.req.set.ifIndex==MplsPortDataTable1.mplsModule[moduleNum].portData[portNum].ifIndex)
{
mplsLdpHelloAdjacencyEntry[num].ifName.port=MplsPortDataTable1.mplsModule[moduleNum].portData[portNum].port;
break;
}
}
break;
}
}
/* connect 在收到session消息时填 */
num1 = arrayLen[NOSESSION];
for(num2=0; num2<num1; num2++)
{
if(module==mplsLdpSessionEntry[num2].ifName.module &&
helloData.req.set.ifIndex == mplsLdpSessionEntry[num2].ifIndex )
{
mplsLdpHelloAdjacencyEntry[num].connect=mplsLdpSessionEntry[num2].connect;
}
}
if(num==num3)
arrayLen[NOADJACENCY]++;
}
else if(helloData.operateType==MPLS_OAM_SEARCH)
{ ;}
else
{
for(num1=0;num1<num;num1++)
{
/*2004-6-5 lixia 修改匹配条件,防止删除错误*/
if((mplsLdpHelloAdjacencyEntry[num1].entityLdpId.lsrAddress == helloData.req.set.entityLdpId.lsrAddress) &&
( mplsLdpHelloAdjacencyEntry[num1].entityLdpId.labelSpace == helloData.req.set.entityLdpId.labelSpace) &&
( mplsLdpHelloAdjacencyEntry[num1].ifIndex == helloData.req.set.ifIndex) &&
( mplsLdpHelloAdjacencyEntry[num1].peerLdpId.lsrAddress == helloData.req.set.peerLdpId.lsrAddress) &&
( mplsLdpHelloAdjacencyEntry[num1].peerLdpId.labelSpace == helloData.req.set.peerLdpId.labelSpace)&&
(mplsLdpHelloAdjacencyEntry[num1].ifName.module == module))
// if(mplsLdpHelloAdjacencyEntry[num1].ifIndex == (ushort)helloData.req.set.ifIndex &&
/* (mplsLdpHelloAdjacencyEntry[num1].ifIndex == (ushort)helloData.req.del.helloIndex && */
// mplsLdpHelloAdjacencyEntry[num1].ifName.module == module)
{
for(num2=num1; num2<num-1; num2++)
{
mplsLdpHelloAdjacencyEntry[num2]=mplsLdpHelloAdjacencyEntry[num2+1];
}
MPLS_MEMSET(&mplsLdpHelloAdjacencyEntry[num2],0,sizeof(mplsLdpHelloAdjacencyTable_t));
if(arrayLen[NOADJACENCY]>0)
arrayLen[NOADJACENCY]--;
break;
}
}
}
/* 暂时不回
helloAck.result = OAM_MPLS_RCV;
mplsLdpOamData.msg = MPLS_MIB_LDP_HELLO;
mplsLdpOamData.data.helloDataAck = helloAck;
ASEND(MPLS_LDP_OAM_MESSAGE,&mplsLdpOamData,sizeof(MIB_LDPHELLO_ACK)+40,sendPid);
*/
}
/*********************************************************************************
* 函 数 名: mplsSessionRecv()
* 功 能: 接收session数据
* 输 入: sPid: 发送方的PID
* data: 接收的数据
* 输 出: 无
* 返 回: 无
* 全局变量: mplsInterfaceConfEntry 、MplsPortDataTable1
* 修改记录:
- 修改日期 版本 修 改 人 修改原因及内容
=========================================================
- 2001-8-14 2.1.2 孙保平 创建
*********************************************************************************/
void mplsSessionRecv(mplsOAMLdpMessage_t *data)
{
/* PID *sendPid;*/
ushort num;
ushort num1;
ushort num2,num3,num4,num5;
ushort portNum,moduleNum;
ulong timeh;
MIB_LDP_SESSION_REQ sessionData;
MIB_LDP_SESSION_ACK sessionAck;
uchar module;
/* mplsOAMLdpMessage_t mplsLdpOamData; */
num = arrayLen[NOSESSION];
num5 = num;
sessionData = data->data.ssnDataReq;
/*sendPid = sPid;*/
module = mplsGetModuleDynamic(sessionData.req.set.entityLdpId,sessionData.req.set.ifIndex);
if(module == MPLS_MODULE_ERROR)
{
// #if _MPLS_DEBUG
DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_SESSION,"======mplsSessionRecv,ldp to OAM ldp entity stats module error=======\n ");
printf("======session,ldp to OAM ldp entity stats module error=======");
// #endif
temperror = 1;
return;
}
temperror = 0;
if(sessionData.operateType==MPLS_OAM_SETUP)
{
for(num4=0; num4<num5; num4++)
{
/*2004-6-5 lixia 修改匹配条件,防止增加错误,覆盖原来正确的*/
if(mplsLdpSessionEntry[num4].ifName.module == module &&
mplsLdpSessionEntry[num4].ifIndex == sessionData.req.set.ifIndex&&
mplsLdpSessionEntry[num4].entityLdpId.labelSpace == sessionData.req.set.entityLdpId.labelSpace&&
mplsLdpSessionEntry[num4].peerLdpId.labelSpace == sessionData.req.set.peerLdpId.labelSpace) /*2004-5-18 lixia add*/
{
num = num4;
break;
}
}
/* 如果是刷新,并且session index不同,也更新session建立时间。hyh 2003.1.19 */
if(num==num5)
CURRENT_TIME(&timeh,&mplsLdpSessionEntry[num].discontinuitytime);
else if(mplsLdpSessionEntry[num].index != sessionData.req.set.index)
CURRENT_TIME(&timeh,&mplsLdpSessionEntry[num].discontinuitytime);
mplsLdpSessionEntry[num].entityLdpId = sessionData.req.set.entityLdpId;
mplsLdpSessionEntry[num].peerLdpId = sessionData.req.set.peerLdpId;
mplsLdpSessionEntry[num].index = sessionData.req.set.index;
mplsLdpSessionEntry[num].ifIndex = sessionData.req.set.ifIndex;
mplsLdpSessionEntry[num].state = sessionData.req.set.state;
mplsLdpSessionEntry[num].protocolversion = sessionData.req.set.protocolVersion;
mplsLdpSessionEntry[num].keepaliveholdtimeremaining
= sessionData.req.set.keepAliveHoldTimeRemaining;
mplsLdpSessionEntry[num].maxpdulength = sessionData.req.set.maxPduLength;
/* 注意*/
/* if(num==num5)
CURRENT_TIME(&timeh,&mplsLdpSessionEntry[num].discontinuitytime); */
mplsLdpSessionEntry[num].role = sessionData.req.set.role;
mplsLdpSessionEntry[num].vcNumeberdType = sessionData.req.set.vcNumeberdType;
/*
mplsLdpSessionEntry[num].lblRngList[0] = sessionData.req.set.lblRngList[0];
*/
mplsLdpSessionEntry[num].helloArray[0] = sessionData.req.set.helloArray[0];
#if _MPLS_DEBUG
printf("mplsSessionRecv %u",mplsLdpSessionEntry[num].helloArray[0]);
#endif
mplsLdpSessionEntry[num].tcpConRetry = sessionData.req.set.tcpConRetry;
/*
mplsLdpSessionEntry[num].tmidRetry = sessionData.req.set.tmidRetry;
*/
mplsLdpSessionEntry[num].tmidCon = sessionData.req.set.tmidCon;
/*
mplsLdpSessionEntry[num].tmidRel = sessionData.req.set.tmidRel;
mplsLdpSessionEntry[num].mark = sessionData.req.set.mark;
*/
mplsLdpSessionEntry[num].connect.localAddr= sessionData.req.set.localIpaddr;
mplsLdpSessionEntry[num].connect.peerAddr = sessionData.req.set.peerIpaddr;
mplsLdpSessionEntry[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(sessionData.req.set.ifIndex==MplsPortDataTable1.mplsModule[moduleNum].portData[portNum].ifIndex)
{
mplsLdpSessionEntry[num].ifName.port=MplsPortDataTable1.mplsModule[moduleNum].portData[portNum].port;
break;
}
}
break;
}
}
mplsLdpSessionEntry[num].connect.localPort= sessionData.req.set.LocalPort;
mplsLdpSessionEntry[num].connect.peerPort = sessionData.req.set.PeerPort;
#if 0 /* 保留 */
mplsLdpSessionEntry[num].connect.localPort = sessionData.req.set.LocalPort;
mplsLdpSessionEntry[num].connect.peerIfName.module = sessionData.req.set.PeerPort;
mplsLdpSessionEntry[num].connect.peerIfName.port = sessionData.req.set.PeerPort;
mplsLdpSessionEntry[num].connect.peerPort = sessionData.req.set.PeerPort;
#endif
for(moduleNum=0; moduleNum<arrayLen[NOSESTATS]; moduleNum++)
{
if(mplsLdpSessionStatsEntry[moduleNum].ifName.module==mplsLdpSessionEntry[num].ifName.module &&
mplsLdpSessionStatsEntry[moduleNum].ifIndex==mplsLdpSessionEntry[num].ifIndex)
{
mplsLdpSessionStatsEntry[moduleNum].connect = mplsLdpSessionEntry[num].connect;
mplsLdpSessionStatsEntry[moduleNum].peerLdpId = mplsLdpSessionEntry[num].peerLdpId;
break;
}
}
/* 填connect of peer table */
num1 = arrayLen[NOPEER];
for(num2=0; num2<num1; num2++)
{
if(mplsLdpSessionEntry[num].ifName.module==mplsLdpPeerEntry[num2].ifName.module &&
mplsLdpSessionEntry[num].ifIndex == mplsLdpPeerEntry[num2].ifIndex )
{
mplsLdpPeerEntry[num2].connect = mplsLdpSessionEntry[num].connect;
}
}
if(num==num5)
arrayLen[NOSESSION]++;
/* 写ATM SESSION 表,此表保留 */
if(sessionData.req.set.lblflag==IF_TYPE_GENERAL)
{
num3=arrayLen[NOGENSSN];
num5 = num3;
for(num4=0; num4<num5; num4++)
{
if(mplsLdpGeneralSessionEntry[num4].module == module &&
mplsLdpGeneralSessionEntry[num4].ifIndex == sessionData.req.set.ifIndex)
{
num3 = num4;
break;
}
}
if(num5==num3)
arrayLen[NOATMSESSION]++;
mplsLdpGeneralSessionEntry[num3].entityLdpId = sessionData.req.set.entityLdpId;
mplsLdpGeneralSessionEntry[num3].peerLdpId = sessionData.req.set.peerLdpId;
mplsLdpGeneralSessionEntry[num3].entityindex = sessionData.req.set.index;
mplsLdpGeneralSessionEntry[num3].ifIndex = sessionData.req.set.ifIndex;
mplsLdpGeneralSessionEntry[num3].lblRngListmin =
sessionData.req.set.LdpLblRng.genlblrnglist.lblRngListmin;
mplsLdpGeneralSessionEntry[num3].lblRngListmax =
sessionData.req.set.LdpLblRng.genlblrnglist.lblRngListmax;
mplsLdpGeneralSessionEntry[num3].module = module;
}
else if(sessionData.req.set.lblflag==IF_TYPE_ATM)
{
num3=arrayLen[NOATMSESSION];
num5 = num3;
for(num4=0; num4<num5; num4++)
{
if(mplsLdpAtmSessionEntry[num4].module == module &&
mplsLdpAtmSessionEntry[num4].ifIndex == sessionData.req.set.ifIndex)
{
num3 = num4;
break;
}
}
if(num5==num3)
arrayLen[NOATMSESSION]++;
mplsLdpAtmSessionEntry[num3].entityLdpId = sessionData.req.set.entityLdpId;
mplsLdpAtmSessionEntry[num3].peerLdpId = sessionData.req.set.peerLdpId;
mplsLdpAtmSessionEntry[num3].entityindex = sessionData.req.set.index;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -