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

📄 notify.c

📁 技术文件名称:MPLSv1.0软件模块测试规程
💻 C
字号:
#include "ldpvars.h"

/****************************************************************************/
/*      Product Name:   MPLS PACK1.0
 *      Module  Name:   LDP/CR_LDP
 *      File    Name:   ldppdu.h
 *      Author  Name:   weng.qing shi.zhaohui hu.yonghong
 *      Creat   Date:   2002-6-18
 *      Version     :   1.0
 *      Input       :   mplsLdpSession_t *, inbound seesion pointer;
 *                      void             *, inputEvent;
 *      Output      :   void
 *      Function    :   Label release process function
 *      Note        :   
 *      wengqing 2002/12/2 if ingress recv notify,delete from sblist
 *      wengqing 2003.1.16 modify the method of search to be more efficent
 *      wengqing 2003.02.26 update lspCb downMsgid and down msg type 
 *      fengjun   2003.12.30 删除未编译代码 */
/****************************************************************************/
void FuncNotify(mplsLdpSession_t * session, void * inputEvent)
{
	mplsLdpNotifMsg_t       *	notifMsg = MPLS_NULL;
	mplsLdpSession_t        *   upsession = MPLS_NULL;
	mplsLdpCrLsp            *   crlspCB   = MPLS_NULL;
	mplsLdpFecEntry         *   fecCb     = MPLS_NULL;
	mplsLdpLspCB            *   lspCb     = MPLS_NULL;
	mplsLdpDownCB           *   downCb    = MPLS_NULL;
	mpls_sb_list            * sb_list;
	unsigned short              yes;
	unsigned short              dismode;
	unsigned char               have = 0;
	notifMsg = (mplsLdpNotifMsg_t *)inputEvent;
	if (notifMsg->statusTlvExists == 1)
    {
		#if 1
    	if(notifMsg->status.msgId == 0)
    	{
    		/* does not identify peer message */
    		if(notifMsg->status.flags.flags.status == LBLRESRCAVA)
    		{
    			/* label resource available */
    		}
    		else if(notifMsg->status.flags.flags.status == LBLRESRCAVA)
    		{
    			/* no definition */
    			/* resource available */
    		}    		
    		return;
    	}
    	/* wengqing 2003.01.06  LBLREQAB  reponse to label abort message, 
    	   we dont't process, directly  discard it
    	*/
    	else if(notifMsg->status.flags.flags.status == LBLREQAB)
    	{
    		return;
    	}
    	#endif
    	crlspCB = MPLS_NULL;
//    	MPLS_CRFEC_DOWN_SESSION_MSGID(session,notifMsg->status.msgId,crlspCB)
    	if(notifMsg->lspidTlvExists == 1)
		{
		    MPLS_CRFECCB_SEARCH(notifMsg->lspidTlv.routerId, \
    		                    notifMsg->lspidTlv.localCrlspId,\
    		                    crlspCB);
    	if(crlspCB)
    	{
    	    have = 1;
    	    if(!((&crlspCB->crlspCb)->waitflag & 0x1))
	    	    {
	    	    	/* wengqing 2003.02.26 update lspCb downMsgid and down msg type */
	    	    	(&(crlspCB->crlspCb))->msgType   = MPLS_NOT_MSGTYPE;
	    	    	(&(crlspCB->crlspCb))->downMsgid = notifMsg->baseMsg.msgId;
    	    LspCBFsm(session,LDP_DOWNSTREAM_NAK, \
        			 notifMsg,LDP_CR_LSP,crlspCB,&crlspCB->crlspCb);
    	}
	    	}
	    	else
	    	{
	    		return;
	    	}
	    }
    	#if 0
    	WALK_CRFEC_BEGIN(crlspCB)
    	if(crlspCB != MPLS_NULL)
    	{
    		lspCb = &crlspCB->crlspCb;
	    	if(crlspCB != MPLS_NULL && lspCb != MPLS_NULL)
	    	{
	    		if(notifMsg->lspidTlvExists == 1)
	    		{
	    			yes = MPLS_FALSE;
	    			MPLS_MATCH_CRFEC_LSPID(crlspCB,&notifMsg->lspidTlv,yes)
	    			if(yes == MPLS_FALSE)
	    			{
	    				/* bad message value */
	    				MPLS_SEND_NOTIFY(session,MALFORMTLVVAL,notifMsg->baseMsg.msgId, \
						notifMsg->baseMsg.flags.flags.msgType);
    					have = 1;
        				break;
	    			}
	    		}
	    	}
	    	else if(notifMsg->lspidTlvExists == 1)
	    	{
	    		/* bad message value */
        		have = 1;
				MPLS_SEND_NOTIFY(session,MALFORMTLVVAL,notifMsg->baseMsg.msgId, \
						notifMsg->baseMsg.flags.flags.msgType);
    			break;
	    	}
	    	else
	    	{
	    		dismode = 0;
	    		MPLS_SESSION_DISMODE(session,dismode)
	    		if(dismode == DOWNSTREAMONDEMAND)
	    		{
	    			MPLS_CRFEC_SESSION_MSGID(session,   
	    			 notifMsg->status.msgId,crlspCB);
	    			if(crlspCB != MPLS_NULL )
	    			{
	    			    /* 2002.11.06 CRLSPCB Delete from  lsp_down_cb_list */
	    			    MPLS_REMOVE_FROM_SESSION_DOWN_LSP_LIST(session->lsp_down_cb_list,&(crlspCb->crlspCb))
        			    have = 1;
        			    if(!((&crlspCb->crlspCb)->waitflag & 0x1))
        			    {
        			    	/* wengqing 2003.02.26 update lspCb downMsgid and down msg type */
        			    	(&(crlspCB->crlspCb))->msgType   = MPLS_NOT_MSGTYPE;
	    	    		    (&(crlspCB->crlspCb))->downMsgId = notifMsg->baseMsg.msgId;
	    				LspCBFsm(session,LDP_DOWNSTREAM_NAK, \
	    				 notifMsg,LDP_CR_LSP,crlspCB,&crlspCB->crlspCb);
		    			}
        				break;
	    			}
	    		}
	    		else
	    		{
	    			MPLS_FEC_DOWNCB_SESSION_MSGID(fecCb,downCb,session,
	    			 notifMsg->status.msgId);
	    			if(fecCb != MPLS_NULL && downCb != MPLS_NULL)
	    			{
	    				if(downCb->state == RESPONSE_AWAITED)
	    				{
	    					lspCb = MPLS_NULL;
	    					MPLS_DOWNCB_DELETE(fecCb,downCb);
	    					MPLS_WALK_LSP_BEGIN(fecCb,lspCb,t_lspCb)
							if(lspCb->nodeType == MPLS_NODE_EGRESS)
	    					{
	    						/* downstream lost */
	    						if(!(lspCb->waitflag & 0x1))
	    						LspCBFsm(session,DOWNSTREAM_LOST,\
										MPLS_NULL,LDP_HOP_LSP,fecCb,lspCb);
        						have = 1;
        						break;
	    					}
							MPLS_WALK_LSP_END(fecEntry,lspCb,t_lspCb)
    						break;
	    				}
	    			}
	    		}
	    	}
	    }
    	WALK_CRFEC_END
        #endif
        
        if(have != 0)
            return;
/*
    	WALK_FEC_BEGIN(fecCb)
    	if(fecCb)
    	{
*/
			fecCb = MPLS_NULL;
    		lspCb = MPLS_NULL;
    		MPLS_FEC_LSPCB_DOWN_SESSION_MSGID_PEND(fecCb,lspCb,session,notifMsg->status.msgId,notifMsg->status.msgType) 
    		if(lspCb)
    		{
    		    /* 2002.10.28 when node is ingress, lspCb don't delete, 
        		           so not delete from down session list */
		        if(lspCb->nodeType != MPLS_NODE_INGRESS)
		        {
		    	    MPLS_REMOVE_FROM_SESSION_DOWN_LSP_LIST(session->lsp_down_cb_list,lspCb)
        		}
        		else  /*wengqing 2002/12/2 if ingress recv notify,delete from sblist*/
        		{
        		    
        		    sb_list = MPLS_NULL;
    		        MPLS_SB_SEARCH(lspCb->upAtmLabel.module,\
    		                    lspCb->upAtmLabel.port,sb_list);
            		if(!sb_list)
            		{
            			MPLS_REMOVE_FROM_SESSION_UP_LSP_LIST(g_up_lsp_list,lspCb);
            		}
            		else
            		{
            		    MPLS_REMOVE_FROM_SESSION_UP_LSP_LIST_A(sb_list->lsp_up_cb_list,lspCb);
            		    if(!(sb_list->lsp_down_cb_list.first ||sb_list->lsp_up_cb_list.first))
            		        MPLS_SB_DELETE(lspCb->upAtmLabel.module,\
    		                    lspCb->upAtmLabel.port,sb_list)
            		}
            		
        		}
    			if(!(lspCb->waitflag & 0x1))
        		{
        			/* wengqing 2003.02.26 update lspCb downMsgid and down msg type */
        			lspCb->msgType   = MPLS_NOT_MSGTYPE;
	    	        lspCb->downMsgid = notifMsg->baseMsg.msgId;
    			LspCBFsm(session,LDP_DOWNSTREAM_NAK,notifMsg,LDP_HOP_LSP,fecCb,lspCb);
    			}
    			return;
    		}
/*
    	}
    	WALK_FEC_END
*/
    }
    else
    {
    	/* missing parameter */
    	MPLS_SEND_NOTIFY(session,MISSPARAMETER,notifMsg->baseMsg.msgId, \
					notifMsg->baseMsg.flags.flags.msgType);
    }
	return;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -