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

📄 tlv_comm.c

📁 技术文件名称:MPLSv1.0软件模块测试规程
💻 C
📖 第 1 页 / 共 2 页
字号:
/********************************************************************/
/*	Product Name:	mpls pack1.0
/*	Module  Name:	ldp, ldp_cr
/*	File    Name:   tlv_comm.c
/*	Author  Name:   shi.zhaohui
/*	Creat   Date:	06/29/2002
/*	Version		:	1.0
/*	Function    :	ldp label message tlv process
/*  History     :
/* szh mod 2003-10-20 减少LDP向A041发送的消息改成函数调用          */
/********************************************************************/
#undef 	DEF_LDP_VAR
#include "ldpvars.h"

/***********************************************************************/
/* FUNCTION NAME  : lblreqtofectypemsg()
/* DESCRIPTION:   : fec tlv pro from label request message
/*  INPUT         : mplsLdpLblReqMsg_t  *lblReqMsg,
                    void                lspcb,
                    uchar               flag
/*  OUTPUT        : void
/*  AUTHOR/DATE   : shi.zhaohui/ 02.06.19
/*  GLOBAL        : none
/* History        :
/************************************************************************/
void  lblreqtofectypemsg(mplsLdpLblReqMsg_t  *lblReqMsg, void *lspcb, unsigned char flag )
{
    mplsLdpFecEntry         *feclspcb;
    mplsLdpCrLsp            *crlspcbb;

    switch(flag)
    {
        case LDP_HOP_LSP :
            feclspcb = (mplsLdpFecEntry *)lspcb;
            feclspcb -> mplsLdpFecType = lblReqMsg->fecTlv.fecElemTypes[0];
         	if(lblReqMsg->fecTlv.fecElArray[0].addressEl.type == MPLS_HOSTADR_FEC)
         	{
         		feclspcb ->fec_key.mplsLdpFecAddrLen = 32;
         	}
         	else
         	{
            	feclspcb ->fec_key.mplsLdpFecAddrLen = \
            		lblReqMsg->fecTlv.fecElArray[0].addressEl.preLen;
            }
            feclspcb ->fec_key.mplsFecAddr = lblReqMsg->fecTlv.fecElArray[0].addressEl.address;
            feclspcb -> mplsFecAddrFamily = 1;
            break;

        case LDP_CR_LSP  :
            crlspcbb = (mplsLdpCrLsp *)lspcb;
            if(lblReqMsg->fecTlv.fecElemTypes[0] == MPLS_CRLSP_FEC)
            {
                crlspcbb -> mplsLdpFecType = MPLS_CRLSP_FEC;
                crlspcbb -> mplsLdpFecAddrLen = 0;
                crlspcbb -> mplsFecAddr = 0;
            }
            else
            {
                crlspcbb -> mplsLdpFecType = lblReqMsg->fecTlv.fecElemTypes[0];
                if(lblReqMsg->fecTlv.fecElArray[0].addressEl.type == MPLS_HOSTADR_FEC)
	         	{
	         		crlspcbb ->mplsLdpFecAddrLen = 32;
	         	}
	         	else
	         	{
	            	crlspcbb ->mplsLdpFecAddrLen = \
	            		lblReqMsg->fecTlv.fecElArray[0].addressEl.preLen;
	            }
                crlspcbb -> mplsFecAddr = lblReqMsg->fecTlv.fecElArray[0].addressEl.address;
            }
            break;

        default : break;
    }
}


/***********************************************************************/
/* FUNCTION NAME  : BuildNotifMsg()
/* DESCRIPTION:   : conform notify message
/*  INPUT         : mplsLdpNotifMsg_t   * notifMsg,
                    unsigned long       statuscode,
                    unsigned long       msgid,
                    unsigned short      msgtype
/*  OUTPUT        : void
/*  AUTHOR/DATE   : shi.zhaohui/ 02.06.19
/*  GLOBAL        : none
/* History        :
/************************************************************************/
void BuildNotifMsg(mplsLdpNotifMsg_t * notifMsg,unsigned long statuscode,
                    unsigned long msgid, unsigned short msgtype)
{

    notifMsg->baseMsg.msgId = messageId[NOT_M];
    AddMsgId(NOT_M);

    switch (statuscode)
    {
        case    MIB_SUCCESS:
        case    UNKNOWNMSGTYP:
        case    UNKNOWNTLV:
        case    LOOPDETECT:
        case    NOROUTE:
        case    UNKNOWNFEC:
        case    NOLBLRESRC:
        case    LBLRESRCAVA:
        case    LBLREQAB:
        case    BADERTLVERR:
        case    BADSTRICNERR:
        case    BADLOOSNERR:
        case    BADINITERHOPER:
        case    RESRCUNAVA:
        case    TRAFPARAUNAVA:
        case    SETUPABORT:
        case    MISSPARAMETER:
        case    INTERNALERROR:
            notifMsg->status.flags.flags.error          = 0;
            break;
        default:
            notifMsg->status.flags.flags.error          = 1;
            break;
    }
    notifMsg->baseMsg.flags.flags.msgType   = MPLS_NOT_MSGTYPE;
	notifMsg->baseMsg.flags.flags.uBit      = 0;
	notifMsg->baseMsg.msgLength			    = 0;

    notifMsg->statusTlvExists                   = 1;
    notifMsg->status.baseTlv.flags.flags.uBit   = 0;
	notifMsg->status.baseTlv.flags.flags.fBit   = 1;
	notifMsg->status.baseTlv.flags.flags.type   = MPLS_NOT_ST_TLVTYPE;
	notifMsg->status.baseTlv.length             = MPLS_STATUSFIXLEN;

    notifMsg->exStatusTlvExists         = 0;
    notifMsg->retPduTlvExists           = 0;
    notifMsg->retMsgTlvExists           = 0;
    notifMsg->lspidTlvExists            = 0;
    notifMsg->lblMsgIdTlvExists			= 0;
    notifMsg->unknownNo					= 0;

    notifMsg->status.flags.flags.forward        = 1;
    notifMsg->status.flags.flags.status         = statuscode;
    notifMsg->status.msgId      =  msgid;
    notifMsg->status.msgType    =  msgtype;
}


