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

📄 cli_cmd.c

📁 在freescale 的ne64上开发的源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
#include <string.h>
#include <stdio.h>
#include <stdlib.h> /*atoi*/
#include "cli_lib.h"
#include "switchRegs.h"
#include "hw_api.h"
#include "debug.h"
#include "timers.h"
#include "address.h"
#include "datatypes.h"

UINT8 device_descr[16];
UINT8 port_dupSpd[MAX_PORT];
UINT8 temp_string[32];
UINT8 bitMask[8] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};

#define MAX_TRAP_SERVER_NUM 5
typedef struct {
	UINT32 addr;
	UINT16 port;
}t_Trap_server;
#define RW 1
#define RO  0
#define MAX_COMMUNITY_LEN 	16
typedef struct {
	UINT8 name[MAX_COMMUNITY_LEN];
	UINT8 ability;
}t_Community;

UINT16 manager_first_vid = 0;
UINT16 manager_second_vid = 0;
extern UINT8 locAutoCfg[MAX_PORT];
extern UINT8 locDuplexCfg[MAX_PORT];
extern UINT16 locSpeedCfg[MAX_PORT];
extern UINT8 locLink[MAX_PORT];
extern UINT8 locDuplexStat[MAX_PORT];
extern UINT16 locSpeedStat[MAX_PORT];
extern UINT8 localDTEType;
extern UINT8 rmtCfgFlag;
extern UINT8 rmtRateCfgFlag;

extern UINT8 cmd_part;/*how many keyworks in the command*/
extern UINT8 command[CMD_MAX_LEN]; /*BUffer for store command*/
extern UINT8 *cmd[CMD_MAX_PART];
extern UINT8 hostname[16];
extern UINT8 password[8];
extern UINT8 waitInput;
extern UINT8 cli_reset;
extern UINT8 cli_timer;
extern UINT16 debug;
extern UINT8 hard_addr[6];
extern UINT8 localHWVersion;
extern UINT8 check_ping_finished();
extern UINT8 get_ping_result();
extern UINT8 ping_send_req(UINT32 ipaddr);
extern UINT32 TERMIO_GetChar();

#if 1
extern UINT8  sysRunYear;
extern UINT16 sysRunDay;
extern UINT8  sysRunHour;
extern UINT8  sysRunMin;
extern UINT8  sysRunSec;
extern UINT8  sysLogCurrent;
extern UINT8  sysLog[SYS_LOG_MAX][24];
#endif

extern t_Community gCommunity[MAX_TRAP_SERVER_NUM];
extern t_Trap_server gTrapServer[MAX_TRAP_SERVER_NUM];

extern void bitListSet(UINT8  * bitList, UINT32 bit);
extern void bitListClr(UINT8   * bitList, UINT32  bit);
extern UINT32 bitListTst(UINT8  * bitList, UINT32  bit);
extern tU08 MIIread(tU08 _mpadr, tU08 _mradr, tU16 * _mrdata);
extern tU08 MIIwrite(tU08 _mpadr, tU08 _mradr, tU16 _mwdata);
extern UINT8 Flash_Write_Block(UINT16 * address_source,UINT16 * far_address_destination,UINT16 count);
extern UINT8 dot3ah_port_set(UINT8 port);
extern UINT8 dot3ah_port_get(UINT8 *port);
extern UINT8 dot3ah_enable_set(UINT8 enable);
extern UINT8 dot3ah_enable_get(UINT8 *enable);
extern UINT8 dot3ah_mode_set(UINT8 mode);
extern UINT8 dot3ah_mode_get(UINT8 *mode);
extern void dot3ah_info_show(void);

void bitListSet(UINT8  * bitList, UINT32 bit)
{
    bitList[bit/8] |= bitMask[bit%8];
}

void bitListClr(UINT8   * bitList, UINT32  bit)
{
    bitList[bit/8] &= ~bitMask[bit%8];
}

UINT32 bitListTst(UINT8  * bitList, UINT32  bit)
{
    return (bitList[bit/8] & bitMask[bit%8])? 1 : 0;
}

