📄 mplsfun.c
字号:
}
}
}
if(numFnd==0)
{
ifIndex = PORTNOTEXIST;
}
MPIfIndex.module = module;
MPIfIndex.port = port;
MPIfIndex.ifIndex = ifIndex;
return MPIfIndex;
}
void mplsIpReset()
{
int rtnCode;
if(mplsIpIf.timeId!=0)
MPLS_CLEAR_TIMER(mplsIpIf.timeId, mpls_oam_timer_q, rtnCode);
MPLS_SET_TIMER(10, (void *)mplsIPFunc, &mplsIpIf, mpls_oam_timer_q, mplsIpIf.timeId);
mplsIpSetTimes = 1;
}
void mplsIPFunc(mplsIpIf_name_t *mIpIf)
{
unsigned char search_once=0;
modulePortIfIndex_t ifMPif;
if(mplsIpIf.module==0 &&mplsIpIf.port==0)
{
if(mplsOamLocalPlatformType==MPLS_OAM_PLATFORM_M1000)
{
mplsIpIf.module=0;
mplsIpIf.port=1;
}
else
{
mplsIpIf.module=1;
mplsIpIf.port=1;
}
MPLS_SET_TIMER(100, (void *)mplsIPFunc, &mplsIpIf, mpls_oam_timer_q, mplsIpIf.timeId);
return;
}
for(;search_once<1;)
{
while(mplsIpIf.module<=MPLS_MAX_BOARD)
{
while(mplsIpIf.port<=MPLS_MAX_PORT)
{
if(mplsOamLocalPlatformType==MPLS_OAM_PLATFORM_M1000)
{
if(mplsIfConf[mplsIpIf.module].port[mplsIpIf.port-1].Ip_maskLen&MPLS_IP)
{
if(mplsIfConf[mplsIpIf.module].port[mplsIpIf.port-1].Ip_maskLen&EN_MPLS_IP)
{
if((mplsIfConf[mplsIpIf.module].port[mplsIpIf.port-1].Ip_maskLen&MPLS_TRANS_ADDR)
&&(!(mplsIfConf[mplsIpIf.module].port[mplsIpIf.port-1].Ip_maskLen&EN_MPLS_TRANS_ADDR)))
{
ifMPif = mplsIpGetModulePortIfIndex(mplsIpIf.module,mplsIpIf.port);
if(ifMPif.ifIndex!=PORTNOTEXIST)
{
mplsLdpdisTransAddr(mplsIpIf.module,mplsIpIf.port,ifMPif.ifIndex,
mplsIfConf[mplsIpIf.module].port[mplsIpIf.port-1].TransPortAddr,1);
mplsIfConf[mplsIpIf.module].port[mplsIpIf.port-1].Ip_maskLen |=EN_MPLS_TRANS_ADDR;
}
}
mplsIpIf.port++;
}
else
{
ifMPif = mplsIpGetModulePortIfIndex(mplsIpIf.module,mplsIpIf.port);
if(ifMPif.ifIndex!=PORTNOTEXIST)
{
mplsMibInitOneIf(ifMPif.module,ifMPif.port,ifMPif.ifIndex,1);
if(mplsIfConf[mplsIpIf.module].port[mplsIpIf.port-1].Ip_maskLen&MPLS_TRANS_ADDR)
{
mplsLdpdisTransAddr_ex(mplsIpIf.module,mplsIpIf.port,ifMPif.ifIndex,
mplsIfConf[mplsIpIf.module].port[mplsIpIf.port-1].TransPortAddr);
mplsIfConf[mplsIpIf.module].port[mplsIpIf.port-1].Ip_maskLen|=EN_MPLS_TRANS_ADDR;
}
mplsInterfaceConfig(ifMPif.module);
mplsEntityConfig(ifMPif.module);
mplsIfConf[mplsIpIf.module].port[mplsIpIf.port-1].Ip_maskLen|=EN_MPLS_IP;
if(mplsIpIf.port==MPLS_MAX_PORT)
{
mplsIpIf.module++;
mplsIpIf.port = 1;
}
else
mplsIpIf.port++;
if(mplsIpSetTimes<200)
{
mplsIpSetTimes++;
MPLS_SET_TIMER(10, (void *)mplsIPFunc, &mplsIpIf, mpls_oam_timer_q, mplsIpIf.timeId);
}
else
MPLS_SET_TIMER(10*120, (void *)mplsIPFunc, &mplsIpIf, mpls_oam_timer_q, mplsIpIf.timeId);
return;
}
else
mplsIpIf.port++;
}
}
else
mplsIpIf.port++;
}
else
{
if(mplsIfConf[mplsIpIf.module-1].port[mplsIpIf.port-1].Ip_maskLen&MPLS_IP)
{
if(mplsIfConf[mplsIpIf.module-1].port[mplsIpIf.port-1].Ip_maskLen&EN_MPLS_IP)
{
if((mplsIfConf[mplsIpIf.module-1].port[mplsIpIf.port-1].Ip_maskLen&MPLS_TRANS_ADDR)
&&(!(mplsIfConf[mplsIpIf.module-1].port[mplsIpIf.port-1].Ip_maskLen&EN_MPLS_TRANS_ADDR)))
{
ifMPif = mplsIpGetModulePortIfIndex(mplsIpIf.module,mplsIpIf.port);
if(ifMPif.ifIndex!=PORTNOTEXIST)
{
mplsLdpdisTransAddr(mplsIpIf.module,mplsIpIf.port,ifMPif.ifIndex,
mplsIfConf[mplsIpIf.module-1].port[mplsIpIf.port-1].TransPortAddr,1);
mplsIfConf[mplsIpIf.module-1].port[mplsIpIf.port-1].Ip_maskLen |=EN_MPLS_TRANS_ADDR;
}
}
mplsIpIf.port++;
}
else
{
ifMPif = mplsIpGetModulePortIfIndex(mplsIpIf.module,mplsIpIf.port);
if(ifMPif.ifIndex!=PORTNOTEXIST)
{
mplsMibInitOneIf(ifMPif.module,ifMPif.port,ifMPif.ifIndex,1);
if(mplsIfConf[mplsIpIf.module-1].port[mplsIpIf.port-1].Ip_maskLen&MPLS_TRANS_ADDR)
{
mplsLdpdisTransAddr_ex(mplsIpIf.module,mplsIpIf.port,ifMPif.ifIndex,
mplsIfConf[mplsIpIf.module-1].port[mplsIpIf.port-1].TransPortAddr);
mplsIfConf[mplsIpIf.module-1].port[mplsIpIf.port-1].Ip_maskLen|=EN_MPLS_TRANS_ADDR;
}
mplsInterfaceConfig(ifMPif.module);
mplsEntityConfig(ifMPif.module);
mplsLdpdisTransAddr(ifMPif.module,ifMPif.port,ifMPif.ifIndex,
mplsIfConf[mplsIpIf.module-1].port[mplsIpIf.port-1].TransPortAddr,1);
mplsIfConf[mplsIpIf.module-1].port[mplsIpIf.port-1].Ip_maskLen|=EN_MPLS_IP;
if(mplsIpIf.port==MPLS_MAX_PORT)
{
if(mplsIpIf.module==MPLS_MAX_BOARD)
{
mplsIpIf.module=1;
}
else
mplsIpIf.module++;
mplsIpIf.port = 1;
}
else
mplsIpIf.port++;
if(mplsIpSetTimes<200)
{
mplsIpSetTimes++;
MPLS_SET_TIMER(10, (void *)mplsIPFunc, &mplsIpIf, mpls_oam_timer_q, mplsIpIf.timeId);
}
else
MPLS_SET_TIMER(10*120, (void *)mplsIPFunc, &mplsIpIf, mpls_oam_timer_q, mplsIpIf.timeId);
return;
}
else
mplsIpIf.port++;
}
}
else
mplsIpIf.port++;
}
}
mplsIpIf.port=1;
mplsIpIf.module++;
}
search_once=1;
if(mplsOamLocalPlatformType==MPLS_OAM_PLATFORM_M1000)
{
mplsIpIf.module = 0;
}
else
{
mplsIpIf.module = 1;
}
}
if(mplsIpSetTimes<200)
{
mplsIpSetTimes++;
MPLS_SET_TIMER(10, (void *)mplsIPFunc, &mplsIpIf, mpls_oam_timer_q, mplsIpIf.timeId);
}
else
MPLS_SET_TIMER(10*120, (void *)mplsIPFunc, &mplsIpIf, mpls_oam_timer_q, mplsIpIf.timeId);
return;
}
void mplsD010PortData(MIB_MPLSCONFIG_REQ *req) /* 索要port的与MPLS有关的数据 */
{
PID D010Pid;
GET_PID("MIBACCESS",&D010Pid);
D010Pid.module = 0;
ASEND(MIB_MPLSCONFIG,req,sizeof(MIB_MPLSCONFIG_REQ),D010Pid);
mplsOamTimer.backoff[OAM_TIMER_MPLS_CONFIG_TABLE]=
mplsOamTimer.backoff[OAM_TIMER_MPLS_CONFIG_TABLE]*2+1;
/*mplsOamTimer.timerId[OAM_TIMER_MPLS_CONFIG_TABLE] =
EXTRA_SET_TIMER(MPLS_CONFIG_TABLE_TIMER*
mplsOamTimer.backoff[OAM_TIMER_MPLS_CONFIG_TABLE],
MPLS_TIMER1, OAM_TIMER_MPLS_CONFIG_TABLE);*/
MPLS_SET_TIMER(MPLS_CONFIG_TABLE_TIMER * mplsOamTimer.backoff[OAM_TIMER_MPLS_CONFIG_TABLE],
(void *)timer1proOAM,(void *) OAM_TIMER_MPLS_CONFIG_TABLE, mpls_oam_timer_q,
mplsOamTimer.timerId[OAM_TIMER_MPLS_CONFIG_TABLE]);
}
void mplsD010NiData(MIB_MANICFG_REQ *niCfgReq) /* 索要NI表的数据*/
{
PID D010Pid;
GET_PID("MIBACCESS",&D010Pid);
D010Pid.module = 0;
ASEND(MIB_PP_MPU_NICONF,&niCfgReq->begindex,sizeof(ushort),D010Pid);
mplsOamTimer.backoff[OAM_TIMER_MPLS_NI_TABLE]=
mplsOamTimer.backoff[OAM_TIMER_MPLS_NI_TABLE]*2+1;
/*mplsOamTimer.timerId[OAM_TIMER_MPLS_NI_TABLE] =
EXTRA_SET_TIMER(MPLS_NI_TABLE_TIMER*
mplsOamTimer.backoff[OAM_TIMER_MPLS_NI_TABLE],
MPLS_TIMER1, OAM_TIMER_MPLS_NI_TABLE);*/
MPLS_SET_TIMER(MPLS_NI_TABLE_TIMER * mplsOamTimer.backoff[OAM_TIMER_MPLS_NI_TABLE],
(void *)timer1proOAM, (void *)OAM_TIMER_MPLS_NI_TABLE, mpls_oam_timer_q,
mplsOamTimer.timerId[OAM_TIMER_MPLS_NI_TABLE]);
}
void getMplsPortData(MIB_MPLSCONFIG_ACK *Data)
{
ushort num,i;
if(MplsPortDataTable.num==MAX_ROUTE_CARDS)
return;
if (MplsPortDataTable.num==0)
{
MPLS_MEMSET(&MplsPortDataTable,0,sizeof(mplsPort_t)); /*初始化LSRID*/
}
num = MplsPortDataTable.num;
MplsPortDataTable.mplsModule[num]=*Data;
for(i=0;i<MplsPortDataTable.mplsModule[num].num;i++)
{
MplsPortDataTable.mplsModule[num].portData[i].atmfAtmLayerMaxSvccVpi--;
}
MplsPortDataTable.num++;
}
void getMplsNiData(MIB_MANICFG_ACK *Data)
{
ushort index;
ushort len;
index = Data->AckIndex;
len = Data->Len;
if(index==1)
{
MPLS_MEMSET(&MplsNiDataTable,0,sizeof(Stnetifdata));
}
memcpy((UCHAR *)&MplsNiDataTable+(index-1)*4096,Data->Buffer,len);
}
/************************************************************************
* FUNCTION NAME : mplsAlarmNiData()
* DESCRIPTION: : request data
* AUTHOR/DATE : sbp 2002-12-25
/************************************************************************/
void mplsAlarmNiData()
{
niCfgReq.begindex=0;
mplsD010NiData(&niCfgReq);
}
/************************************************************************
* FUNCTION NAME : mplsLdpParamInit()
* DESCRIPTION: : initialize the LDP data.
* AUTHOR/DATE : sbp 2002-6-15
/************************************************************************/
void mplsLdpParamInit()
{
MPLS_MEMSET(&mplsLdpParam,0,sizeof(mplsLdpParam_t));
mplsLdpParam.mplsEnable = ADMINSTATUS_DOWN;
mplsLdpParam.mplsRouteridEnable = ADMINSTATUS_DOWN;
mplsLdpParam.protocolversion = 1;
mplsLdpParam.minLabel = 10001;
mplsLdpParam.maxLabel = 0x0fffff;
mplsLdpParam.s_hold = 45;
mplsLdpParam.s_interval = 15;
mplsLdpParam.h_hold = 15;
mplsLdpParam.h_interval = 5;
/*mplsLdpParam.loopdetection = 1;*/
mplsLdpParam.loopdetection = 5;
mplsLdpParam.maxhopcount = 255;
mplsLdpParam.pvlimit = 255;
mplsLdpParam.controlmode = 2;
mplsLdpParam.aggregate = 1;
switch_router_id = 0;
aggr_enable = mplsLdpParam.aggregate;
}
int filter_key_compare(void *key1, void *key2)
{
int rc = 0;
mpls_filter_key *lsp_key1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -