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

📄 mplsshow.c

📁 技术文件名称:MPLSv1.0软件模块测试规程
💻 C
📖 第 1 页 / 共 5 页
字号:
	BYTE rtnNum = 0;
	ushort dataSize = 0;
	mpls_opr_data_t *pData = out->Data;

	for(i = in->lastData[0]; i < arrayLen[NOENTITYSTATS]; i++)
	{
		showMplsLdpEntityStatsWrite(&mplsLdpEntityStatsEntry[i], &pData, &rtnNum);
		dataSize++;
		if(dataSize >= MPLS_ENTITY_TABLE_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 entity-stats */
void showMplsLdpEntityStats(mpls_sh_data_t *in, mpls_comm_oam_t *out)
{
	switch(in->type)
	{
		case SHOW_IPADDR:
			showMplsLdpEntityStatsAddr(in, out);
			break;
		case SHOW_PORT:
			showMplsLdpEntityStatsPort(in, out);
			break;
		default:
			showMplsLdpEntityStatsAll(in, out);
			break;
	}
	return;
}

/************************************************************************************/
/* cmd: show mpls ldp session stats                                                 */
/************************************************************************************/
void showMplsLdpSessStatsWrite(mplsLdpSessionStatsTable_t *sess, 
                                                mpls_opr_data_t **pData, BYTE *rtnNum)
{
	(*pData)->Type = DATA_TYPE_DWORD;
	(*pData)->Len = 4;
	*(DWORD *)(*pData)->Data = sess->entityLdpId.lsrAddress;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_WORD;
	(*pData)->Len = 2;
	*(WORD *)(*pData)->Data = sess->entityLdpId.labelSpace;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;

	(*pData)->Type = DATA_TYPE_DWORD;
	(*pData)->Len = 4;
	*(DWORD *)(*pData)->Data = sess->peerLdpId.lsrAddress;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_WORD;
	(*pData)->Len = 2;
	*(WORD *)(*pData)->Data = sess->peerLdpId.labelSpace;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;

	(*pData)->Type = DATA_TYPE_DWORD;
	(*pData)->Len = 4;
	*(DWORD *)(*pData)->Data = sess->index;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_DWORD;
	(*pData)->Len = 4;
	*(DWORD *)(*pData)->Data = sess->unknownmessagetypeerrors;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_DWORD;
	(*pData)->Len = 4;
	*(DWORD *)(*pData)->Data = sess->unknowntlverrors;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;

	(*pData)->Type = DATA_TYPE_WORD;
	(*pData)->Len = 2;
	*(WORD *)(*pData)->Data = sess->ifIndex;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_WORD;
	(*pData)->Len = 2;
	*(WORD *)(*pData)->Data = sess->connect.localPort;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_WORD;
	(*pData)->Len = 2;
	*(WORD *)(*pData)->Data = sess->connect.peerPort;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_DWORD;
	(*pData)->Len = 4;
	*(DWORD *)(*pData)->Data = sess->connect.localAddr;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_DWORD;
	(*pData)->Len = 4;
	*(DWORD *)(*pData)->Data = sess->connect.peerAddr;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_BYTE;
	(*pData)->Len = 1;
	*(BYTE *)(*pData)->Data = sess->ifName.module;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_BYTE;
	(*pData)->Len = 1;
	*(BYTE *)(*pData)->Data = sess->ifName.port;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_BYTE;
	(*pData)->Len = 1;
	*(BYTE *)(*pData)->Data = sess->ifName.lsrType;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
}

/* cmd: show mpls ldp session stats address <A.B.C.D> */
void showMplsLdpSessStatsAddr(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[NOSESTATS]; i++)
	{
		if(mplsLdpSessionStatsEntry[i].entityLdpId.lsrAddress == in->inTypeData.addr)
		{
			showMplsLdpSessStatsWrite(&mplsLdpSessionStatsEntry[i], &pData, &rtnNum);
			dataSize++;
			if(dataSize >= MPLS_SESS_STATS_TABLE_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 session stats interface <module no/port no> */
void showMplsLdpSessStatsPort(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[NOSESTATS]; i++)
	{
		if(mplsLdpSessionStatsEntry[i].ifName.module == module &&
		   mplsLdpSessionStatsEntry[i].ifName.port == port)
		{
			showMplsLdpSessStatsWrite(&mplsLdpSessionStatsEntry[i], &pData, &rtnNum);
			dataSize++;
			if(dataSize >= MPLS_SESS_STATS_TABLE_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 session stats */
void showMplsLdpSessStatsAll(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[NOSESTATS]; i++)
	{
		showMplsLdpSessStatsWrite(&mplsLdpSessionStatsEntry[i], &pData, &rtnNum);
		dataSize++;
		if(dataSize >= MPLS_SESS_STATS_TABLE_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 session stats */
void showMplsLdpSessionStats(mpls_sh_data_t *in, mpls_comm_oam_t *out)
{
	switch(in->type)
	{
		case SHOW_IPADDR:
			showMplsLdpSessStatsAddr(in, out);
			break;
		case SHOW_PORT:
			showMplsLdpSessStatsPort(in, out);
			break;
		default:
			showMplsLdpSessStatsAll(in, out);
			break;
	}
	return;
}

/*************************************************************************************/
/* cmd: show mpls ldp interface transport                                            */
/*************************************************************************************/
void showMplsLdpIntTransportAddrWrite(if_transport_table_t *ifTrans, 
                                                 mpls_opr_data_t **pData, BYTE *rtnNum)
{
	(*pData)->Type = DATA_TYPE_BYTE;
	(*pData)->Len = 1;
	*(BYTE *)(*pData)->Data = ifTrans->rowStatus;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;

	(*pData)->Type = DATA_TYPE_WORD;
	(*pData)->Len = 2;
	*(WORD *)(*pData)->Data = ifTrans->ifIndex;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_BYTE;
	(*pData)->Len = 1;
	*(BYTE *)(*pData)->Data = ifTrans->ifType;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;

	(*pData)->Type = DATA_TYPE_DWORD;
	(*pData)->Len = 4;
	*(DWORD *)(*pData)->Data = ifTrans->ifIpAddr;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_DWORD;
	(*pData)->Len = 4;
	*(DWORD *)(*pData)->Data = ifTrans->ifNet;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_DWORD;
	(*pData)->Len = 4;
	*(DWORD *)(*pData)->Data = ifTrans->ifMask;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_DWORD;
	(*pData)->Len = 4;
	*(DWORD *)(*pData)->Data = ifTrans->ifBrdcstAddr;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_BYTE;
	(*pData)->Len = 1;
	*(BYTE *)(*pData)->Data = ifTrans->ifName.module;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_BYTE;
	(*pData)->Len = 1;
	*(BYTE *)(*pData)->Data = ifTrans->ifName.port;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
	
	(*pData)->Type = DATA_TYPE_BYTE;
	(*pData)->Len = 1;
	*(BYTE *)(*pData)->Data = ifTrans->ifName.lsrType;
	*pData = (mpls_opr_data_t *)((*pData)->Data + (*pData)->Len);
	(*rtnNum)++;
}

/* cmd: show mpls ldp interface transport interface <module no/port no> */
void showMplsLdpIntTransportAddrPort(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[NOTRANSADDR]; i++)
	{
		if(mplsIfTransportAddressEntry[i].ifName.module == module &&
		   mplsIfTransportAddressEntry[i].ifName.port == port)
		{
			showMplsLdpIntTransportAddrWrite(&mplsIfTransportAddressEntry[i], 
			                                                     &pData, &rtnNum);
			dataSize++;
			if(dataSize >= MPLS_INT_TRANSPORT_TABLE_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 interface transport */
void showMplsLdpIntTransportAddrAll(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[NOTRANSADDR]; i++)
	{
		showMplsLdpIntTransportAddrWrite(&mplsIfTransportAddressEntry[i], 
		                                                           &pData, &rtnNum);
		dataSize++;
		if(dataSize >= MPLS_INT_TRANSPORT_TABLE_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);

⌨️ 快捷键说明

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