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

📄 mplsfun.c

📁 技术文件名称:MPLSv1.0软件模块测试规程
💻 C
📖 第 1 页 / 共 5 页
字号:
/********************************************************************          
*	Product Name:	MPLS                                       	          
*	Module  Name:	OAM    										
*	File    Name:   mplsfun.c								        	          
*	Function    :	definition of function for mplsmanage process
*   History:
*   Date          Version        modifier         Activities 
* ==================================================================
*   01-8-9         1.0          Sun Baoping        create		
*   not service board, send "trafficData.num == 0"  sbp  2002-1-3	
*   not servic board , send "internalPortVpiVci.num = 0"  sbp 2002-1-3 
*   sbp 2002-6-15  add function mplsLdpParamInit() to initialize the LDP data.
*   sbp 2002.11.28  处理配置与数据无关,
    sbp 2002-12-18 处理ETHIF板的相关数据
    sbp  2003-1-16  同一优先级同一目的地只能建10调TUNNEL
    sbp  2003.1.29  如光口标记范围的最小VCI是32,则把该值改为33。
   2003.06.09 shizhaohui 增加APC类型的单板
* 2003.6.24 Wengqing 增加对M2K的支持                                     
  2003-8-2 shizhaohui 增加保护措施
  *   2003-11-12 szh mod MplsPortDataTable1代替MplsPortDataTable
/* 2003-12-10 lixia mod for debug mpls 
********************************************************************/ 
#include "stdio.h"  
#include "stdlib.h"

#include "mplstype.h"
#include "mplstype1.h"
/*#include "mplsevent.h"    r010*/

#include "mplscmd.h"
/* #include "ldpmess.h" */
#include "mplsni.h"
#include "mplseppc.h" 
#include "mplsevent.h"
#include "mplsmain.h"
#include "lms.h"
#include "ldpstr.h"
#include "mbldpmes.h"
#include "mpls_cmn.h"
#include "mpls_timer.h"
#include "ldpvars.h"
#include <attache/h/timer.h>

extern ushort  TimeSave[8];  /* 分别和8个记时器相对应 */
extern uchar   operArray[8]; /*0: LSRID的操作对应,1:所有LDP实体的操作对应, 2:单个LDP实体的操作对应*/

extern ulong glue_now();

extern mplsPort_t          MplsPortDataTable1,MplsPortDataTable;     /* 存放从数据处要的板类型、模块号、端口号、
                                             虚端口号、端口最大速率、svc VPI/VCI范围*/
                                              
extern Stnetifdata         MplsNiDataTable;      /* 存放NI表*/
extern unsigned char           aggr_enable;  
extern unsigned char           switch_router_id;
struct mpls_timeout_q *mpls_oam_timer_q; /* OAM timer queue */
void  timer1proOAM(uchar timeEvent); 
unsigned char   temperror=0;

/*
extern HopLspSetDel_t         hopLspSetDelTable;
extern ErLspSetDel_t          erLspSetDelTable;
*/
extern mplsFecFilterAll_t   *mplsFecFilterHead, *mplsFecFilterPF, *mplsFecFilterPN;
extern mplsFecFilterAdvertiseLbls_t     mplsFecFilterAdvEntry;

extern ushort         currentLspId;

extern FilterLspId_t  FilterNo[FILTER_MAX_NUM];
extern ushort         currentFilterNo;

extern mpls_SwitchAttribute					        Switcher;

extern mplsOamTimer_t         mplsOamTimer;

extern MIB_MANICFG_REQ        niCfgReq;    /* 标示请求索引号 */
extern MIB_MPLSCONFIG_REQ     mplsCfgReq;  /* 标示请求模块号 */
extern struct timer mplsOamEppcTimer[OAM_TIMER_MPLS_NI_TABLE+1];

extern mplsLspSetup_t  mplsLspSetupEntry;

extern PID    mplsManagerOamPID;
extern void   mplsLspPro(void *in,  uchar opertype, uchar   lsptype);
extern ulong   CURRENT_TIME(ulong *pSecondsHi,ulong *pSecondsLo);

extern uchar    SwitchType;  /* _BGSCONF.officetype    in  _bgsconf.h
                                (UCHAR)0x01      骨 干 交 换 机 
                                (UCHAR)0x02      接 入 交 换 机?
                                (UCHAR)0x03      复 用 交 换 机? */
extern uchar    mplsOamLocalPlatformType;

extern mplsOAMLdpMessage_t   lspData;  /* internalPortData;MessData; mplsLdpOamData;traffParamData*/

extern mplsLdpParam_t    mplsLdpParam;   /* setting data of LDP protocol sbp 2002-6-15 */
extern void mplsFecLspRteInit();   /* init fec lsp and route buffer sbp 2002-6-25 */
extern short mplsLdpdisTransAddr(uchar moduleNo,uchar portNo,unsigned short ifIndex,ulong ipaddr,short is_no);
void mplsLdpdisTransAddr_ex(uchar moduleNo,uchar portNo,unsigned short ifIndex,ulong ipaddr);
char mplsInternalPortVpiVciACK(uchar module);
char mplsTrafficDefaultACK(uchar module);
unsigned char mplsGetModuleDynamic(mplsLdpId_t LdpID, unsigned short  ifIndex);
extern mpls_label_busy_flags			local_label_busy_flags;   /* szh  2002-8-24 for label init */
extern unsigned short mplsFecMemInit();

#if _MPLS_DEBUG
extern unsigned long  mplsDebug[50];
#endif

extern void mplsInterfaceConfig(unsigned char module);
extern void mplsEntityConfig(unsigned char module);
extern mplsIfConf_t   mplsIfConf[MPLS_MAX_BOARD];
void mplsIPFunc(mplsIpIf_name_t *mplsIpIf);
modulePortIfIndex_t  mplsIpGetModulePortIfIndex(unsigned char module,unsigned char port);
extern mplsIpIf_name_t mplsIpIf;
unsigned char   mplsIpSetTimes;
extern int fec_key_compare(void *key1, void *key2);
void mplsD010NiData(MIB_MANICFG_REQ  *niCfgReq);

unsigned long  mplsOamDataTimerId = 0;
extern void mplsOamGetMem();
/*
void mplsLoadDataFromFlash()
{
	LoadDataOutOfMemory();
}
*/

unsigned long mpls_a076_eppc_timerid=0;



/* sbp 2002-12-24  */
void mplsOamReqTimepro(void *l)
{
    mplsOamDataTimerId  = 0;
    niCfgReq.begindex=0;
    mplsD010NiData(&niCfgReq);
}

void MPLS_A076_EPPC()   
{
    PID   sendPid;
    unsigned char module;
    SELF(&sendPid);
    module = sendPid.module;
	GET_PID("Snark_Init",&sendPid);
	sendPid.module = module;
	ASEND(DOWNSTREAM_LOST,0,0,sendPid); 
  MPLS_SET_TIMER(10, (void *)MPLS_A076_EPPC, (void *)DOWNSTREAM_LOST, mpls_oam_timer_q, mpls_a076_eppc_timerid);

}	    			    

void mplsA076EppcProt()
{
     int  rtnCode;
     MPLS_CLEAR_TIMER(mpls_a076_eppc_timerid, mpls_oam_timer_q, rtnCode);
}
void mplsLdpdisTransAddr_ex(unsigned char moduleNo,unsigned char portNo,unsigned short ifIndex,unsigned long ipaddr)
{
    unsigned short     num1;
    unsigned short     numFnd;
    ulong      addr;
    
    addr = ipaddr;
    
   numFnd = 0;
   for(num1=0; num1<arrayLen[NOENTITY]; num1++)
   {
      if(mplsLdpEntityEntry[num1].ifName.module==moduleNo &&
         mplsLdpEntityEntry[num1].ifIndex==ifIndex)
      {
          numFnd = 1;
          mplsLdpEntityEntry[num1].transAddr     = ipaddr;
          mplsLdpEntityEntry[num1].transFlag     = 1;
          return ;
      }
   }
   
    if(numFnd==0)
   {
      mplsLdpEntityEntry[num1].ifName.module = moduleNo;/* gxq Module */
      mplsLdpEntityEntry[num1].ifName.port   = portNo;/* gxq port */
      mplsLdpEntityEntry[num1].ifIndex       = ifIndex;
      
      mplsLdpEntityEntry[num1].transAddr     = ipaddr;
      mplsLdpEntityEntry[num1].transFlag     = 1;
   }
      
    return ;

}
/************************************************************************
 * FUNCTION NAME  : mplsIpGetModulePortIfIndex()	                            
 * DESCRIPTION:   : 计算ifIndex 			    
 *  INPUT         : str:       module/port              				
 *  OUTPUT        : MPIfIndex : module port ifindex		                           				
 *  AUTHOR/DATE   : Sun Baoping/ 01.12.12                               
 *  GLOBAL        : 								
 *  NOTE          :  ..                                                 
/************************************************************************/
modulePortIfIndex_t  mplsIpGetModulePortIfIndex(unsigned char module,unsigned char port)
{
	ushort      num;
    ushort      num1,num4;
    ushort      ifIndex;
    uchar       numFnd;
       
    modulePortIfIndex_t  MPIfIndex;
   
    	/*计算IFINDEX号*/
    numFnd = 0;
    if(mplsOamLocalPlatformType==MPLS_OAM_PLATFORM_M1000)
    {   
    for(num1=0; num1<MplsPortDataTable1.num; num1++)
    {
       if(MplsPortDataTable1.mplsModule[num1].module==module)
       {
           for(num=0; num<MplsPortDataTable1.mplsModule[num1].num; num++)
           {
           	  if((module==0&&MplsPortDataTable1.mplsModule[num1].portData[num].port<5)||module!=0)
              {
              	 if(MplsPortDataTable1.mplsModule[num1].portData[num].port==port)
                 {
                     for(num4=0; num4<MplsNiDataTable.NiCfgNum; num4++)
            	     {
            	       if((MplsPortDataTable1.mplsModule[num1].cardType==MplsNiDataTable.ni[num4].ni_lcardtype && 
            	        MplsPortDataTable1.mplsModule[num1].portData[num].ifIndex==MplsNiDataTable.ni[num4].ni_ifindex)
            	        ||
            	       (((MplsPortDataTable1.mplsModule[num1].cardType == MPLS_CARDTYPE_ETH)
            	       ||(MplsPortDataTable1.mplsModule[num1].cardType==MPLS_CARDTYPE_ETHIF))&&   /* for ethi   sbp 2002-11-23*/
            	       MplsNiDataTable.ni[num4].ni_lcardtype==0 && /* sbp 2001-12-28  ppeth cardtype==0 */
            	       MplsPortDataTable1.mplsModule[num1].portData[num].ifIndex==MplsNiDataTable.ni[num4].ni_ifindex))
            	       {
            	            ifIndex = MplsPortDataTable1.mplsModule[num1].portData[num].ifIndex;
            	            numFnd  = 1;
            	            break;
            	        }
            	     }
                     break;
                 }
              }
              else
                 break;
           }
             	
           break;
       }
   }
  }
  else if(mplsOamLocalPlatformType==MPLS_OAM_PLATFORM_M2000 && module == 1)
  {   
       num1 = 0;
       module -= 1;
       if(MplsPortDataTable1.mplsModule[num1].module==module)
       {
           for(num=0; num<MplsPortDataTable1.mplsModule[num1].num; num++)
           {
           	  if((module==0&&MplsPortDataTable1.mplsModule[num1].portData[num].port<=16))
              {
              	 if(MplsPortDataTable1.mplsModule[num1].portData[num].port==port)
                 {
                     for(num4=0; num4<MplsNiDataTable.NiCfgNum; num4++)
            	     {
            	       if((MplsPortDataTable1.mplsModule[num1].cardType==MplsNiDataTable.ni[num4].ni_lcardtype && 
            	        MplsPortDataTable1.mplsModule[num1].portData[num].ifIndex==MplsNiDataTable.ni[num4].ni_ifindex)
            	        ||
            	       (((MplsPortDataTable1.mplsModule[num1].cardType == MPLS_CARDTYPE_ETH)
            	       ||(MplsPortDataTable1.mplsModule[num1].cardType==MPLS_CARDTYPE_ETHIF))&&   /* for ethi   sbp 2002-11-23*/
            	       MplsNiDataTable.ni[num4].ni_lcardtype==0 && /* sbp 2001-12-28  ppeth cardtype==0 */
            	       MplsPortDataTable1.mplsModule[num1].portData[num].ifIndex==MplsNiDataTable.ni[num4].ni_ifindex))
            	       {
            	            ifIndex = MplsPortDataTable1.mplsModule[num1].portData[num].ifIndex;
            	            numFnd  = 1;
            	            break;
            	        }
            	     }
                 }
              }
           }
       }
  }  
  else
  {
   for(num1=1; num1<MplsPortDataTable1.num; num1++)
    {
       if(MplsPortDataTable1.mplsModule[num1].module==module)
       {
           for(num=0; num<MplsPortDataTable1.mplsModule[num1].num; num++)
           {
               if(MplsPortDataTable1.mplsModule[num1].portData[num].port==port)
                {
                   for(num4=0; num4<MplsNiDataTable.NiCfgNum; num4++)
            	   {
            	     if((MplsPortDataTable1.mplsModule[num1].cardType==MplsNiDataTable.ni[num4].ni_lcardtype && 
            	      MplsPortDataTable1.mplsModule[num1].portData[num].ifIndex==MplsNiDataTable.ni[num4].ni_ifindex)
            	      ||
            	     (((MplsPortDataTable1.mplsModule[num1].cardType == MPLS_CARDTYPE_ETH)
            	       ||(MplsPortDataTable1.mplsModule[num1].cardType==MPLS_CARDTYPE_ETHIF))&&   /* for ethi   sbp 2002-11-23*/
            	     MplsNiDataTable.ni[num4].ni_lcardtype==0 && /* sbp 2001-12-28  ppeth cardtype==0 */
            	     MplsPortDataTable1.mplsModule[num1].portData[num].ifIndex==MplsNiDataTable.ni[num4].ni_ifindex))
            	     {
            	          ifIndex = MplsPortDataTable1.mplsModule[num1].portData[num].ifIndex;
            	          numFnd  = 1;
            	          break;
            	      }
            	   }
                   break;
                 }
           }
             	
           break;

⌨️ 快捷键说明

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