📄 tlv_comm.c
字号:
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 + -