📄 fec.c
字号:
(mpls_compare_string("DLIC",str))||
(mpls_compare_string("GEI",str))||
(mpls_compare_string("OFEC",str))||
(mpls_compare_string("SMPP",str))||
(mpls_compare_string("SGBC",str))))
{
if((nif[i].ni_ip !=0)&&(nif[i].ni_mask !=0)&&
((nif[i].ni_ip & nif[i].ni_mask) == (Ipaddress & nif[i].ni_mask)))
{
if(!nif[i].ni_lvpm) /* eth gei */
{
/*for guangzhou 2004-9-24 */
for(m=0;m<MplsPortDataTable1.num;m++)
{
samod = GetNiToModu(i);
if((samod==MplsPortDataTable1.mplsModule[m].module)&&(samod!=0xffff))
{
if(MplsPortDataTable1.mplsModule[m].portData[0].atmfAtmLayerMaxSvccVpi==0xffff)
invalid = 0;
break;
}
if(!invalid)
break;
}
/*for guangzhou 2004-9-24 */
if(invalid)
{
/* 2003-7-9 szh M2000上8号模块是LIC,后面的业务板模块号就多加了一个1*/
module = (nif[i].ni_ifindex /SB_MAX_IFINDEX_NUM) +1;
cardType = nif[i].ni_lcardtype;
for(t = 1; t < MplsPortDataTable1.num; t++)
{
if(MplsPortDataTable1.mplsModule[t].module==module)
{
cardType = MplsPortDataTable1.mplsModule[t].cardType;
break;
}
}
}
}
else /* lic */
{
module = nif[i].ni_lvpm ;
for(t = 1; t < MplsPortDataTable1.num; t++)
{
if(MplsPortDataTable1.mplsModule[t].module==module)
{
cardType = MplsPortDataTable1.mplsModule[t].cardType;
break;
}
}
/*
if(cardType == 255)
cardType = MPLS_CARDTYPE_ETH; */
}
break;
}
}
}
/* loopback */
if(((module==255)||(module == mplsManagerOamPID.module))&&(ifindex!=0xffff))
{
for(i = 0 ; i < NI_MAX; i++)
{
if((nif[i].RowStatus == MPLS_VAL_RowStatus_active)&&(nif[i].ni_ifindex==ifindex))
{
module = nif[i].ni_lvpm;
if(module == 0)
{
continue;
}
break;
}
}
for(t = 1; t < MplsPortDataTable1.num; t++)
{
if(MplsPortDataTable1.mplsModule[t].module==module)
{
cardType = MplsPortDataTable1.mplsModule[t].cardType;
break;
}
}
}
/* for protect */
if((module == 255)||(cardType == 255))
{
DEBUG_OUT(DEBUG_OWNER_MPLS, DEBUG_LEVEL_MPLS_CR," no find module or cardtype for IP:%x,ifindex %x!!!!\n",
Ipaddress,ifindex);
printf(" no find module or cardtype for IP:%x, mod %d, crdtype %d, ifindex %d!!!!",
Ipaddress,module,cardType,ifindex);
module = 0;
cardType = 0;
}
if(mplsOamLocalPlatformType == MPLS_OAM_PLATFORM_M2000)
{
if(module > 8)
module = module-1;
}
i = (unsigned short)module;
i = i<<8;
i = i|cardType;
return i;
}
/***********************************************************************/
/* FUNCTION NAME : accountsbmod() */
/* DESCRIPTION: : account sb module in lspnum least */
/* INPUT : void */
/* OUTPUT : unsigned char */
/* AUTHOR/DATE : shi.zhaohui/ 01.12.04 */
/* GLOBAL : none */
/* NOTE : .. */
/* History : kong.yong weng.qing */
/* sbp 2002-6-29 modify to return card type for GEi */
/*2002.11.28 sbp 处理HOP ADDRESS 与hop no 的关系*/
/************************************************************************/
unsigned short accountsbmod(void *in, unsigned char type, unsigned short ifindex) /* cr create need this func */
{
unsigned short temp, loop=0,modCard;
unsigned char module,cardType, flag = 0;
mplsErLspTable_t *erlspstr;
/* sbp 2002-4-17 for special board */
if(type == MPLS_CR_LSP_TYPE)
{
erlspstr = (mplsErLspTable_t *)in;
modCard = searchlocalmod(erlspstr -> nexthop[0], ifindex); /* loop -> 0*/
return modCard;
}
/* sbp 2002-4-17 for ingress */
#if 0
temp = mplsLspSetupEntry.moduleLsp[0].lspNum;
module = mplsLspSetupEntry.moduleLsp[0].module;
for(loop = 1; loop < mplsLspSetupEntry.num; loop ++)
{
if(temp > mplsLspSetupEntry.moduleLsp[loop].lspNum)
{
temp = mplsLspSetupEntry.moduleLsp[loop].lspNum;
module = mplsLspSetupEntry.moduleLsp[loop].module;
cardType = mplsLspSetupEntry.moduleLsp[loop].cardType;
}
}
modCard = (unsigned short) module;
modCard = modCard<<8; /* szh add */
modCard = modCard|cardType;
return modCard;
#endif
}
/************************************************************************/
/* FUNCTION NAME : ldp_accountsbmod() */
/* DESCRIPTION: : account sb module in lspnum least for ldp process */
/* AUTHOR/DATE : sbp 2002-12-3 */
/* sbp 2002-12-18 处理ETHIF板的相关数据 */
/************************************************************************/
unsigned short ldp_accountsbmod(FecMsg *in, unsigned short ifindex)
{
unsigned short modCard;
modCard = searchlocalmod(in -> Fec.NextHop,ifindex); /* loop -> 0*/
return modCard;
}
/***********************************************************************/
/* FUNCTION NAME : fecModule2Port() */
/* DESCRIPTION: : sb module to mfu port */
/* INPUT : module */
/* OUTPUT : unsigned short */
/* AUTHOR/DATE : shi.zhaohui/ 01.12.04 */
/* GLOBAL : none */
/* NOTE : .. */
/* History : kong.yong weng.qing */
/************************************************************************/
unsigned short fecModule2Port(unsigned short module)
{
/*******************************************************/
/* SwitchType : 1 BX; 2 AX; 3 M1000 */
/*******************************************************/
MPLS_ASSERT(module <= 16);
MPLS_ASSERT((mplsOamLocalPlatformType >= 1)&&(mplsOamLocalPlatformType <= 8));
switch(mplsOamLocalPlatformType)
{
case MPLS_PLATFORM_BX:
MPLS_ASSERT(module <= 8);
return module;
break;
case MPLS_PLATFORM_AX:
MPLS_ASSERT(module <= 8);
return module;
break;
case MPLS_PLATFORM_M1000:
MPLS_ASSERT(module <= 4);
return module+4;
break;
case MPLS_PLATFORM_M2000:
MPLS_ASSERT(module <= 16);
return module;
break;
default :
break;
}
}
/***********************************************************************/
/* FUNCTION NAME : lspdelpro_statup() */
/* DESCRIPTION: : del lsp to ldp( lsp up) */
/* INPUT : msg, in */
/* OUTPUT : void */
/* AUTHOR/DATE : shi.zhaohui/ 01.12.04 */
/* GLOBAL : none */
/* NOTE : .. */
/* History : kong.yong weng.qing */
/************************************************************************/
void lspdelpro_statup(FecMsg *msg, void *in, unsigned char lsptype)
{
PID Receiver;
unsigned short lspno;
mplsErLspTable_t *erlspstr;
GET_PID("LDPPROCESS",&Receiver);
erlspstr = (mplsErLspTable_t *)in;
msg->Fec.sbPort=(unsigned short)fecModule2Port( erlspstr -> SbModule );
Receiver.module = mplsManagerOamPID.module;
msg->Fec.RouteType = INGRESS;
msg -> OperateType = DELETE_PVC_TYPE;
msg -> LspNo = erlspstr->lsp_key.localLspId;
msg -> Fec.in_protocol_type = fecLdpGetCardTypeOnModule(Receiver.module);
msg -> Fec.out_protocol_type =
fecLdpGetCardTypeOnIfIndexAndIpaddr(msg -> Fec.ifIndex,msg -> Fec.NextHop);
msg->Fec.lspidTlv.routerId = Switcher.LsrId;
ASEND(MPLS_FEC_SETUP, msg, sizeof(FecMsg), Receiver);
#ifdef __BGS10_MPLS_DEBUG
printf("==== send lsp type % d ,delete message to ldp : module %d!!!====",
lsptype,Receiver.module);
#endif
lspnumpro(erlspstr -> SbModule, MPLS_LSP_DELETE);
mplsQosFilterNoBindingAddorDelete(erlspstr-> delFilterNo,
erlspstr->lsp_key.localLspId,
MPLS_OAM_DEL_BY_LSP);
mplsLspListDel(erlspstr);
crLspListSbOper(erlspstr,MPLS_LSP_DELETE);
/* 删除绑定,拆除tunnel */
if(erlspstr->FecGetSource&MPLS_FILTER_TUNNEL_DELETE)
{
erlspstr->statusCode = TUNNELFILTERERROR;
erlspstr -> ConnStatus = LSP_SET_STATUS_DOWN;
erlspstr->FecGetSource = FECROUTECREATE;
erlspstr-> delFilterNo = 0;
}
else
mplsLspNoDelLsp(&erlspstr->lsp_key, lsptype);
return;
}
/***********************************************************************/
/* FUNCTION NAME : lspdelpro_statdown() */
/* DESCRIPTION: : del lsp to ldp( lsp down) */
/* INPUT : msg, in */
/* OUTPUT : void */
/* AUTHOR/DATE : shi.zhaohui/ 01.12.04 */
/* GLOBAL : none */
/* NOTE : .. */
/* History : kong.yong weng.qing */
/************************************************************************/
void lspdelpro_statdown(FecMsg *msg, void *in, unsigned char lsptype)
{
mplsHopLspTable_t *hoplspstr;
mplsErLspTable_t *erlspstr;
unsigned short lspno;
if(lsptype == MPLS_CR_LSP_TYPE)
{
erlspstr = (mplsErLspTable_t *)in;
lspno = erlspstr->lsp_key.localLspId;
switch(erlspstr -> ReqNum)/* ?????? */
{
case 0:
/* reqnum = 0, no send setup request, so no need use lspnumpro*/
//lspnumpro(hoplspstr -> SbModule, MPLS_LSP_DELETE);
mplsQosFilterNoBindingAddorDelete(erlspstr-> delFilterNo,lspno, MPLS_OAM_DEL_BY_LSP);
/* 删除绑定,拆除tunnel */
if(erlspstr->FecGetSource&MPLS_FILTER_TUNNEL_DELETE)
{
erlspstr->statusCode = TUNNELFILTERERROR;
erlspstr -> ConnStatus = LSP_SET_STATUS_DOWN;
erlspstr->FecGetSource = FECROUTECREATE;
erlspstr-> delFilterNo = 0;
}
else
mplsLspNoDelLsp(&erlspstr->lsp_key, lsptype);
break;
default :
lspdelspecpro(msg, in, lsptype);
break;
}
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -