📄 ldpsess.c
字号:
}
/* 2001/09/04 end */
}
else
{
sndnotifymsgproc(session, MISSPARAMETER,
initMsg->baseMsg.msgId,initMsg->baseMsg.flags.flags.msgType);
return LDP_FALSE;
}
if(session->labelAdvertisement == DOWNSTREAMONDEMAND)
{
if (initMsg->aspExists)
{
/* 协商VC directionality */
if ((initMsg->asp.flags.flags.dir==UNIDIRECTVC)||
(allEntity.entity[mm].atmVcDirectionality==UNIDIRECTVC))
{
if (memcmp(&(session->entityLdpId),&(session->peerLdpId),\
sizeof(mplsLdpId_t)) >0)
session->vcNumeberdType = LDP_ODD;
else
session->vcNumeberdType = LDP_EVEN;
}
if (IntersecLblrng(session,initMsg) == LDP_FALSE)
{
sndnotifymsgproc(session, SREJPARMLBLRNG,
initMsg->baseMsg.msgId,initMsg->baseMsg.flags.flags.msgType);
return LDP_FALSE;
}
}
else
{
sndnotifymsgproc(session, MISSPARAMETER,
initMsg->baseMsg.msgId,initMsg->baseMsg.flags.flags.msgType);
return LDP_FALSE;
}
}
return LDP_TRUE;
}
/* state process functions */
/******************************************************************************/
/*function: ProcessTcpConInd_NON */
/*Author: weng.qing hu.yonghong */
/*decription: */
/* LDP passive role */
/* Transit Session state to INITIALIZED, */
/* Transit Session subState to NONIDLE, */
/******************************************************************************/
void ProcessTcpConInd_NON(mplsLdpSession_t * session)
{
int rtcode;
if(session->role == PASSIVE)
{
/* 置session维持定时器 */
MPLS_SET_TIMER(session->keepAliveHoldTime,
(void *)sessTimeout,
session,
ldptime_q,
session->life_timerid);
/* state transit */
session->state = INITIALIZED;
session->subState = NONIDLE;
}
else
printf("====LDP internal implementation error!!!====");
return;
}
/******************************************************************************/
/*function: TcpConAwaited_ConInd */
/*Author: weng.qing hu.yonghong */
/*decription: */
/* LDP Active role */
/* kill tcp connect timer, delete tcp connect timer */
/* set keepalive maintain timer, insert into timer link table */
/* reset tcp connect retry */
/* Active Role Send Init Msg */
/* Transit state to OPENSENT */
/* Transit state to NONIDLE */
/******************************************************************************/
void TcpConAwaited_ConInd(mplsLdpSession_t * session)
{
unsigned short ii;
tmidSes_t aa;
short ss;
int rtcode;
if(session->role == ACTIVE)
{
/* delete Tcp Timer */
if (session->tmidCon > 0)
{
#ifdef SESSION_DEBUG
#ifdef __BGS10_MPLS_DEBUG
printf("==MODULE:%d DELETE TCP TIMER: tmid:%d==",
selfLdpPid.module,session->tmidCon);
#endif
#endif
MPLS_CLEAR_TIMER(session->tmidCon,ldptime_q,rtcode);
session->tmidCon = 0;
session->tcpConRetry = 0;
}
else
{
printf("====internal implementation error,session tcp timer %d====",
session->tmidCon);
session->subState = SUBIDLE;
return;
}
/* set keepalive maintain timer */
MPLS_SET_TIMER(session->keepAliveHoldTime,
(void *)sessTimeout,
session,
ldptime_q,
session->life_timerid);
session->state = INITIALIZED;
session->subState = NONIDLE;
/* Active role send Init Msg */
ss = SendInitMsg(session);
if ( ss == LDP_FALSE )
{
DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_SESSION,"====Session %d,TcpConAwaited_ConInd,MODULE :%d SEND INITMSG FAIL====\n",session->ifIndex,
selfLdpPid.module);
printf("====Session %d,MODULE :%d SEND INITMSG FAIL====\n",session->ifIndex,
selfLdpPid.module);
}
else
{
#ifdef SESSION_DEBUG
#ifdef __BGS10_MPLS_DEBUG
printf("====MODULE :%d SEND INITMSG ====\n",
selfLdpPid.module);
#endif
#endif
}
session->state = OPENSENT;
session->subState = NONIDLE;
}
}
/******************************************************************************/
/*function: processHelloTimeout */
/*Author: weng.qing hu.yonghong */
/*decription: */
/* kill session tcp relavent timer */
/* kill session maintain timer,delete session maintain timerId */
/* kill session send timer,delete session send timerId */
/* delete peer table */
/* session begin to free tcp */
/******************************************************************************/
void processHelloTimeout(mplsLdpSession_t * session)
{
short ss;
int rtcode;
/*session尚未建好*/
if( (session->state == TCP_CONNECT_AWAITED)||
(session->state == TCP_RELEASE_AWAITED)||
((session->state == NONEXISTENT)&&(session->role == ACTIVE)))
{
/* delete tcp timer */
if( session->tmidCon > 0 )
{
#ifdef SESSION_DEBUG
#ifdef __BGS10_MPLS_DEBUG
printf("========MODULE :%d DELETE TCP Timer; %d =======\n",
selfLdpPid.module,session->tmidCon);
#endif
#endif
MPLS_CLEAR_TIMER(session->tmidCon,ldptime_q,rtcode);
session->tmidCon = 0;
}
else
{
printf("==MODULE :%d internal implementation error, DELETE TCP Timer FAIL==\n",
selfLdpPid.module);
DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_SESSION,"==MODULE :%d internal implementation error, DELETE TCP Timer FAIL==\n",
selfLdpPid.module);
}
}
/* delete & kill keepAlive send timer */
/* delete & kill session maintain timer */
DelTmid(session);
/* now we decide to delete up and downstream control block when receive
RELEASE_IND from TCP */
if(session->state == TCP_RELEASE_AWAITED)
{
FuncSendLost(session);
}
/* first judge TCP_RELEASE_AWAITED state to send Up or down Lost */
if( (session->state == INITIALIZED) ||
(session->state == OPENSENT) ||
(session->state == OPENREC))
{
ProcCloseSes( session, HOLDTIMEEXP,0,0);
}
else if( session->state == OPERATIONAL )
{
ss = delPeerAddrTable(session);
if( ss == LDP_TRUE )
{
#ifdef SESSION_DEBUG
#ifdef __BGS10_MPLS_DEBUG
printf("========MODULE :%d DELETE PEERADDR TABLE =======\n",
selfLdpPid.module);
#endif
#endif
}
else
{
printf("==Session %d,MODULE :%d DELETE PEERADDR TABLE FAIL==\n",session->ifIndex,
selfLdpPid.module);
DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_SESSION,"==Session %d,in processHelloTimeout,MODULE :%d DELETE PEERADDR TABLE FAIL==\n",session->ifIndex,
selfLdpPid.module);
}
/*
now we decide to delete up and downstream control block when receive
RELEASE_IND from TCP
*/
ProcCloseSes( session, HOLDTIMEEXP ,0,0);
}
else
{
/* other state: */
if ( checkSessionHello( session ) != 0 )
{
ProcTcpConRetry(session);
}
}
return;
}
/******************************************************************************/
/*function: procTimeout */
/*Author: weng.qing hu.yonghong */
/*decription: */
/* kill session tcp relavent timer */
/* kill session send timer,delete session send timerId */
/* delete peer table */
/* session begin to free tcp */
/******************************************************************************/
void procTimeout(mplsLdpSession_t * session)
{
short ss;
int rtcode;
/* delete & kill keepAlive send timer */
/* delete keepAlive maintain timer */
DelTmid(session);
if( (session->state == INITIALIZED) ||
(session->state == OPENSENT) ||
(session->state == OPENREC) )
{
processldpstats(SESSATTEMPED, session);
ProcCloseSes(session, KEEPALTIMEEXP,0,0);
}
else if( session->state == OPERATIONAL )
{
ss = delPeerAddrTable(session);
if( ss == LDP_TRUE )
{
#ifdef SESSION_DEBUG
// #ifdef __BGS10_MPLS_DEBUG
printf("========Session %d,MODULE :%d DELETE PEERADDR TABLE =======\n",session->ifIndex,
selfLdpPid.module);
DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_SESSION,"========Session %d,MODULE :%d DELETE PEERADDR TABLE =======\n",session->ifIndex,
selfLdpPid.module);
//#endif
#endif
}
else
{
printf("========Session %d,in procTimeout,MODULE :%d DELETE PEERADDR TABLE FAIL=======\n",session->ifIndex,
selfLdpPid.module);
DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_SESSION,"========Session %d,in procTimeout,MODULE :%d DELETE PEERADDR TABLE FAIL=======\n",session->ifIndex,
selfLdpPid.module);
}
/*
now we decide to delete up and downstream control block when receive
RELEASE_IND from TCP
*/
ProcCloseSes( session, KEEPALTIMEEXP,0,0 );
}
return;
}
/******************************************************************************/
/*function: TcpConAwaited_RelInd */
/*Author: weng.qing hu.yonghong */
/*decription: */
/* kill session tcp relavent timer */
/* Retry tcp connect */
/******************************************************************************/
void TcpConAwaited_RelInd(mplsLdpSession_t * session)
{
int rtcode;
if(session->role == ACTIVE)
{
/* delete Tcp Timer */
if (session->tmidCon > 0)
{
#ifdef SESSION_DEBUG
#ifdef __BGS10_MPLS_DEBUG
printf("========MODULE :%d DELETE TCP Timer; %d =======\n",
selfLdpPid.module,session->tmidCon);
#endif
#endif
MPLS_CLEAR_TIMER(session->tmidCon,ldptime_q,rtcode);
session->tmidCon = 0;
}
else
{
printf("==in TcpConAwaited_RelInd,Session %d,MODULE :%d internal implementation error, DELETE TCP Timer FAIL==\n",session->ifIndex,
selfLdpPid.module);
DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_SESSION,"==in TcpConAwaited_RelInd,Session %d,MODULE :%d internal implementation error, DELETE TCP Timer FAIL==\n",session->ifIndex,
selfLdpPid.module);
session->subState = SUBIDLE;
return;
}
/* Retry Tcp Connect Request */
session->state = NONEXISTENT;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -