⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shcmd.c

📁 技术文件名称:MPLSv1.0软件模块测试规程
💻 C
📖 第 1 页 / 共 2 页
字号:
/*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 + -