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

📄 mplsshow.c

📁 技术文件名称:MPLSv1.0软件模块测试规程
💻 C
📖 第 1 页 / 共 5 页
字号:
	
	return;
}

/* cmd: show mpls ldp interface transport-address */
void showMplsLdpIntTransportAddr(mpls_sh_data_t *in, mpls_comm_oam_t *out)
{
	switch(in->type)
	{
		case SHOW_PORT:
			showMplsLdpIntTransportAddrPort(in, out);
			break;
		default:
			showMplsLdpIntTransportAddrAll(in, out);
			break;
	}
	return;
}

/************************************************************************************/
/* cmd: show mpls ldp atm label                                                     */
/************************************************************************************/
void showMplsLdpAtmLabelWrite(MIB_MPLSCONFIG_ACK *module, int j, 
                                                mpls_opr_data_t **pData, BYTE *rtnNum)
{
	(*pData)->Type = DATA_TYPE_BYTE;
	(*pData)->Len = 1;
	*(BYTE *)(*pData)->Data = module->cardType;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_BYTE;
	(*pData)->Len = 1;
	*(BYTE *)(*pData)->Data = module->module;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_BYTE;
	(*pData)->Len = 1;
	*(BYTE *)(*pData)->Data = module->num;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_BYTE;
	(*pData)->Len = 1;
	*(BYTE *)(*pData)->Data = module->portData[j].port;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;

	(*pData)->Type = DATA_TYPE_WORD;
	(*pData)->Len = 2;
	*(WORD *)(*pData)->Data = module->portData[j].ifIndex;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_DWORD;
	(*pData)->Len = 4;
	*(DWORD *)(*pData)->Data = module->portData[j].speed;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_BYTE;
	(*pData)->Len = 1;
	*(BYTE *)(*pData)->Data = module->portData[j].atmInterfaceMaxActiveVciBits;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;

	(*pData)->Type = DATA_TYPE_WORD;
	(*pData)->Len = 2;
	*(WORD *)(*pData)->Data = module->portData[j].atmfAtmLayerMaxSvccVpi;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_WORD;
	(*pData)->Len = 2;
	*(WORD *)(*pData)->Data = module->portData[j].atmfAtmLayerMinSvccVci;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
}

/* cmd: show mpls ldp atm label interface <module no/port no> */
void showMplsLdpAtmLabelPortGet(mpls_sh_data_t *in, mpls_comm_oam_t *out)
{
	int i, j;
	ushort module, port;
	BYTE rtnNum = 0;
	ushort dataSize = 0;
	mpls_opr_data_t *pData = out->Data;
	
	module = ((in->inTypeData.port >> 16) & 0xFFFF);
	port = in->inTypeData.port & 0xFFFF;

	for(i = in->lastData[0]; i < MplsPortDataTable1.num; i++)
	{
		for(j = in->lastData[1]; j < MplsPortDataTable1.mplsModule[i].num; j++)
		{
			if(MplsPortDataTable1.mplsModule[i].module == module &&
			   MplsPortDataTable1.mplsModule[i].portData[j].port == port)
			{
				showMplsLdpAtmLabelWrite(&MplsPortDataTable1.mplsModule[i], j, 
				                          &pData, &rtnNum);
				dataSize++;
				if(dataSize >= MPLS_ATM_LABEL_SIZE)
				{
					out->RetCode = SUCC_CMD_NOT_FINISHED;
					out->lastData[0] = i;
					out->lastData[1] = j + 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 atm label */
void showMplsLdpAtmLabelAllGet(mpls_sh_data_t *in, mpls_comm_oam_t *out)
{
	int i, j;
	BYTE rtnNum = 0;
	ushort dataSize = 0;
	mpls_opr_data_t *pData = out->Data;

	for(i = in->lastData[0]; i < MplsPortDataTable1.num; i++)
	{
		for(j = in->lastData[1]; j < MplsPortDataTable1.mplsModule[i].num; j++)
		{
			showMplsLdpAtmLabelWrite(&MplsPortDataTable1.mplsModule[i], j, 
			                          &pData, &rtnNum);
			dataSize++;
			if(dataSize >= MPLS_ATM_LABEL_SIZE)
			{
				out->RetCode = SUCC_CMD_NOT_FINISHED;
				out->lastData[0] = i;
				out->lastData[1] = j + 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 atm label */
void showMplsLdpAtmLabelGet(mpls_sh_data_t *in, mpls_comm_oam_t *out)
{
	switch(in->type)
	{
		case SHOW_PORT:
			showMplsLdpAtmLabelPortGet(in, out);
			break;
		default:
			showMplsLdpAtmLabelAllGet(in, out);
			break;
	}
	return;
}

/*********************************************************************************/
/* cmd: show mpls ldp binding                                                    */
/*********************************************************************************/
/*void showMplsLdpBindingsWrite1(mplsLdpFecEntry *binding, mpls_opr_data_t **pData, 
                                                                      BYTE *rtnNum)
{
	int i;
	
	// 该域为0,在取数据时没有设置
	(*pData)->Type = DATA_TYPE_WORD;
	(*pData)->Len = 2;
	*(WORD *)(*pData)->Data = binding->ifIndex;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_DWORD;
	(*pData)->Len = 4;
	*(DWORD *)(*pData)->Data = binding->netaddr;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_BYTE;
	(*pData)->Len = 1;
	*(BYTE *)(*pData)->Data = binding->mask.maskLen;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_BYTE;
	(*pData)->Len = 1;
	*(BYTE *)(*pData)->Data = binding->localNum;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	for(i = 0; i < binding->localNum; i++)
	{
		(*pData)->Type = DATA_TYPE_BYTE;
		(*pData)->Len = 1;
		*(BYTE *)(*pData)->Data = binding->localBinds[i].type;
		*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
		(*rtnNum)++;
		
		if(binding->localBinds[i].type == 1)
		{
			(*pData)->Type = DATA_TYPE_WORD;
			(*pData)->Len = 2;
			*(WORD *)(*pData)->Data = binding->localBinds[i].label.atm.vpi;
			*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
			(*rtnNum)++;			
			(*pData)->Type = DATA_TYPE_WORD;
			(*pData)->Len = 2;
			*(WORD *)(*pData)->Data = binding->localBinds[i].label.atm.vci;
			*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
			(*rtnNum)++;
		}
		else if(binding->localBinds[i].type == 2)
		{
			(*pData)->Type = DATA_TYPE_DWORD;
			(*pData)->Len = 4;
			*(DWORD *)(*pData)->Data = binding->localBinds[i].label.label;
			*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
			(*rtnNum)++;			
		}
		else
		{
			(*pData)->Type = DATA_TYPE_DWORD;
			(*pData)->Len = 4;
			*(DWORD *)(*pData)->Data = 0;
			*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
			(*rtnNum)++;			
		}
	}

	(*pData)->Type = DATA_TYPE_BYTE;
	(*pData)->Len = 1;
	*(BYTE *)(*pData)->Data = binding->remoteNum;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	for(i = 0; i < binding->remoteNum; i++)
	{
		(*pData)->Type = DATA_TYPE_DWORD;
		(*pData)->Len = 4;
		*(DWORD *)(*pData)->Data = binding->remoteBinds[i].LsrId.lsrAddress;
		*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
		(*rtnNum)++;
		
		(*pData)->Type = DATA_TYPE_WORD;
		(*pData)->Len = 2;
		*(WORD *)(*pData)->Data = binding->remoteBinds[i].LsrId.labelSpace;
		*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
		(*rtnNum)++;
		
		(*pData)->Type = DATA_TYPE_BYTE;
		(*pData)->Len = 1;
		*(BYTE *)(*pData)->Data = binding->remoteBinds[i].label.type;
		*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
		(*rtnNum)++;

		if(binding->remoteBinds[i].label.type == 1)
		{
			(*pData)->Type = DATA_TYPE_WORD;
			(*pData)->Len = 2;
			*(WORD *)(*pData)->Data = binding->remoteBinds[i].label.label.atm.vpi;
			*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
			(*rtnNum)++;			
			(*pData)->Type = DATA_TYPE_WORD;
			(*pData)->Len = 2;
			*(WORD *)(*pData)->Data = binding->remoteBinds[i].label.label.atm.vci;
			*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
			(*rtnNum)++;
		}
		else if(binding->localBinds[i].type == 2)
		{
			(*pData)->Type = DATA_TYPE_DWORD;
			(*pData)->Len = 4;
			*(DWORD *)(*pData)->Data = binding->remoteBinds[i].label.label.label;
			*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
			(*rtnNum)++;			
		}
		else
		{
			(*pData)->Type = DATA_TYPE_DWORD;
			(*pData)->Len = 4;
			*(DWORD *)(*pData)->Data = 0;
			*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
			(*rtnNum)++;			
		}
	}

	(*pData)->Type = DATA_TYPE_BYTE;
	(*pData)->Len = 1;
	*(BYTE *)(*pData)->Data = binding->adminStatus;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_BYTE;
	(*pData)->Len = 1;
	*(BYTE *)(*pData)->Data = binding->ifName.module;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_BYTE;
	(*pData)->Len = 1;
	*(BYTE *)(*pData)->Data = binding->ifName.port;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_BYTE;
	(*pData)->Len = 1;
	*(BYTE *)(*pData)->Data = binding->ifName.lsrType;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;	
}*/

void showMplsLdpBindingsWrite(mplsLdpFecEntry *fecEntry, mpls_opr_data_t **pData, 
                                                                      BYTE *rtnNum)
{
	int i, localnum = 0, remotenum = 0;
	mplsLdpLspCB *lspCB ;
	mplsLdpDownCB *downCB;
	
	lspCB = NULL;
	downCB = NULL;
    lspCB = fecEntry->lsp_cb_list.first;
    while(lspCB)
	{
		localnum++;
		remotenum++;
		lspCB = lspCB->next;
	}
    downCB = fecEntry->down_cb_list.first;
    while(downCB)
	{
		remotenum++;
		downCB = downCB->next;
	}
	if(fecEntry->owner & MPLS_OWNER_ROUTE)
	{    
	    localnum++;
		localnum|=0x80;
    }
	
	/* 该域为0,在取数据时没有设置 */
	(*pData)->Type = DATA_TYPE_WORD;
	(*pData)->Len = 2;
	*(WORD *)(*pData)->Data = 0;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_DWORD;
	(*pData)->Len = 4;
	*(DWORD *)(*pData)->Data = fecEntry->fec_key.mplsFecAddr;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_BYTE;
	(*pData)->Len = 1;
	*(BYTE *)(*pData)->Data = fecEntry->fec_key.mplsLdpFecAddrLen;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_BYTE;
	(*pData)->Len = 1;
	*(BYTE *)(*pData)->Data = localnum;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
    /* local binding in lspCb */
    lspCB = fecEntry->lsp_cb_list.first;
    while(lspCB)
    {
        (*pData)->Type = DATA_TYPE_BYTE;
		(*pData)->Len = 1;
		*(BYTE *)(*pData)->Data = 1;
		*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
		(*rtnNum)++;
        (*pData)->Type = DATA_TYPE_BYTE;
		(*pData)->Len = 1;
		*(BYTE *)(*pData)->Data = lspCB->upAtmLabel.module;
		*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
		(*rtnNum)++;
		
        (*pData)->Type = DATA_TYPE_BYTE;
		(*pData)->Len = 1;
		*(BYTE *)(*pData)->Data = lspCB->upAtmLabel.port;
		*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
		(*rtnNum)++;
		
		(*pData)->Type = DATA_TYPE_WORD;
		(*pData)->Len = 2;
		*(WORD *)(*pData)->Data = lspCB->upAtmLabel.vpi;
		*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
		(*rtnNum)++;
		
		(*pData)->Type = DATA_TYPE_WORD;
		(*pData)->L

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -