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

📄 fixbug.c

📁 技术文件名称:MPLSv1.0软件模块测试规程
💻 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 + -