📄 mplsshow.c
字号:
/**************************************************************************************/
/* Product Name: MPLS */
/* File Name : mplsshow.c */
/* Author : gao.xiaoqing */
/* Create Date : 2002.6.27 */
/* Update : */
/*2002.11.28 sbp 处理HOP ADDRESS 与hop no 的关系 */
/*2002.12.23 Sbp 在路由动荡时,对SHOW 命令加保护 */
/* sbp 2003-1-16 同一优先级同一目的地只能建10调TUNNEL
/* 2003.1.21 sbp 增加show mpls tunnel local范围的命令 */
/* 2003.1.28 Huyonghong 显示pvc时判断块的状态增加子状态 */
/*2003.2.19 Sunbaoping 没有考虑0地址查询问题和没有考虑TUNNEL号不存在的情况*/
/* sbp 2003-2-22 严格判断显示信息 */
/* 2003-11-12 szh mod MplsPortDataTable1代替MplsPortDataTable
/**************************************************************************************/
#include "mplsshow.h"
#include "mplsldp.h"
#include "mplsfun.h"
#include "mpls.h"
#include "mplsni.h"
#include "oamport.h"
#include "ldpvars.h"
extern mplsPort_t MplsPortDataTable1;
extern mplsLdpParam_t mplsLdpParam;
extern unsigned short arrayLen[MPLS_DATA_ARRAY_MAX];
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];
typedef struct {
mpls_comm_oam_t oam_t_value;
forwardingtable_t forwart_t_value[MPLS_TABLE_SHOW_ITEM_LEN];
}mpls_forward_table_show;
extern unsigned long tranLen2mask(unsigned char len);
/*void showMplsDataWrite(uchar dataType, uchar dataLen, uchar *data, mpls_opr_data_t *pData, BYTE rtnNum)
{
pData->Type = dataType;
pData->Len = dataLen;
pData->Data = data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
rtnNum++;
}*/
/*******************************************************************************/
/* cmd: show mpls ldp neighbor */
/*******************************************************************************/
void showMplsLdpNeighborWrite(mplsLdpHelloAdjacencyTable_t *neighbor,
mpls_opr_data_t **pData, BYTE *rtnNum)
{
(*pData)->Type = DATA_TYPE_DWORD;
(*pData)->Len = 4;
*(DWORD *)(*pData)->Data = neighbor->entityLdpId.lsrAddress;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_WORD;
(*pData)->Len = 2;
*(WORD *)(*pData)->Data = neighbor->entityLdpId.labelSpace;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_DWORD;
(*pData)->Len = 4;
*(DWORD*)(*pData)->Data = neighbor->entityindex;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_DWORD;
(*pData)->Len = 4;
*(DWORD*)(*pData)->Data = neighbor->peerLdpId.lsrAddress;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_WORD;
(*pData)->Len = 2;
*(WORD*)(*pData)->Data = neighbor->peerLdpId.labelSpace;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_DWORD;
(*pData)->Len = 4;
*(DWORD*)(*pData)->Data = neighbor->adjacencyindex;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_DWORD;
(*pData)->Len = 4;
*(DWORD *)(*pData)->Data = neighbor->adjacencyholdtimeremaining;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_WORD;
(*pData)->Len = 2;
*(WORD *)(*pData)->Data = neighbor->adjacencytype;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_WORD;
(*pData)->Len = 2;
*(WORD *)(*pData)->Data = neighbor->connect.localPort;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_WORD;
(*pData)->Len = 2;
*(WORD *)(*pData)->Data = neighbor->connect.peerPort;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_DWORD;
(*pData)->Len = 4;
*(DWORD *)(*pData)->Data = neighbor->connect.localAddr;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_DWORD;
(*pData)->Len = 4;
*(DWORD *)(*pData)->Data = neighbor->connect.peerAddr;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_BYTE;
(*pData)->Len = 1;
*(BYTE *)(*pData)->Data = neighbor->ifName.module;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_BYTE;
(*pData)->Len = 1;
*(BYTE *)(*pData)->Data = neighbor->ifName.port;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_BYTE;
(*pData)->Len = 1;
*(BYTE *)(*pData)->Data = neighbor->ifName.lsrType;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_WORD;
(*pData)->Len = 2;
*(WORD *)(*pData)->Data = neighbor->ifIndex;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
}
/* cmd: show mpls ldp neighbor address <A.B.C.D> */
void showMplsLdpNeighborAddr(mpls_sh_data_t *in, mpls_comm_oam_t *out)
{
int i;
BYTE rtnNum = 0;
ushort dataSize = 0;
mpls_opr_data_t *pData = out->Data;
for(i = in->lastData[0]; i < arrayLen[NOADJACENCY]; i++)
{
if(mplsLdpHelloAdjacencyEntry[i].peerLdpId.lsrAddress == in->inTypeData.addr)
{
showMplsLdpNeighborWrite(&mplsLdpHelloAdjacencyEntry[i], &pData, &rtnNum);
dataSize++;
if(dataSize >= MPLS_LDP_NEIGHBOR_SIZE)
{
out->RetCode = SUCC_CMD_NOT_FINISHED;
out->lastData[0] = i + 1;
out->CmdRestartFlag = in->CmdRestartFlag;
out->DataNum = rtnNum;
out->DataLen = (WORD)((int)pData - (int)out->Data);
return;
}
}
}
if(!dataSize)
out->RetCode = SUCC_AND_NOPARA;
else
out->RetCode = SUCC_AND_HAVEPARA;
memset(out->lastData, 0, sizeof(out->lastData));
out->CmdRestartFlag = in->CmdRestartFlag;
out->DataNum = rtnNum;
out->DataLen = (WORD)((int)pData - (int)out->Data);
return;
}
/* cmd: show mpls ldp neighbor interface <module no/port no> */
void showMplsLdpNeighborPort(mpls_sh_data_t *in, mpls_comm_oam_t *out)
{
int i;
BYTE rtnNum = 0;
ushort dataSize = 0;
mpls_opr_data_t *pData = out->Data;
ushort module, port;
module = ((in->inTypeData.port >> 16) & 0xFFFF);
port = in->inTypeData.port & 0xFFFF;
for(i = in->lastData[0]; i < arrayLen[NOADJACENCY]; i++)
{
if(mplsLdpHelloAdjacencyEntry[i].ifName.module == module &&
mplsLdpHelloAdjacencyEntry[i].ifName.port == port)
{
showMplsLdpNeighborWrite(&mplsLdpHelloAdjacencyEntry[i], &pData, &rtnNum);
dataSize++;
if(dataSize >= MPLS_LDP_NEIGHBOR_SIZE)
{
out->RetCode = SUCC_CMD_NOT_FINISHED;
out->lastData[0] = i + 1;
out->CmdRestartFlag = in->CmdRestartFlag;
out->DataNum = rtnNum;
out->DataLen = (WORD)((int)pData - (int)out->Data);
return;
}
}
}
if(!dataSize)
out->RetCode = SUCC_AND_NOPARA;
else
out->RetCode = SUCC_AND_HAVEPARA;
memset(out->lastData, 0, sizeof(out->lastData));
out->CmdRestartFlag = in->CmdRestartFlag;
out->DataNum = rtnNum;
out->DataLen = (WORD)((int)pData - (int)out->Data);
return;
}
/* cmd: show mpls ldp neighbor */
void showMplsLdpNeighborAll(mpls_sh_data_t *in, mpls_comm_oam_t *out)
{
int i;
BYTE rtnNum = 0;
ushort dataSize = 0;
mpls_opr_data_t *pData = out->Data;
for(i = in->lastData[0]; i < arrayLen[NOADJACENCY]; i++)
{
showMplsLdpNeighborWrite(&mplsLdpHelloAdjacencyEntry[i], &pData, &rtnNum);
dataSize++;
if(dataSize >= MPLS_LDP_NEIGHBOR_SIZE)
{
out->RetCode = SUCC_CMD_NOT_FINISHED;
out->lastData[0] = i + 1;
out->CmdRestartFlag = in->CmdRestartFlag;
out->DataNum = rtnNum;
out->DataLen = (WORD)((int)pData - (int)out->Data);
return;
}
}
if(!dataSize)
out->RetCode = SUCC_AND_NOPARA;
else
out->RetCode = SUCC_AND_HAVEPARA;
memset(out->lastData, 0, sizeof(out->lastData));
out->CmdRestartFlag = in->CmdRestartFlag;
out->DataNum = rtnNum;
out->DataLen = (WORD)((int)pData - (int)out->Data);
return;
}
/* cmd: show mpls ldp neighbor */
void showMplsLdpNeighbor(mpls_sh_data_t *in, mpls_comm_oam_t *out)
{
switch(in->type)
{
case SHOW_IPADDR:
showMplsLdpNeighborAddr(in, out);
break;
case SHOW_PORT:
showMplsLdpNeighborPort(in, out);
break;
default:
showMplsLdpNeighborAll(in, out);
break;
}
return;
}
/******************************************************************************/
/* cmd: show mpls ldp session */
/******************************************************************************/
void showMplsLdpSessionWrite(MplsLdpSessionTable_t *sessTable,
mpls_opr_data_t **pData, BYTE *rtnNum)
{
int i;
(*pData)->Type = DATA_TYPE_DWORD;
(*pData)->Len = 4;
*(DWORD *)(*pData)->Data = sessTable->entityLdpId.lsrAddress;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_WORD;
(*pData)->Len = 2;
*(WORD *)(*pData)->Data = sessTable->entityLdpId.labelSpace;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_DWORD;
(*pData)->Len = 4;
*(DWORD *)(*pData)->Data = sessTable->peerLdpId.lsrAddress;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_WORD;
(*pData)->Len = 2;
*(WORD *)(*pData)->Data = sessTable->peerLdpId.labelSpace;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_DWORD;
(*pData)->Len = 4;
*(DWORD *)(*pData)->Data = sessTable->index;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_WORD;
(*pData)->Len = 2;
*(WORD *)(*pData)->Data = sessTable->state;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_WORD;
(*pData)->Len = 2;
*(WORD *)(*pData)->Data = sessTable->protocolversion;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_DWORD;
(*pData)->Len = 4;
*(DWORD *)(*pData)->Data = sessTable->keepaliveholdtimeremaining;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_DWORD;
(*pData)->Len = 4;
*(DWORD *)(*pData)->Data = sessTable->maxpdulength;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_DWORD;
(*pData)->Len = 4;
*(DWORD *)(*pData)->Data = sessTable->discontinuitytime;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_BYTE;
(*pData)->Len = 1;
*(BYTE *)(*pData)->Data = sessTable->role;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_BYTE;
(*pData)->Len = 1;
*(BYTE *)(*pData)->Data = sessTable->vcNumeberdType;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_BYTE;
(*pData)->Len = 1;
*(BYTE *)(*pData)->Data = sessTable->lblRngNum;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
for(i = 0; i < sessTable->lblRngNum; i++)
{
(*pData)->Type = DATA_TYPE_WORD;
(*pData)->Len = 2;
*(WORD *)(*pData)->Data = sessTable->lblRngList[i].minvpi;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_WORD;
(*pData)->Len = 2;
*(WORD *)(*pData)->Data = sessTable->lblRngList[i].minvci;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_WORD;
(*pData)->Len = 2;
*(WORD *)(*pData)->Data = sessTable->lblRngList[i].maxvpi;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
(*pData)->Type = DATA_TYPE_WORD;
(*pData)->Len = 2;
*(WORD *)(*pData)->Data = sessTable->lblRngList[i].maxvci;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
}
(*pData)->Type = DATA_TYPE_DWORD;
(*pData)->Len = 4;
*(DWORD *)(*pData)->Data = sessTable->helloArrayNum;
*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
(*rtnNum)++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -