📄 performance.h
字号:
/**********************************************************************
/ 0 1 2 3 4 5 6 7
/ - - - - - - - -
/| a | b |c | d|e |
/a 区域(3bits)为待处理类型区域 “0”位标志与C进程处理
/ “1”位标志与TCP进程(A041)处理
/ “2”位标志与标记整合处理
/b 区域(2bits)为C进程处理类型 00表示BANDWIDTH_REQ
/ 01表示CRPVC_REQ
/ 10表示RLSBW_REQ
/ 11表示RLSPVC_REQ
/c 区域(1bit)为标记整合进程处理类型 0表示 LDP_FWD_CREATE
/ 1表示 LDP_FWD_CLOSE
/d 区域(1bit)标记LSP类型 0表示LDP_CR_LSP
1表示LDP_HOP_LSP
e 区域(1bit)标记控制块是否将删除
/
/*********************************************************************/
/*#define MPLS_HELLO_MSGTYPE 0x01 /* hello msg */
/*#define MPLS_INIT_MSGTYPE 0x02 /* initialization msg */
/*#define MPLS_KEEPAL_MSGTYPE 0x03 /* keep alive msg */
/*#define MPLS_ADDR_MSGTYPE 0x04 /* address msg */
/*#define MPLS_ADDRWITH_MSGTYPE 0x05 /* address withdraw msg */
/*#define MPLS_LBLREQ_MSGTYPE 0x06 /* label request msg */
/*#define MPLS_LBLABORT_MSGTYPE 0x07 /* label abort request msg */
/*#define MPLS_LBLMAP_MSGTYPE 0x08 /* label mapping msg */
/*#define MPLS_LBLWITH_MSGTYPE 0x09 /* label withdraw msg */
/*#define MPLS_LBLREL_MSGTYPE 0x10 /* label release msg */
/*#define MPLS_NOT_MSGTYPE 0x11 /* notification msg */
/* - - - - - - - -
/* 0 1 2 3 4 5 6 7
/* U U D D
U: 01 M
U: 10 W
U: 11 N
D: 01 R
D: 10 A
D: 11 RL
/*
/*消息类型占用四位4-7,
如果是通知消息,后四位指的是通知消息指向的消息
MPLS_HELLO_MSGTYPE 0001 0x1 /* hello msg
MPLS_INIT_MSGTYPE 0010 0x2 /* initialization msg
MPLS_KEEPAL_MSGTYPE 0011 0x3 /* keep alive msg
MPLS_ADDR_MSGTYPE 0100 0x4 /* address msg
MPLS_ADDRWITH_MSGTYPE 0101 0x5 /* address withdraw msg
MPLS_LBLREQ_MSGTYPE 0110 0x6 /* label request msg
MPLS_LBLABORT_MSGTYPE 0111 0x7 /* label abort request msg
MPLS_LBLMAP_MSGTYPE 1000 0x8 /* label mapping msg
MPLS_LBLWITH_MSGTYPE 1001 0x9 /* label withdraw msg
MPLS_LBLREL_MSGTYPE 1010 0xa /* label release msg
MPLS_NOT_MSGTYPE 1011 0xb /* notification msg
/*
/*
通知消息标志位
/* - - - - - - - -
/* 0 1 2 3 4 5 6 7
2-7 通知类型
/* Notify消息中所用的status code */
/*****************************************************************************************
SUCCESS 000001 0x1
BADLDPID 000010 0x2
BADPROTVER 000011 0x3
BADPDULEN 000100 0x4
UNKNOWNMSGTYP 000101 0x5
BADMSGLEN 000110 0x6
UNKNOWNTLV 000111 0x7
BADTLVLEN 001000 0x8
MALFORMTLVVAL 001001 0x9
HOLDTIMEEXP 001010 0xa
SHUT_DOWN 001011 0xb
LOOPDETECT 001100 0xc
UNKNOWNFEC 001101 0xd
NOROUTE 001110 0xe
NOLBLRESRC 001111 0xf
LBLRESRCAVA 010000 0x10
SREJNOHELLO 010001 0x11
SREJPARMADEVER 010010 0x12
SREJPARMMPDUL 010011 0x13
SREJPARMLBLRNG 010100 0x14
KEEPALTIMEEXP 010101 0x15
LBLREQAB 010110 0x16
MISSPARAMETER 010111 0x17
BADERTLVERR 011000 0x18
BADSTRICNERR 011001 0x19
BADLOOSNERR 011010 0x1a
BADINITERHOPER 011011 0x1b
RESRCUNAVA 011100 0x1c
TRAFPARAUNAVA 011101 0x1d
SETUPABORT 011110 0x1e
SHUTDOWN_REC 011111 0x1f
SHUTDOWN_SENT 100000 0x20
SESSATTEMPED 100001 0x21
/*******************************************************************************************/
/* Notify消息中所用的status code
#define SUCCESS 0x00000000
#define BADLDPID 0x00000001
#define BADPROTVER 0x00000002
#define BADPDULEN 0x00000003
#define UNKNOWNMSGTYP 0x00000004
#define BADMSGLEN 0x00000005
#define UNKNOWNTLV 0x00000006
#define BADTLVLEN 0x00000007
#define MALFORMTLVVAL 0x00000008
#define HOLDTIMEEXP 0x00000009
#define SHUT_DOWN 0x0000000A
#define LOOPDETECT 0x0000000B
#define UNKNOWNFEC 0x0000000C
#define NOROUTE 0x0000000D
#define NOLBLRESRC 0x0000000E
#define LBLRESRCAVA 0x0000000F
#define SREJNOHELLO 0x00000010
#define SREJPARMADEVER 0x00000011
#define SREJPARMMPDUL 0x00000012
#define SREJPARMLBLRNG 0x00000013
#define KEEPALTIMEEXP 0x00000014
#define LBLREQAB 0x00000015
#define MISSPARAMETER 0x00000016
/* 新增加的状态编码
#define BADERTLVERR 0x04000001
#define BADSTRICNERR 0x04000002
#define BADLOOSNERR 0x04000003
#define BADINITERHOPER 0x04000004
#define RESRCUNAVA 0x04000005
#define TRAFPARAUNAVA 0x04000006
#define SETUPABORT 0x04000007
#define SHUTDOWN_REC 0x08000001
#define SHUTDOWN_SENT 0x08000002
#define SESSATTEMPED 0x08000003
/*
/*********************************************************************/
/**********************************************************************
mplsLdpFecEntry 中添加变量:
mplsLdpFecEntry *XcNext; / 指向下一条待处理Xc /
mplsLdpFecEntry * FecLbNext / 指向下一条待处理标记/
mplsLdpFecEntry *LblMsgNext / 指向下一条待处理消息/
***********************************************************************/
#ifndef LDPPERFORM_H
#define LDPPERFORM_H
#include "_noalign.h"
#define MAX_LDP_LBLMSGREQ_NUM 64
#define XC_WAIT_TIME 50
#define FECLBL_WAIT_TIME 20 /* wengqing modify for session down 2003-5-13 */
#define LBLMSG_WAIT_TIME 20
#define PERFORMANCE_PDU_LEN 4096
/* 与a041模块通信队列中self指向的请求的节点结构 */
typedef struct {
mplsLdpSession_t * session;
unsigned short pdulen;
char *pdu_buffer;
} MPLS_PACK LBLMSG_REQ;
typedef struct {
struct tagLDPMSG_COMM HighMsg;
} MPLS_PACK LBLMSG_HIGHREQ;
typedef struct{
struct _mplsLdpFecEntry *link;
unsigned long num;
struct _mplsLdpFecEntry *last;
}Mpls_bufWait_link;
typedef struct{
struct _mplsLdpCrLsp *link;
unsigned long num;
struct _mplsLdpCrLsp *last;
}Mpls_CR_bufWait_link;
#ifdef PERFOMANCE_NEW
typedef struct{
mplsLdpLspCB *link;
unsigned long num;
mplsLdpLspCB *last;
}Dod_Mpls_bufWait_link;
#endif
/*FEC中添加变量 */
/*mplsLdpFecEntry * XcNext; 指向下一条待处理Xc */
/*mplsLdpFecEntry * FecLbNextl; 指向下一条待处理标记 */
/*mplsLdpFecEntry * LblMsgNext ; 指向下一条待处理消息 */
/*控制块中添加变量 */
/*uchar waitflag; 记录待处理类型 */
/*uchar waitmsgtype; 记录消息类型 */
/*uchar waitnotype; 记录通知消息类型*/
/*session 中添加变量 */
/*
typedef enum
{
IUMEM_LDP_ADDR = 0,
IUMEM_LDP_FEC,
IUMEM_LDP_UPCB,
IUMEM_LDP_DOWNCB,
IUMEM_LDP_CRFEC,
IUMEM_LDP_LSPCB,
IUMEM_LDP_TIMER,
IUMEM_LDP_XC_QUE,
IUMEM_LDP_XC_QUE_LQE, /* by hyh 02-7-20 10:40 */
/* IUMEM_LDP_FECLABEL_QUE,
IUMEM_LDP_FECLABEL_QUE_LQE, /* by hyh 02-7-20 */
/* IUMEM_LDP_LBLMSG_QUE,
IUMEM_LDP_LBLMSG_QUE_LQE,
IUMEM_LDP_LBLMSG_BUFFER,
MAX_LDP_UTIL_MEM_TYPES
}IUMEM_LDP_TYPES;
*/
/* 待处理队列处理流程 */
/*
Func_Xc_wait(){
if(队列剩余空间freecount>0){
while(freecount && Mpls_bufWait_Xclink不为空){
if(mplsLdpFecEntry->
处理Mpls_Xc_bufWait_link中的首节点(proc_waitxclink);
调整Mpls_Xc_bufWait_link链表;
freecount--;
}
}
}
Func_lblmsg_wait(){
while( Mpls_bufWait_lblmsglink不为空){
取首节点;
检查首节点的控制块链表,
if(首节点有待TCP传送处理)
{ 处理Mpls_Xc_bufWait_link中的首节点(proc_waitxclink);
调整Mpls_Xc_bufWait_link链表;
freecount--;
}
else
}
}
Func_lblmsg_wait(){
判断消息类型;
if(为hello和session消息){
if(高优先级缓冲队列有剩余空间)
直接加入到高优先级缓冲队列中
}
else{
查找session;
if(session.pdu_buffer==NULL){
if(freecount>0){
if(申请4K内存成功)
freecount--;
else return FALSE;
重定向session.pdu_buffer;
初始化缓冲队列LblMsg_req节点,并将此节点置入缓冲队列;
}
else return FALSE;
}
消息编码;
if(pdu长度<编码长度){
重置相应缓冲表项的PDU长度;
session.pdu_buffer==NULL;
if(freecount>0){
if(申请4K内存成功)
freecount--;
else return FALSE;
重定向session.pdu_buffer;
初始化缓冲队列LblMsg_req节点,并将此节点置入缓冲队列;
调整pdu长度;
return TRUE
}
else return FALSE;
}
else{
调整pdu长度;
return TRUE;
}
}
} */
short Func_Xc_wait();
short Func_Xc_wait1();
short proc_waitxclink(mplsLdpLspCB *TempLspCB,char* TempFec);
short wait_xc_append(mplsLdpLspCB *LspCBVar,void *pFecEntry,uchar xcflag);
short Func_FecLable_wait();
short Func_FecLable_wait1();
short proc_waitFecLbllink(TempLspCB,TempDownCB , TempFec);
short wait_lspfeclbl_append(mplsLdpLspCB *LspCBVar,void *pFecEntry,uchar xcflag);
short Xc_down_append(mplsLdpDownCB *TempDown,void *pFec);
short wait_crlspfeclbl_append(mplsLdpLspCB *LspCBVar,mplsLdpCrLsp *pFecEntry,uchar xcflag);
short wait_downfeclbl_append(mplsLdpDownCB *DownCBVar,mplsLdpFecEntry *pFecEntry,uchar xcflag);
short Func_Lblmsg_wait();
short Func_Lblmsg_wait1();
short lblmsg_wait_Upproce(upCb,fec);
short lblmsg_wait_Downproce(DownCb,fec);
void CR_LspCB_locat_adjust(TempLspCB,TempFec,waitflag);
short lblmsg_wait_Lspproce(LspCb,fec);
short wait_lsplblmsg_append(LspCBVar,pFecEntry,statuscode,notmsgtype,waitmsgtype);
short wait_uplblmsg_append(upCb,pFecEntry,statuscode,notmsgtype,waitmsgtype);
short wait_downlblmsg_append(LspCBVar,pFecEntry,waitmsgtype);
void UpCB_locat_adjust(TempUpCB,TempFec,waitflag,FecDelFlag);
void DownCB_locat_adjust(TempDownCB,TempFec,waitflag,FecDelFlag);
void LspCB_locat_adjust(TempLspCB,TempFec,waitflag,FecDelFlag);
short lblmsgswitch(unsigned long statuscode,mplsLdpLspCB *LspCBVar);
short upmsgswitch(unsigned long statuscode,mplsLdpUpCB * upCb);
short Func_lblmsg_wait_proce(mplsLdpSession_t * session, unsigned short eventType, void * inputEvent);
short mpls_process_lblmsg_req();
void mpls_lblmsgreq_next();
void mpls_reset_lblmsg_req();
void mpls_lblmsgreq_queue_timeout();
short find_lblmsg_lqe(mplsLdpSession_t * session,MPLS_LQE **templqe);
short walk_down_feclbl(mplsLdpFecEntry * TempFec);
short walk_up_lblmsg(mplsLdpFecEntry * TempFec);
short walk_down_lblmsg(mplsLdpFecEntry * TempFec);
short walk_lsp_feclbl(mplsLdpFecEntry * TempFec);
short walk_lsp_xc(mplsLdpFecEntry * TempFec);
short walk_lsp_lblmsg(mplsLdpFecEntry * TempFec);
void Lsp_Clear_Msg(mplsLdpLspCB * TempLspCB,mplsLdpFecEntry * TempFec);
void Up_Clear_Msg(mplsLdpUpCB * UpCBVar,mplsLdpFecEntry * TempFec);
void Down_Clear_Msg(mplsLdpDownCB *DownCBVar,mplsLdpFecEntry * TempFec);
void mpls_clear_lblmsgreq(mplsLdpSession_t * session);
void lblmsg_req_out(MPLS_LQE *lblmsg_lqe);
void down_out_waitlist(mplsLdpFecEntry *TempFec,mplsLdpDownCB *TempDownCB);
void up_out_waitlist(mplsLdpFecEntry *TempFec,mplsLdpUpCB *TempUpCB);
void lsp_out_waitlist(mplsLdpFecEntry *TempFec,mplsLdpLspCB *TempLspCB);
short Func_CR_FecLable_wait();
short Func_CR_Lblmsg_wait();
short Func_CR_FecLable_wait1();
short Func_CR_Lblmsg_wait1();
/*#ifndef PERFOMANCE_NEW*/
short Func_CR_Xc_wait1();
short Func_CR_Xc_wait();
/*#endif*/
#ifdef PERFOMANCE_NEW
void LspCB_adjust(TempLspCB,waitflag);
short Dod_Func_FecLable_wait();
#endif
#include "_restore.h"
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -