⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ldpmacro.h

📁 技术文件名称:MPLSv1.0软件模块测试规程
💻 H
📖 第 1 页 / 共 3 页
字号:
/* 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 + -