/***********************************************************************/
/* FUNCTION NAME  : optaltocrlblmapmsg()
/* DESCRIPTION:   : optional tlv process for cr lsp mapping message
/*  INPUT         : mplsLdpLspCB        *lspcb,
                    mplsLdpLblMapMsg_t  *lblMapMsg
/*  OUTPUT        : void
/*  AUTHOR/DATE   : shi.zhaohui/ 02.06.19
/*  GLOBAL        : none
/* History        :
/************************************************************************/
void  optaltocrlblmapmsg(mplsLdpCrLsp *lspcb, mplsLdpLblMapMsg_t  *lblMapMsg)
{
    lblmsgTlvExists         tlvexists;
    
    tlvexists.mark = lspcb -> tlvExists;
    lblMapMsg -> lspidTlvExists = 1;
    lblMapMsg -> lspidTlv.localCrlspId = lspcb ->crfec_key.locallspid;
    lblMapMsg -> lspidTlv.routerId = lspcb ->crfec_key.ingressid;
    lblMapMsg -> lspidTlv.baseTlv.flags.flags.uBit = 0;
    lblMapMsg -> lspidTlv.baseTlv.flags.flags.fBit = 0;
    lblMapMsg -> lspidTlv.baseTlv.flags.flags.type = MPLS_LSPID_TLVTYPE;
    lblMapMsg -> lspidTlv.baseTlv.length           = MPLS_LSPIDTLV_FIXLEN;
	if(tlvexists.flags.trafficTlvExists == 1)
    {
     	lblMapMsg ->trafficTlvExists = 1;
     	MPLS_MEMCPY(&(lblMapMsg -> trafficTlv),&(lspcb -> trafficTlv),
     				sizeof(mplsLdpTrafficTlv_t));
    }
    else
    {
    	lblMapMsg ->trafficTlvExists = 0;
    }
   
}

/***********************************************************************/
/* FUNCTION NAME  : setmsglspid()
/* DESCRIPTION:   : set cr lspcb lspid tlv to lspid tlv
/*  INPUT         : mplsLdpCrLsp        *lspcb,
                    mplsLdpLspIdTlv_t  *lspidTlv
/*  OUTPUT        : void
/*  AUTHOR/DATE   : shi.zhaohui/ 02.06.19
/*  GLOBAL        : none
/* History        :
/************************************************************************/
void  setmsglspid(mplsLdpCrLsp *lspcb, mplsLdpLspIdTlv_t  *lspidTlv)
{
    lspidTlv->actFlag.flag.res = 0;
    lspidTlv->actFlag.flag.ActFlag = MPLS_CRLSP_ACTION_INIT;
    lspidTlv->localCrlspId = lspcb ->crfec_key.locallspid;
    lspidTlv->routerId = lspcb ->crfec_key.ingressid;
    lspidTlv->baseTlv.flags.flags.uBit = 0;
    lspidTlv->baseTlv.flags.flags.fBit = 0;
    lspidTlv->baseTlv.flags.flags.type = MPLS_LSPID_TLVTYPE;
    lspidTlv->baseTlv.length           = MPLS_LSPIDTLV_FIXLEN;
}

/***********************************************************************/
/* FUNCTION NAME  : reqmsgidtolblmsg()
/* DESCRIPTION:   : lbl request msg's msgid process for mapping message
/*  INPUT         : unsigned long           reqmsgid,
                    mplsLdpLblMsgIdTlv_t    *lblMsgIdTlv
/*  OUTPUT        : void
/*  AUTHOR/DATE   : shi.zhaohui/ 02.06.19
/*  GLOBAL        : none
/* History        :
/************************************************************************/
void reqmsgidtolblmsg(unsigned long reqmsgid,  mplsLdpLblMsgIdTlv_t  *lblMsgIdTlv)
{

    lblMsgIdTlv->baseTlv.flags.flags.uBit = 0;
    lblMsgIdTlv->baseTlv.flags.flags.fBit = 0;
    lblMsgIdTlv->baseTlv.flags.flags.type = MPLS_REQMSGID_TLVTYPE;
    lblMsgIdTlv->baseTlv.length           = MPLS_MSGIDFIXLEN;
    lblMsgIdTlv->msgId   = reqmsgid;
}


/***********************************************************************/
/* FUNCTION NAME  : genlbltolblmsg()
/* DESCRIPTION:   : general label proecss
/*  INPUT         : unsigned long       genlabel,
                    mplsLdpGenLblTlv_s  *genLblTlv
/*  OUTPUT        : void
/*  AUTHOR/DATE   : shi.zhaohui/ 02.06.19
/*  GLOBAL        : none
/* History        :
/************************************************************************/
void  genlbltolblmsg(unsigned long genlabel, mplsLdpGenLblTlv_t  *genLblTlv)
{

    genLblTlv->baseTlv.flags.flags.uBit = 0;
    genLblTlv->baseTlv.flags.flags.fBit = 0;

⌨️ 快捷键说明

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