📄 ldptlv.c
字号:
}
}
MPLS_WALK_UP_END(feclspcb,searchupcb,t_upCb);
}
}
}
else if(session -> labelAdvertisement == 1) /* DoD */
{
ldpdodcb = (mplsLdpLspCB *)tempcb;
ldpdodcb -> downMsgid = lblMapMsg -> baseMsg.msgId;
if(lblMapMsg -> atmLblTlvExists == 1)
{
ldpdodcb -> downAtmLabel.vpi = lblMapMsg -> atmLblTlv.flags.flags.vpi;
ldpdodcb -> downAtmLabel.vci = lblMapMsg -> atmLblTlv.vci;
}
else
{
sndnotifymsgproc(session, NOLBLRESRC, lblMapMsg -> baseMsg.msgId,
MPLS_LBLMAP_MSGTYPE);
//#ifdef DEBUG_LDP
DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_LSP,"==rec feclsp mapping message, encode atmlabel error !!! ==\n");
printf("==rec feclsp mapping message, encode atmlabel error !!! ==");
// #endif
return;
}
if(session -> loopDetectionForPV == LOOPDETECT_HOPANDPV)
{
attrchan = recfeclsp_mapmsg_looptlvproc_dod(lblMapMsg, &(ldpdodcb->pAttr),
ldpdodcb -> status);
if(attrchan == 1)
{
sesIndex_s.sessionIndex = ldpdodcb -> upSessionIndex;
sesIndex_s.indexFlag = 1;
session1 = (mplsLdpSession_t *)MibSession(&sesIndex_s, LDP_SEARCH);
if (session1 != MPLS_NULL)
{
atmlbltolblmsg(ldpdodcb -> upAtmLabel.vpi,
ldpdodcb -> upAtmLabel.vci,
&(lblMapMsg->atmLblTlv));
#if 0
SendTcpMsg(session1,MPLS_LBLMAP_MSGTYPE,lblMapMsg);
#endif
Func_lblmsg_wait_proce(session1,MPLS_LBLMAP_MSGTYPE,lblMapMsg);
}
}
}
else /* 2003-2-27 保护端口不支持环路检测时的处理 */
{
ldpattr =&(ldpdodcb->pAttr);
if((ldpattr->pAttr != MPLS_NULL)&&(ldpattr->len!=0))
{
ldp_pathvector_free(ldpattr);
}
MPLS_MEMSET(&(ldpdodcb->pAttr), 0, sizeof(mplsLdpAttr));
}
}
}
else /* cr lsp */
{
crlspcbb = (mplsLdpCrLsp *)lspcb;
ldpdodcb = &(crlspcbb -> crlspCb);
ldpdodcb -> downMsgid = lblMapMsg -> baseMsg.msgId;
ldpdodcb -> downSessionIndex = session -> index;
if(session -> labelAdvertisement == 1) /* DoD */
{
if(lblMapMsg -> atmLblTlvExists == 1)
{
ldpdodcb -> downAtmLabel.vpi = lblMapMsg -> atmLblTlv.flags.flags.vpi;
ldpdodcb -> downAtmLabel.vci = lblMapMsg -> atmLblTlv.vci;
}
else
{
sndnotifymsgproc(session, NOLBLRESRC, lblMapMsg -> baseMsg.msgId,
MPLS_LBLMAP_MSGTYPE);
// #ifdef DEBUG_LDP
DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_LSP,"==rec crlsp mapping message, encode atmlabel error !!! ==\n");
printf("==rec crlsp mapping message, encode atmlabel error !!! ==");
// #endif
return;
}
}
else /* DU */
{
if(lblMapMsg -> genLblTlvExists == 1)
{
ldpdodcb -> downGenLabel = lblMapMsg -> genLblTlv.label;
}
else
{
sndnotifymsgproc(session, NOLBLRESRC, lblMapMsg -> baseMsg.msgId,
MPLS_LBLMAP_MSGTYPE);
#ifdef DEBUG_LDP
printf("==rec crlsp mapping message, encode genlabel error !!! ==");
#endif
return;
}
}
if(session -> loopDetectionForPV == LOOPDETECT_HOPANDPV)
{
attrchan = recfeclsp_mapmsg_looptlvproc_dod(lblMapMsg, &(ldpdodcb->pAttr),
ldpdodcb -> status);
if(attrchan == 1)
{
sesIndex_s.sessionIndex = ldpdodcb -> upSessionIndex;
sesIndex_s.indexFlag = 1;
session1 = (mplsLdpSession_t *)MibSession(&sesIndex_s, LDP_SEARCH);
if (session1 != MPLS_NULL)
{
if(session1 -> labelAdvertisement == 0)/* DU */
{
genlbltolblmsg(ldpdodcb->upGenLabel, &(lblMapMsg->genLblTlv));
}
else if(session1 -> labelAdvertisement == 1)/* DOD */
{
atmlbltolblmsg(ldpdodcb -> upAtmLabel.vpi,
ldpdodcb -> upAtmLabel.vci,
&(lblMapMsg->atmLblTlv));
}
#if 0
SendTcpMsg(session1,MPLS_LBLMAP_MSGTYPE,lblMapMsg);
#endif
Func_lblmsg_wait_proce(session1,MPLS_LBLMAP_MSGTYPE,lblMapMsg);
}
}
}
else /* 2003-2-27 保护端口不支持环路检测时的处理 */
{
ldpattr =&(ldpdodcb->pAttr);
if((ldpattr->pAttr != MPLS_NULL)&&(ldpattr->len!=0))
{
ldp_pathvector_free(ldpattr);
}
MPLS_MEMSET(&(ldpdodcb->pAttr), 0, sizeof(mplsLdpAttr));
}
/* end */
if(lblMapMsg -> lspidTlvExists == 1)
{
crlspcbb -> crfec_key.ingressid = lblMapMsg -> lspidTlv.routerId;
crlspcbb -> crfec_key.locallspid = lblMapMsg -> lspidTlv.localCrlspId;
}
if(lblMapMsg -> trafficTlvExists == 1)
{
tlvexists.mark = crlspcbb->tlvExists;
tlvexists.flags.trafficTlvExists = 1;
crlspcbb->tlvExists = tlvexists.mark;
MPLS_MEMCPY(&(crlspcbb -> trafficTlv),&(lblMapMsg -> trafficTlv),
sizeof(mplsLdpTrafficTlv_t));
}
else
{
tlvexists.mark = crlspcbb->tlvExists;
if(tlvexists.flags.trafficTlvExists == 0)
{
crlspcbb->tlvExists = tlvexists.mark;
MPLS_MEMSET(&(crlspcbb -> trafficTlv), 0, sizeof(mplsLdpTrafficTlv_t));
}
}
}
}
/***********************************************************************/
/* FUNCTION NAME : rec_lblrel_tlvpro()
/* DESCRIPTION: : receive label map message tlv pro to lspcb
/* INPUT : mplsLdpSession_t * session,
void * lblmessage,
void * lspcb,
unsigned char cbflag
/* OUTPUT : void
/* AUTHOR/DATE : shi.zhaohui/ 02.06.19
/* GLOBAL : none
/* History :
/************************************************************************/
void rec_lblrel_tlvpro( mplsLdpSession_t * session,
void * lblmessage,
void * lspcb,
void * tempcb,
unsigned char cbflag )
{
mplsLdpLbl_W_R_Msg_t * lblRelMsg;
mplsLdpFecEntry * feclspcb;
mplsLdpCrLsp * crlspcbb;
mplsLdpUpCB * ldpupcb;
mplsLdpLspCB * ldpdodcb;
lblRelMsg = (mplsLdpLbl_W_R_Msg_t *)lblmessage;
if(cbflag == LDP_HOP_LSP)
{
feclspcb = (mplsLdpFecEntry *)lspcb;
if(session -> labelAdvertisement == 0) /* DU */
{
ldpupcb = (mplsLdpUpCB *)tempcb;
ldpupcb -> msgid = lblRelMsg -> baseMsg.msgId;
ldpupcb -> upSessionIndex = session -> index;
if(lblRelMsg -> genLblTlvExists == 1)
{
ldpupcb -> upGenLabel = lblRelMsg -> genLblTlv.label;
}
else
{
/* label tlv is optional */
ldpupcb -> upGenLabel = 0;
}
}
else if(session -> labelAdvertisement == 1) /* DoD */
{
ldpdodcb = (mplsLdpLspCB *)tempcb;
ldpdodcb -> upMsgid = lblRelMsg -> baseMsg.msgId;
ldpdodcb -> upSessionIndex = session -> index;
if(lblRelMsg -> atmLblTlvExists == 1)
{
ldpdodcb -> upAtmLabel.vpi = lblRelMsg -> atmLblTlv.flags.flags.vpi;
ldpdodcb -> upAtmLabel.vci = lblRelMsg -> atmLblTlv.vci;
}
else
{
ldpdodcb -> upAtmLabel.vpi = 0;
ldpdodcb -> upAtmLabel.vci = 0;
}
}
}
else /* cr lsp */
{
crlspcbb = (mplsLdpCrLsp *)lspcb;
ldpdodcb = &(crlspcbb -> crlspCb);
ldpdodcb -> upMsgid = lblRelMsg -> baseMsg.msgId;
ldpdodcb -> upSessionIndex = session -> index;
if(session -> labelAdvertisement == 1)
{
if(lblRelMsg -> atmLblTlvExists == 1) /* label tlv is optional */
{
ldpdodcb -> upAtmLabel.vpi = lblRelMsg -> atmLblTlv.flags.flags.vpi;
ldpdodcb -> upAtmLabel.vci = lblRelMsg -> atmLblTlv.vci;
}
else
{
ldpdodcb -> upAtmLabel.vpi = 0;
ldpdodcb -> upAtmLabel.vci = 0;
}
}
else
{
if(lblRelMsg -> genLblTlvExists == 1)
{
ldpdodcb -> upGenLabel = lblRelMsg -> genLblTlv.label;
}
else
{
ldpdodcb -> upGenLabel = 0;
}
}
}
}
/***********************************************************************/
/* FUNCTION NAME : rec_lblwith_tlvpro()
/* DESCRIPTION: : receive label map message tlv pro to lspcb
/* INPUT : mplsLdpSession_t * session,
void * lblmessage,
void * lspcb,
unsigned char cbflag
/* OUTPUT : void
/* AUTHOR/DATE : shi.zhaohui/ 02.06.19
/* GLOBAL : none
/* History :
/************************************************************************/
void rec_lblwith_tlvpro(mplsLdpSession_t * session,
void * lblmessage,
void * lspcb,
void * tempcb,
unsigned char cbflag)
{
mplsLdpLbl_W_R_Msg_t * lblWithdrawMsg;
mplsLdpFecEntry * feclspcb;
mplsLdpCrLsp * crlspcbb;
mplsLdpDownCB * ldpdowncb;
mplsLdpLspCB * ldpdodcb;
/* update down msgtype when receive withdraw 2003.1.16 */
if(session->labelAdvertisement == DOWNSTREAMONDEMAND)
{
((mplsLdpLspCB *)tempcb)->msgType = MPLS_LBLWITH_MSGTYPE;
}
lblWithdrawMsg = (mplsLdpLbl_W_R_Msg_t *)lblmessage;
if(cbflag == LDP_HOP_LSP)
{
feclspcb = (mplsLdpFecEntry *)lspcb;
if(session -> labelAdvertisement == 0) /* DU */
{
ldpdowncb = (mplsLdpDownCB *)tempcb;
ldpdowncb -> msgid = lblWithdrawMsg -> baseMsg.msgId;
ldpdowncb -> downSessionIndex = session -> index;
if(lblWithdrawMsg -> genLblTlvExists == 1)
{
ldpdowncb -> downGenLabel = lblWithdrawMsg -> genLblTlv.label;
}
else
{
ldpdowncb -> downGenLabel = 0;
}
}
else if(session -> labelAdvertisement == 1) /* DoD */
{
ldpdodcb = (mplsLdpLspCB *)tempcb;
ldpdodcb -> downMsgid = lblWithdrawMsg -> baseMsg.msgId;
if(lblWithdrawMsg -> atmLblTlvExists == 1)
{
ldpdodcb -> downAtmLabel.vpi = lblWithdrawMsg -> atmLblTlv.flags.flags.vpi;
ldpdodcb -> downAtmLabel.vci = lblWithdrawMsg -> atmLblTlv.vci;
}
else
{
ldpdodcb -> downAtmLabel.vpi = 0;
ldpdodcb -> downAtmLabel.vci = 0;
}
}
}
else
{
crlspcbb = (mplsLdpCrLsp *)lspcb;
ldpdodcb = &(crlspcbb -> crlspCb);
ldpdodcb -> downMsgid = lblWithdrawMsg -> baseMsg.msgId;
ldpdodcb -> downSessionIndex = session -> index;
if(session -> labelAdvertisement == 1)
{
if(lblWithdrawMsg -> atmLblTlvExists == 1)
{
ldpdodcb -> downAtmLabel.vpi = lblWithdrawMsg -> atmLblTlv.flags.flags.vpi;
ldpdodcb -> downAtmLabel.vci = lblWithdrawMsg -> atmLblTlv.vci;
}
else
{
ldpdodcb -> downAtmLabel.vpi = 0;
ldpdodcb -> downAtmLabel.vci = 0;
}
}
else
{
if(lblWithdrawMsg -> genLblTlvExists == 1)
{
ldpdodcb -> downGenLabel = lblWithdrawMsg -> genLblTlv.label;
}
else
{
ldpdodcb -> downGenLabel = 0;
}
}
}
}
/***********************************************************************/
/* FUNCTION NAME : rec_lblabort_tlvpro()
/* DESCRIPTION: : receive label abort message tlv pro to lspcb
/* INPUT : mplsLdpSession_t * session,
void * lblmessage,
void * lspcb,
unsigned char cbflag
/* OUTPUT : void
/* AUTHOR/DATE : shi.zhaohui/ 02.06.19
/* GLOBAL : none
/* History :
/************************************************************************/
void rec_lblabort_tlvpro(mplsLdpSession_t * session,
void * lblmessage,
void * lspcb,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -