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

📄 mplsmain.c

📁 技术文件名称:MPLSv1.0软件模块测试规程
💻 C
字号:
/********************************************************************          
*	Product Name:	MPLS                                       	          
*	Module  Name:	LMS    										
*	File    Name:   mplsmain.c								        	          
*	Function    :	main process of managing data for mpls   
*   History:
*   Date          Version        modifier         Activities 
* ==================================================================
*   01-8-9         2.1.2        Sun Baoping        create		
    deal with alarm     sbp 2002-1-14      
    2003.1.29 Sunbaoping 光口标记范围的最小VCI也是32,则把该值改为33。
    szh 2003-8-29 mod add mpls_ldp_configtbl()
********************************************************************/ 

#include "mplstype.h"     /*r010*/
#include "mplstype1.h"
 /*#include "mplsfunc.h"    r010*/
#include "mplsevent.h"   /* r010*/
#include "mplsni.h"   
#include "mplsMpue.h"  

/*#include "ldpmess.h" */
#include "mplsmain.h"
#include "mplslsp.h"
#include "sbmessg.h"
#include "mpls_timer.h"

/* 外部函数  */
/*extern void mplsLoadDataFromFlash();             从flash中读取数据*/
extern void mplsD010PortData(MIB_MPLSCONFIG_REQ *req);        /* 从数据处要的板类型、模块号、端口号、
                                             虚端口号、端口最大速率、svc VPI/VCI范围*/
extern void mplsD010NiData();          /* 从数据处要NI表*/
extern void getMplsPortData(MIB_MPLSCONFIG_ACK *Data);   /* 取板类型等数据 */
extern void getMplsNiData(MIB_MANICFG_ACK  *Data);     /* 取NI表*/
extern void mplsDataLsrAttrAck(ushort eventType,PID *sPid,uchar opera);          /* 发送LSR 数据*/
extern void mplsDataIfConfAck(ushort eventType,PID *sPid,uchar opera);
extern void mplsInitwhole();
extern void mplsDataEntityAck(ushort eventType,PID *sPid,uchar opera);
extern void  timer1proOAM(TimerEventStruc *in);

/* fec process add 2001-12-12 16:03 szh */
extern void Fecpro(ulong type, void *in);
extern void  mpls_lms_init();/* atm label init szh add 2002-7-11 */
extern void  mpls_genlbl_mem_init();/* gen label apply memory szh add 2002-7-11 */
/*
extern void mplsSessionPeerAddrRecv(PID *sPid, MIB_LDP_SESSION_PEERADDR_REQ *data);
*/

/*
extern void mplsHelloRecv(PID *sPid, MIB_LDPHELLO_REQ *data);
extern void mplsSessionRecv(PID *sPid, MIB_LDP_SESSION_REQ *data);
extern void mplsPeerRecv(PID *sPid, MIB_LDP_PEER_REQ *data);
extern void mplsEntityStatsRecv(PID *sPid, entityStats_t *data);
extern void mplsSessionStatsRecv(PID *sPid, sessionStats_t *data);
extern void mplsSessionPeerRecv(PID *sPid, MIB_LDP_SESSION_PEERADDR_REQ *data);
*/
extern void mplsMibInitOneIf(uchar module,uchar port,ushort ifIndex);
extern void mplsMibInitWhole();
extern void mplsEntityConfig(uchar module);
extern void mplsAttrConfig(uchar module);
extern void mplsLdpOamDataProcess(PID  sendPid, void *data);
extern void mplsLspSetupInit();
extern void mplsOamLdpConfig();
extern void mplsInternalPortVpiVci();
extern void mplsLocalPlatform();
extern void mplsOperOnIfOffline();
extern void MPLS_A076_EPPC();   
extern void mplsIPFunc(mplsIpIf_name_t *mplsIpIf);
mplsIpIf_name_t mplsIpIf;
#if _MPLS_DEBUG
extern unsigned long  mplsDebug[50];
#endif
extern struct sty *cty;
 
extern ushort  TimeSave[8];  /* 分别和8个记时器相对应 */
extern uchar   operArray[8]; /*0: LSRID的操作对应,1:所有LDP实体的操作对应, 2:单个LDP实体的操作对应*/
extern uchar   LdpDefConf[2]; /* 0:1  all default,0:2 all config ; 1:1  :interface default 1:2  interface config*/

extern mplsPort_t          MplsPortDataTable, MplsPortDataTable1;     /* 存放从数据处要的板类型、模块号、端口号、
                                             虚端口号、端口最大速率、svc VPI/VCI范围*/
                                             
extern Stnetifdata         MplsNiDataTable;      /* 存放NI表*/

MIB_MANICFG_REQ        niCfgReq;    /* 标示请求索引号 */
MIB_MPLSCONFIG_REQ     mplsCfgReq;  /* 标示请求模块号 */

extern mplsOamTimer_t         mplsOamTimer;

extern struct mpls_timeout_q *mpls_oam_timer_q;
extern void mplsA076EppcProt();

extern unsigned long  mplsOamDataTimerId ;   /*  sbp 2002-12-24 */
extern void mplsOamReqTimepro(void *l);
extern void    mpls_atm_label_deal();
/*
extern HopLspSetDel_t         hopLspSetDelTable;
extern ErLspSetDel_t          erLspSetDelTable;
*/
extern ushort         currentLspId;
#ifdef PSOS
extern void accboard_receive_ppagt_msg(void *in);
#define TNC_AGT_P2AMSG   4854
#endif
PID    mplsManagerOamPID;

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

/************************************************************************
 * FUNCTION NAME  : MplsManage()	                            
 * DESCRIPTION:   : MplsManage process  			    
 *  INPUT         :                           				
 *  OUTPUT        : 	                           				
 *  AUTHOR/DATE   : Sun Baoping/ 01.12.12                               
 *  GLOBAL        : 								
 *  NOTE          :  ..                                                 
 *               deal with alarm     sbp 2002-1-14                                  
/************************************************************************/
void Fec(void *inData,void *ldpOut, void *ldpIn)
{

	USHORT				event;
	uchar               operaType;
	PID                 sendPid;
	MIB_MPLSCONFIG_ACK  *mplsPort;
	MIB_MANICFG_ACK     *mplsNi;
	int                 rtnCode;
			
	event= EVENT();
	SENDER(&sendPid);
	switch(STATE())
	{
	     /*启动进程*/
	     case MplsInitStatus:
	     {
	     	switch( event )
	     	{  
	     		case MPLS_PowerOnEvent:
	     		{    
	     			MplsPortDataTable.num=0;
	     			MPLS_MEMSET(&MplsPortDataTable1, 0, sizeof(mplsPort_t));
	     			mplsInitwhole();
	     			/* EXTRA_SET_EVERY_TIMER(MPLS_OAM_TIMER_PERIOD,MPLS_TIMER1,0); */
	     			SET_TIMER(MPLS_OAM_TIMER_PERIOD,MPLS_TIMER1);
	     			#if 1
	     			#ifdef MPLS_DATA_DEBUG
	     			    printf("Loading data and requesting data from MFU in MplsInitStatus\n");
	     			#endif
	     			/*   
	     			 mplsLoadDataFromFlash();
	     			*/
	     			 mplsCfgReq.module=0;
	     			 mplsD010PortData(&mplsCfgReq);
	     			#else
	     			    NEXT_STATE(MplsWorkStatus);
	     			#endif
	     		    break;
	     		}
	     		case MIB_MPLSCONFIG:
	     		{    
	     			SENDER(&sendPid);
	     			
	     			#ifdef MPLS_DATA_DEBUG
	     			    printf(" Geting port data from MFU in MplsInitStatus\n");
	     			#endif
	     			 mplsOamTimer.backoff[OAM_TIMER_MPLS_CONFIG_TABLE]= 0;
	     			 /*EXTRA_KILL_TIMER(mplsOamTimer.timerId[OAM_TIMER_MPLS_CONFIG_TABLE]);*/
	     			 MPLS_CLEAR_TIMER(mplsOamTimer.timerId[OAM_TIMER_MPLS_CONFIG_TABLE], 
	     			                  mpls_oam_timer_q, rtnCode);
	     			 mplsPort = (MIB_MPLSCONFIG_ACK *)inData;
	     			 
	     			 if (mplsPort->module<255)
	     			 {
	     			     #if _MPLS_DEBUG
	     			 	 printf(" Geting port data of module ==%d in MplsInitStatus\n",mplsPort->module);
	     			 	 #endif
	     			 	 getMplsPortData(mplsPort);
	     			     mplsCfgReq.module=mplsPort->module+1;
	     			     mplsD010PortData(&mplsCfgReq);	
	     			 }
	     			 else
	     			 {
	     			 	 SwitchType = mplsPort->portData[0].port;
	     			 	 mplsLocalPlatform();     /* get local platform type		*/
	     			     niCfgReq.begindex=0;
	     			     mplsD010NiData(&niCfgReq);                    /* 索要NI表的数据*/
	     			 }
	     		     break;
	     		}
	     		case MIB_PP_MPU_NICONF:
	     		{
	     			 #ifdef MPLS_DATA_DEBUG
	     			    printf(" Geting Ni data from MFU in MplsInitStatus\n");
	     			 #endif
	     			 mplsOamTimer.backoff[OAM_TIMER_MPLS_NI_TABLE]= 0;
	     			 /*EXTRA_KILL_TIMER(mplsOamTimer.timerId[OAM_TIMER_MPLS_NI_TABLE]);*/
	     			 MPLS_CLEAR_TIMER(mplsOamTimer.timerId[OAM_TIMER_MPLS_NI_TABLE], 
	     			                  mpls_oam_timer_q, rtnCode);
	     			 mplsNi = (MIB_MANICFG_ACK *)inData;
	     			 getMplsNiData(mplsNi);
	     			 
	     			 if (mplsNi->EndFlag==0)     /*  NI表未接收完,继续接收 */        
	     			 {
	     			 	 niCfgReq.begindex=mplsNi->AckIndex;
	     			 	 mplsD010NiData(&niCfgReq);
	     			 }
	     			 else                       /*  NI表接收完毕,进入工作状态 */
	     			 {
	     			 	 niCfgReq.begindex=0;
	     			 	 mpls_ldp_configtbl();/* szh change the position */
       			 	     mplsLspSetupInit();
       			 	     #if _MPLS_DEBUG
                            printf(" Send mpls config port data to LDP process \n");
	     			 	 #endif
	     			 	 /*mplsOamLdpConfig();*/
	     			 	 mplsInternalPortVpiVci();
	     			 	 /* atm label init szh add 2002-7-11 */
	     			 	 mpls_atm_label_deal();
	     			 	 mpls_lms_init();
	     			 /*	 mpls_ldp_configtbl();   */
	     			 	 /* gen label apply memory szh add 2002-7-11 */
	     			 	 mpls_genlbl_mem_init();
	     			 	 mplsIPFunc(&mplsIpIf);
                         MPLS_A076_EPPC();
	     			     NEXT_STATE(MplsWorkStatus);
	     			    /**/
	     			 }
	     		     break;
	     		}
	     		case MPLS_Timer1Event:
        	        MPLS_AGE_TIMER(MPLS_OAM_TIME_ADD,mpls_oam_timer_q);
        	        SET_TIMER(MPLS_OAM_TIMER_PERIOD,MPLS_TIMER1);
        	        #if _MPLS_DEBUG
        	        if(mplsDebug[14]<4294967000)
        	        {
        	           mplsDebug[14]++;
        	         /*  printf("kjkjljljlkj");*/
        	        }
        	        #endif
                break;
		     		     
	     		default:
	     		     break;
	     	}
	     	
	     	break;
	     }
		
		case MplsWorkStatus:
		{
			switch( event )
			{
				case MIB_PP_MPU_NICONF:    /*工作状态接收在线配置的NI表*/
	     		{
	     			 #ifdef MPLS_DATA_DEBUG
	     			    printf(" Geting Ni data from MFU in MplsWorkStatus \n");
	     			 #endif
	     			 mplsOamTimer.backoff[OAM_TIMER_MPLS_NI_TABLE]= 0;
	     			 /*EXTRA_KILL_TIMER(mplsOamTimer.timerId[OAM_TIMER_MPLS_NI_TABLE]);*/
	     			 MPLS_CLEAR_TIMER(mplsOamTimer.timerId[OAM_TIMER_MPLS_NI_TABLE], 
	     			                  mpls_oam_timer_q, rtnCode);
	     			 mplsNi = (MIB_MANICFG_ACK *)inData;
	     			 getMplsNiData(mplsNi);
	     			 
	     			 if (mplsNi->EndFlag==0)     /*  NI表未接收完,继续接收 */        
	     			 {
	     			 	 niCfgReq.begindex=mplsNi->AckIndex;
	     			 	 mplsD010NiData(&niCfgReq);
	     			 }
	     			 else
	     			 {
    	     			 mplsCfgReq.module=0;
    	     			 MplsPortDataTable.num = 0;
    	     			 mplsD010PortData(&mplsCfgReq);
    	     	     }
	     			 
	     		     break;
	     		}
	     		
	     		case MIB_MPLSCONFIG:
	     		{    
	     			SENDER(&sendPid);
	     			
	     			#ifdef MPLS_DATA_DEBUG
	     			    printf(" Geting port data from MFU in MplsWorkStatus\n");
	     			#endif
	     			 mplsOamTimer.backoff[OAM_TIMER_MPLS_CONFIG_TABLE]= 0;
	     			 /*EXTRA_KILL_TIMER(mplsOamTimer.timerId[OAM_TIMER_MPLS_CONFIG_TABLE]);*/
	     			 MPLS_CLEAR_TIMER(mplsOamTimer.timerId[OAM_TIMER_MPLS_CONFIG_TABLE], 
	     			                  mpls_oam_timer_q, rtnCode);
	     			 mplsPort = (MIB_MPLSCONFIG_ACK *)inData;
	     			 
	     			 if (mplsPort->module<255)
	     			 {
	     			     #if _MPLS_DEBUG
	     			 	 printf(" Geting port data of module ==%d in MplsWorkStatus\n",mplsPort->module);
	     			 	 #endif
	     			 	 getMplsPortData(mplsPort);
	     			     mplsCfgReq.module=mplsPort->module+1;
	     			     mplsD010PortData(&mplsCfgReq);	
	     			 }
	     			 else
	     			 {
	     			     mpls_ldp_configtbl(); /* szh 2003-8-29 for MplsPortDataTable1 init online */
	     			     mplsLspSetupInit();
	     			     mpls_atm_label_deal();
	     			     mpls_lms_init();   /* szh  2002-8-24  for label init online  */
	     			  /*   mpls_ldp_configtbl(); szh 2003-8-29 for MplsPortDataTable1 init online */
	     			     mplsOperOnIfOffline();  /*  sbp  2002-11-14 deal with ldp data when interface offline */
	     			 }
	     		     break;
	     		}
	     		
	     		case MPLS_MplsNi_MOD_EVENT:
	     		{
	     			 /* sbp 2002-12-24 delay time for reuqest data */
	     			 if(mplsOamDataTimerId!=0)
	     			    MPLS_CLEAR_TIMER(mplsOamDataTimerId, mpls_oam_timer_q, rtnCode);
	     			 MPLS_SET_TIMER(10, (void *)mplsOamReqTimepro, 
	     			     (void*)MPLS_MplsNi_MOD_EVENT, mpls_oam_timer_q, mplsOamDataTimerId);
	     		     break;
	     		}
	     		case MPLS_ALARM_EVENT: 
	     		{
	     			 Fecpro(event, inData);
	     		     break;
	     		}
	     		
				case MPLS_LDP_OAM_MESSAGE:
				{
					SENDER(&sendPid);
				    mplsLdpOamDataProcess(sendPid, inData);
				    break;
				}
				
				case MPLS_Timer1Event:
        	        MPLS_AGE_TIMER(MPLS_OAM_TIME_ADD,mpls_oam_timer_q);
        	        SET_TIMER(MPLS_OAM_TIMER_PERIOD,MPLS_TIMER1);
        	        #if _MPLS_DEBUG
        	        if(mplsDebug[14]<4294967000)
        	        {
        	           mplsDebug[14]++;
        	          /* printf("ggggggggggggggggg");*/
        	        }
        	        #endif
                break;
	     		#ifdef PSOS   /* sbp 2002-7-10 show command by agent only for zxb10 */
	     	    case TNC_AGT_P2AMSG:
   	       		     accboard_receive_ppagt_msg(inData);
   	       		break; 		
   	       	    #endif 	     		
   	       	    case DOWNSTREAM_LOST:
   	       	         mplsA076EppcProt();
   	       	    break;   		
				default:
				    Fecpro(event, inData);  /* FEC process add 2002-6-25 szh */
				    break;
			}
			
			break;
		}
		
		default:
		    break;
	}

}

⌨️ 快捷键说明

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