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

📄 tlv_comm.c

📁 技术文件名称:MPLSv1.0软件模块测试规程
💻 C
📖 第 1 页 / 共 2 页
字号:
    genLblTlv->baseTlv.flags.flags.type = MPLS_GENLBL_TLVTYPE;
    genLblTlv->baseTlv.length           = MPLS_LBLFIXLEN;
    genLblTlv->label = genlabel;
}

/***********************************************************************/
/* FUNCTION NAME  : atmlbltolblmsg()
/* DESCRIPTION:   : atm  label proecss
/*  INPUT         : unsigned short      vpi,
                    unsigned short      vci,
                    mplsLdpAtmLblTlv_t  *atmLblTlv
/*  OUTPUT        : void
/*  AUTHOR/DATE   : shi.zhaohui/ 02.06.19
/*  GLOBAL        : none
/* History        :
/************************************************************************/
void  atmlbltolblmsg(unsigned short vpi, unsigned short vci,  mplsLdpAtmLblTlv_t  *atmLblTlv)
{

    atmLblTlv->baseTlv.flags.flags.uBit = 0;
    atmLblTlv->baseTlv.flags.flags.fBit = 0;
    atmLblTlv->baseTlv.flags.flags.type = MPLS_ATMLBL_TLVTYPE;
    atmLblTlv->baseTlv.length           = MPLS_LBLFIXLEN;
    atmLblTlv->flags.flags.vpi          = vpi;
    atmLblTlv->vci		   		      = vci;
    atmLblTlv->flags.flags.res          = 0;
    atmLblTlv->flags.flags.v        	  = 0;
}



/***********************************************************************/
/* FUNCTION NAME  : fectlvtolblmsg()
/* DESCRIPTION:   : fec tlv  proecss
/*  INPUT         : unsigned short  FecType,
                    unsigned long   FecAddrLen,
                    unsigned long   FecAddr,
                    mplsLdpFecTlv_t *fecTlv
/*  OUTPUT        : void
/*  AUTHOR/DATE   : shi.zhaohui/ 02.06.19
/*  GLOBAL        : none
/* History        :
/************************************************************************/
void  fectlvtolblmsg(unsigned short FecType, unsigned long FecAddrLen,
                        unsigned long FecAddr, mplsLdpFecTlv_t *fecTlv )
{
    fecTlv->baseTlv.flags.flags.uBit = 0;
    fecTlv->baseTlv.flags.flags.fBit = 0;
    fecTlv->baseTlv.flags.flags.type = MPLS_FEC_TLVTYPE;
    fecTlv->numberFecElements = 1;
    if(FecType == MPLS_WC_FEC)
    {
        fecTlv->wcElemExists = 1;
        fecTlv->fecElemTypes[0] = FecType;
        fecTlv->fecElArray[0].wildcardEl.type = FecType;
        fecTlv->baseTlv.length = 1;
    }
    else if(FecType == MPLS_CRLSP_FEC)
    {
        fecTlv->fecElemTypes[0] = FecType;
        fecTlv->fecElArray[0].crlspEl.type = FecType;
        fecTlv->baseTlv.length = MPLS_FEC_CRLSPLEN;
    }
    else if(FecType == MPLS_PREFIX_FEC)
    {
        fecTlv->fecElArray[0].addressEl.type = FecType;
        fecTlv->fecElArray[0].addressEl.preLen = FecAddrLen;
        fecTlv->fecElArray[0].addressEl.address = FecAddr;
        fecTlv->fecElArray[0].addressEl.addressFam = 1;
        fecTlv->fecElemTypes[0] = FecType;
        fecTlv->baseTlv.length = MPLS_FEC_ELEMTYPELEN + MPLS_FEC_PRELENLEN +
                                 MPLS_FEC_ADRFAMLEN + 4;
    }
    else if(FecType == MPLS_HOSTADR_FEC)
    {
        fecTlv->fecElArray[0].addressEl.type = FecType;
        fecTlv->fecElArray[0].addressEl.preLen = MPLS_FEC_HOSTADDR;
        fecTlv->fecElArray[0].addressEl.address = FecAddr;
        fecTlv->fecElArray[0].addressEl.addressFam = 1;
        fecTlv->fecElemTypes[0] = FecType;
        fecTlv->baseTlv.length = MPLS_FEC_ELEMTYPELEN + MPLS_FEC_PRELENLEN +
                                 MPLS_FEC_ADRFAMLEN + 4;
    }
}

/***********************************************************************/
/* FUNCTION NAME  : SendTcpMsg()
/* DESCRIPTION:   : send all message from prot_tcp
/*  INPUT         : mplsLdpSession_t    * session,
                    unsigned short      eventType,
                    void                * inputEvent
/*  OUTPUT        : void
/*  AUTHOR/DATE   : shi.zhaohui/ 02.06.19
/*  GLOBAL        : none
/* History        :
/************************************************************************/
short  SendTcpMsg
(mplsLdpSession_t * session, unsigned short eventType, void * inputEvent)
{
    mplsLdpHeader_t         pduHeader;
    unsigned short    		pduSize;
	long 					sizeTemp;

	pduHeader.protocolVersion = PROTOCOL_VERSION;
	pduHeader.lsrAddress = session->entityLdpId.lsrAddress;
	pduHeader.labelSpace = session->entityLdpId.labelSpace;

	/* 1. PDU头的参数设置 */
	pduSize = MPLS_LDP_HDRSIZE;

	/* 2. 编码外部消息 */
	switch (eventType)
	{
		case MPLS_LBLREQ_MSGTYPE:

			sizeTemp = Mpls_encodeLdpLblReqMsg((mplsLdpLblReqMsg_t *)inputEvent,
				(pduBuffer + pduSize),(MAX_PDU_LENGTH - pduSize));
			#if LDP_DEBUG
	        	#ifdef __BGS10_MPLS_DEBUG
					printf("====== MPLS_PSEND REQUEST message ======");

				#endif
			#endif
            break;

		case MPLS_LBLMAP_MSGTYPE:

			sizeTemp = Mpls_encodeLdpLblMapMsg((mplsLdpLblMapMsg_t *)inputEvent,
				(pduBuffer + pduSize),(MAX_PDU_LENGTH - pduSize));

			if (sizeTemp > 0)
			#ifdef __BGS10_MPLS_DEBUG
				printf("====== MPLS_PSEND MAPPING message ======");
			#endif
			break;

		case MPLS_LBLABORT_MSGTYPE:

		    sizeTemp = Mpls_encodeLdpLblAbortMsg((mplsLdpLblAbortMsg_t *)inputEvent,
				(pduBuffer + pduSize),(MAX_PDU_LENGTH - pduSize));

			if (sizeTemp > 0)
			#ifdef __BGS10_MPLS_DEBUG
				printf("====== MPLS_PSEND LBLABORT message ======");
			#endif
			break;

		case MPLS_LBLREL_MSGTYPE:

			sizeTemp = Mpls_encodeLdpLbl_W_R_Msg((mplsLdpLbl_W_R_Msg_t *)inputEvent,
				(pduBuffer + pduSize),(MAX_PDU_LENGTH - pduSize));
			if (sizeTemp > 0)
			#ifdef __BGS10_MPLS_DEBUG
				printf("====== MPLS_PSEND LBLREL message ======");
			#endif
			break;

		case MPLS_LBLWITH_MSGTYPE:

		    sizeTemp = Mpls_encodeLdpLbl_W_R_Msg((mplsLdpLbl_W_R_Msg_t *)inputEvent,
				(pduBuffer + pduSize),(MAX_PDU_LENGTH - pduSize));
			if (sizeTemp > 0)
			#ifdef __BGS10_MPLS_DEBUG
				printf("====== MPLS_PSEND LBLWITH message ======");
			#endif
			break;

	    case MPLS_INIT_MSGTYPE:

	        sizeTemp = Mpls_encodeLdpInitMsg ((mplsLdpInitMsg_t *)inputEvent,
				(pduBuffer + pduSize),(MAX_PDU_LENGTH - pduSize));
			break;

	    case MPLS_NOT_MSGTYPE:

	        sizeTemp = Mpls_encodeLdpNotMsg ((mplsLdpNotifMsg_t *)inputEvent,
				(pduBuffer + pduSize),(MAX_PDU_LENGTH - pduSize));
			if (sizeTemp > 0)
			#ifdef __BGS10_MPLS_DEBUG
				printf("====== MPLS_PSEND NOTMSG message ======");
			#endif
			break;

	    case MPLS_KEEPAL_MSGTYPE:

	        sizeTemp = Mpls_encodeLdpKeepAliveMsg ((mplsLdpKeepAlMsg_t *)inputEvent,
				(pduBuffer + pduSize),(MAX_PDU_LENGTH - pduSize));
			break;

	    case MPLS_ADDR_MSGTYPE:
	    case MPLS_ADDRWITH_MSGTYPE:

	        sizeTemp = Mpls_encodeLdpAdrMsg ((mplsLdpAdrMsg_t *)inputEvent,
				(pduBuffer + pduSize),(MAX_PDU_LENGTH - pduSize));
			if (sizeTemp > 0)
			#ifdef __BGS10_MPLS_DEBUG
				printf("====== MPLS_PSEND ADDRESS || WITH message ======");
			#endif
			break;
		default: 	break;
	}

	if (sizeTemp < 0)
	{
	    printf("Message  encode  error!\n");
	    return LDP_FALSE;
	}
	pduSize += sizeTemp;

	/* 3. 构造PDU的header */
	pduHeader.pduLength	= (unsigned short)(pduSize - MPLS_TLVFIXLEN);
	sizeTemp = Mpls_encodeLdpMsgHeader(&pduHeader, pduBuffer, MPLS_LDP_HDRSIZE);
	if (sizeTemp < 0)
	{
	    printf("PduHeader  encode  error!\n");
	    return LDP_FALSE;
	}

	/* 4. 发送TCP包 */
	udptcpMsg.ProtType	    = PROT_TCP;
	udptcpMsg.LocalIpaddr 	= session->localIpaddr;
	udptcpMsg.PeerIpaddr 	= session->peerIpaddr;
	udptcpMsg.LocalPort 	= session->LocalPort;
	udptcpMsg.PeerPort 	    = session->PeerPort;
	memcpy(udptcpMsg.pdu,pduBuffer,pduSize);
	udptcpMsg.pdulen		= pduSize;
	sizeTemp                = pduSize + LDPMSG_COMMHEADSIZE;

/*	ASEND(MSG_SEND_REQ,&udptcpMsg,sizeTemp,udptcpPid);  */
    if(eppc_init_status()) 
	{
	    send_ldpmsg_to_eppc(3, &udptcpMsg, 0);
	}

//    printf(" !!!send message on tcp link localIpaddr %x,PeerIpaddr %x,LocalPort %d,PeerPort %d !!!",
//        udptcpMsg.LocalIpaddr,udptcpMsg.PeerIpaddr,udptcpMsg.LocalPort,udptcpMsg.PeerPort);
    return LDP_TRUE;
}

⌨️ 快捷键说明

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