📄 ldpmacro.h
字号:
#define MPLS_ERR_LOG printf
#define MPLS_RELEASE_GENLABEL(label) \
mpls_lms_rel_genlabel((label))
#define MPLS_LSPCB_CREATE(fecEntry,lspCB) \
lspCB = MPLS_NULL; \
MPLS_MEM_ALLOC(lspCB,(mplsLdpLspCB *),sizeof(mplsLdpLspCB), \
mem_mgr[IUMEM_LDP_LSPCB]); \
if(lspCB != MPLS_NULL) \
{ \
MPLS_MEMSET(lspCB,0,sizeof(mplsLdpLspCB)); \
(lspCB)->selffec = (void *)(fecEntry); \
(lspCB)->next = NULL; \
(lspCB)->prev = (fecEntry)->lsp_cb_list.last; \
if((lspCB)->prev != NULL) \
(lspCB)->prev->next = (lspCB); \
(fecEntry)->lsp_cb_list.last = (lspCB); \
if((fecEntry)->lsp_cb_list.first == NULL) \
(fecEntry)->lsp_cb_list.first = (lspCB); \
} \
#define MPLS_GET_LSP_INDEX ((ldp_get_index())|(0x80000000))
#define MPLS_GET_CRLSP_INDEX ((ldp_get_index())|(0x00000000))
#define MPLS_REL_LSP_INDEX(I) ((ldp_rel_index((I)&(0x7fffffff))))
#define MPLS_REL_CRLSP_INDEX(I) ((ldp_rel_index((I)&(0xffffffff))))
/****************************************************************/
/* insert operation
*/
/****************************************************************/
#define MPLS_INSERT_INTO_UP_LSP_LIST(L,FIRST_E,LAST_E) \
{\
mplsLdpLspCB *LspCBVarjinan = NULL; \
int lsp_list_add_flag_jinan = 0; \
if((L).first) \
LspCBVarjinan = (L).first; \
while(LspCBVarjinan) \
{ \
if(LspCBVarjinan ==(FIRST_E)) \
{ \
lsp_list_add_flag_jinan = 1;\
break; \
}\
else \
LspCBVarjinan = LspCBVarjinan->up_lsp_session_list.next;\
}\
if(!lsp_list_add_flag_jinan)\
{ \
(LAST_E)->up_lsp_session_list.next = MPLS_NULL; \
(FIRST_E)->up_lsp_session_list.prev = (L).last; \
if((FIRST_E)->up_lsp_session_list.prev != NULL) \
(FIRST_E)->up_lsp_session_list.prev->up_lsp_session_list.next = (FIRST_E); \
(L).last = (LAST_E); \
if((L).first == NULL) \
(L).first = (FIRST_E);\
}\
}
#define MPLS_INSERT_INTO_DOWN_LSP_LIST(L,FIRST_E,LAST_E) \
{\
mplsLdpLspCB *LspCBVarjinan = NULL; \
int lsp_list_add_flag_jinan = 0; \
if((L).first) \
LspCBVarjinan = (L).first; \
while(LspCBVarjinan) \
{ \
if(LspCBVarjinan ==(FIRST_E)) \
{ \
lsp_list_add_flag_jinan = 1;\
break; \
}\
else \
LspCBVarjinan = LspCBVarjinan->down_lsp_session_list.next;\
}\
if(!lsp_list_add_flag_jinan)\
{ \
(LAST_E)->down_lsp_session_list.next = MPLS_NULL; \
(FIRST_E)->down_lsp_session_list.prev = (L).last; \
if((FIRST_E)->down_lsp_session_list.prev != NULL) \
(FIRST_E)->down_lsp_session_list.prev->down_lsp_session_list.next = (FIRST_E); \
(L).last = (LAST_E); \
if((L).first == NULL) \
(L).first = (FIRST_E);\
}\
}
/* add for jinan fengjun */
#define MPLS_INSERT_INTO_UP_LIST(L,FIRST_E,LAST_E) \
(LAST_E)->up_session_list.next = MPLS_NULL; \
(FIRST_E)->up_session_list.prev = (L).last; \
if((FIRST_E)->up_session_list.prev != NULL) \
(FIRST_E)->up_session_list.prev->up_session_list.next = (FIRST_E); \
(L).last = (LAST_E); \
if((L).first == NULL) \
(L).first = (FIRST_E);
#define MPLS_INSERT_INTO_DOWN_LIST(L,FIRST_E,LAST_E) \
(LAST_E)->down_session_list.next = MPLS_NULL; \
(FIRST_E)->down_session_list.prev = (L).last; \
if((FIRST_E)->down_session_list.prev != NULL) \
(FIRST_E)->down_session_list.prev->down_session_list.next = (FIRST_E);\
(L).last = (LAST_E); \
if((L).first == NULL) \
(L).first = (FIRST_E);
/* wengqing 2002.12.13 inherit upSessionIndex */
#define MPLS_REMOVE_FROM_SESSION_UP_LSP_LIST(L,E) \
if((E)->up_lsp_session_list.next) \
{ \
if((E)->upSessionIndex <3 && (E)->up_lsp_session_list.next->upSessionIndex >= 3) \
(E)->up_lsp_session_list.next->upSessionIndex = (E)->upSessionIndex; \
} \
if((L).first == (E)) \
(L).first = (E)->up_lsp_session_list.next; \
if((L).last == (E)) \
(L).last = (E)->up_lsp_session_list.prev; \
if((E)->up_lsp_session_list.prev != MPLS_NULL) \
(E)->up_lsp_session_list.prev->up_lsp_session_list.next = (E)->up_lsp_session_list.next;\
if((E)->up_lsp_session_list.next != MPLS_NULL) \
(E)->up_lsp_session_list.next->up_lsp_session_list.prev = (E)->up_lsp_session_list.prev; \
(E)->up_lsp_session_list.next = MPLS_NULL; \
(E)->up_lsp_session_list.prev = MPLS_NULL;
/* wengqing 2002.12.13 inherit upSessionIndex */
#define MPLS_REMOVE_FROM_SESSION_UP_LSP_LIST_A(L,E) \
if((E)->up_lsp_session_list.next) \
{ \
if((E)->upSessionIndex <3 && (E)->up_lsp_session_list.next->upSessionIndex >= 3) \
(E)->up_lsp_session_list.next->upSessionIndex = (E)->upSessionIndex; \
} \
if((L).first == (E)) \
(L).first = (E)->up_lsp_session_list.next; \
if((L).last == (E)) \
(L).last = (E)->up_lsp_session_list.prev; \
if((g_up_lsp_list).first == (E)) \
(g_up_lsp_list).first = (E)->up_lsp_session_list.next; \
if((g_up_lsp_list).last == (E)) \
(g_up_lsp_list).last = (E)->up_lsp_session_list.prev; \
if((E)->up_lsp_session_list.prev != MPLS_NULL) \
(E)->up_lsp_session_list.prev->up_lsp_session_list.next = (E)->up_lsp_session_list.next;\
if((E)->up_lsp_session_list.next != MPLS_NULL) \
(E)->up_lsp_session_list.next->up_lsp_session_list.prev = (E)->up_lsp_session_list.prev; \
(E)->up_lsp_session_list.next = MPLS_NULL; \
(E)->up_lsp_session_list.prev = MPLS_NULL;
/* wengqing 2002.12.13 inherit downSessionIndex */
#define MPLS_REMOVE_FROM_SESSION_DOWN_LSP_LIST(L,E) \
if((E)->down_lsp_session_list.next) \
{ \
if((E)->downSessionIndex <3 && (E)->down_lsp_session_list.next->downSessionIndex >= 3) \
(E)->down_lsp_session_list.next->downSessionIndex = (E)->downSessionIndex; \
} \
if((L).first == (E)) \
(L).first = (E)->down_lsp_session_list.next; \
if((L).last == (E)) \
(L).last = (E)->down_lsp_session_list.prev; \
if((E)->down_lsp_session_list.prev != MPLS_NULL) \
(E)->down_lsp_session_list.prev->down_lsp_session_list.next = (E)->down_lsp_session_list.next;\
if((E)->down_lsp_session_list.next != MPLS_NULL) \
(E)->down_lsp_session_list.next->down_lsp_session_list.prev = (E)->down_lsp_session_list.prev; \
(E)->down_lsp_session_list.next = MPLS_NULL; \
(E)->down_lsp_session_list.prev = MPLS_NULL;
/* wengqing 2002.12.13 inherit downSessionIndex */
#define MPLS_REMOVE_FROM_SESSION_DOWN_LSP_LIST_A(L,E) \
if((E)->down_lsp_session_list.next) \
{ \
if((E)->downSessionIndex <3 && (E)->down_lsp_session_list.next->downSessionIndex >= 3) \
(E)->down_lsp_session_list.next->downSessionIndex = (E)->downSessionIndex; \
} \
if((L).first == (E)) \
(L).first = (E)->down_lsp_session_list.next; \
if((L).last == (E)) \
(L).last = (E)->down_lsp_session_list.prev; \
if((g_down_lsp_list).first == (E)) \
(g_down_lsp_list).first = (E)->down_lsp_session_list.next; \
if((g_down_lsp_list).last == (E)) \
(g_down_lsp_list).last = (E)->down_lsp_session_list.prev; \
if((E)->down_lsp_session_list.prev != MPLS_NULL) \
(E)->down_lsp_session_list.prev->down_lsp_session_list.next = (E)->down_lsp_session_list.next;\
if((E)->down_lsp_session_list.next != MPLS_NULL) \
(E)->down_lsp_session_list.next->down_lsp_session_list.prev = (E)->down_lsp_session_list.prev; \
(E)->down_lsp_session_list.next = MPLS_NULL; \
(E)->down_lsp_session_list.prev = MPLS_NULL;
#define MPLS_REMOVE_FROM_SESSION_UP_LIST(L,E) \
if((L).first == (E)) \
(L).first = (E)->up_session_list.next; \
if((L).last == (E)) \
(L).last = (E)->up_session_list.prev; \
if((E)->up_session_list.prev != MPLS_NULL) \
(E)->up_session_list.prev->up_session_list.next = (E)->up_session_list.next;\
if((E)->up_session_list.next != MPLS_NULL) \
(E)->up_session_list.next->up_session_list.prev = (E)->up_session_list.prev; \
(E)->up_session_list.next = MPLS_NULL; \
(E)->up_session_list.prev = MPLS_NULL;
#define MPLS_REMOVE_FROM_SESSION_DOWN_LIST(L,E) \
if((L).first == (E)) \
(L).first = (E)->down_session_list.next; \
if((L).last == (E)) \
(L).last = (E)->down_session_list.prev; \
if((E)->down_session_list.prev != MPLS_NULL) \
(E)->down_session_list.prev->down_session_list.next = (E)->down_session_list.next;\
if((E)->down_session_list.next != MPLS_NULL) \
(E)->down_session_list.next->down_session_list.prev = (E)->down_session_list.prev; \
(E)->down_session_list.next = MPLS_NULL; \
(E)->down_session_list.prev = MPLS_NULL;
#define MPLS_SB_CREATE(M,P,SB) \
(SB) = MPLS_NULL; \
MPLS_MEMSET(&t_sb_key,0,sizeof(mpls_sb_key)); \
t_sb_key.module = (M); \
t_sb_key.port = (P); \
MPLS_MEM_ALLOC((SB),(mpls_sb_list *), \
sizeof(mpls_sb_list),mem_mgr[IUMEM_LDP_SB]);\
if((SB)) \
{ \
MPLS_MEMSET((SB),0,sizeof(mpls_sb_list)); \
MPLS_AVL_INIT_NODE((SB)->sb_avl_node, (SB), \
&(SB)->key); \
(SB)->key = t_sb_key; \
MPLS_AVL_INSERT_OR_FIND(g_sb_avl_tree, \
(SB)->sb_avl_node); \
}
#define MPLS_SB_DELETE(M,P,SB) \
if((SB)) \
{ \
MPLS_AVL_DELETE(g_sb_avl_tree,(SB)->sb_avl_node);\
MPLS_MEMSET((SB),0,sizeof(mpls_sb_list)); \
MPLS_MEM_FREE((SB),mem_mgr[IUMEM_LDP_SB]);\
} \
else \
{ \
MPLS_SB_SEARCH(M,P,(SB)) \
if(SB) \
{ \
MPLS_AVL_DELETE(g_sb_avl_tree,(SB)->sb_avl_node);\
MPLS_MEMSET((SB),0,sizeof(mpls_sb_list)); \
MPLS_MEM_FREE((SB),mem_mgr[IUMEM_LDP_SB]);\
} \
}
#define MPLS_SB_SEARCH(M,P,SB) \
(SB) = MPLS_NULL; \
MPLS_MEMSET(&t_sb_key,0,sizeof(mpls_sb_key)); \
t_sb_key.module = (M); \
t_sb_key.port = (P); \
(SB) = MPLS_AVL_FIND(g_sb_avl_tree,&t_sb_key);
#define MPLS_FEC_SEARCH_CREATE(L,pS) \
(pS) = MPLS_NULL; \
MPLS_MEM_ALLOC(pS,(mpls_fec_search *),sizeof(mpls_fec_search), \
mem_mgr[IUMEM_LDP_FEC_SEARCH]); \
MPLS_MEMSET((pS),0,sizeof(mpls_fec_search)); \
if(pS != MPLS_NULL) \
{ \
(pS)->next = NULL; \
(pS)->prev = (L).last; \
if((pS)->prev != NULL) \
(pS)->prev->next = (pS); \
(L).last = (pS); \
if((L).first == NULL) \
(L).first = (pS); \
} \
#define MPLS_FEC_SEARCH_DELETE(L,pS) \
if((L).first == (pS)) \
(L).first = (pS)->next; \
if((L).last == (pS)) \
(L).last = (pS)->prev; \
if((pS)->prev != MPLS_NULL) \
(pS)->prev->next = (pS)->next; \
if((pS)->next != NULL) \
(pS)->next->prev = (pS)->prev; \
MPLS_MEMSET((pS),0,sizeof(mpls_fec_search)); \
MPLS_MEM_FREE((pS),mem_mgr[IUMEM_LDP_FEC_SEARCH]);
#endif
/* for performance */
#define MPLS_WAITE_XC_INSERT(F,L) \
if((F)) \
{ \
(F)->XcNext = NULL; \
(F)->XcPrev = ((L).last); \
if((F)->XcPrev != NULL) \
(F)->XcPrev->XcNext = (F); \
(L).last = (F); \
if((L).link == NULL) \
(L).link = (F); \
}
#define MPLS_WAITE_XC_DELETE(F,L) \
if((F)) \
{ \
if((L).link == (F)) \
(L).link = (F)->XcNext; \
if((L).last == (F)) \
(L).last = (F)->XcPrev; \
if((F)->XcPrev != MPLS_NULL) \
(F)->XcPrev->XcNext = (F)->XcNext; \
if((F)->XcNext != MPLS_NULL) \
(F)->XcNext->XcPrev = (F)->XcPrev; \
(F)->XcNext = MPLS_NULL; \
(F)->XcPrev = MPLS_NULL; \
}
#define MPLS_WAITE_FECLBL_INSERT(F,L) \
if((F)) \
{ \
(F)->FecLbNext = NULL; \
(F)->FecLbPrev = ((L).last); \
if((F)->FecLbPrev != NULL) \
(F)->FecLbPrev->FecLbNext = (F); \
(L).last = (F); \
if((L).link == NULL) \
(L).link = (F); \
}
#define MPLS_WAITE_FECLBL_DELETE(F,L) \
if((F)) \
{ \
if((L).link == (F)) \
(L).link = (F)->FecLbNext; \
if((L).last == (F)) \
(L).last = (F)->FecLbPrev; \
if((F)->FecLbPrev != MPLS_NULL) \
(F)->FecLbPrev->FecLbNext = (F)->FecLbNext; \
if((F)->FecLbNext != MPLS_NULL) \
(F)->FecLbNext->FecLbPrev = (F)->FecLbPrev; \
(F)->FecLbNext = MPLS_NULL; \
(F)->FecLbPrev = MPLS_NULL; \
}
#define MPLS_WAITE_LBLMSG_INSERT(F,L) \
if((F)) \
{ \
(F)->LblMsgNext = NULL; \
(F)->LblMsgPrev = ((L).last); \
if((F)->LblMsgPrev != NULL) \
(F)->LblMsgPrev->LblMsgNext = (F); \
(L).last = (F); \
if((L).link == NULL) \
(L).link = (F); \
}
#define MPLS_WAITE_LBLMSG_DELETE(F,L) \
if((F)) \
{ \
if((L).link == (F)) \
(L).link = (F)->LblMsgNext; \
if((L).last == (F)) \
(L).last = (F)->LblMsgPrev; \
if((F)->LblMsgPrev != MPLS_NULL) \
(F)->LblMsgPrev->LblMsgNext = (F)->LblMsgNext; \
if((F)->LblMsgNext != MPLS_NULL) \
(F)->LblMsgNext->LblMsgPrev = (F)->LblMsgPrev; \
(F)->LblMsgNext = MPLS_NULL; \
(F)->LblMsgPrev = MPLS_NULL; \
}
#define MPLS_PSEND(TYPE, msg,siz,Pid) \
Pid.module = selfLdpPid.module; \
ASEND(TYPE, msg,siz,Pid) \
#if 0
#define DOWNCB_OUT_WAITLIST(TempFec,TempDownCB) \
if(!((TempFec->down_cb_list).link)) \
return; \
if((TempFec->down_cb_list).link == TempDownCB) \
(TempFec->down_cb_list).link = TempDownCB->prev; \
else \
{ \
if((TempFec)->down_cb_list.first == (TempDownCB)) \
(TempFec)->down_cb_list.first = (TempDownCB)->next; \
if((TempFec)->down_cb_list.last == (TempDownCB)) \
(TempFec)->down_cb_list.last = (TempDownCB)->prev; \
if((TempDownCB)->prev != MPLS_NULL) \
(TempDownCB)->prev->next = (TempDownCB)->next; \
if((TempDownCB)->next != NULL) \
(TempDownCB)->next->prev = (TempDownCB)->prev; \ \
if(TempDownCB != MPLS_NULL) \
{ \
(TempDownCB)->next = NULL; \
(TempDownCB)->prev = (TempFec)->down_cb_list.last; \
if(TempDownCB->prev != NULL) \
TempDownCB->prev->next = TempDownCB; \
TempFec->down_cb_list.last = TempDownCB; \
} \
} \
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -