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

📄 fec.c

📁 技术文件名称:MPLSv1.0软件模块测试规程
💻 C
📖 第 1 页 / 共 5 页
字号:
               (mpls_compare_string("DLIC",str))||
               (mpls_compare_string("GEI",str))||
               (mpls_compare_string("OFEC",str))||
               (mpls_compare_string("SMPP",str))||
               (mpls_compare_string("SGBC",str))))
        {
            if((nif[i].ni_ip !=0)&&(nif[i].ni_mask !=0)&&
                    ((nif[i].ni_ip & nif[i].ni_mask) == (Ipaddress & nif[i].ni_mask)))
            {
                if(!nif[i].ni_lvpm) /* eth gei */
                {
                    /*for guangzhou 2004-9-24 */ 
                    for(m=0;m<MplsPortDataTable1.num;m++)
                    { 	                            
                         samod = GetNiToModu(i);                         
                         if((samod==MplsPortDataTable1.mplsModule[m].module)&&(samod!=0xffff))
                         {  
                             if(MplsPortDataTable1.mplsModule[m].portData[0].atmfAtmLayerMaxSvccVpi==0xffff)           
                                 invalid = 0;
                             break;
                         }
                         
                         if(!invalid)
                             break;
                    }
                    /*for guangzhou 2004-9-24 */
                    if(invalid)
                    {
                    /* 2003-7-9 szh M2000上8号模块是LIC,后面的业务板模块号就多加了一个1*/
                    module = (nif[i].ni_ifindex /SB_MAX_IFINDEX_NUM) +1;
                    cardType = nif[i].ni_lcardtype;
                    for(t = 1; t < MplsPortDataTable1.num; t++)
                    {
                        if(MplsPortDataTable1.mplsModule[t].module==module)
                        {
                            cardType = MplsPortDataTable1.mplsModule[t].cardType;
                            break;
                        } 
                    }
                }
                }
                else  /* lic */
                {
                    module = nif[i].ni_lvpm ;
                    for(t = 1; t < MplsPortDataTable1.num; t++)
                    {
                        if(MplsPortDataTable1.mplsModule[t].module==module)
                        {
                            cardType = MplsPortDataTable1.mplsModule[t].cardType;
                            break;
                        } 
                    }
                    /*
                    if(cardType == 255)
                        cardType = MPLS_CARDTYPE_ETH;  */
                }
                break;
            }
        }
    }
    
    /* loopback */
    if(((module==255)||(module == mplsManagerOamPID.module))&&(ifindex!=0xffff))
    {
        for(i = 0 ; i < NI_MAX; i++)
        {
            if((nif[i].RowStatus == MPLS_VAL_RowStatus_active)&&(nif[i].ni_ifindex==ifindex))
            {
                module = nif[i].ni_lvpm;
                if(module == 0)
                {
                    continue;
                }    
                break;
            }
        }        	
        for(t = 1; t < MplsPortDataTable1.num; t++)
        {
            if(MplsPortDataTable1.mplsModule[t].module==module)
            {
                cardType = MplsPortDataTable1.mplsModule[t].cardType;
                break;
            }
        }
    }
    /* for protect */
    if((module == 255)||(cardType == 255))
    {
    	DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_CR," no find module or cardtype for IP:%x,ifindex %x!!!!\n",
    	       Ipaddress,ifindex);
    	printf(" no find module or cardtype for IP:%x, mod %d, crdtype %d, ifindex %d!!!!",
    	       Ipaddress,module,cardType,ifindex);
    	module = 0;
    	cardType = 0;
    }	
    if(mplsOamLocalPlatformType == MPLS_OAM_PLATFORM_M2000)
    {
        if(module > 8)
            module = module-1;
    }	
    i = (unsigned short)module;
    i = i<<8;
    i = i|cardType;
    return i;
}

/***********************************************************************/
/* FUNCTION NAME  : accountsbmod()                                      */
/* DESCRIPTION:   : account sb module in lspnum least                   */
/*  INPUT         : void						                        */
/*  OUTPUT        : unsigned char   											*/
/*  AUTHOR/DATE   : shi.zhaohui/ 01.12.04                               */
/*  GLOBAL        : none												*/
/*  NOTE          :  ..                                                 */
/* History        : kong.yong weng.qing                                 */
/*        sbp 2002-6-29 modify to return card type for GEi              */
/*2002.11.28 sbp 处理HOP ADDRESS 与hop no 的关系*/
/************************************************************************/
unsigned short	accountsbmod(void *in,  unsigned char type, unsigned short ifindex)  /* cr create need this func */
{
	unsigned short	temp, loop=0,modCard;
	unsigned char               module,cardType, flag = 0;
	mplsErLspTable_t    *erlspstr;

   /* sbp 2002-4-17  for special board */
    if(type == MPLS_CR_LSP_TYPE)
    {
        erlspstr = (mplsErLspTable_t *)in;
        modCard = searchlocalmod(erlspstr -> nexthop[0], ifindex); /* loop -> 0*/
            return modCard;
     }

    /* sbp 2002-4-17  for ingress  */
    #if 0
	temp = mplsLspSetupEntry.moduleLsp[0].lspNum;
	module = mplsLspSetupEntry.moduleLsp[0].module;
	for(loop = 1; loop < mplsLspSetupEntry.num; loop ++)
	{
		if(temp > mplsLspSetupEntry.moduleLsp[loop].lspNum)
		{
			temp = mplsLspSetupEntry.moduleLsp[loop].lspNum;
			module   = mplsLspSetupEntry.moduleLsp[loop].module;
			cardType = mplsLspSetupEntry.moduleLsp[loop].cardType;
		}
	}
	modCard = (unsigned short) module;
	modCard = modCard<<8;	/* szh add */
	modCard = modCard|cardType;
	return modCard;
	#endif
}

/************************************************************************/
/* FUNCTION NAME  : ldp_accountsbmod()                                  */
/* DESCRIPTION:   : account sb module in lspnum least  for ldp process  */
/*  AUTHOR/DATE   : sbp 2002-12-3                               */
/*   sbp 2002-12-18 处理ETHIF板的相关数据                            */
/************************************************************************/
unsigned short	ldp_accountsbmod(FecMsg  *in, unsigned short ifindex)
{
	unsigned short	modCard;
	
     modCard = searchlocalmod(in -> Fec.NextHop,ifindex); /* loop -> 0*/
	 return modCard;
      
}

/***********************************************************************/
/* FUNCTION NAME  : fecModule2Port()	                                */
/* DESCRIPTION:   : sb module to mfu port                               */
/*  INPUT         : module                              				*/
/*  OUTPUT        : unsigned short												*/
/*  AUTHOR/DATE   : shi.zhaohui/ 01.12.04                               */
/*  GLOBAL        : none												*/
/*  NOTE          :  ..                                                 */
/* History        : kong.yong weng.qing                                 */
/************************************************************************/
unsigned short fecModule2Port(unsigned short module)
{
  /*******************************************************/
  /* SwitchType : 1  BX; 2 AX; 3 M1000                */
  /*******************************************************/
  MPLS_ASSERT(module <= 16);
  MPLS_ASSERT((mplsOamLocalPlatformType >= 1)&&(mplsOamLocalPlatformType <= 8));
  switch(mplsOamLocalPlatformType)
  {
    case MPLS_PLATFORM_BX:
      MPLS_ASSERT(module <= 8);
      return module;
      break;
    case MPLS_PLATFORM_AX:
      MPLS_ASSERT(module <= 8);
      return module;
      break;
    case MPLS_PLATFORM_M1000:
      MPLS_ASSERT(module <= 4);
      return module+4;
      break;
    case MPLS_PLATFORM_M2000:
      MPLS_ASSERT(module <= 16);
      return module;
      break;
    default :
      break;
  }
}


/***********************************************************************/
/* FUNCTION NAME  : lspdelpro_statup()	                                */
/* DESCRIPTION:   : del lsp to ldp( lsp up)                             */
/*  INPUT         : msg, in                             				*/
/*  OUTPUT        : void												*/
/*  AUTHOR/DATE   : shi.zhaohui/ 01.12.04                               */
/*  GLOBAL        : none												*/
/*  NOTE          :  ..                                                 */
/* History        : kong.yong weng.qing                                 */
/************************************************************************/
void lspdelpro_statup(FecMsg *msg,  void *in, unsigned char lsptype)
{
    PID		                Receiver;
    unsigned short                 lspno;
    mplsErLspTable_t        *erlspstr;


	GET_PID("LDPPROCESS",&Receiver);
    erlspstr = (mplsErLspTable_t *)in;
    msg->Fec.sbPort=(unsigned short)fecModule2Port( erlspstr -> SbModule );

    Receiver.module = mplsManagerOamPID.module;
	msg->Fec.RouteType = INGRESS;
	msg -> OperateType = DELETE_PVC_TYPE;
	msg -> LspNo = erlspstr->lsp_key.localLspId;
	msg -> Fec.in_protocol_type = fecLdpGetCardTypeOnModule(Receiver.module);
	msg -> Fec.out_protocol_type =
			fecLdpGetCardTypeOnIfIndexAndIpaddr(msg -> Fec.ifIndex,msg -> Fec.NextHop);
	msg->Fec.lspidTlv.routerId = Switcher.LsrId;
	ASEND(MPLS_FEC_SETUP, msg, sizeof(FecMsg), Receiver);

	#ifdef __BGS10_MPLS_DEBUG
		printf("==== send lsp type % d ,delete message to ldp : module %d!!!====",
						lsptype,Receiver.module);
	#endif
	lspnumpro(erlspstr -> SbModule, MPLS_LSP_DELETE);
	mplsQosFilterNoBindingAddorDelete(erlspstr-> delFilterNo,
	                                  erlspstr->lsp_key.localLspId, 
	                                  MPLS_OAM_DEL_BY_LSP);	
	mplsLspListDel(erlspstr); 
	crLspListSbOper(erlspstr,MPLS_LSP_DELETE);                             
	/* 删除绑定,拆除tunnel */                                  
	if(erlspstr->FecGetSource&MPLS_FILTER_TUNNEL_DELETE)   
	{
	    erlspstr->statusCode   = TUNNELFILTERERROR;
	    erlspstr -> ConnStatus = LSP_SET_STATUS_DOWN;
	    erlspstr->FecGetSource = FECROUTECREATE;    
	    erlspstr-> delFilterNo = 0;   
    }
    else
        mplsLspNoDelLsp(&erlspstr->lsp_key, lsptype);
    
    return;
}


/***********************************************************************/
/* FUNCTION NAME  : lspdelpro_statdown()                                */
/* DESCRIPTION:   : del lsp to ldp( lsp down)                           */
/*  INPUT         : msg, in                             				*/
/*  OUTPUT        : void												*/
/*  AUTHOR/DATE   : shi.zhaohui/ 01.12.04                               */
/*  GLOBAL        : none												*/
/*  NOTE          :  ..                                                 */
/* History        : kong.yong weng.qing                                 */
/************************************************************************/
void    lspdelpro_statdown(FecMsg *msg,  void *in, unsigned char  lsptype)
{
    mplsHopLspTable_t       *hoplspstr;
    mplsErLspTable_t        *erlspstr;
    unsigned short                 lspno;

    if(lsptype == MPLS_CR_LSP_TYPE)
    {
        erlspstr = (mplsErLspTable_t *)in;
        lspno = erlspstr->lsp_key.localLspId;
        switch(erlspstr -> ReqNum)/* ?????? */
        {
            case 0:
				/* reqnum = 0, no send setup request, so no need  use lspnumpro*/
				//lspnumpro(hoplspstr -> SbModule, MPLS_LSP_DELETE);
				mplsQosFilterNoBindingAddorDelete(erlspstr-> delFilterNo,lspno, MPLS_OAM_DEL_BY_LSP);
                /* 删除绑定,拆除tunnel */
                if(erlspstr->FecGetSource&MPLS_FILTER_TUNNEL_DELETE)   
	            {
	                erlspstr->statusCode = TUNNELFILTERERROR;
	                erlspstr -> ConnStatus = LSP_SET_STATUS_DOWN;
	                erlspstr->FecGetSource = FECROUTECREATE;    
	                erlspstr-> delFilterNo = 0;   
                }
                else
                mplsLspNoDelLsp(&erlspstr->lsp_key, lsptype);
                break;

            default :
                lspdelspecpro(msg, in, lsptype);
                break;
        }
    }
    return;
}


⌨️ 快捷键说明

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