📄 shcmd.c
字号:
/*2002.12.31 Sunbaoping simplify the requesting memory */
/* 2003.1.21 sbp 增加show mpls tunnel local范围的命令 */
#include "oamport.h"
#include "protocol/h/tnagt.h"
#include "protocol/h/agtcmd.h"
#include "mplsshow.h"
#include "mplslsp.h"
#include "ldp.h"
#include "ldpmacro.h"
#include "mplsfun.h"
extern unsigned short arrayLen[MPLS_DATA_ARRAY_MAX];
extern libtable_t mplsLibEntry[MPLS_LDP_INTERFACE_MAX];
mpls_comm_oam_t *pTnnl;
mpls_comm_oam_t *pBinding;
mpls_comm_oam_t *pFwdtemp;
mpls_comm_oam_t *pAtmLabeltemp;
/* sbp 2002-12-29 get memory for show command */
void mplsOamGetMem()
{
pTnnl = (mpls_comm_oam_t *)malloc(MPLS_DATA_SIZE_MAX);
pBinding = (mpls_comm_oam_t *)malloc(MPLS_DATA_SIZE_MAX);
pFwdtemp = (mpls_comm_oam_t *)malloc(MPLS_DATA_SIZE_MAX);
pAtmLabeltemp = (mpls_comm_oam_t *)malloc(MPLS_DATA_SIZE_MAX);
}
/****************************************************************************/
/* FUNCTION NAME :show_mpls_tunnel()
/* DESCRIPTION: :search tunnel table and send them to AGENT IN A076
/* INPUT :data: index type and command type(first, ....),
/* LEN : not use
/* extra: whether print remark for the entry
/* telnum: telnet No.
/* OUTPUT :void
/* AUTHOR/DATE :gao xiaoqing 2002-7-6
/* NOTE :....
/* sbp 2002-12-2 for traffic engineering backup and metric
/****************************************************************************/
void show_mpls_tunnel(unsigned char *data, unsigned short len,unsigned short extra, unsigned short telnum)
{
unsigned short i,j;
unsigned char *end_of_data;
mplsEppcShIndex_t indexEppc;
mpls_sh_data_t indexOam;
mplsEppcShLspTbl_t mplsLspTable;
mpls_opr_data_t *pData;
memset(pTnnl, 0x0, sizeof(pTnnl));
memset(&mplsLspTable,0,sizeof(mplsEppcShLspTbl_t));
indexEppc = *(mplsEppcShIndex_t *)data;
indexOam.type = indexEppc.type;
for(i=0; i<32; i++)
indexOam.lastData[i] = indexEppc.lastData[i];
indexOam.CmdRestartFlag = indexEppc.CmdRestartFlag;
indexOam.inTypeData.addr = indexEppc.inTypeData.addr;
indexOam.valid = indexEppc.valid;
showMplsTnnl(&indexOam, pTnnl);
mplsLspTable.retCode = pTnnl->RetCode;
for(i=0; i<32; i++)
mplsLspTable.lastData[i] = pTnnl->lastData[i];
i=0;
pData = pTnnl->Data;
end_of_data = (unsigned char *)pData + pTnnl->DataLen;
while((unsigned char *)pData < end_of_data)
{
mplsLspTable.lsp[i].ConnStatus = *(unsigned char *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
/*mplsLspTable.lsp[i].LspNo = *(unsigned short *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);*/
mplsLspTable.lsp[i].ReqNum = *(unsigned short *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].localLspId = *(unsigned short *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].IngressId = *(unsigned long *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].ErlspWcElemExists = *(unsigned char *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].ErlspLooseRouteChange = *(unsigned char *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].ErlspFecElemType = *(unsigned char *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].ErlspNumberFecElements = *(unsigned char *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
for(j = 0; j < mplsLspTable.lsp[i].ErlspNumberFecElements; j++)
{
mplsLspTable.lsp[i].FecTlv[j].netaddr = *(unsigned long *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].FecTlv[j].netmask = *(unsigned long *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
}
mplsLspTable.lsp[i].ErlspNumberErHops = *(unsigned short *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
for(j = 0; j < mplsLspTable.lsp[i].ErlspNumberErHops; j++)
{
mplsLspTable.lsp[i].ErAddress[j].netaddr = *(unsigned long *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].ErAddress[j].netmask = *(unsigned char *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
}
mplsLspTable.lsp[i].traffic.ErlspFlag = *(unsigned char *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].traffic.ErlspFreq = *(unsigned char *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].traffic.ErlspWeight = *(unsigned char *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].traffic.ErlspPdr = *(unsigned long *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].traffic.ErlspPbs = *(unsigned long *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].traffic.ErLspCdr = *(unsigned long *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].traffic.ErlspCbs = *(unsigned long *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].traffic.ErlspEbs = *(unsigned long *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].ErlspPinFlag = *(unsigned char *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].ErlspRsCls = *(unsigned long *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].ErlspQosMark = *(unsigned char *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].preempt.ErlspSetPrio = *(unsigned char *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].preempt.ErlspHoldPrio = *(unsigned char *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].statusCode = *(unsigned long *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].lspbytes = *(unsigned long *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].flag = *(unsigned char *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].FecGetSource = *(unsigned char *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].cos = *(unsigned char *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].lspType = *(unsigned char *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
/* sbp 2002-12-2 for traffic engineering backup and metric */
mplsLspTable.lsp[i].backup_routedown = *(unsigned char *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].metric = *(unsigned char *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].loadbalance = *(unsigned char *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].upAtmLabel.module = *(unsigned char *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].upAtmLabel.port = *(unsigned char *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].upAtmLabel.vpi = *(unsigned short *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].upAtmLabel.vci = *(unsigned short *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].upGenLabel = *(unsigned long *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].downAtmLabel.module = *(unsigned char *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].downAtmLabel.port = *(unsigned char *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].downAtmLabel.vpi = *(unsigned short *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].downAtmLabel.vci = *(unsigned short *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
mplsLspTable.lsp[i].downGenLabel = *(unsigned long *)pData->Data;
pData = (mpls_opr_data_t *)(pData->Data + pData->Len);
i++;
}
mplsLspTable.num = i;
accboard_reqagt_send(MPLS_EPPC_TUNNEL_CMD, (UCHAR *)&mplsLspTable,
(unsigned short)(18*sizeof(unsigned short)+sizeof(mplsEppcErLspTable_t)*mplsLspTable.num), extra, telnum);
return;
}
/****************************************************************************/
/* FUNCTION NAME :show_mpls_ldp_bindings()
/* DESCRIPTION: :search lib and send them to AGENT IN A076
/* INPUT :data: index type and command type(first, ....),
/* LEN : not use
/* extra: whether print remark for the entry
/* telnum: telnet No.
/* OUTPUT :void
/* AUTHOR/DATE :gao xiaoqing 2002-7-6
/* NOTE :....
/****************************************************************************/
void show_mpls_ldp_bindings(unsigned char *data, unsigned short len,unsigned short extra, unsigned short telnum)
{
unsigned short i,j, m = 0;
unsigned char *end_of_data,localnum;
mplsEppcShIndex_t indexEppc;
mpls_sh_data_t indexOam;
mplsEppcShLibTbl_t mplsBindingTable;
mpls_opr_data_t *pData;
mplsLdpFecEntry *fecEntry ;
mplsLdpLspCB *lspCB ;
mplsLdpDownCB *downCB;
fecEntry = NULL;
lspCB = NULL;
downCB = NULL;
/*MPLS_MEMSET(mplsLibEntry,0,MPLS_LDP_INTERFACE_MAX*sizeof(libtable_t));
for(fecEntry = (mplsLdpFecEntry *)MPLS_AVL_FIRST(g_fec_avl_tree);
fecEntry;
fecEntry = (mplsLdpFecEntry *)MPLS_AVL_NEXT(fecEntry->fec_avl_node))
{
mplsLibEntry[m].netaddr = fecEntry->fec_key.mplsFecAddr;
mplsLibEntry[m].mask.maskLen = fecEntry->fec_key.mplsLdpFecAddrLen;
lspCB = fecEntry->lsp_cb_list.first;
while(lspCB)
{
t_lspCb = lspCB->next;
mplsLibEntry[m].localBinds[mplsLibEntry[m].localNum].type = 1;
mplsLibEntry[m].localBinds[mplsLibEntry[m].localNum].label.atm.vpi =
lspCB->upAtmLabel.vpi;
mplsLibEntry[m].localBinds[mplsLibEntry[m].localNum].label.atm.vci =
lspCB->upAtmLabel.vci;
mplsLibEntry[m].localNum++;
mplsLibEntry[m].remoteBinds[mplsLibEntry[m].remoteNum].LsrId.lsrAddress =
lspCB->downPeerLdpid.lsrAddress;
mplsLibEntry[m].remoteBinds[mplsLibEntry[m].remoteNum].LsrId.labelSpace =
lspCB->downPeerLdpid.labelSpace;
mplsLibEntry[m].remoteBinds[mplsLibEntry[m].remoteNum].label.type = 1;
mplsLibEntry[m].remoteBinds[mplsLibEntry[m].remoteNum].label.label.atm.vpi =
lspCB->downAtmLabel.vpi;
mplsLibEntry[m].remoteBinds[mplsLibEntry[m].remoteNum].label.label.atm.vci =
lspCB->downAtmLabel.vci;
mplsLibEntry[m].remoteNum++;
lspCB = t_lspCb;
}
downCB = fecEntry->down_cb_list.first;
while(downCB)
{
t_downCb = downCB->next;
/*mplsLibEntry[m].localBinds[mplsLibEntry[m].localNum].type = 2;
mplsLibEntry[m].localBinds[mplsLibEntry[m].localNum].label.label =
fecEntry->localGenLabel;
mplsLibEntry[m].localNum++;*/
/*mplsLibEntry[m].remoteBinds[mplsLibEntry[m].remoteNum].LsrId.lsrAddress =
downCB->downPeerLdpid.lsrAddress;
mplsLibEntry[m].remoteBinds[mplsLibEntry[m].remoteNum].LsrId.labelSpace =
downCB->downPeerLdpid.labelSpace;
mplsLibEntry[m].remoteBinds[mplsLibEntry[m].remoteNum].label.type = 2;
mplsLibEntry[m].remoteBinds[mplsLibEntry[m].remoteNum].label.label.label =
downCB->downGenLabel;
mplsLibEntry[m].remoteNum++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -