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

📄 lblwith.c

📁 技术文件名称:MPLSv1.0软件模块测试规程
💻 C
📖 第 1 页 / 共 2 页
字号:
        		        if(lspCb->nodeType != MPLS_NODE_INGRESS)
        		        {
		    	MPLS_REMOVE_FROM_SESSION_DOWN_LSP_LIST(session->lsp_down_cb_list,lspCb)
        		    	}
        		    	else
        		    	{
        		    	    
        		    	    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))
		    	{
		    		sendtodown_Release_with(session,lblwith);  /* 2004-2-2 fengjun add*/
        		        /* update lspcb when receive withdraw msg */
        		    reclblmsgtlvproc(session,lblwith,fecCb,lspCb,MPLS_LBLWITH_MSGTYPE,LDP_HOP_LSP);
		    	LspCBFsm(session,MPLS_LBLWITH_MSGTYPE, \
    				 		lblwith,LDP_HOP_LSP,fecCb,lspCb);
	    }
        		}
        	}
            else
            {
               #ifdef __BGS10_MPLS_DEBUG
               printf("fec is null,not send release\n");
               #endif
            }    
          }
		}
		else
		{
			/* wildcard fec */
			/* gen label need not support fec aggregate */
			/* input the fecTlv, for check fec */
			MPLS_CRLSP_SESSION_DOWN_ATM_LABEL(session,lblwith->atmLblTlv,
		                             &lblwith->fecTlv,crlspCb);
		    if(crlspCb != MPLS_NULL)
		    {
		    	MPLS_REMOVE_FROM_SESSION_DOWN_LSP_LIST(session->lsp_down_cb_list,&(crlspCb->crlspCb))
//		    	sendtodown_Release_with(session,lblwith);
		    	if(!((&crlspCb->crlspCb)->waitflag & 0x1))
		    	LspCBFsm(session,MPLS_LBLWITH_MSGTYPE, \
    				 	 lblwith,LDP_CR_LSP,crlspCb,&crlspCb->crlspCb);
				return;
		    }
		    WALK_FEC_BEGIN(fecCb)
		    /* fec list */
			MPLS_FEC_SESSION_DOWN_ATM_LABEL(session,lblwith->atmLblTlv,
		                             &lblwith->fecTlv,fecCb,lspCb);
		    if(fecCb != MPLS_NULL && lspCb != MPLS_NULL)
		    {
		    	MPLS_REMOVE_FROM_SESSION_DOWN_LSP_LIST(session->lsp_down_cb_list,lspCb)
		    	if(!(lspCb->waitflag & 0x1))
		    	LspCBFsm(session,MPLS_LBLWITH_MSGTYPE, \
    				 	 lblwith,LDP_HOP_LSP,fecCb,lspCb);
		    }
		    WALK_FEC_END
		}

	}
	else
	{
		/* no label tlv */
		if(lblwith->fecTlv.fecElemTypes[0] == MPLS_CRLSP_FEC || \
		   lblwith->lspidTlvExists == 1 )
		{
//			sendtodown_Release_with(session,lblwith);
			/* gen label need not support fec aggregate */
			if(lblwith->lspidTlvExists == 1)
			{
				MPLS_CRFECCB_SEARCH(lblwith->lspidTlv.routerId, \
					lblwith->lspidTlv.localCrlspId,crlspCb)
		    if(crlspCb != MPLS_NULL)
		    {
					;
				}
			}
			else
			{
					;
		    }
		}
		else if(lblwith->fecTlv.wcElemExists != 1)
		{
			/* by hyh */
			preLen = lblwith->fecTlv.fecElemTypes[0] == MPLS_HOSTADR_FEC ? \
				32: lblwith->fecTlv.fecElArray[0].addressEl.preLen;
			
			/* fec list */
			MPLS_FEC_SEARCH(lblwith->fecTlv.fecElArray[0].addressEl.address,preLen,fecCb)
			if(fecCb)
			{
				MPLS_WALK_DOWN_BEGIN(fecCb,downCb,t_downCb)
				yes = MPLS_FALSE;
				MPLS_SESSION_MATCH_CB_DOWN(session,downCb,yes);
				if(yes == MPLS_TRUE)
				{
					if(fecCb->owner & MPLS_OWNER_ROUTE)
					{
						/* next hop label withdraw */
						MPLS_NEXTHOP_SESSION_BELONG(fecCb->nexthopAddr,session,belong_to);
						if(belong_to == MPLS_TRUE)
						{
					                   #if 0  /************fj*************/
							sendtoLabelXC(fecCb,MPLS_NULL,downCb,LDP_FWD_CLOSE);
					                   #endif
					                   downCb->waitflag |=0x1;
					                   wait_downfeclbl_append(downCb,fecCb,LDP_FWD_CLOSE);
					                   wait_downlblmsg_append(downCb,fecCb,MPLS_LBLREL_MSGTYPE);
					                   #if 0
							MPLS_DOWNCB_DELETE(fecCb,downCb);
					                   #endif
						}
						else
						{
							wait_downlblmsg_append(downCb,fecCb,MPLS_LBLREL_MSGTYPE);
							downCb->waitflag |=0x1;
							/*
							MPLS_DOWNCB_DELETE(fecCb,downCb);
							*/
						}
					}
				}
				MPLS_WALK_DOWN_END(fecCb,downCb,t_downCb)
				MPLS_WALK_LSP_BEGIN(fecCb,lspCb,t_lspCb)
				yes = MPLS_FALSE;
				MPLS_SESSION_MATCH_LSPCB_DOWN(session,lspCb,yes)
				if(yes == MPLS_TRUE)
			    {
			    	if(!(lspCb->waitflag & 0x1))
						LspCBFsm(session,MPLS_LBLWITH_MSGTYPE,\
							lblwith,LDP_HOP_LSP,fecCb,lspCb);
			    }
				MPLS_WALK_LSP_END(fecCb,lspCb,t_lspCb)
		}
		}
		else
		{
			/* wildcard fec and no label, currently no process */
			/******************************************************/
			/* wengqing add for session link list
			*/
			/******************************************************/
			if(session->lsp_down_cb_list.first)
			{
				session->lsp_down_cb_list.first->downSessionIndex =  2;
				session->lsp_down_cb_list.last->downSessionIndex  =  2;
				session->lsp_down_cb_list.last = MPLS_NULL;
				MPLS_INSERT_INTO_DOWN_LSP_LIST(g_down_lsp_list,
											 session->lsp_down_cb_list.first, \
											 session->lsp_down_cb_list.last);
				session->lsp_down_cb_list.first = MPLS_NULL;
				session->lsp_down_cb_list.last = MPLS_NULL;
			}
			if(session->down_cb_list.first)
			{
				session->lsp_down_cb_list.first->downSessionIndex =  2;
				session->lsp_down_cb_list.last->downSessionIndex  =  2;
				MPLS_INSERT_INTO_DOWN_LIST(g_down_list,
											 session->down_cb_list.first, \
											 session->down_cb_list.last);
				session->down_cb_list.first = MPLS_NULL;
				session->down_cb_list.last = MPLS_NULL;
			}
			return;
			/******************************************************/
			/* wengqing add for session link list end
			*/
			/******************************************************/
			
			#if 0
			WALK_CRLSP_BEGIN(fecCb)
		    /* fec list */
			MPLS_FEC_SESSION_DOWN_ATM_LABEL(session,lblwith->atmLblTlv,
		                             &lblwith->fecTlv,fecCb,lspCb);
		    if(fecCb != MPLS_NULL && lspCb != MPLS_NULL)
		    {
		    	if(!(lspCb->waitflag & 0x1))
		    	LspCBFsm(session,MPLS_LBLWITH_MSGTYPE, \
    				 	 lblwith,LDP_HOP_LSP,fecCb,lspCb);
				return;
		    }
		    WALK_CRLSP_END
		    #endif
		    /* fec list */
			WALK_FEC_BEGIN(fecCb)
			MPLS_WALK_DOWN_BEGIN(fecCb,downCb,t_downCb);
			if(fecCb != MPLS_NULL && downCb != MPLS_NULL)
		    {
				/* genLblTlvExists ==0 genLblTlv.label ???hyh */
				if(downCb->downSessionIndex == session->index)
				{
					if(fecCb->owner & MPLS_OWNER_ROUTE)
			    	{
			    		/* next hop label withdraw */
			    		MPLS_NEXTHOP_SESSION_BELONG(fecCb->nexthopAddr,session,belong_to);
			    		if(belong_to == MPLS_TRUE)
			    		{
	                                   #if 0  /************fj*************/
			    			sendtoLabelXC(fecCb,MPLS_NULL,downCb,LDP_FWD_CLOSE);
	                                   #endif
	                                   downCb->waitflag |=0x1;
	                                   wait_downfeclbl_append(downCb,fecCb,LDP_FWD_CLOSE);
	                                   wait_downlblmsg_append(downCb,fecCb,MPLS_LBLREL_MSGTYPE);
	                                   #if 0
			    			MPLS_DOWNCB_DELETE(fecCb,downCb);
	                                   #endif
			    		}
			    		else
			    		{
			    			wait_downlblmsg_append(downCb,fecCb,MPLS_LBLREL_MSGTYPE);
			    			downCb->waitflag |=0x1;
			    			/*
			    			MPLS_DOWNCB_DELETE(fecCb,downCb);
			    			*/
			    		}
			    	}
			    	else
			    	{
			    		wait_downlblmsg_append(downCb,fecCb,MPLS_LBLREL_MSGTYPE);
		    			downCb->waitflag |=0x1;
		    			/*
		    			MPLS_DOWNCB_DELETE(fecCb,downCb);
		    			*/
			    	}
		    	}
		    }
			MPLS_WALK_DOWN_END(fecCb,downCb,t_downCb)
			MPLS_WALK_LSP_BEGIN(fecCb,lspCb,t_lspCb)
			if(lspCb)
			{
				if(((lspCb->nodeType == MPLS_NODE_INTERM) || \
				  (lspCb->nodeType == MPLS_NODE_INGRESS))&& \
				  (lspCb->downSessionIndex == session->index))
				{
					if(!(lspCb->waitflag & 0x1))
					LspCBFsm(session,MPLS_LBLWITH_MSGTYPE,lblwith,LDP_HOP_LSP,fecCb,lspCb);
				}
			}
			MPLS_WALK_LSP_END(fecCb,lspCb,t_lspCb)
		    WALK_FEC_END
		}
	}
	return;
}

⌨️ 快捷键说明

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