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

📄 c010agent.c

📁 技术文件名称:MPLSv1.0软件模块测试规程
💻 C
📖 第 1 页 / 共 2 页
字号:
#if 0
#include "mplsevent.h"
#include "zxb10stubs.h"
#include "pvcmpls.h"
#include "ldpque.h"
#include "mpls_cmn.h"

#define _DEBUG_STUBS

/*****************************************************************************/
/* global variable                                                           */
/* c010msg:     C010 -- Ldp messages module buffer                           */
/* ldpserv:     access service board ldp process no                          */
/* c010Pid:     C010 Pid                                                     */
/* currmodule:  current module                                               */
/*****************************************************************************/
mpls_c010req                c010msg[C010_MSG_MAX];
PID                         ldpserv, c010Pid;
unsigned char                       currmodule;
/* ********************************************************************/
/* Product Name:ATM_B10                                               */
/* Modul Name: 	MPLS               File Name : c010agent.c    	      */
/* Creat Date:  2002.01.07         Author : weng.qing                 */
/* Function:    print C010 LDP message digest                         */
/* Version:    1.0                                                   */
/* History:                                                           */
/* Date          Version           Modifier            Activies       */
/* ********************************************************************/
void print_c010req(mpls_c010req  *c010req)
{
  #ifdef _DEBUG_STUBS
  printf("==c010req: localLspId %x, IngressId %x, LspCBNo %x, ldpmod %x==\n",
         c010req->localLspId,c010req->IngressId,
         c010req->LspCBNo,c010req->ldpmod);
  #endif
}


/* ********************************************************************/
/* Product Name:ATM_B10                                               */
/* Modul Name: 	MPLS               File Name : c010agent.c    	      */
/* Creat Date:  2002.01.07         Author : weng.qing                 */
/* Function:    init c010msg global variable                          */
/* Version:    1.0                                                   */
/* History:                                                           */
/* Date          Version           Modifier            Activies       */
/* ********************************************************************/
void init_c010agent()
{
    mpls_c010req    * head, *p;
    unsigned long           ii;
    unsigned long           sizeofElem;
    
    
    sizeofElem  = sizeof(mpls_c010req);
    memset(c010msg,0,sizeofElem*C010_MSG_MAX);
    
    head		= c010msg;
    p           = head;
    p->next     = LDP_C010_EMPTY;
   
    for (ii = 1;  ii < C010_MSG_MAX;  ii++)
    {
        p           =(mpls_c010req *) ((unsigned char *)head + ii * sizeofElem);
        p->next     = ii + 1;
    }
    p->next     = LDP_C010_EMPTY;
    return;
}
/* ********************************************************************/
/* Product Name:ATM_B10                                               */
/* Modul Name: 	MPLS               File Name : c010agent.c    	      */
/* Creat Date:  2002.01.07         Author : weng.qing                 */
/* Function:    add message to  c010msg buffer                        */
/* Version:    1.0                                                   */
/* History:                                                           */
/* Date          Version           Modifier            Activies       */
/* ********************************************************************/
unsigned long   add_c010agent(mpls_c010req * item)
{
    unsigned long           entryNo;
    mpls_c010req   * p, * head, * free;
    unsigned long           sizeofElem;
    char *          startaddr;
    
    startaddr =     (char *)c010msg;
    sizeofElem  = sizeof(mpls_c010req);
    head		= (mpls_c010req *)startaddr;
    free        = (mpls_c010req *)((unsigned char *)head + sizeofElem);  /* 指向空闲链表  */

    if (free->next == LDP_C010_EMPTY)
    {
        printf("MODULE:  List is full!\n");
        entryNo = 0;
    }
    else
    {
        /* 先得到空闲元素 */ 
        entryNo     = free->next;
        p           = (mpls_c010req *)((unsigned char *)head + entryNo * sizeofElem);
        free->next	= p->next; /* 空闲链表指向p的下一跳 */
        
        memcpy(p,item,sizeofElem);
       
        /* 然后将它插入到数据链表的头部 */
        p->next		= head->next;
        head->next	= entryNo;
    }

    return (entryNo);
}
/* ********************************************************************/
/* Product Name:ATM_B10                                               */
/* Modul Name: 	MPLS               File Name : c010agent.c    	      */
/* Creat Date:  2002.01.07         Author : weng.qing                 */
/* Function:    index message in  c010msg buffer                      */
/* Version:    1.0                                                   */
/* History:                                                           */
/* Date          Version           Modifier            Activies       */
/* ********************************************************************/
unsigned long  index_c010agent(mpls_c010req * item)
{
    mpls_c010req      * head, * p,* q;
    char *             startaddr;
    
    unsigned long   entryno = 0;
    startaddr       = (char *)c010msg;
    
    head		= (mpls_c010req *)startaddr;
    p = head;
    while(p->next != LDP_C010_EMPTY)
    {
        q = ( mpls_c010req * )( startaddr + (p->next)*sizeof(mpls_c010req) );
        if( (item->localLspId == q->localLspId) &&
            (item->IngressId == q->IngressId) &&
            (item->LspCBNo == q->LspCBNo))
        {
            entryno = p->next;
            break;
        }
        else
        {
            p = q;
        }
    }
    return entryno;
}
/* ********************************************************************/
/* Product Name:ATM_B10                                               */
/* Modul Name: 	MPLS               File Name : c010agent.c    	      */
/* Creat Date:  2002.01.07         Author : weng.qing                 */
/* Function:    del message in  c010msg buffer                        */
/* Version:    1.0                                                   */
/* History:                                                           */
/* Date          Version           Modifier            Activies       */
/* ********************************************************************/
long del_c010agent(unsigned long no)
{
    mpls_c010req      *p, *q, *head, *free;
    unsigned char           exitMark = 0;
    long            result ;


	head		= (mpls_c010req *)c010msg;
    free        = (mpls_c010req *)((unsigned char *)head + sizeof(mpls_c010req));
    
	p           = head;     /* 从head元素开始 */
    q = p;
    
    while	((p->next != LDP_C010_EMPTY) && (exitMark == 0))
    {
    	  q		= p;
    	  p		= (mpls_c010req *)((unsigned char *)head + (p->next)*sizeof(mpls_c010req)); /* 转移到下一个元素 */
    	  
          if (q->next == no) /* 从第一个有效元素开始 */ 
                exitMark = 1;             
	}
    
    if (exitMark == 0)  
    {	
        printf("MODULE:, Can't find the Entry!\n");
        result = 0;
    }
    else
    {
        
        /* 首先释放该元素 */
        q->next			= p->next;
		memset(p,0,sizeof(mpls_c010req));
		
        /* 然后将释放的空闲插入到空闲链表的头部 */
        p->next			= free->next;
        free->next	    = no;
        result          = no;
    }
  	return (result);
}



/* ********************************************************************/
/* Product Name:ATM_B10                                               */
/* Modul Name: 	MPLS               File Name : c010agent.c    	      */
/* Creat Date:  2002.01.07         Author : weng.qing                 */
/* Function:    main process                                          */
/* Version:    1.0                                                   */
/* History:                                                           */
/* Date          Version           Modifier            Activies       */
/* ********************************************************************/
/* modify by hyh, 2002-6-27 11:01, for queue confirm */
void c010agent(unsigned short event,void *In)
{
	MPLS_BANDWIDTH_REQ		*bandReq;
	MPLS_RLSBW_REQ			*rlsbandreq;
	MPLS_CRPVC_REQ			*crpvcReq;
	MPLS_RLSPVC_REQ			*rlspvcReq;

    STRUC_AD_MPLS_BANDWIDTH_ACK *bandwithAck;
	STRUC_AD_MPLS_CRPVC_ACK     *createPvcAck;
	STRUC_AD_MPLS_RLSBW_ACK     *relBwAck;
	STRUC_AD_MPLS_RLSPVC_ACK 	*relPvcAck;
	
    XC_ACK                  mplsAck;
    
	mpls_c010req            c010req;
	unsigned long                   no;          
	PID                     ldpPid;
	
    printf("!!!c020 module %d, receive msg. event: %d ",currmodule,event);
                    
     switch(event)
	{
        case MPLS_AD_CREATEPVC_REQ:
        	printf("======!!!module %d, receive MPLS_AD_CREATEPVC_REQ msg======",currmodule);
            SENDER(&ldpPid);
            crpvcReq = (MPLS_CRPVC_REQ *)In;
            /* 给LDP回接收确认 */
#if 0
            conf_ack.index = crpvcReq->req_index;
            ASEND(MPLS_C_QUE_CONF,&conf_ack,sizeof(XCREQ_CONF),ldpPid);
#endif
            /*给c010发请求消息*/
            c010req.localLspId = crpvcReq->req.localLspId;
            c010req.IngressId = crpvcReq->req.IngressId;
            c010req.LspCBNo = crpvcReq->req.LspCBNo;
            c010req.ldpmod  = ldpPid.module;
            c010req.index   = crpvcReq->req_index;
            print_c010req(&c010req);
            no = index_c010agent(&c010req);
            if( no == 0 )
            {
                no = add_c010agent(&c010req);
                if( no == 0 )
                {
                    printf("err add fail");
                }
                else
                {
                	/******************************************************/
                  /* Send req to C010                                   */
                  /* follow is the same                                 */
                  /******************************************************/
            ASEND(  MPLS_AD_CREATEPVC_REQ,&(crpvcReq->req),
                            sizeof(STRUC_MPLS_AD_CRPVC_REQ),c010Pid );
                    printf("!!!indexno %d, module %d,mpls send create pvc msg to c010.",
                          no, currmodule);
                }
            }
            else
            {
                printf("err request duplicate");
            }
            break;
        case MPLS_AD_RLSPVC_REQ:
        	printf("======!!!module %d, receive MPLS_AD_RLSPVC_REQ msg======",currmodule);
            SENDER(&ldpPid);
            rlspvcReq = (MPLS_RLSPVC_REQ *)In;
            /* 给LDP回接收确认 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -