📄 ldpmacro.h
字号:
/* history : wengqing 2002/12/2 crlsp search,if exist,add process */
/* wengqing 2003.1.16 modify judgement of crlspCb.status */
/* wengqing 2003.1.16 modify method of search ,and judge down msgtype */
/* wengqing 2003.2.20 modify status to msgtype */
/* wengqing 2003.3.10 modify method of search with atm label */
#ifndef LDP_MACROS_H
#define LDP_MACROS_H
#include "ldp.h"
/* macros */
#define MPLS_RELEASE_GEN_LABEL mpls_lms_rel_genlabel
#define MPLS_HUNT_GEN_LABEL mpls_lms_get_genlabel
#define MPLS_SEND_NOTIFY(S,T,I,P) sndnotifymsgproc(S,T,I,P)
#define MPLS_INDEX_TO_SESSION(session,index) \
{ \
ldpMibSessionIndexReq_t session_index; \
session_index.sessionIndex = index; \
session_index.indexFlag = 1; \
session = (mplsLdpSession_t *)MibSession(&session_index, \
LDP_SEARCH); \
}
#define MPLS_INDEX_TO_HELLO(hello,index) \
{ \
ldpMibHelloIndexReq_t hello_index; \
hello_index.helloIndex = index; \
hello_index.indexFlag = 1; \
hello = (mplsLdpHello_t *)MibHello(&hello_index,LDP_SEARCH);\
}
#define MPLS_CRFECCB_SEARCH(I,LSPID,crLspEntry) \
crLspEntry = MPLS_NULL; \
MPLS_MEMSET(&t_crfec_key,0,sizeof(mpls_crfec_key)); \
t_crfec_key.ingressid = I; \
t_crfec_key.locallspid = LSPID; \
crLspEntry = MPLS_AVL_FIND(g_crfec_avl_tree,&t_crfec_key); \
/*crLspEntry should get buffer here */
#define MPLS_CRFECCB_CREATE(id,lspid,crLspEntry) \
crLspEntry = MPLS_NULL; \
MPLS_MEMSET(&t_crfec_key,0,sizeof(mpls_crfec_key)); \
t_crfec_key.ingressid = id; \
t_crfec_key.locallspid = lspid; \
MPLS_MEM_ALLOC(crLspEntry,(mplsLdpCrLsp *), \
sizeof(mplsLdpCrLsp),mem_mgr[IUMEM_LDP_CRFEC]);\
if(crLspEntry) \
{ \
MPLS_MEMSET(crLspEntry,0,sizeof(mplsLdpCrLsp)); \
MPLS_AVL_INIT_NODE(crLspEntry->crfec_avl_node, crLspEntry, \
&crLspEntry->crfec_key); \
crLspEntry->crfec_key = t_crfec_key; \
MPLS_AVL_INSERT_OR_FIND(g_crfec_avl_tree, \
crLspEntry->crfec_avl_node); \
crLspEntry->crlspCb.selffec = (void *)crLspEntry; \
} \
/* wengqing add crfec release lspIndex */
#define MPLS_CRFECCB_DELETE(ingressid,locallspid,crLspEntry) \
if(crLspEntry) \
{ \
if(MPLS_AVL_IN_TREE(crLspEntry->crfec_avl_node)) \
{ \
MPLS_REL_CRLSP_INDEX((crLspEntry->crlspCb.lspIndex)); \
MPLS_AVL_DELETE(g_crfec_avl_tree,crLspEntry->crfec_avl_node);\
MPLS_MEM_FREE(crLspEntry,mem_mgr[IUMEM_LDP_CRFEC]);\
} \
} \
else \
{ \
MPLS_CRFECCB_SEARCH(ingressid,locallspid,crLspEntry) \
if(crLspEntry) \
{ \
MPLS_REL_CRLSP_INDEX((crLspEntry->crlspCb.lspIndex)); \
MPLS_AVL_DELETE(g_crfec_avl_tree,(crLspEntry)->crfec_avl_node);\
MPLS_MEM_FREE(crLspEntry,mem_mgr[IUMEM_LDP_CRFEC]);\
} \
} \
#define MPLS_ADDRESS_ADD(addr) \
{ \
mpls_local_addr * addrEntry = MPLS_NULL; \
MPLS_MEM_ALLOC(addrEntry,(mpls_local_addr *), \
sizeof(mpls_local_addr),mem_mgr[IUMEM_LDP_ADDR]);\
if(addrEntry) \
{ \
MPLS_MEMSET(addrEntry,0,sizeof(mpls_local_addr)); \
MPLS_AVL_INIT_NODE(addrEntry->addr_avl_node, addrEntry,\
&addrEntry->addr_key); \
addrEntry->addr_key = ( addr ); \
MPLS_AVL_INSERT_OR_FIND(g_local_address_avl_tree, \
addrEntry->addr_avl_node); \
} \
else \
{ \
MPLS_ERR_LOG("Address Add Fail"); \
} \
}
#define MPLS_ADDRESS_SEARCH(addr,addrEntry) \
(addrEntry) = MPLS_NULL; \
(addrEntry) = MPLS_AVL_FIND(g_local_address_avl_tree,&(addr));\
#define MPLS_ADDRESS_DEL(addr) \
{ \
mpls_local_addr * addrEntry = MPLS_NULL; \
MPLS_ADDRESS_SEARCH(addr,addrEntry) \
if(addrEntry) \
{ \
MPLS_AVL_DELETE(g_local_address_avl_tree,(addrEntry)->addr_avl_node);\
MPLS_MEM_FREE(addrEntry,mem_mgr[IUMEM_LDP_ADDR]);\
} \
}
#define MPLS_WALK_HELLO_BEGIN(session,hello) \
for(t = 0; t < SESSION_OWNED_HELLO; t++) \
{ \
if(session->helloArray[t] != 0x0) \
{ \
MPLS_INDEX_TO_HELLO(hello,session->helloArray[t]); \
#define MPLS_WALK_HELLO_END(session,hello) \
} \
} \
#define MPLS_FEC_SEARCH(Addr,AddrLen,fecEntry) \
(fecEntry) = MPLS_NULL; \
MPLS_MEMSET(&t_fec_key,0,sizeof(mpls_fec_key)); \
t_fec_key.mplsFecAddr = (Addr); \
t_fec_key.mplsLdpFecAddrLen = (AddrLen); \
(fecEntry) = MPLS_AVL_FIND(g_fec_avl_tree,&t_fec_key); \
#define MPLS_FEC_CREATE(Addr,AddrLen,fecEntry) \
{ \
fecEntry = MPLS_NULL; \
MPLS_MEMSET(&t_fec_key,0,sizeof(mpls_fec_key)); \
t_fec_key.mplsFecAddr = Addr; \
t_fec_key.mplsLdpFecAddrLen = AddrLen; \
MPLS_MEM_ALLOC(fecEntry,(mplsLdpFecEntry *), \
sizeof(mplsLdpFecEntry),mem_mgr[IUMEM_LDP_FEC]);\
if(fecEntry) \
{ \
MPLS_MEMSET(fecEntry,0,sizeof(mplsLdpFecEntry)); \
MPLS_AVL_INIT_NODE(fecEntry->fec_avl_node, fecEntry, \
&fecEntry->fec_key); \
fecEntry->fec_key = t_fec_key; \
fecEntry->mplsLdpFecType = AddrLen == 32 ? 2 : 2; \
fecEntry->mplsFecAddrFamily = 1; \
MPLS_AVL_INSERT_OR_FIND(g_fec_avl_tree, \
fecEntry->fec_avl_node); \
} \
}
/* free buffer */
#define MPLS_FEC_DELETE(mplsFecAddr,mplsLdpFecAddrLen,fecEntry) \
if(fecEntry) \
{ \
if(MPLS_AVL_IN_TREE(fecEntry->fec_avl_node)) \
{ \
MPLS_RELEASE_GEN_LABEL(fecEntry->localGenLabel); \
MPLS_AVL_DELETE(g_fec_avl_tree,fecEntry->fec_avl_node); \
MPLS_MEM_FREE(fecEntry,mem_mgr[IUMEM_LDP_FEC]); \
} \
} \
else \
{ \
MPLS_FEC_SEARCH(mplsFecAddr,mplsLdpFecAddrLen, \
fecEntry) \
if(fecEntry) \
{ \
MPLS_RELEASE_GEN_LABEL(fecEntry->localGenLabel); \
MPLS_AVL_DELETE(g_fec_avl_tree,fecEntry->fec_avl_node); \
MPLS_MEM_FREE(fecEntry,mem_mgr[IUMEM_LDP_FEC]); \
} \
} \
#define WALK_FEC_BEGIN(F) \
(F) = MPLS_NULL; \
for((F)= MPLS_AVL_FIRST(g_fec_avl_tree); (F); (F) = MPLS_AVL_NEXT((F)->fec_avl_node))\
{
#define WALK_FEC_END }
#define WALK_ADDRESS_BEGIN(addrEntry) \
(addrEntry) = MPLS_NULL; \
for((addrEntry)= MPLS_AVL_FIRST(g_local_address_avl_tree); \
(addrEntry); (addrEntry) = MPLS_AVL_NEXT((addrEntry)->addr_avl_node))\
{
#define WALK_ADDRESS_END }
#define WALK_CRFEC_BEGIN(CRF) \
(CRF) = MPLS_NULL; \
for((CRF) = MPLS_AVL_FIRST(g_crfec_avl_tree); (CRF); \
(CRF) = MPLS_AVL_NEXT((CRF)->crfec_avl_node)) \
{ \
#define WALK_CRFEC_END }
#define MPLS_CRLSPCB_CREATE(crLspEntry,lspCb) \
lspCb = MPLS_NULL; \
if(lspCb) \
{ \
crLspEntry->crlspCb = *lspCb; \
} \
/* problem crlspCb not a pointer */
#define MPLS_CRLSPCB_DELETE(crLspEntry,lspCb) \
if(lspCb) \
{ \
crLspEntry->crlspCb = (mplsLdpLspCB *)MPLS_NULL; \
} \
#define MPLS_WALK_UP_BEGIN(fecEntry,upCB,t_upCb) \
upCB = MPLS_NULL; \
upCB = (fecEntry)->up_cb_list.first; \
while(upCB) \
{ \
t_upCb = upCB->next; \
#define MPLS_WALK_UP_END(fecEntry,upCB,t_upCb) \
upCB = t_upCb; \
} \
#define MPLS_WALK_LSP_BEGIN(fecEntry,lspCb,t_lspCb) \
lspCb = MPLS_NULL; \
lspCb = (fecEntry)->lsp_cb_list.first; \
while(lspCb) \
{ \
t_lspCb = lspCb->next; \
#define MPLS_WALK_LSP_END(fecEntry,lspCB,t_lspCb) \
lspCB = t_lspCb; \
} \
#define MPLS_WALK_DOWN_BEGIN(fecEntry,downCB,t_downCb) \
downCB = MPLS_NULL; \
downCB = (fecEntry)->down_cb_list.first; \
while(downCB) \
{ \
t_downCb = downCB->next; \
#define MPLS_WALK_DOWN_END(fecEntry,downCB,t_downCb) \
downCB = t_downCb; \
} \
#define MPLS_NETMASK2LENGTH(NetMask,length) \
for(length = 0; length <= 32; length++) \
{ \
if(0xffffffff << (32-length) == NetMask) \
break; \
} \
/* 2003-11-10 lixia add */
#define MPLS_LENGTH2NETMASK(NetMask,length) \
NetMask = 0xffffffff << (32-length);
#define MPLS_UPCB_CREATE(fec,session,upCb) \
upCb = MPLS_NULL; \
MPLS_MEM_ALLOC(upCb,(mplsLdpUpCB *), \
sizeof(mplsLdpUpCB),mem_mgr[IUMEM_LDP_UPCB]); \
if(upCb != MPLS_NULL) \
{ \
(upCb)->selffec = fec; \
(upCb)->next = NULL; \
(upCb)->prev = (fec)->up_cb_list.last; \
if((upCb)->prev != NULL) \
(upCb)->prev->next = (upCb); \
(fec)->up_cb_list.last = (upCb); \
if((fec)->up_cb_list.first == NULL) \
(fec)->up_cb_list.first = (upCb); \
MPLS_INSERT_INTO_UP_LIST(session->up_cb_list,upCb,upCb);\
} \
#define MPLS_UPCB_SEARCH(upsession,upCB,fecEntry) \
upCB = MPLS_NULL; \
MPLS_WALK_UP_BEGIN(fecEntry,upCB,t_upCb); \
if(upCB->upSessionIndex == upsession->index) \
{ \
break; \
} \
MPLS_WALK_UP_END(fecEntry,upCB,t_upCb); \
#define MPLS_UPCB_DELETE(fec,upCb) \
if((fec)->up_cb_list.first == (upCb)) \
(fec)->up_cb_list.first = (upCb)->next; \
if((fec)->up_cb_list.last == (upCb)) \
(fec)->up_cb_list.last = (upCb)->prev; \
if((upCb)->prev != MPLS_NULL) \
(upCb)->prev->next = (upCb)->next; \
if((upCb)->next != NULL) \
(upCb)->next->prev = (upCb)->prev; \
#define MPLS_DOWNCB_CREATE(downsession,downCb,fecEntry) \
downCb = MPLS_NULL; \
MPLS_MEM_ALLOC(downCb,(mplsLdpDownCB *),sizeof(mplsLdpDownCB), \
mem_mgr[IUMEM_LDP_DOWNCB]); \
if(downCb != MPLS_NULL) \
{ \
(downCb)->selffec = (fecEntry); \
(downCb)->next = NULL; \
(downCb)->prev = (fecEntry)->down_cb_list.last; \
if((downCb)->prev != NULL) \
(downCb)->prev->next = (downCb); \
(fecEntry)->down_cb_list.last = (downCb); \
if((fecEntry)->down_cb_list.first == NULL) \
(fecEntry)->down_cb_list.first = (downCb); \
MPLS_INSERT_INTO_DOWN_LIST(downsession->down_cb_list,downCb,downCb);\
} \
#define MPLS_DOWNCB_SEARCH(fec,session,downCb) \
downCb = MPLS_NULL; \
MPLS_WALK_DOWN_BEGIN(fec,downCb,t_downCb) \
if(downCb->downSessionIndex == session->index) \
{ \
break; \
} \
MPLS_WALK_DOWN_END(fec,downCb,t_downCb) \
#define MPLS_DOWNCB_DELETE(fecCb,downCb) \
if((fecCb)->down_cb_list.first == (downCb)) \
(fecCb)->down_cb_list.first = (downCb)->next; \
if((fecCb)->down_cb_list.last == (downCb)) \
(fecCb)->down_cb_list.last = (downCb)->prev; \
if((downCb)->prev != MPLS_NULL) \
(downCb)->prev->next = (downCb)->next; \
if((downCb)->next != NULL) \
(downCb)->next->prev = (downCb)->prev; \
#define MPLS_LSPCB_DELETE(fec,lspCb) \
if((fec)->lsp_cb_list.first == (lspCb)) \
(fec)->lsp_cb_list.first = (lspCb)->next; \
if((fec)->lsp_cb_list.last == (lspCb)) \
(fec)->lsp_cb_list.last = (lspCb)->prev; \
if((lspCb)->prev != MPLS_NULL) \
(lspCb)->prev->next = (lspCb)->next; \
if((lspCb)->next != NULL) \
(lspCb)->next->prev = (lspCb)->prev; \
#define MPLS_FEC_LSPCB_DELETE(fec,lspCb) \
if((fec)->lsp_cb_list.first == (lspCb)) \
(fec)->lsp_cb_list.first = (lspCb)->next; \
if((fec)->lsp_cb_list.last == (lspCb)) \
(fec)->lsp_cb_list.last = (lspCb)->prev; \
if((lspCb)->prev != MPLS_NULL) \
(lspCb)->prev->next = (lspCb)->next; \
if((lspCb)->next != NULL) \
(lspCb)->next->prev = (lspCb)->prev; \
MPLS_REL_LSP_INDEX(lspCb->lspIndex); \
MPLS_MEMSET(lspCb,0,sizeof(mplsLdpLspCB)); \
MPLS_MEM_FREE(lspCb,mem_mgr[IUMEM_LDP_LSPCB]); \
#define MPLS_SESSION_MATCH_CB_UP(session,upCb,yes) \
if(session->index == upCb->upSessionIndex) \
{ \
yes = MPLS_TRUE; \
} \
#define MPLS_SESSION_MATCH_CB_DOWN(session,downCb,yes) \
if(session->index == downCb->downSessionIndex) \
{ \
yes = MPLS_TRUE; \
}
#define MPLS_SESSION_MATCH_LSPCB_UP(session,lspCb,yes) \
if(lspCb->nodeType == MPLS_NODE_EGRESS || \
lspCb->nodeType == MPLS_NODE_INTERM || \
lspCb->nodeType == MPLS_NODE_INTERM_EGRESS) \
{ \
if(session->index == lspCb->upSessionIndex) \
{ \
yes = MPLS_TRUE; \
} \
} \
#define MPLS_SESSION_MATCH_LSPCB_DOWN(session,lspCb,yes) \
if(lspCb->nodeType == MPLS_NODE_INGRESS|| \
lspCb->nodeType == MPLS_NODE_INTERM || \
lspCb->nodeType == MPLS_NODE_INTERM_INGRESS) \
{ \
if(session->index == lspCb->downSessionIndex) \
{ \
yes = MPLS_TRUE; \
} \
} \
#define MPLS_SESSION_DISTRIBUT_MODE(session,dismode) \
dismode = session->labelAdvertisement \
#define MPLS_PEND_SESSION_DOWN(downsession,downCB,fecCb) \
MPLS_WALK_DOWN_BEGIN(fecCb,downCB,t_downCb) \
if(downCB->state == RESPONSE_AWAITED) \
{ \
downsession->index = downCB->downSessionIndex; \
} \
MPLS_WALK_DOWN_END(fecCb,downCB,t_downCb) \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -