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

📄 ldptlv.c

📁 技术文件名称:MPLSv1.0软件模块测试规程
💻 C
📖 第 1 页 / 共 4 页
字号:
        optaltocrlblmapmsg(crlspcbb, &lblMapMsg);
          /*  loop detection  */
        if(session ->loopDetectionForPV == LOOPDETECT_HOPANDPV)
        {
        	sndfeclsp_mapmsg_looptlvproc_dod(&(ldpdodcb->pAttr),
                                        &lblMapMsg, ldpdodcb ->nodeType);
        }                                
        ldpdodcb -> upMsgid = lblMapMsg.baseMsg.msgId;
    #if 0
     SendTcpMsg(session,MPLS_LBLMAP_MSGTYPE,&lblMapMsg);
    #endif
    Func_lblmsg_wait_proce(session,MPLS_LBLMAP_MSGTYPE,&lblMapMsg);

  }  
}


/***********************************************************************/
/* FUNCTION NAME  : snd_lblrel_tlvpro()
/* DESCRIPTION:   : send  lspcb to label rel message tlv process
/*  INPUT         : mplsLdpSession_t    * session,
                    void                * lspcb,
                    unsigned char               cbflag
/*  OUTPUT        : void
/*  AUTHOR/DATE   : shi.zhaohui/ 02.06.19
/*  GLOBAL        : none
/* History        :
/************************************************************************/
void  snd_lblrel_tlvpro( mplsLdpSession_t   * session,
                        void                * lspcb,
                        void                * tempcb,
                        unsigned char       cbflag)
{
    mplsLdpLbl_W_R_Msg_t     	lblRelMsg;
    mplsLdpFecEntry         *   feclspcb;
    mplsLdpCrLsp            *   crlspcbb;
    mplsLdpDownCB           *   ldpdowncb;
    mplsLdpLspCB            *   ldpdodcb;


    MPLS_MEMSET(&lblRelMsg, 0, sizeof(mplsLdpLbl_W_R_Msg_t));
    lblRelMsg.baseMsg.msgId   = messageId[LBL_W_R_M];
    lblRelMsg.baseMsg.flags.flags.msgType = MPLS_LBLREL_MSGTYPE;
    lblRelMsg.baseMsg.flags.flags.uBit = 0;
	AddMsgId(LBL_W_R_M);
	lblRelMsg.fecTlvExists = 1;
    if(cbflag == LDP_HOP_LSP)
    {
        feclspcb = (mplsLdpFecEntry  *)lspcb;
        fectlvtolblmsg(feclspcb -> mplsLdpFecType,
                       feclspcb ->fec_key.mplsLdpFecAddrLen,
                       feclspcb ->fec_key.mplsFecAddr,
                       &(lblRelMsg.fecTlv));
        if(session -> labelAdvertisement == 0)/*  DU  */
        {
            /* if have label tlv, encode gen label */
            ldpdowncb = (mplsLdpDownCB *)tempcb;
            ldpdowncb -> msgid = lblRelMsg.baseMsg.msgId;
            if(ldpdowncb -> downGenLabel != 0) /* 0: no label */
            {
                lblRelMsg.genLblTlvExists = 1;
                genlbltolblmsg(ldpdowncb -> downGenLabel , &(lblRelMsg.genLblTlv));
            }
        }
        else if(session -> labelAdvertisement == 1)/*  DoD  */
        {
            /* if have label tlv, encode gen label */
            ldpdodcb = (mplsLdpLspCB *)tempcb;
            ldpdodcb -> downMsgid = lblRelMsg.baseMsg.msgId;
            if(!((ldpdodcb -> downAtmLabel.vpi == 0)&&
               (ldpdodcb -> downAtmLabel.vci == 0)))
           {
                lblRelMsg.atmLblTlvExists = 1;
                atmlbltolblmsg(ldpdodcb -> downAtmLabel.vpi,
                                  ldpdodcb -> downAtmLabel.vci,
                                  &(lblRelMsg.atmLblTlv));
           }
        }
    }
    else /* cr lsp */
    {
        crlspcbb = (mplsLdpCrLsp  *)lspcb;
        ldpdodcb = &(crlspcbb -> crlspCb);
        ldpdodcb -> downMsgid = lblRelMsg.baseMsg.msgId;
        fectlvtolblmsg(crlspcbb -> mplsLdpFecType,
                       crlspcbb -> mplsLdpFecAddrLen,
                       crlspcbb -> mplsFecAddr,
                       &(lblRelMsg.fecTlv));
         /* crlsp for performance and dynamic crlsp building, we should have lspid tlv */
        lblRelMsg.lspidTlvExists = 1;
        setmsglspid(crlspcbb,&(lblRelMsg.lspidTlv));
        if(session -> labelAdvertisement == 0)/*  DU  */
        {
            /* if have label tlv, encode gen label */
            if(ldpdodcb -> downGenLabel != 0) /* 0: no label */
            {
                lblRelMsg.genLblTlvExists = 1;
                genlbltolblmsg(ldpdodcb -> downGenLabel, &(lblRelMsg.genLblTlv));
            }
        }
        else if(session -> labelAdvertisement == 1)/*  DoD  */
        {
            /* if have label tlv, encode gen label */
            if(!((ldpdodcb -> downAtmLabel.vpi == 0)
                && (ldpdodcb -> downAtmLabel.vci == 0)))  /* 0: no label */
            {
                lblRelMsg.atmLblTlvExists = 1;
                atmlbltolblmsg(ldpdodcb -> downAtmLabel.vpi,
                               ldpdodcb -> downAtmLabel.vci,
                               &(lblRelMsg.atmLblTlv));
            }
        }
    }

    #if 0
    SendTcpMsg(session,MPLS_LBLREL_MSGTYPE,&lblRelMsg);
    #endif
    Func_lblmsg_wait_proce( session, MPLS_LBLREL_MSGTYPE, &lblRelMsg);
}

/***********************************************************************/
/* FUNCTION NAME  : snd_lblwith_tlvpro()
/* DESCRIPTION:   : send  lspcb to label with message tlv process
/*  INPUT         : mplsLdpSession_t    * session,
                    void                * lspcb,
                    void                * tempcb,
                    unsigned char       cbflag
/*  OUTPUT        : void
/*  AUTHOR/DATE   : shi.zhaohui/ 02.06.19
/*  GLOBAL        : none
/* History        :
/************************************************************************/
void  snd_lblwith_tlvpro( mplsLdpSession_t   * session,
                         void                * lspcb,
                         void                * tempcb,
                         unsigned char       cbflag)
{
    mplsLdpLbl_W_R_Msg_t     	lblWithMsg;
    mplsLdpFecEntry         *   feclspcb;
    mplsLdpCrLsp            *   crlspcbb;
    mplsLdpUpCB             *   ldpupcb;
    mplsLdpLspCB            *   ldpdodcb;


    MPLS_MEMSET(&lblWithMsg, 0, sizeof(mplsLdpLbl_W_R_Msg_t));
    lblWithMsg.baseMsg.msgId   = messageId[LBL_W_R_M];
    lblWithMsg.baseMsg.flags.flags.msgType = MPLS_LBLWITH_MSGTYPE;
    lblWithMsg.baseMsg.flags.flags.uBit = 0;
	AddMsgId(LBL_W_R_M);
	lblWithMsg.fecTlvExists = 1;
    if(cbflag == LDP_HOP_LSP)
    {
        feclspcb = (mplsLdpFecEntry  *)lspcb;
        fectlvtolblmsg(feclspcb -> mplsLdpFecType,
                          feclspcb ->fec_key.mplsLdpFecAddrLen,
                          feclspcb ->fec_key.mplsFecAddr,
                          &(lblWithMsg.fecTlv));
        if(session -> labelAdvertisement == 0)/*  DU  */
        {
            /* if have label tlv, encode gen label */
            ldpupcb = (mplsLdpUpCB *)tempcb;
            ldpupcb -> msgid = lblWithMsg.baseMsg.msgId;
            if(ldpupcb -> upGenLabel != 0) /* 0: no label */
            {
                lblWithMsg.genLblTlvExists = 1;
                genlbltolblmsg(ldpupcb -> upGenLabel , &(lblWithMsg.genLblTlv));
            }
        }
        else if(session -> labelAdvertisement == 1)/*  DoD  */
        {
            /* if have label tlv, encode gen label */
            ldpdodcb = (mplsLdpLspCB *)tempcb;
            ldpdodcb -> upMsgid = lblWithMsg.baseMsg.msgId;
            if(!((ldpdodcb -> upAtmLabel.vpi == 0)&&
               (ldpdodcb -> upAtmLabel.vci == 0)))
           {
                lblWithMsg.atmLblTlvExists = 1;
                atmlbltolblmsg(ldpdodcb -> upAtmLabel.vpi,
                                  ldpdodcb -> upAtmLabel.vci,
                                  &(lblWithMsg.atmLblTlv));
           }
        }
    }
    else /* cr lsp */
    {
        crlspcbb = (mplsLdpCrLsp  *)lspcb;
        ldpdodcb = &(crlspcbb -> crlspCb);
        ldpdodcb -> upMsgid = lblWithMsg.baseMsg.msgId;
        fectlvtolblmsg(crlspcbb -> mplsLdpFecType,
                          crlspcbb -> mplsLdpFecAddrLen,
                          crlspcbb -> mplsFecAddr,
                          &(lblWithMsg.fecTlv));
        /* crlsp for performance and dynamic crlsp building, we should have lspid tlv */
        lblWithMsg.lspidTlvExists = 1;
        setmsglspid(crlspcbb,&(lblWithMsg.lspidTlv));
        if(session -> labelAdvertisement == 0)/*  DU  */
        {
            /* if have label tlv, encode gen label */
            if(ldpdodcb -> upGenLabel != 0) /* 0: no label */
            {
                lblWithMsg.genLblTlvExists = 1;
                genlbltolblmsg(ldpdodcb -> upGenLabel, &(lblWithMsg.genLblTlv));
            }
        }
        else if(session -> labelAdvertisement == 1)/*  DoD  */
        {
            /* if have label tlv, encode atm label */
            if(!((ldpdodcb -> upAtmLabel.vpi == 0)
                && (ldpdodcb -> upAtmLabel.vci == 0)))  /* 0: no label */
            {
                lblWithMsg.atmLblTlvExists = 1;
                atmlbltolblmsg(ldpdodcb -> upAtmLabel.vpi,
                                  ldpdodcb -> upAtmLabel.vci,
                                  &(lblWithMsg.atmLblTlv));
            }
        }
    }
    
    #if 0
    SendTcpMsg(session,MPLS_LBLWITH_MSGTYPE,&lblWithMsg);
    #endif
    Func_lblmsg_wait_proce( session, MPLS_LBLWITH_MSGTYPE, &lblWithMsg);
}


/***********************************************************************/
/* FUNCTION NAME  : snd_lblabort_tlvpro()
/* DESCRIPTION:   : send  lspcb to label with message tlv process
/*  INPUT         : mplsLdpSession_t    * session,
                    void                * lspcb,
                    void                * tempcb,
                    unsigned char       cbflag
/*  OUTPUT        : void
/*  AUTHOR/DATE   : shi.zhaohui/ 02.06.19
/*  GLOBAL        : none
/* History        :
/************************************************************************/
void  snd_lblabort_tlvpro( mplsLdpSession_t   * session,
                         void                * lspcb,
                         void                * tempcb,
                         unsigned char       cbflag)
{
    mplsLdpLblAbortMsg_t     	lblAbortMsg;
    mplsLdpFecEntry         *   feclspcb;
    mplsLdpCrLsp            *   crlspcbb;
    mplsLdpDownCB           *   ldpdowncb;
    mplsLdpLspCB            *   ldpdodcb;


    MPLS_MEMSET(&lblAbortMsg, 0, sizeof(mplsLdpLblAbortMsg_t));
    lblAbortMsg.baseMsg.msgId   = messageId[LBLABORT_M];
    lblAbortMsg.baseMsg.flags.flags.msgType = MPLS_LBLABORT_MSGTYPE;
    lblAbortMsg.baseMsg.flags.flags.uBit = 0;
	AddMsgId(LBLABORT_M);
	lblAbortMsg.fecTlvExists = 1;
    if(cbflag == LDP_HOP_LSP)
    {
        feclspcb = (mplsLdpFecEntry  *)lspcb;
        fectlvtolblmsg(feclspcb -> mplsLdpFecType,
                       feclspcb ->fec_key.mplsLdpFecAddrLen,
                       feclspcb ->fec_key.mplsFecAddr,
                       &(lblAbortMsg.fecTlv));
        if(session -> labelAdvertisement == 0)/*  DU  */
        {
            /* if have label tlv, encode gen label */
            ldpdowncb = (mplsLdpDownCB *)tempcb;
/*            if(ldpdowncb->msgid != 0 )   */
            {
               lblAbortMsg.lblMsgIdTlvExists = 1;
               reqmsgidtolblmsg(ldpdowncb->msgid, &(lblAbortMsg.lblMsgIdTlv));
            }
            ldpdowncb->msgid = lblAbortMsg.baseMsg.msgId;
        }
        else if(session -> labelAdvertisement == 1)/*  DoD  */
        {
            /* if have label tlv, encode gen label */
            ldpdodcb = (mplsLdpLspCB *)tempcb;
/*            if(ldpdodcb->downMsgid != 0 )  */
            {
                lblAbortMsg.lblMsgIdTlvExists = 1;
                reqmsgidtolblmsg(ldpdodcb->downMsgid, &(lblAbortMsg.lblMsgIdTlv));
            }
            ldpdodcb->downMsgid = lblAbortMsg.baseMsg.msgId;

        }
    }
    else /* cr lsp */
    {
        crlspcbb = (mplsLdpCrLsp  *)lspcb;
        ldpdodcb = &(crlspcbb -> crlspCb);
        fectlvtolblmsg(crlspcbb -> mplsLdpFecType,
                       crlspcbb -> mplsLdpFecAddrLen,
                       crlspcbb -> mplsFecAddr,
                       &(lblAbortMsg.fecTlv));
        /* crlsp for performance and dynamic crlsp building, we should have lspid tlv */
        lblAbortMsg.lspidTlvExists = 1;
        setmsglspid(crlspcbb,&(lblAbortMsg.lspidTlv));
/*        if(ldpdodcb->downMsgid != 0 )    */
        {
            lblAbortMsg.lblMsgIdTlvExists = 1;
            reqmsgidtolblmsg(ldpdodcb->downMsgid, &(lblAbortMsg.lblMsgIdTlv));
        }
        ldpdodcb->downMsgid = lblAbortMsg.baseMsg.msgId;
    }
    
   # if 0
    SendTcpMsg(session,MPLS_LBLABORT_MSGTYPE,&lblAbortMsg);
    #endif
    Func_lblmsg_wait_proce( session, MPLS_LBLABORT_MSGTYPE, &lblAbortMsg); 
}
/* by hyh 02-8-14 */
/* for agilent test */
short ldp_atmlabeltlv_test(mplsLdpSession_t *session,mplsLdpLblMapMsg_t *lblMapMsg)
{
	/* 36.tst*/
    /* if v bint in atm label == 11,send notification and not propagate mapping  */
    if(lblMapMsg->atmLblTlv.flags.flags.v == 3)

    {
    	sndnotifymsgproc(session, MALFORMTLVVAL, lblMapMsg -> baseMsg.msgId,
                        MPLS_LBLMAP_MSGTYPE);
       	#ifdef DEBUG_LDP
           printf("==rec feclsp mapping message, atmlabel v flag error !!! ==");
       	#endif
       	return LDP_FALSE;
    }
            
    /* 210.tst */
    /* if atm label not insistent with negotiated direct,
    	release it and not propagate mapping  */
    if((lblMapMsg->atmLblTlv.vci%2 == 1 && session->vcNumeberdType == LDP_ODD)||
    	(lblMapMsg->atmLblTlv.vci%2 == 0 && session->vcNumeberdType == LDP_EVEN))
    {
		/*************************************************************/
		/* release label
		*/
		/*************************************************************/
		mpls_release_label_map(session,lblMapMsg);
       	#ifdef DEBUG_LDP
           printf("==rec feclsp mapping message, atmlabel vci odd/even not match !!! ==");
       	#endif
       	return LDP_FALSE;
    }
            
    /* 211.tst */
    /* if atm label outside negotiated range,release it and not propagate mapping  */
    if((lblMapMsg->atmLblTlv.vci < session->LdpLblRng.atmlblrnglist[0].flags.flags.minVci ||
    	lblMapMsg->atmLblTlv.vci > session->LdpLblRng.atmlblrnglist[0].flags.flags.maxVci)
    	||(lblMapMsg->atmLblTlv.flags.flags.vpi < session->LdpLblRng.atmlblrnglist[0].flags.flags.minVpi||
    	lblMapMsg->atmLblTlv.flags.flags.vpi > session->LdpLblRng.atmlblrnglist[0].flags.flags.maxVpi))
    {
		/*************************************************************/
		/* release label
		*/
		/*************************************************************/
		mpls_release_label_map(session,lblMapMsg);
       	#ifdef DEBUG_LDP
           printf("==rec feclsp mapping message, atmlabel out range !!! ==");
       	#endif
       	return LDP_FALSE;
    }
    
	return LDP_TRUE;    
	
}            

⌨️ 快捷键说明

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