📄 performance.c
字号:
while(TempUpCB){ /* the first three bit of waitflag are not all zero*/
if(mpls_lblmsg_req.req_num>=Msg_buf_num)
return 0;
if(TempUpCB->waitflag&0x40){ /* need to do FecLable process */
if(lblmsg_wait_Upproce(TempUpCB,TempFec)){
TempUpCB->waitflag=(TempUpCB->waitflag)&0xbf;
if(!(TempUpCB->waitflag&0xe0)){
UpCB_locat_adjust(TempUpCB,TempFec,0x3,&FecDelFlag);
if(FecDelFlag){
TempFec = Mpls_bufWait_Lblmsglink.link;
break;
}
/* adjust the DownCB node if its waitflag's first three bits are all zero*/
TempUpCB = (TempFec->up_cb_list).link;
}
else TempUpCB = TempUpCB->prev;
}
else TempUpCB = TempUpCB->prev;
}
else TempUpCB = TempUpCB->prev;
if(mpls_lblmsg_req.req_num == Msg_buf_num)
return 1;
}
if(FecDelFlag){
FecDelFlag = 0;
continue;
}
}
TempFec = TempFec->LblMsgNext;
}
}
else return 0;
}
short lblmsg_wait_Upproce(upCb,fec)
mplsLdpUpCB * upCb;
mplsLdpFecEntry * fec;
{
uchar UpLblmsgFlag = 0;
mplsLdpSession_t * session = MPLS_NULL;
unsigned long statuscode;
unsigned long msgtype;
uchar lsptype;
ushort i;
UpLblmsgFlag = (upCb->waitmsgtype)&0xf0;
MPLS_INDEX_TO_SESSION(session,upCb->upSessionIndex);
if ( ! session ){
printf("No session !!");
return 0;
}
switch(UpLblmsgFlag){
case 0x10 :
{
printf("UpCB has no Req msg !");
break;
}
case 0x20 :
{
printf("UpCB has no Abort msg !");
break;
}
case 0x40 :
{
snd_lblmap_tlvpro(session,(void*)fec,(void *)upCb,LDP_HOP_LSP);
return 1;
}
case 0x30 :
{
printf("UpCB has no Rel msg !");
break;
}
case 0x80 :
{
snd_lblwith_tlvpro(session,fec,upCb,LDP_HOP_LSP);
return 1;
}
case 0xc0 :
{
{
/* 判断指向消息类型 */
lsptype = (upCb->waitmsgtype)&0xf;
switch(lsptype){
case 0x1:
msgtype = MPLS_HELLO_MSGTYPE;
break ;
case 0x2:
msgtype = MPLS_INIT_MSGTYPE;
break ;
case 0x3:
msgtype = MPLS_KEEPAL_MSGTYPE;
break ;
case 0x4:
msgtype = MPLS_ADDR_MSGTYPE;
break ;
case 0x5:
msgtype = MPLS_ADDRWITH_MSGTYPE;
break ;
case 0x6:
msgtype = MPLS_LBLREQ_MSGTYPE;
break ;
case 0x7:
msgtype = MPLS_LBLABORT_MSGTYPE;
break ;
case 0x8:
msgtype = MPLS_LBLMAP_MSGTYPE;
break ;
case 0x9:
msgtype = MPLS_LBLWITH_MSGTYPE;
break ;
case 0xa:
msgtype = MPLS_LBLREL_MSGTYPE;
break ;
case 0xb:
msgtype = MPLS_NOT_MSGTYPE;
break ;
default:
printf("Unnown Msgtype!!!!!!performance");
return MPLS_FALSE;
}
/* 判断状态tlv类型*/
lsptype = (upCb->waitnotype)&0x3f;
switch(lsptype){
case 0x1:
statuscode = SUCCESS;
break;
case 0x2:
statuscode = BADLDPID;
break;
case 0x3:
statuscode = BADPROTVER;
break;
case 0x4:
statuscode = BADPDULEN;
break;
case 0x5:
statuscode = UNKNOWNMSGTYP;
break;
case 0x6:
statuscode = BADMSGLEN;
break;
case 0x7:
statuscode = UNKNOWNTLV;
break;
case 0x8:
statuscode = BADTLVLEN;
break;
case 0x9:
statuscode = MALFORMTLVVAL;
break;
case 0xa:
statuscode = HOLDTIMEEXP;
break;
case 0xb:
statuscode = SHUT_DOWN;
break;
case 0xc:
statuscode = LOOPDETECT;
break;
case 0xd:
statuscode = UNKNOWNFEC;
break;
case 0xe:
statuscode = NOROUTE;
break;
case 0xf:
statuscode = NOLBLRESRC;
break;
case 0x10:
statuscode = LBLRESRCAVA;
break;
case 0x11:
statuscode = SREJNOHELLO;
break;
case 0x12:
statuscode = SREJPARMADEVER;
break;
case 0x13:
statuscode = SREJPARMMPDUL;
break;
case 0x14:
statuscode = SREJPARMLBLRNG;
break;
case 0x15:
statuscode = KEEPALTIMEEXP;
break;
case 0x16:
statuscode = LBLREQAB;
break;
case 0x17:
statuscode = MISSPARAMETER;
break;
case 0x18:
statuscode = BADERTLVERR;
break;
case 0x19:
statuscode = BADSTRICNERR;
break;
case 0x1a:
statuscode = BADLOOSNERR;
break;
case 0x1b:
statuscode = BADINITERHOPER;
break;
case 0x1c:
statuscode = RESRCUNAVA;
break;
case 0x1d:
statuscode = TRAFPARAUNAVA;
break;
case 0x1e:
statuscode = SETUPABORT;
break;
case 0x1f:
statuscode = SHUTDOWN_REC;
break;
case 0x20:
statuscode = SHUTDOWN_SENT;
break;
case 0x21:
statuscode = SESSATTEMPED;
break;
default:
printf("Unknown statuscode of performance!!!!");
return MPLS_FALSE;
}
sndnotifymsgproc(session, statuscode,upCb->msgid,msgtype);
break;
}
}
default:return 0;
return 0;
}
}
short lblmsg_wait_Downproce(DownCb,fec)
mplsLdpDownCB * DownCb;
mplsLdpFecEntry * fec;
{
uchar DownLblmsgFlag = 0;
mplsLdpSession_t * session = MPLS_NULL;
ushort i;
DownLblmsgFlag = (DownCb->waitmsgtype)&0xf0;
MPLS_INDEX_TO_SESSION(session,DownCb->downSessionIndex);
if(!session){
printf("No session!!");
return 0;
}
switch(DownLblmsgFlag){
case 0x10 :
{
snd_lblreq_tlvpro(session,fec,DownCb,LDP_HOP_LSP);
return 1;
}
case 0x20 :
{
snd_lblabort_tlvpro(session,fec,DownCb,LDP_HOP_LSP);
return 1;
}
case 0x40 :
{
printf("DownCB has no mapping msg !");
break;
}
case 0x30 :
{
snd_lblrel_tlvpro(session,fec,DownCb,LDP_HOP_LSP);
return 1;
}
case 0x80 :
{
printf("DownCB has no withdraw msg !");
break;
}
case 0xe0 :
{
break;
}
default:return 0;
return 0;
}
}
short lblmsg_wait_Lspproce(LspCb,fec)
mplsLdpLspCB * LspCb;
void * fec;
{
uchar LspLblmsgFlag = 0;
mplsLdpSession_t * session = MPLS_NULL;
unsigned long statuscode;
unsigned long msgtype;
ushort i;
unsigned char lsptype;
LspLblmsgFlag = (LspCb->waitmsgtype)&0xc0;
if(LspLblmsgFlag){
switch(LspLblmsgFlag){
case 0x40 : /*MPLS_LBLMAP_MSGTYPE */
{
MPLS_INDEX_TO_SESSION(session,LspCb->upSessionIndex);
if(!session)
{
DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_LSP,"lblmsg_wait_Lspproce MPLS_LBLMAP_MSGTYPE,No session %x!!\n",LspCb->upifIndex);
printf("lblmsg_wait_Lspproce MPLS_LBLMAP_MSGTYPE,No session %x!!\n",LspCb->upifIndex);
break;
}
msgtype = LspCb->lspType;
sndlblmsgtlvproc(session,fec,LspCb,MPLS_LBLMAP_MSGTYPE,msgtype);
break;
}
case 0x80 : /*MPLS_LBLWITH_MSGTYPE */
{
MPLS_INDEX_TO_SESSION(session,LspCb->upSessionIndex);
if(!session){
DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_LSP,"lblmsg_wait_Lspproce MPLS_LBLWITH_MSGTYPE,No session %x!!\n",LspCb->upifIndex);
printf("lblmsg_wait_Lspproce MPLS_LBLWITH_MSGTYPE,No session %x!!\n",LspCb->upifIndex);
break;
}
msgtype = LspCb->lspType;
sndlblmsgtlvproc(session,fec,LspCb,MPLS_LBLWITH_MSGTYPE,msgtype);
break;
}
case 0xc0 : /*MPLS_NOT_MSGTYPE*/
{
MPLS_INDEX_TO_SESSION(session,LspCb->upSessionIndex);
if(!session){
DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_LSP,"lblmsg_wait_Lspproce MPLS_NOT_MSGTYPE,No session %x!!\n",LspCb->upifIndex);
printf("lblmsg_wait_Lspproce MPLS_NOT_MSGTYPE,No session %x!!\n",LspCb->upifIndex);
break;
}
/* 判断指向消息类型 */
lsptype = (LspCb->waitmsgtype)&0xf;
switch(lsptype){
case 0x1:
msgtype = MPLS_HELLO_MSGTYPE;
break ;
case 0x2:
msgtype = MPLS_INIT_MSGTYPE;
break ;
case 0x3:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -