📄 mplsfun.c
字号:
/********************************************************************
* 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 + -