📄 performance.c
字号:
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");
break;
}
/* 判断状态tlv类型*/
lsptype = (LspCb->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!!!!");
break;
}
sndnotifymsgproc(session, statuscode,LspCb->upMsgid,msgtype);
break;
}
default:break;
}
(LspCb->waitmsgtype)&= 0x3f;
}
LspLblmsgFlag = (LspCb->waitmsgtype)&0x30;
if(LspLblmsgFlag)
{
switch(LspLblmsgFlag){
case 0x10: /*MPLS_LBLREQ_MSGTYPE*/
{
MPLS_INDEX_TO_SESSION(session,LspCb->downSessionIndex);
if(!session){
DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_LSP,"lblmsg_wait_Lspproce MPLS_LBLREQ_MSGTYPE,No session %x!!\n",LspCb->downifIndex);
printf("lblmsg_wait_Lspproce MPLS_LBLREQ_MSGTYPE,No session %x!!\n",LspCb->downifIndex);
return 0;
}
lsptype = LspCb->lspType;
sndlblmsgtlvproc(session,fec,LspCb,MPLS_LBLREQ_MSGTYPE,lsptype);
break;
}
case 0x20: /*MPLS_LBLABORT_MSGTYPE*/
{
MPLS_INDEX_TO_SESSION(session,LspCb->downSessionIndex);
if(!session){
DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_LSP,"lblmsg_wait_Lspproce MPLS_LBLABORT_MSGTYPE,No session %x!!\n",LspCb->downifIndex);
printf("lblmsg_wait_Lspproce MPLS_LBLABORT_MSGTYPE,No session %x!!\n",LspCb->downifIndex);
return 0;
}
lsptype = LspCb->lspType;
sndlblmsgtlvproc(session,fec,LspCb,MPLS_LBLABORT_MSGTYPE,lsptype);
break;
}
case 0x30: /*MPLS_LBLREL_MSGTYPE*/
{
MPLS_INDEX_TO_SESSION(session,LspCb->downSessionIndex);
if(!session){
DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_LSP,"lblmsg_wait_Lspproce MPLS_LBLREL_MSGTYPE,No session %x!!\n",LspCb->downifIndex);
printf("lblmsg_wait_Lspproce MPLS_LBLREL_MSGTYPE,No session %x!!\n",LspCb->downifIndex);
return 0;
}
lsptype = LspCb->lspType;
sndlblmsgtlvproc(session,fec,LspCb,MPLS_LBLREL_MSGTYPE,lsptype);
break;
}
default: break;
}
(LspCb->waitmsgtype)&= 0xf;
}
if ((LspCb->waitmsgtype)&0xf0)
return 1;
else return 1;
}
short wait_lsplblmsg_append(LspCBVar,TempFec,statuscode,notmsgtype,waitmsgtype)
mplsLdpLspCB *LspCBVar;
void *TempFec;
unsigned long statuscode;
unsigned long notmsgtype;
unsigned long waitmsgtype;
{
mplsLdpFecEntry *pFecEntry;
uchar tempflag;
uchar true=0;
uchar FecDelFlag=0;
pFecEntry = (mplsLdpFecEntry *)TempFec;
if(((LspCBVar->waitflag)&0x40) != MPLS_NULL)
true = 1;
tempflag = (LspCBVar->waitflag) & 0x40 ;
if(!tempflag){
(LspCBVar->waitflag)|=0x40;
(LspCBVar->waitmsgtype)&=0x0;
(LspCBVar->waitnotype)&=0x0;
/*根据消息类型,置相应标志位 */
switch(waitmsgtype){
case MPLS_LBLMAP_MSGTYPE:
(LspCBVar->waitmsgtype)|=0x40; /*因为是第一次置位,可以不考虑NOTMSG的类型*/
break;
case MPLS_LBLWITH_MSGTYPE:
(LspCBVar->waitmsgtype)|=0x80;
break;
case MPLS_NOT_MSGTYPE:
{
(LspCBVar->waitmsgtype)|=0xc0;
switch(notmsgtype){
case MPLS_HELLO_MSGTYPE :
(LspCBVar->waitmsgtype)|=0x1;
break ;
case MPLS_INIT_MSGTYPE :
(LspCBVar->waitmsgtype)|=0x2;
break ;
case MPLS_KEEPAL_MSGTYPE :
(LspCBVar->waitmsgtype)|=0x3;
break ;
case MPLS_ADDR_MSGTYPE:
(LspCBVar->waitmsgtype)|=0x4;
break ;
case MPLS_ADDRWITH_MSGTYPE:
(LspCBVar->waitmsgtype)|=0x5;
break ;
case MPLS_LBLREQ_MSGTYPE:
(LspCBVar->waitmsgtype)|=0x6;
break ;
case MPLS_LBLABORT_MSGTYPE:
(LspCBVar->waitmsgtype)|=0x7;
break ;
case MPLS_LBLMAP_MSGTYPE:
(LspCBVar->waitmsgtype)|=0x8;
break ;
case MPLS_LBLWITH_MSGTYPE:
(LspCBVar->waitmsgtype)|=0x9;
break ;
case MPLS_LBLREL_MSGTYPE:
(LspCBVar->waitmsgtype)|=0xa;
break ;
case MPLS_NOT_MSGTYPE:
(LspCBVar->waitmsgtype)|=0xb;
break ;
default:
printf("Unkown Msgtype!!!!!!performance");
return MPLS_FALSE;
}
lblmsgswitch(statuscode,LspCBVar);
break;
}
case MPLS_LBLREQ_MSGTYPE:
(LspCBVar->waitmsgtype)|=0x10;
break;
case MPLS_LBLABORT_MSGTYPE:
(LspCBVar->waitmsgtype)|=0x20;
break;
case MPLS_LBLREL_MSGTYPE:
(LspCBVar->waitmsgtype)|=0x30;
break;
default:return 0;
}
}
/*判断是否有冲突的情况 */
else{
/*无上游消息标记位,有下游消息标志位*/
if(!((LspCBVar->waitmsgtype)&0xc0)){
switch(waitmsgtype){
/* 上游直接置位,下游判断冲突情况 */
case MPLS_LBLMAP_MSGTYPE:
(LspCBVar->waitmsgtype)|=0x40; /*因为是第一次置位,可以不考虑NOTMSG的类型*/
break;
case MPLS_LBLWITH_MSGTYPE:
(LspCBVar->waitmsgtype)|=0x80;
break;
case MPLS_NOT_MSGTYPE:
{
(LspCBVar->waitmsgtype)|=0xc0;
switch(notmsgtype){
case MPLS_HELLO_MSGTYPE :
(LspCBVar->waitmsgtype)|=0x1;
break ;
case MPLS_INIT_MSGTYPE :
(LspCBVar->waitmsgtype)|=0x2;
break ;
case MPLS_KEEPAL_MSGTYPE :
(LspCBVar->waitmsgtype)|=0x3;
break ;
case MPLS_ADDR_MSGTYPE:
(LspCBVar->waitmsgtype)|=0x4;
break ;
case MPLS_ADDRWITH_MSGTYPE:
(LspCBVar->waitmsgtype)|=0x5;
break ;
case MPLS_LBLREQ_MSGTYPE:
(LspCBVar->waitmsgtype)|=0x6;
break ;
case MPLS_LBLABORT_MSGTYPE:
(LspCBVar->waitmsgtype)|=0x7;
break ;
case MPLS_LBLMAP_MSGTYPE:
(LspCBVar->waitmsgtype)|=0x8;
break ;
case MPLS_LBLWITH_MSGTYPE:
(LspCBVar->waitmsgtype)|=0x9;
break ;
case MPLS_LBLREL_MSGTYPE:
(LspCBVar->waitmsgtype)|=0xa;
break ;
case MPLS_NOT_MSGTYPE:
(LspCBVar->waitmsgtype)|=0xb;
break ;
default:
printf("Unnown Msgtype!!!!!!performance");
return MPLS_FALSE;
}
lblmsgswitch(statuscode,LspCBVar);
break;
}
case MPLS_LBLABORT_MSGTYPE:
{
/* 已有MPLS_LBLREQ_MSGTYPE,则clear标志位,判断是否要移动LSPCB和FEC*/
if(((LspCBVar->waitmsgtype)&0x30)==0x10){
(LspCBVar->waitmsgtype)&=0x0;
(LspCBVar->waitflag)&=0xbf;
if(!(LspCBVar->waitflag&0x40)){
LspCB_locat_adjust
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -