📄 mplscmd.c
字号:
/********************************************************************
* Product Name: MPLS
* Module Name: OAM
* File Name: mplscmd.c
* Function : definition of command function
* History:
* Date Version modifier Activities
* ==================================================================
* 01-8-9 1.0 Sun Baoping create
* 2002-4-17 sbp simplfy the printing method
* 2002.11.28 sbp transport address 和 MPLS IP 配置与数据无关
* sbp 2003-1-9 内存管理整理
* sbp 2003-1-21 处理show mpls ldp atm label中的错误数据
* huyonghong 2003-4-3 增加mpls policy的一些命令
* 2003-7-9 szh 增加对M2000的处理
* 2003-7-14 szh mod 双光纤应有几个显示信息
* 2003-9-6 szh lixia mod show tunnel,show binding命令
* 2003-9-11 szh add printf in showLdpBindingsNetworkIpAddr
* 2003.9.23 Lixia 显示bingding内容太多,需分别显示,同时统计信息少
* 2003-10-13 lixia add cmd_show_unrelease_pvc for show unrelease pvc
* szh add 2003-10-16 for show label used information
* 2003-10-21 lixia mod cmd_show_unrelease_pvc
* 2003-10-23 lixia 增加show mpls ldp bindings waiting and next 命令的函数
* 2003-11-7 szh mod showlabelusedsummary(),删除显示的多余信息
* 2003-11-12 szh mod MplsPortDataTable1代替MplsPortDataTable
* 2003-11-20 lixia mod showMplsLdpBindingsDisplaynew,showLdpBindingsDisplaynew,showLdpBindingsSummary
showLdpwaitBindings for status is ESTABLISHED
* 2003-11-20 lixia mod cmd_show_unrelease_pvc to show flag of unrelease pvc
* 2003-12-5 lixia add for show memory
* 2003-12-10 szh mod 在showbinding中增加错误码的显示
* 2004-2-24 lixia add cmd_mpls_policy_enable command
* 2004-3-26 lixia mod sdp_sh_mpls_ldp_session_stats_if
********************************************************************/
#include "string.h"
#include "stdlib.h"
#include "stdio.h"
#include "memory.h"
#include "malloc.h"
#include "protocol/h/exec_cmd.h"
#include "protocol/h/tnagt.h"
#include "mplslsp.h"
#include "mplsldp.h"
#include "mplsfun.h"
#include "mplseppc.h"
#include "mplsni.h"
#include "mplsmpue.h"
#include "mplstype.h"
#include "mplstype1.h"
#include "mx_ax_bx.h"
#include "mplspara.h"
#include "oamport.h"
#include "ldpstr.h"
#include "mplsshow.h"
#include "ldpi.h"
#include "ldpmacro.h"
#include "ldpvars.h"
extern SDP_GLOBAL * sdp_global[SDP_TELNET_NUMBER_PERMIT];
extern char * changeLabelIntoStr(labelAtm_t label);
extern char * changeInterfaceIntoStr(interface_name_t interface);
extern char * changePrefixIntoStr(unsigned long prefix,unsigned short len);
extern void mplsForwardingPrint(struct sty *sty,unsigned short num1,uchar num);
extern void mplsLdpSessionPrint(MplsLdpSessionTable_t *pSesT,struct sty *sty);
extern void mplsLdpSessionStatePrint(mplsLdpSessionStatsTable_t *pSeSt,struct sty *sty);
extern void mplsLdpPeerPrint(mplsLdpPeerTable_t *pPeer,struct sty *sty);
extern void mplsLdpAdjacencyPrint(mplsLdpHelloAdjacencyTable_t *pAdjT,struct sty *sty);
extern modulePortIfIndex_t GetModulePortIfIndex(int8 * str);
extern int16 sdp_up_get_time(unsigned long uptime, struct sty *sty);
extern int16 sdp_mpls_session_state(MplsLdpSessionTable_t *pS,struct sty *sty);
extern int16 ldp_param_show_func(MplsLdpEntityTable_t **pLdp,unsigned short *pEntryNumF,SDP_PARAM_STRU *para_group);
extern void lsrIdConfDelFunc(unsigned long lsrId,uchar operatype);
extern void printIntefaceInfo(struct sty *sty,interface_name_t *IfPortArray, unsigned short portNum,uchar *cardStr);
extern void mplsCrLspIdPrint(mplsErLspTable_t p1,struct sty *sty);
extern void mplsHopLspIdPrint(mplsHopLspTable_t *p1,struct sty *sty);
extern void mplsCrLspPrint(mplsErLspTable_t *p1,struct sty *sty);
extern void moduelPort2ifIndexModulePort(int8 *ModulePort);
extern int16 mplsLspResMsgNo(struct sty *sty,int16 ResMsgNo);
extern int16 mplsFecFilterRetMsgNo(struct sty *sty,int16 ResMsgNo);
extern int16 mplsCommonErrorMsg(struct sty *sty,int16 ResMsgNo);
extern void shMplsAccessList(struct sty *sty,unsigned short filterNo);
void shMplsModuleParameter(struct sty *sty);
extern void shMplsTrafficEngConfiguration(struct sty *sty,unsigned short filterNo);
extern void mplsIpReset();
extern short LoadDataFileInMemory();
extern short StoreDataFileOutMemory();
extern char mplsLoadError[MPLS_DATA_ARRAY_MAX];
extern char mplsSaveError[MPLS_DATA_ARRAY_MAX];
extern mpls_SwitchAttribute Switcher;
extern uchar mplsOamLocalPlatformType;
extern int16 sdp_check_ip_mask(int8 * the_mask);
extern struct sty * sdp_all_sty[SDP_TELNET_NUMBER_PERMIT];
extern mplsIfConf_t mplsIfConf[MPLS_MAX_BOARD];
/* mplsPort_t MplsPortDataTable; */ /* 存放从数据处要的板类型、模块号、端口号、
虚端口号、端口最大速率、svc VPI/VCI范围*/
extern mplsPort_t MplsPortDataTable1,MplsPortDataTable;
Stnetifdata MplsNiDataTable; /* 存放NI表*/
/* in order to set or delete lsp */
/* FEC and MplsManage are combined into one process, so the
massage between them doesn't need transfer.
*/
extern mpls_comm_oam_t *pAtmLabeltemp;
extern ulong session_error, sesserror_index;
unsigned short currentLspId;
unsigned short TimeSave[8]; /* 分别和8个记时器相对应 */
unsigned char operArray[8]; /*0: LSRID的操作对应,1:所有LDP实体的操作对应, 2:单个LDP实体的操作对应*/
unsigned char LdpDefConf[2]; /* 0:1 all default,0:2 all config ; 1:1 :interface default 1:2 interface config*/
unsigned char globalModule[SDP_TELNET_NUMBER_PERMIT]; /* 全局变量,在端口状态用于记录模块号、端口号、虚端口号 ,非端口状态则为0*/
unsigned char globalPort[SDP_TELNET_NUMBER_PERMIT];
unsigned short globalIfIndex[SDP_TELNET_NUMBER_PERMIT];
unsigned long hoptraffpara_pdr=DEFAULT_PDR/48, hoptraffpara_pbs=DEFAULT_PBS/48;
extern unsigned short hoplspestab,crlspestab;
unsigned char encapsulation_mode = 0;
unsigned short abort_time = MPLS_RANDOM_TIME_START;
extern unsigned long asenderror;
extern unsigned long labelgeterror;
/* begin mib table */
unsigned short arrayLen[MPLS_DATA_ARRAY_MAX]; /* 用于存储各表的长度,具体对应关系在arraylen.h说明*/
MplsLdpEntityConfAtmLabelRangeTable_t mplsLdpEntityConfAtmLabelRangeEntry[MPLS_LDP_INTERFACE_MAX];
mplsLdpEntityStatsTable_t mplsLdpEntityStatsEntry[MPLS_LDP_INTERFACE_MAX];
mplsLsrAttr_t mplsLsrAttrEntry;
MplsInterfaceConfTable_t mplsInterfaceConfEntry[MPLS_LDP_INTERFACE_MAX];
MplsLdpEntityAtmParamsTable_t mplsLdpEntityAtmParamsEntry[MPLS_LDP_INTERFACE_MAX];
MplsTrafficParamTable_t mplsTrafficParamEntry[MPLS_LDP_INTERFACE_MAX];
MplsLdpEntityTable_t mplsLdpEntityEntry[MPLS_LDP_INTERFACE_MAX];
mplsLdpPeerTable_t mplsLdpPeerEntry[MPLS_LDP_PEER_MAX];
mplsLdpHelloAdjacencyTable_t mplsLdpHelloAdjacencyEntry[MPLS_LDP_PEER_MAX];
MplsLdpSessionTable_t mplsLdpSessionEntry[MPLS_LDP_SESSION_MAX];
mplsLdpSessionStatsTable_t mplsLdpSessionStatsEntry[MPLS_LDP_SESSION_MAX];
forwardingtable_t mplsForwardingEntry[MPLS_LDP_INTERFACE_MAX];
mplsldpparamtable_t mplsLdpEntityParamEntry[MPLS_LDP_INTERFACE_MAX];
if_transport_table_t mplsIfTransportAddressEntry[MPLS_LDP_INTERFACE_MAX];
libtable_t mplsLibEntry[MPLS_LDP_INTERFACE_MAX];
mplsLdpDiscovery_t mplsLdpDiscoveryEntry[MPLS_LDP_INTERFACE_MAX];
mplsAtmLdpCapability_t mplsAtmLdpCapEntry[MPLS_LDP_INTERFACE_MAX];
mplsLdpAtmSessionTable_t mplsLdpAtmSessionEntry[MPLS_LDP_INTERFACE_MAX];
mplsLdpSessionPeerAddressTable_t mplsLdpSessionPeerAddressEntry[MPLS_LDP_SESSION_MAX];
MplsLdpEntityConfGenericLabelRangeTable_t mplsLdpEntityConfGenericLabelRangeEntry[MPLS_LDP_INTERFACE_MAX];
mplsLdpGeneralSessionTable_t mplsLdpGeneralSessionEntry[MPLS_LDP_INTERFACE_MAX];
/* end mib table */
/* the following help information is decided by platform type sbp 2001-12-23 */
char *sdp_cmd_info_mx =" <moduel No./port No.>: \n <0-4> module No. specify the module No.\n <1-8> port No. specify the port No.";
char *sdp_cmd_info_ax =" <moduel No./port No.>: \n <1-13> module No. specify the module No.\n <1-8> port No. specify the port No.";
char *sdp_cmd_info_bx =" <moduel No./port No.>: \n <1-11> module No. specify the module No.\n <1-8> port No. specify the port No.";
#if _MPLS_DEBUG
unsigned long mplsDebug[50];
#endif
/* configuration command begin */
unsigned char changeMplsRealNum(unsigned char eppcNum);
extern PROTO_MEM_MGR MPLS_OAM_MEM[MAX_OAM_UTIL_MEM_TYPES];
extern unsigned char temperror;
mpls_fec_key global_fec_key,wait_global_fec_key;
extern unsigned long Realfail; /*2003-10-21 lixia add */
extern mpls_label_busy_flags local_label_busy_flags;
unsigned char cr_priority = 0;
int16 showLdpBindingsDisplaynew(mplsLdpFecEntry *fecEntry ,struct sty *sty, unsigned short *lines); /* 2003-9-17 lixia add for show all bindings */
void showMplsLdpBindingsDisplaynew(mplsLdpFecEntry *fecEntry ,struct sty *sty, unsigned char flag);
int16 showLdpwaitBindings(mplsLdpFecEntry *fecEntry ,struct sty *sty,unsigned short *lines);
/*********************************************************************************
* 函 数 名: cmd_mpls_lsr_id()
* 功 能: 启动LDP并设置默认参数。
* 输 入: sty: 用于显示的结构;
* para_group: 操作中对应的参数域结构;
* is_no: 是一般命令还是no命令的标识;
* telnet_num: 当前的TELNET的序号
* 输 出: 无
* 返 回: 无条件地返回SDP_CMD_SUCCESS
* 全局变量: mplsLsrAttrEntry
* 修改记录:
- 修改日期 版本 修 改 人 修改原因及内容
=========================================================
- 01-7-25 1.0 sun baoping 创建
*********************************************************************************/
/************************************************************************/
/* FUNCTION NAME : mpls_ldp_tunnel_port() */
/* DESCRIPTION: : into interface mode by tunnel */
/* OUTPUT : success or fail message */
/* AUTHOR/DATE : sbp 2002-6-17 */
/* GLOBAL : NONE */
/* NOTE : .. */
/************************************************************************/
int16 mpls_ldp_tunnel_port(struct sty *sty,SDP_PARAM_STRU *para_group,int16 is_no,int16 telnet_num)
{
int8 *p_temp;
ULONG tnnl_index = para_group[1].param_un.param_int32;
int16 rc;
rc = mplsTunnelport(tnnl_index,is_no);
if (is_no)
{
if(rc == SDP_CMD_SUCCESS)
{
/* set current mode as interface tunnel config mode */
sdp_global[telnet_num]->sdp_current_state = SDP_INTERFACE_MPLS_TUNNEL_MODE;
if ( para_group[0].param_un.param_int32 == SDP_PARAM_TUNNEL_MPLS )
{
sdp_global[telnet_num]->sdp_interface.inter_type = SDP_INTERFACE_TUNNEL_MPLS;
sdp_global[telnet_num]->sdp_interface.port_num = tnnl_index;
(sdp_global[telnet_num]->sdp_prompt_config)[0] = 0;
strcpy(sdp_global[telnet_num]->sdp_prompt_config,"(config_if)");
globalModule[telnet_num] = 1; /* 全局变量,在端口状态用于记录模块号、端口号、虚端口号 ,非端口状态则为0*/
globalPort[telnet_num] = 1;
globalIfIndex[telnet_num] = tnnl_index;
}
return SDP_CMD_SUCCESS;
}
}
return(mplsLspResMsgNo(sty,rc));
}
int16 cmd_mpls_lsr_id(struct sty *sty,SDP_PARAM_STRU *para_group,int16 is_no,int16 telnet_num)
{
unsigned long lsrId;
uchar operatype; /*1:配置数据,2:删除 */
unsigned short RetMsgNO;
lsrId = para_group[0].param_un.param_int32;
RetMsgNO = mplsLsrIdConfig(lsrId,is_no);
return(mplsCommonErrorMsg(sty,RetMsgNO));
}
/************************************************************************/
/* FUNCTION NAME : cmd_mpls_ldp_maxhops() */
/* DESCRIPTION: : config ldp protocol max hops for loopdetection */
/* OUTPUT : success or fail message */
/* AUTHOR/DATE : sbp 2002-6-17 */
/* GLOBAL : NONE */
/* NOTE : .. */
/************************************************************************/
int16 cmd_mpls_ldp_aggregate(struct sty *sty,SDP_PARAM_STRU *para_group,int16 is_no,int16 telnet_num)
{
unsigned short RetMsgNO;
RetMsgNO = mplsLdpAggregate(is_no);
return(mplsCommonErrorMsg(sty,RetMsgNO));
}
/************************************************************************/
/* FUNCTION NAME : cmd_mpls_ldp_maxhops() */
/* DESCRIPTION: : config ldp protocol max hops for loopdetection */
/* OUTPUT : success or fail message */
/* AUTHOR/DATE : sbp 2002-6-17 */
/* GLOBAL : NONE */
/* NOTE : .. */
/************************************************************************/
int16 cmd_mpls_ldp_maxhops(struct sty *sty,SDP_PARAM_STRU *para_group,int16 is_no,int16 telnet_num)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -