⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ldpsess.c

📁 技术文件名称:MPLSv1.0软件模块测试规程
💻 C
📖 第 1 页 / 共 5 页
字号:
    	}
    	/* 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 + -