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

📄 ldptlv.c

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