📄 lblwith.c
字号:
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 + -