📄 mplsfunc.c
字号:
/********************************************************************
* Product Name: MPLS
* Module Name: OAM
* File Name: mplsfunc.c
* Function : definition of function for use in mplscmd.c
* History:
* Date Version modifier Activities
* ==================================================================
* 01-8-9 1.0 Sun Baoping create
* sbp 2002-2-22 调整CR-LSP的显示
* sbp 2002-2-22 change showing content for hop lsp
* sbp 2002-4-17 simplify the printing method
* Huyonghong 2002.11.11 show ip traffic configration
* sbp 2002-12-28 在线删除增加端口地址出错
* sbp 2003-1-9 内存管理整理
* 2003-7-9 szh 增加对M2000的处理
* 2003-10-30 szh mod for m2000 process GetModulePortIfIndex( )
* 2003-11-12 szh mod MplsPortDataTable1代替MplsPortDataTable
********************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include "mplsfun.h"
#include "protocol/h/exec_cmd.h"
#include "mplsni.h"
#include "mplslsp.h"
#include "mplsmpue.h"
#include "r060file.h"
#include "mx_ax_bx.h"
#include "mplstype1.h"
#include "mplsevent.h"
/*#include "ldpmess.h"*/
#include "ldpstr.h"
#include "mbldpmes.h"
#include "mplserr.h"
extern bits32_t glue_now();
extern ushort arrayLen[MPLS_DATA_ARRAY_MAX]; /* 用于存储各表的长度,具体对应关系在arraylen.h说明*/
extern mplsLsrAttr_t mplsLsrAttrEntry;
extern MplsInterfaceConfTable_t mplsInterfaceConfEntry[MPLS_LDP_INTERFACE_MAX];
extern MplsTrafficParamTable_t mplsTrafficParamEntry[MPLS_LDP_INTERFACE_MAX];
extern MplsLdpEntityTable_t mplsLdpEntityEntry[MPLS_LDP_INTERFACE_MAX];
extern MplsLdpEntityAtmParamsTable_t mplsLdpEntityAtmParamsEntry[MPLS_LDP_INTERFACE_MAX];
extern MplsLdpEntityConfAtmLabelRangeTable_t mplsLdpEntityConfAtmLabelRangeEntry[MPLS_LDP_INTERFACE_MAX];
extern mplsLdpEntityStatsTable_t mplsLdpEntityStatsEntry[MPLS_LDP_INTERFACE_MAX];
extern mplsLdpPeerTable_t mplsLdpPeerEntry[MPLS_LDP_PEER_MAX];
extern mplsLdpHelloAdjacencyTable_t mplsLdpHelloAdjacencyEntry[MPLS_LDP_PEER_MAX];
extern MplsLdpSessionTable_t mplsLdpSessionEntry[MPLS_LDP_SESSION_MAX];
extern mplsLdpSessionStatsTable_t mplsLdpSessionStatsEntry[MPLS_LDP_SESSION_MAX];
extern forwardingtable_t mplsForwardingEntry[MPLS_LDP_INTERFACE_MAX];
extern mplsldpparamtable_t mplsLdpEntityParamEntry[MPLS_LDP_INTERFACE_MAX];
extern if_transport_table_t mplsIfTransportAddressEntry[MPLS_LDP_INTERFACE_MAX];
extern libtable_t mplsLibEntry[MPLS_LDP_INTERFACE_MAX];
extern mplsLdpDiscovery_t mplsLdpDiscoveryEntry[MPLS_LDP_INTERFACE_MAX];
extern mplsAtmLdpCapability_t mplsAtmLdpCapEntry[MPLS_LDP_INTERFACE_MAX];
extern mplsLdpAtmSessionTable_t mplsLdpAtmSessionEntry[MPLS_LDP_INTERFACE_MAX];
extern mplsLdpSessionPeerAddressTable_t mplsLdpSessionPeerAddressEntry[MPLS_LDP_SESSION_MAX];
extern MplsLdpEntityConfGenericLabelRangeTable_t mplsLdpEntityConfGenericLabelRangeEntry[MPLS_LDP_INTERFACE_MAX];
extern mplsLdpGeneralSessionTable_t mplsLdpGeneralSessionEntry[MPLS_LDP_INTERFACE_MAX];
/*
extern mplsMIBInfo mplsDataTable[ MPLS_DATA_ARRAY_MAX ];
*/
extern mplsPort_t MplsPortDataTable1; /* 存放从数据处要的板类型、模块号、端口号、
虚端口号、端口最大速率、svc VPI/VCI范围*/
extern Stnetifdata MplsNiDataTable; /* 存放NI表*/
extern uchar globalModule[SDP_TELNET_NUMBER_PERMIT]; /* 全局变量,在端口状态用于记录模块号、端口号、虚端口号 ,非端口状态则为0*/
extern uchar globalPort[SDP_TELNET_NUMBER_PERMIT];
extern ushort globalIfIndex[SDP_TELNET_NUMBER_PERMIT];
extern mplsFecFilterAll_t *mplsFecFilterHead, *mplsFecFilterPF, *mplsFecFilterPN;
extern ushort currentLspId;
extern FilterLspId_t FilterNo[FILTER_MAX_NUM];
extern ushort currentFilterNo;
extern uchar mplsOamLocalPlatformType;
extern mpls_SwitchAttribute Switcher;
extern mplsLdpParam_t mplsLdpParam;
extern mplsIfConf_t mplsIfConf[MPLS_MAX_BOARD];
extern char FRootDir[];
mplsOAMLdpMessage_t lspData;
extern PID mplsManagerOamPID;
ushort mplsQosFilterNoGetPtr(ushort filterNo,QosMulitFieldFilter_t **Ptr);
ushort mplsQosCheckFilterNo(ushort filterNo);
void mplsCRLspConfigSend(mplsErLspTable_t **ptr);
short mplsCRLspSearchQosFilter(mplsErLspTable_t **ptr);
void MplsAccessListPrint(struct sty *sty,mplsFecFilterAll_t **tempFilterPtr);
void MplsTrafficEngConfigurationPrint(struct sty *sty,QosMulitFieldFilter_t **tempFilterPtr);
char *changePrefixIntoStr(ulong prefix,ushort len);
extern ulong CURRENT_TIME(ulong *pSecondsHi,ulong *pSecondsLo);
unsigned long tranLen2mask(unsigned char len);
extern PROTO_MEM_MGR MPLS_OAM_MEM[MAX_OAM_UTIL_MEM_TYPES];
/************************************************************************
* FUNCTION NAME : IpAddrMaskLenMatching()
* DESCRIPTION: : compare ip address、mask(len)
* INPUT : srcAddr: source address
* srcLen : len of source address mask
* dstAddr: destination address
* dstLen : len of destination address mask
* OUTPUT : success or fail message
* AUTHOR/DATE : Sun Baoping/ 01.12.12
* GLOBAL :
* NOTE : ..
/************************************************************************/
ushort IpAddrMaskLenMatching(ulong srcAddr,uchar srcLen,ulong dstAddr,uchar dstLen)
{
if(srcAddr==dstAddr && srcLen==dstLen)
return MPLS_LSP_ADDR_REPEAT_ERROR;
return MPLS_SDP_CMD_SUCCESS;
}
/************************************************************************
* FUNCTION NAME : mplsIfDelete()
* DESCRIPTION: : no mpls ip when deleting interface
* AUTHOR/DATE : sbp 2002-11-26
* GLOBAL :
* NOTE : ..
/************************************************************************/
void mplsIfDelete(unsigned char module,unsigned char port)
{
if(mplsOamLocalPlatformType==MPLS_OAM_PLATFORM_M1000)
{
mplsIfConf[module].port[port-1].Ip_maskLen &=NO_MPLS_IP;
}
else
{
mplsIfConf[module-1].port[port-1].Ip_maskLen &=NO_MPLS_IP;
}
}
/************************************************************************
* FUNCTION NAME : IpAddrMaskMatching()
* DESCRIPTION: : compare ip address、mask
* INPUT : srcAddr : source address
* srcMask : source address mask
* dstAddr : destination address
* dstMask : destination address mask
* OUTPUT : success or fail message
* AUTHOR/DATE : Sun Baoping/ 01.12.12
* GLOBAL :
* NOTE : ..
/************************************************************************/
ushort IpAddrMaskMatching(ulong srcAddr,ulong srcMask,ulong dstAddr,ulong dstMask)
{
if(srcAddr==dstAddr && srcMask==dstMask)
return MPLS_LSP_ADDR_REPEAT_ERROR;
return MPLS_SDP_CMD_SUCCESS;
}
/************************************************************************
* FUNCTION NAME : printIntefaceInfo()
* DESCRIPTION: : print interface information configed
* INPUT :
* OUTPUT : NONE
* AUTHOR/DATE : Sun Baoping/ 01.12.12
* GLOBAL :
* NOTE : ..
/************************************************************************/
void printIntefaceInfo(struct sty *sty,interface_name_t *IfPortArray, ushort portNum,uchar *cardStr)
{
ushort num;
ushort num1;
interface_name_t portConf[MAX_PORTS_ONE_BORAD];
memcpy(portConf,IfPortArray,sizeof(interface_name_t)*portNum);
if(portNum>0)
{
sdp_printf(sty, " \n");
sdp_printf(sty, " %s Interface configed: \n",cardStr);
num1=0;
for(num=0; num<portNum; num++)
{
if(num1==0)
{
if(portConf[num].module>9)
sdp_printf(sty, " %s%-u/%-5u", cardStr,portConf[num].module,
portConf[num].port);
else
sdp_printf(sty, " %s%-u/%-6u", cardStr,portConf[num].module,
portConf[num].port);
}
else
{
if(portConf[num].module>9)
sdp_printf(sty, "%s%-u/%-5u", cardStr,portConf[num].module,
portConf[num].port);
else
sdp_printf(sty, "%s%-u/%-6u", cardStr,portConf[num].module,
portConf[num].port);
}
num1++;
if(num1==7)
{
sdp_printf(sty, "\n");
num1=0;
}
}
sdp_printf(sty, "\n");
}
}
/************************************************************************
* FUNCTION NAME : GetModulePortIfIndex()
* DESCRIPTION: : 计算module, port, ifIndex
* INPUT : str: module/port
* OUTPUT : MPIfIndex : module port ifindex
* AUTHOR/DATE : Sun Baoping/ 01.12.12
* GLOBAL :
* NOTE : ..
* History : 2003-10-30 szh mod for m2000 process
/************************************************************************/
modulePortIfIndex_t GetModulePortIfIndex(int8 * str)
{
ushort num;
ushort num1;
ushort ifIndex;
uchar module;
uchar port;
uchar numFnd;
int16 count_num=0,count_num1=0;
int8 * p_temp;
int8 f_temp[3];
int8 n_temp[3];
modulePortIfIndex_t MPIfIndex;
memset(f_temp,0,sizeof(int8)*3);
memset(n_temp,0,sizeof(int8)*3);
p_temp=str;
while ((*p_temp >= '0') && (*p_temp <= '9'))
{
f_temp[count_num]=*p_temp;
p_temp++;
count_num++;
}
p_temp++;
while ((*p_temp >= '0') && (*p_temp <= '9'))
{
n_temp[count_num1]=*p_temp;
p_temp++;
count_num1++;
}
module = (uchar)(attache_atoi( f_temp ));
port = (uchar)(attache_atoi( n_temp ));
/*计算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)
{
ifIndex = MplsPortDataTable1.mplsModule[num1].portData[num].ifIndex;
numFnd = 1;
break;
}
}
else
break;
}
break;
}
}
}
else if(mplsOamLocalPlatformType==MPLS_OAM_PLATFORM_M2000)
{
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<17)||module!=0)
{
if(MplsPortDataTable1.mplsModule[num1].portData[num].port==port)
{
ifIndex = MplsPortDataTable1.mplsModule[num1].portData[num].ifIndex;
numFnd = 1;
break;
}
}
else
break;
}
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)
{
ifIndex = MplsPortDataTable1.mplsModule[num1].portData[num].ifIndex;
numFnd = 1;
break;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -