📄 fixbug.c
字号:
/********************************************************************/
/* Product Name: MPLS PACK 1.0 */
/* Module Name: LDP */
/* File Name: fixbug.c */
/* Author Name: lixia */
/* Creat Date: 2003/10/13 */
/* Version : 1.0 */
/* Function : fix bug function */
/* 2003-10-21 lixia mod Rereleasepvc*/
/* 2003-12-10 lixia mod for debug mpls */
/********************************************************************/
#include "ldpvars.h"
unsigned short Rel_list_full = 0;
void FixBug(void *inData,void *ldpOut, void *ldpIn)
{
switch(STATE())
{
/*启动进程*/
case MplsTaskInitStatus:
switch(EVENT())
{
case MPLS_PowerOnEvent:
NEXT_STATE(MplsTaskWorkStatus);
break;
default:
break;
}
break;
case MplsTaskWorkStatus:
switch(EVENT())
{
case MPLS_RELPVC:
Rereleasepvc();
break;
default:
break;
}
break;
default:
break;
}
}
/* insert the unrelease pvc into queue tail*/
short mpls_insert_into_relpvc_tab(STRUC_AD_MPLS_RLSPVC_ACK* rel_ack)
{
release_pvc_tab_t *rel_pvc = MPLS_NULL;
release_pvc_tab_t *rel_temp = MPLS_NULL;
if(g_relpvc_list.num >= MAX_REL_PVC)
{
Rel_list_full = 1;
return REL_PVC_FULL;
}
/*分配空间*/
MPLS_MEM_ALLOC(rel_pvc,(release_pvc_tab_t *),sizeof(release_pvc_tab_t),mem_mgr[IUMEM_LDP_RELPVC]);
if(rel_pvc== MPLS_NULL)
{
DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_LSP,"!!! sorry,can not allocate memory for g_relpvc_list !!!\n");
printf("!!! sorry,can not allocate memory for g_relpvc_list !!!");
return MPLS_RELPVC_MEMORY_FAIL;
}
/* 初始化链表节点,将其加入到链的尾部 */
rel_pvc->next = NULL;
rel_pvc->ack = rel_ack->LsrAck;
rel_pvc->relpvc.localLspId = rel_ack->localLspId ;
rel_pvc->relpvc.IngressId = rel_ack->IngressId;
rel_pvc->relpvc.H_module = rel_ack->H_module ;
rel_pvc->relpvc.H_port = rel_ack->H_port;
rel_pvc->relpvc.H_vpi = rel_ack->H_vpi;
rel_pvc->relpvc.H_vci = rel_ack->H_vci;
rel_pvc->relpvc.L_module = rel_ack->L_module;
rel_pvc->relpvc.L_port = rel_ack->L_port;
rel_pvc->relpvc.L_vpi = rel_ack->L_vpi;
rel_pvc->relpvc.L_vci = rel_ack->L_vci;
rel_pvc->relpvc.Connect_type = (VAL_ConnType_SVCC - 2);
rel_pvc->relpvc.Connect_struct = VAL_Connectstruct_Type0;
rel_pvc->relpvc.LspCBNo = rel_ack->LspCBNo;
rel_pvc->relpvc.flag = rel_ack->flag;
rel_pvc->relpvc.reflag = rel_ack->reflag; /* 2003-10-21 lixia add */
rel_pvc->relpvc.renum = rel_ack->renum;
rel_temp = g_relpvc_list.relpvc_list.next;
if(rel_temp)
{
while(rel_temp->next!=NULL)
{
rel_temp = rel_temp->next;
}
rel_temp->next = rel_pvc;
}
else
g_relpvc_list.relpvc_list.next = rel_pvc;
g_relpvc_list.num ++;
return MPLS_RELPVC_SUCCESS;
}
short mpls_delete_from_relpvc_tab(STRUC_MPLS_AD_RLSPVC_REQ* rel_req)
{
release_pvc_tab_t *rel_pvc = MPLS_NULL;
release_pvc_tab_t *rel_temp = MPLS_NULL;
rel_temp = g_relpvc_list.relpvc_list.next;
if((rel_temp->relpvc.H_module == rel_req->H_module)&&(rel_temp->relpvc.H_port == rel_req->H_port)
&&(rel_temp->relpvc.H_vpi == rel_req->H_vpi)&&(rel_temp->relpvc.H_vci == rel_req->H_vci))
{
rel_pvc = rel_temp;
g_relpvc_list.relpvc_list.next = rel_temp->next;
}
else
{
rel_pvc = rel_temp->next;
while(rel_pvc)
{
if((rel_pvc->relpvc.H_module == rel_req->H_module)&&(rel_pvc->relpvc.H_port == rel_req->H_port)
&&(rel_pvc->relpvc.H_vpi == rel_req->H_vpi)&&(rel_pvc->relpvc.H_vci == rel_req->H_vci))
{
rel_temp->next = rel_pvc->next;
break;
}
else
{
rel_temp = rel_temp->next;
rel_pvc = rel_temp->next;
}
}
}
if(rel_pvc)
{
MPLS_MEM_FREE(rel_pvc,mem_mgr[IUMEM_LDP_RELPVC]);
rel_pvc = MPLS_NULL;
g_relpvc_list.num --;
return MPLS_RELPVC_SUCCESS;
}
else
return MPLS_RELPVC_NOT_EXIST;
}
release_pvc_tab_t * mpls_match_in_relpvc_tab(STRUC_MPLS_AD_RLSPVC_REQ* rel_req,unsigned short type)
{
release_pvc_tab_t *rel_pvc = MPLS_NULL;
unsigned char match=0;
if (type == UP)
{
rel_pvc = g_relpvc_list.relpvc_list.next;
while(rel_pvc)
{
if(((rel_pvc->relpvc.L_module == rel_req->L_module)&&(rel_pvc->relpvc.L_port == rel_req->L_port)
&&(rel_pvc->relpvc.L_vpi == rel_req->L_vpi)&&(rel_pvc->relpvc.L_vci == rel_req->L_vci))||
((rel_pvc->relpvc.H_module == rel_req->L_module)&&(rel_pvc->relpvc.H_port == rel_req->L_port)
&&(rel_pvc->relpvc.H_vpi == rel_req->L_vpi)&&(rel_pvc->relpvc.H_vci == rel_req->L_vci)))
match = 1;
if(match == 0)
rel_pvc = rel_pvc->next;
else if(match == 1)
break;
}
}
else
{
rel_pvc = g_relpvc_list.relpvc_list.next;
while(rel_pvc)
{
if(((rel_pvc->relpvc.H_module == rel_req->H_module)&&(rel_pvc->relpvc.H_port == rel_req->H_port)
&&(rel_pvc->relpvc.H_vpi == rel_req->H_vpi)&&(rel_pvc->relpvc.H_vci == rel_req->H_vci))||
((rel_pvc->relpvc.L_module == rel_req->H_module)&&(rel_pvc->relpvc.L_port == rel_req->H_port)
&&(rel_pvc->relpvc.L_vpi == rel_req->H_vpi)&&(rel_pvc->relpvc.L_vci == rel_req->H_vci)))
match = 1;
if(match == 0)
rel_pvc = rel_pvc->next;
else if(match == 1)
break;
}
}
return rel_pvc;
}
void Rereleasepvc()
{
short rtcode;
release_pvc_tab_t *Relpvc = MPLS_NULL;
release_pvc_tab_t *Relpvcnext = MPLS_NULL;
tm_wkafter(500);
Relpvc=g_relpvc_list.relpvc_list.next;
while(Relpvc)
{
#ifdef __BGS10_MPLS_DEBUG
printf ("=== in Rereleasepvc(),release pvc L_module %d, L_port %d, L_vpi %d, L_vci %d, H_module %d, H_port %d ,H_vpi %d, H_vci %d === \n",
Relpvc->relpvc.L_module,Relpvc->relpvc.L_port ,Relpvc->relpvc.L_vpi ,Relpvc->relpvc.L_vci , Relpvc->relpvc.H_module , Relpvc->relpvc.H_port ,Relpvc->relpvc.H_vpi ,Relpvc->relpvc.H_vci);
#endif
if(Relpvc->relpvc.reflag&0x01)
Relpvc->relpvc.renum--;
rtcode = mpls_xc_req_append(&Relpvc->relpvc,RLSPVC_REQ,NULL,LOC_NO_NEED);
/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$2004-5-17 fengjunjinan*/
if(rtcode == REQ_QUEUE_OK) /*if it fail,not dele from queue and process it next time*/
{
Relpvcnext = Relpvc->next;
mpls_delete_from_relpvc_tab(&Relpvc->relpvc);
Relpvc = Relpvcnext;
}
/*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$2004-5-17 fengjunjinan*/
else /*2004-8-6 lixia add for release-fail*/
{
printf("Rereleasepvc:can't insert into the xc_req\n");
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -