📄 mplsmain.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 + -