void read_cfg_file()
{
	UINT8 byte;
	UINT8 byte1,byte2,byte3;
	UINT8 i,j;
	UINT8 *addr;
	UINT16 val;
 	UINT32 ipaddr1;
	UINT32 ipaddr2;
	UINT32 ipaddr;

	addr = READADDR;
	byte = *addr++;
	if(byte != 'O')	
		return;				
	byte = *addr++;	
	if(byte != 'L')
		return;	
	byte = *addr++;	
	if(byte != '1')
		return;
	byte = *addr++;	
	if(byte != '0')
		return;	
	byte = *addr++;	
	if(byte != '0')
		return;	
	byte = *addr++;	
	if(byte != 'C')
		return;	
	
	memset(hostname,0,sizeof(hostname));
	for(i=0; i<sizeof(hostname); i++)
	{
		hostname[i] = *addr++;	
	}	
	memset(password,0,sizeof(password));
	for(i=0; i<sizeof(password); i++)
	{
		password[i] = *addr++;
	}
	memset(device_descr,0,sizeof(device_descr));
	for(i=0; i<sizeof(device_descr); i++)
	{
		device_descr[i] = *addr++;
	}

		
	byte =* addr++;
	hwSetLfp(byte);
	byte = *addr++;
	hwSetFef(byte);

	byte = *addr++;
#if 0
	hwSetCos(byte);		
#endif

	byte = *addr++;
#if 1
	dot3ah_enable_set(byte);
#endif

	byte = *addr++;
	dot3ah_port_set(byte);
	addr++;
	
	addr+=6;

	for(i=0; i<MAX_PORT; i++)
	{
		byte = *addr++;
		hwSetPortStat(i+1, byte);
		addr++;
		
		addr += 2;
		byte = *addr++;
		byte1 = *addr++;		
		val = (UINT16)((byte<<8)|byte1); /*speed*/

		addr -= 4;
		byte = *addr++;        /*auto*/
		byte1 = *addr++;       /*duplex*/
		hwSetPortCfg(i+1, byte, byte1, val);
		addr += 2;

		byte = *addr++;
		hwSetPortFlowCtrl(i+1, byte);
		addr++;
		
		byte = *addr++;
		byte1 = *addr++;
		val = (UINT16)((byte<<8)|byte1);
		hwSetPortRate(i+1, 1, val);
		
		byte = *addr++;
		byte1 = *addr++;
		val = (UINT16)((byte<<8)|byte1);
		if(val != 0)
			hwSetPortStorm(i+1, 0, val);

		byte = *addr++;
		byte1 = *addr++;
		val = (UINT16)((byte<<8)|byte1);
		if(val != 0)
			hwSetPortStorm(i+1, 1, val);
		
		addr+=8;
	}
#if 1
	byte=*addr++;
	byte1 =*addr++;
	byte2 =*addr++;
	byte3 =*addr++;
	ipaddr1=(UINT32)(byte<<8)|byte1;
	ipaddr2 =(UINT32)(ipaddr1<<8)|byte2;
	ipaddr = (LWORD)(ipaddr2<<8)|byte3;
	localmachine.localip=ipaddr;
#if 1
	if(localmachine.localip != 0)
	{
		UINT16 regVal;
		#if 0
		/*set  forward unknown unicast pkts*/
		MIIread(SWITCH_PORT9_ADDRESS, QD_REG_PORT_CONTROL, &regVal);
		regVal |= 0x0004;	
		MIIwrite(SWITCH_PORT9_ADDRESS, QD_REG_PORT_CONTROL, regVal);
		#endif
		/*set forward unknown multicast pkts*/
		MIIread(SWITCH_PORT9_ADDRESS, QD_REG_PORT_CONTROL2, &regVal);
		regVal |=0x0040;	
		MIIwrite(SWITCH_PORT9_ADDRESS, QD_REG_PORT_CONTROL2, regVal);
	}
#endif	
	byte=*addr++;
	byte1=*addr++;
	byte2=*addr++;
	byte3=*addr++;
	ipaddr1=(UINT32)(byte<<8)|byte1;
	ipaddr2 =(UINT32)(ipaddr1<<8)|byte2;
	ipaddr = (LWORD)(ipaddr2<<8)|byte3;
	localmachine.netmask=ipaddr;

	byte=*addr++;
	byte1=*addr++;
	byte2=*addr++;
	byte3=*addr++;
	ipaddr1=(UINT32)(byte<<8)|byte1;
	ipaddr2 =(UINT32)(ipaddr1<<8)|byte2;
	ipaddr = (LWORD)(ipaddr2<<8)|byte3;
	localmachine.defgw=ipaddr;

	for(i=0;i<5;i++)
	{
		byte=*addr++;
		byte1=*addr++;
		byte2=*addr++;
		byte3=*addr++;
		ipaddr1=(UINT32)(byte<<8)|byte1;
		ipaddr2 =(UINT32)(ipaddr1<<8)|byte2;
		ipaddr = (UINT32)(ipaddr2<<8)|byte3;
		gTrapServer[i].addr=ipaddr;
		val=0;
		byte=*addr++;
		byte1=*addr++;
		val=(UINT16)(byte<<8)|byte1;
		gTrapServer[i].port=val;
	}

	byte=*addr++;
	byte1=*addr++;
	val=(UINT16)(byte<<8)|byte1;
	manager_first_vid = val;
	byte=*addr++;
	byte1=*addr++;
	val=(UINT16)(byte<<8)|byte1;
	manager_second_vid = val;

	for(i=0;i<5;i++)
	{
		memset(gCommunity[i].name,0,sizeof(gCommunity[i].name));
		for(j=0;j<sizeof(gCommunity[i].name); j++)
		{
			gCommunity[i].name[j] = *addr++;	
		}	
		byte=*addr++;
		gCommunity[i].ability=byte;
		byte=*addr++;
	}
#endif
	

}

void show_start_cmd(void)
{
	UINT8 line=0;
	UINT8 byte;
	UINT8 byte1,byte2,byte3;
	UINT8 i,j;
	UINT8 *addr,*temp_addr;
	UINT16 val;
  //UINT8 list[2];
	t_Community temp_community;
	
	addr = READADDR;
	byte = *addr++;
	if(byte!='O')	
		return;		
	byte = *addr++;
	if(byte!='L')
		return;	
	byte = *addr++;
	if(byte!='1')
		return;					
	byte = *addr++;
	if(byte!='0')
		return;	
	byte = *addr++;
	if(byte!='0')
		return;					
	byte = *addr++;
	if(byte!='C')
		return;

	printf("!system start-up configuration\n\r");						
	line++;
	
	memset(temp_string,0,sizeof(temp_string));
	for(i=0;i<sizeof(hostname);i++)
	{
		temp_string[i]=*addr++;	
	}
	printf(" hostname %s\n\r",temp_string);	
	line++;
	
	memset(temp_string,0,sizeof(temp_string));
	for(i=0;i<sizeof(password);i++)
	{
		temp_string[i] = *addr++;	
	}
	printf(" password %s\n\r",temp_string);	
	line++;

	memset(temp_string,0,sizeof(temp_string));
	for(i=0;i<sizeof(device_descr);i++)
	{
		temp_string[i] = *addr++;	
	}
	printf(" device description %s\n\r",temp_string);	
	line++;
#if 1
	/*push addr*/
	temp_addr=addr;
	/*point ip-address addr*/
	addr+=56;
	byte=*addr++;
	byte1 =*addr++;
	byte2 =*addr++;
	byte3 =*addr++;
	if((byte!=0)||(byte1!=0)||(byte2!=0)||(byte3!=0))
	{	
		printf(" ip-address %d.%d.%d.%d",byte,byte1,byte2,byte3);
		byte=*addr++;
		byte1=*addr++;
		byte2=*addr++;
		byte3=*addr++;
		if((byte!=0)||(byte1!=0)||(byte2!=0)||(byte3!=0))
			printf(" %d.%d.%d.%d\n\r",byte,byte1,byte2,byte3);
	}
	else
	{
		byte=*addr++;
		byte1=*addr++;
		byte2=*addr++;
		byte3=*addr++;
	}

	byte=*addr++;
	byte1=*addr++;
	byte2=*addr++;
	byte3=*addr++;
	if((byte!=0)||(byte1!=0)||(byte2!=0)||(byte3!=0))
		printf(" gateway %d.%d.%d.%d\n\r",byte,byte1,byte2,byte3);	

	for(i=0;i<5;i++)
	{
		byte=*addr++;
		byte1=*addr++;
		byte2=*addr++;
		byte3=*addr++;
		if(byte!=0)
			printf(" snmp trap-server %d %d.%d.%d.%d",i+1,byte,byte1,byte2,byte3);
		val=0;
		byte=*addr++;
		byte1=*addr++;
		val=(UINT16)(byte<<8)|byte1;
		if(val!=0)
			printf(" %u\n\r",val);		
	}

	byte=*addr++;
	byte1=*addr++;
	val=(UINT16)(byte<<8)|byte1;
	if(val!=0)
		printf(" management vlan %u",val);
	byte=*addr++;
	byte1=*addr++;
	val=(UINT16)(byte<<8)|byte1;
	if(val!=0)
		printf(" %u\n\r",val);
		
	for(i=0;i<5;i++)
	{
		memset(temp_community.name,0,sizeof(temp_community.name));
		for(j=0;j<sizeof(temp_community.name);j++ )
		{
			temp_community.name[j] = *addr++;	
			
		}	
		byte=*addr++;
		temp_community.ability=byte;
		byte=*addr++;
		if(temp_community.name[0]!=0)
		{
			if(temp_community.ability==0)
				printf(" snmp community %d %s ro\n\r",i+1,temp_community.name);
			else
				printf(" snmp community %d %s rw\n\r",i+1,temp_community.name);
		}
	}

	/*popup addr*/
	addr=temp_addr;
#endif
	
	byte=*addr++;	
	if(byte==1)
		printf(" lfp enable\n\r");
	else
		printf(" lfp disable\n\r");
	line++;
	
	byte=*addr++;	
	if(byte==1)
		printf(" fef enable\n\r");
	else
		printf(" fef disable\n\r");
	line++;
	
	byte=*addr++;
#if 0
	if(byte==1)
		printf(" cos enable\n\r");
	else
		printf(" cos disable\n\r");
#endif
	byte=*addr++;
#if 1
	if(byte==1)
		printf(" dot3ah enable\n\r");
	else
		printf(" dot3ah disable\n\r");
	line++;
#endif
	byte=*addr++;
	if(byte==1)
	{
		printf(" dot3ah port 1\n\r");
		line++;
	}
	else if(byte==2)
	{
		printf(" dot3ah port 2\n\r");
		line++;
	}	
	addr++;
	
	/*for reserved bytes*/
	addr += 6;
	
	printf("!interface configuration\n\r");
	line++;
	for(i=0;i<MAX_PORT;i++)
	{
		byte=*addr++;
		printf(" port %d ",i+1);
		if(byte==1)
			printf("no-shutdown\n\r");
		else
			printf("shutdown\n\r");
		addr++;
		line++;		

		byte=*addr++;
		byte1=*addr++;
		printf(" port %d ",i+1);
		if(byte1==1)
			printf("full ");
		else
			printf("half ");
		if(byte==1)
			printf("enable\n\r");
		else
			printf("disable\n\r");
		line++;
		
		byte=*addr++;
		byte1=*addr++;
		val= (UINT16)((byte<<8)|byte1);
		printf(" port %d speed %d\n\r",i+1,val);
		line++;
		
		byte=*addr++;
		printf(" port %d ",i+1);
		if(byte==1)
			printf("flowcontrol enable\n\r");
		else
			printf("flowcontrol disable\n\r");
		addr++;
		line++;		
				
		byte=*addr++;
		byte1=*addr++;	
		val=(byte<<8)|byte1;	
		printf(" port %d rate-tx %d\n\r",i+1,val);
		line++;

		byte=*addr++;
		byte1=*addr++;	
		val=(byte<<8)|byte1;	
		printf(" port %d rate-bcast %d\n\r",i+1,val);
		line++;

		byte=*addr++;
		byte1=*addr++;	
		val=(byte<<8)|byte1;	
		printf(" port %d rate-m-bcast %d\n\r",i+1,val);
		line++;

		printf("\n\r");
		line++;

		addr+=8; /*for reserved bytes*/
	#if 0
		if(line>=16)
		{
			printf("--More--");
			waitInput=1;	
			key= TERM_Read();
			init_timer(cli_timer, CLI_TIMEOUT_TIME*TIMERTIC);				
			printf("\b\b\b\b\b\b\b\b");
			printf("        ");
			printf("\b\b\b\b\b\b\b\b");
			line=0;
			if(cli_reset==1 || key=='q' || key==CTRL_C)
			{
				return;
			}
		}
	#endif
	}	
	
}

void sys_cfg_save(void)
{
	UINT16 val;
	UINT8 byte;
	UINT8 i;
	UINT16 buffer[130];
	UINT16 position;
	
	Flash_Erase_Sector(WRITEADDR);/*erase sector*/
	/*device flag; 3 words*/
	position=0;
	buffer[position++]=(UINT16)('O'<<8 |'L');
	buffer[position++]=(UINT16)('1'<<8 |'0');
	buffer[position++]=(UINT16)('0'<<8 |'C');

	/*hostname, 8 words*/
	memcpy((UINT8 *)(buffer+position),hostname,sizeof(hostname));
	position+=sizeof(hostname)/2;
	/*password, 4 words*/
	memcpy((UINT8 *)(buffer+position),password,sizeof(password));
	position+=sizeof(password)/2;
	/*device_descr, 8 words*/
	memcpy((UINT8 *)(buffer+position),device_descr,sizeof(device_descr));
	position+=sizeof(device_descr)/2;
	
	/*LFP, FEF, COS and OAM; 2 words*/
	byte=0;
	hwGetLfp(&byte);
	val=(UINT16)(byte<<8);

	byte=0;
	hwGetFef(&byte);
	val+=byte;
	buffer[position++]=val;

	byte=0;
	hwGetCos(&byte);
	val=(UINT16)(byte<<8);

#if 0	
	byte=1;
#else
	dot3ah_enable_get(&byte);
#endif
	val+=byte;
	buffer[position++]=val;

	/*dotah port; 1 words*/
	byte=0;
	dot3ah_port_get(&byte);
	val=(UINT16)(byte<<8);
	buffer[position++]=val;

	/*3 words for reserved*/
	buffer[position++] = 0;
	buffer[position++] = 0;
	buffer[position++] = 0;

	/*port config, 11*2 words*/
	for(i=0; i<MAX_PORT; i++)
	{
		/*port status, 1 word*/
		byte = 1;
		hwGetPortStat(i+1, &byte);
		val = (UINT16)(byte << 8);
		buffer[position++] = val;	

		/*auto/full/speed, 2 words*/
		buffer[position++]=(UINT16)((locAutoCfg[i]<<8) | locDuplexCfg[i]); 
		buffer[position++]=locSpeedCfg[i];

		/*flowCtrl, 1 word*/
		byte = 0;
		hwGetPortFlowCtrl(i+1, &byte);
		val = (UINT16)(byte << 8);		
		buffer[position++] = val;

		/*tx-rate, 1 word*/
		val = 0;
		hwGetPortRate(i+1, 1, &val);
		buffer[position++] = val;

		/*storm control, 2 words*/
		val = 0;
		byte = 0;
		hwGetPortStorm(i+1, &byte, &val);
		if(byte==0) /*broadcast*/
		{
			buffer[position++] = val; /*bcast*/
			buffer[position++] = 0;   /*m-bcast*/
		}
		else if(byte==1)
		{
			buffer[position++] = 0;
			buffer[position++] = val;
		}
		else
		{
			buffer[position++] = 0;
			buffer[position++] = 0;
		}

		/*4 word for reserved*/
		buffer[position++] = 0;
		buffer[position++] = 0;
		buffer[position++] = 0;
		buffer[position++] = 0;
	}

#if 1
	/*write IP addr,2words */
	memcpy((UINT8 *)(buffer+position),&(localmachine.localip),4);
	position+=sizeof(localmachine.localip)/2;
	/*write IP mask,2words */
	memcpy((UINT8 *)(buffer+position),&(localmachine.netmask),4);
	position+=sizeof(localmachine.netmask)/2;
	/*write IP gateway,2words */
	memcpy((UINT8 *)(buffer+position),&(localmachine.defgw),4);

⌨️ 快捷键说明

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