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

📄 cli_cmd.c

📁 在freescale 的ne64上开发的源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
}


void init_switch_db(void)
{
	memset(device_descr,0,sizeof(device_descr));
}

void set_mac_cmd(void)
{
	UINT16 buffer[20];
	UINT8 position;
	UINT8 key = 0;
	
	if(valid_mac_addr(cmd[1])==0)
	{
		printf("  %%Invalid mac address.\n\r");
		return;
	}
	memset(hard_addr,0,sizeof(hard_addr));
	mac_strtohex(cmd[1],hard_addr);
	position=0;
	buffer[position++]=(UINT16)('M'<<8 |'A');
	buffer[position++]=(UINT16)('C'<<8 |':');
	buffer[position++]=(UINT16)((hard_addr[0]<<8)|hard_addr[1]);
	buffer[position++]=(UINT16)((hard_addr[2]<<8)|hard_addr[3]);	
	buffer[position++]=(UINT16)((hard_addr[4]<<8)|hard_addr[5]);	
	/*read fiber port info*/
	for(key=0;key<=10;key++)
	{
		buffer[position]=*(MACWADDR+position);
		position++;
	}
	buffer[position++]=(UINT16)('@'<<8 |'@');
	buffer[position++]=(UINT16)('@'<<8 |'@');
	Flash_Erase_Sector(MACWADDR);/*erase sector*/
	Flash_Write_Block(buffer,MACWADDR,position);

	printf("  WARNING:You need to reboot! Reboot now?(y/n) [y]");
	waitInput=1;
	/*key=TERM_Read();*/key=TERMIO_GetChar();
	init_timer(cli_timer, CLI_TIMEOUT_TIME*TIMERTIC);	
	if(key=='y' || key=='Y' || key=='\n' || key=='\r')
	{
		if(cli_reset==0)
		{
			printf("\n\r  System Rebooting,Please wait...\n\r");
			hwReboot();
		}
	}
	printf("\n\r");	
}

void set_ipaddress_cmd(void) 
{  
	UINT16 regVal;
	UINT32 addr;
	addr=inet_addr(cmd[1]);
	if(addr==0xffffffff)
	{
		printf(" %%Invalid input address %s\n\r",cmd[1]);
		return;    
	}
	localmachine.localip=addr;
	addr=inet_addr(cmd[2]);
	if(addr==0xffffffff)
	{
		printf(" %%Invalid input address %s\n\r",cmd[2]);
		return;    
  	}
	localmachine.netmask=addr;
#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);
	
	return;
}

void set_gateway_cmd(void)
{
  UINT32 addr;
  addr=inet_addr(cmd[1]);
  if(addr==0xffffffff){
    printf(" %%Invalid input address %s\n\r",cmd[1]);
    return;    
  }
  localmachine.defgw=addr;
  return;
}

void no_ip_address(void)
{
	UINT16 regVal;
	/*clear ip config*/
	localmachine.localip=0;	
	/*clear ip mask*/
	localmachine.netmask=0;
	/*clear ip gateway*/
	localmachine.defgw=0;
	/*set 6095 no forward broadcast.m-cast*/
#if 0
	/*set no 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 no forward unknown multicast pkts*/
	MIIread(SWITCH_PORT9_ADDRESS, QD_REG_PORT_CONTROL2, &regVal);
	regVal &= (~0x0040);	
	MIIwrite(SWITCH_PORT9_ADDRESS, QD_REG_PORT_CONTROL2, regVal);
}


UINT32 inet_addr(register char *inetString    /* string inet address */)
{
#define MAX_PARTS 4 	/* Maximum number of parts in an IP address. */

    register unsigned long val, base, n;
    register char c;
    unsigned long parts[MAX_PARTS], *pp = parts;

    /* check for NULL pointer */

    if (inetString == (char *) NULL)
	{
	
	return (0xffffffff);
	}

again:

    /* Collect number up to ``.''.  Values are specified as for C:
     * 0x=hex, 0=octal, other=decimal. */

    val = 0; base = 10;
    if (*inetString == '0')
	{
	base = 8, inetString++;
        if (*inetString == 'x' || *inetString == 'X')
	    base = 16, inetString++;
        }
    while ((c = *inetString))
	{
	if (isdigit ((int) c))
	    {
	    val = (val * base) + (c - '0');
	    inetString++;
	    continue;
	    }
	if (base == 16 && isxdigit ((int) c))
	    {
	    val = (val << 4) + (c + 10 - (islower ((int) c) ? 'a' : 'A'));
		inetString++;
		continue;
	    }
	    break;
	} /* while */

    if (*inetString == '.')
	{
	/*
	 * Internet format:
	 *	a.b.c.d
	 *	a.b.c	(with c treated as 16-bits)
	 *	a.b	(with b treated as 24 bits)
	 * Check each value for greater than 0xff for each part of the IP addr.
	 */

	if ((pp >= parts + (MAX_PARTS - 1)) || val > 0xff)
	    {	   
	    return (0xffffffff);
	    }
	*pp++ = val, inetString++;
	goto again;
	}

    /* Check for trailing characters */

    if (*inetString && !isspace ((int) *inetString)) 
	{	
	return (0xffffffff);
	}
    *pp++ = val;

    /* Concoct the address according to the number of parts specified. */

    n = pp - parts;
    switch ((int) n)
	{
	case 1:				/* a -- 32 bits */
	    val = parts[0];
	    break;

	case 2:				/* a.b -- 8.24 bits */
	    if (val > 0xffffff)
	        {		
		return (0xffffffff);
		}

	    val = (parts[0] << 24) | parts[1];
	    break;

	case 3:				/* a.b.c -- 8.8.16 bits */
	    if (val > 0xffff)
	        {		
		return (0xffffffff);
		}

	    val = (parts[0] << 24) | (parts[1] << 16) | parts[2];
	    break;

	case 4:				/* a.b.c.d -- 8.8.8.8 bits */
	    if (val > 0xff)
	        {		
		return (0xffffffff);
		}

	    val = (parts[0] << 24) | (parts[1] << 16) |
		  (parts[2] << 8) | parts[3];
	    break;

	default:	    
	    return (0xffffffff);
	}
  return (val);
}
void set_snmp_trap(void)
{	
	UINT16 id;
	UINT16 port=162;
	UINT32 addr;

	if(valid_input_number(cmd[2],1,5,&id)==0)
		return;
	addr=inet_addr(cmd[3]);
	if(addr==0xffffffff)
	{
		printf(" %%Invalid input address %s\n\r",cmd[3]);
		return;    
	}
	if(cmd_part==5)
		if(valid_input_number(cmd[4],0,65535,&port)==0)
			return;
	
	gTrapServer[id-1].addr=addr;
	gTrapServer[id-1].port=port;
	
	return;
}

void no_set_trap(void)
{
	UINT16 id;
	if(valid_input_number(cmd[3],1,5,&id)==0)
		return;
	gTrapServer[id-1].addr=0;
	gTrapServer[id-1].port=0;
}

void set_snmp_community(void)
{
	UINT16 id;
	
	if(valid_input_number(cmd[2],1,5,&id)==0)
		return;
	if(strlen(cmd[3])>16)
	{
		printf("  %%community must be less than 16 characters\n\r");
		return;
	}
	strcpy(gCommunity[id-1].name,cmd[3]);
	if(strcmp(cmd[4],"rw")==0)
		gCommunity[id-1].ability=RW;
	else if(strcmp(cmd[4],"ro")==0)
		gCommunity[id-1].ability=RO;
	else 
		printf("  %%Invalid input.\n\r");
		return;
		
	return;
}


void no_set_community(void)
{
	UINT16 id;
	if(valid_input_number(cmd[3],1,5,&id)==0)
		return;
	strcpy(gCommunity[id-1].name,0);
	gCommunity[id-1].ability=RO;
	
}

void set_manager_vid(void)
{
	UINT16 id1,id2;
	if(valid_input_number(cmd[2],0,4095,&id1)==0)
		return;
	
	if(valid_input_number(cmd[3],0,4095,&id2)==0)
		return;
	if(id1 == 0 && (id2 != 0))
	{
		printf("  %%Invalid input.\n\r");
		return;
	}
	manager_first_vid = id1;	
	manager_second_vid = id2;
	
}
void read_mac(void)
{
	UINT8 byte;
	UINT8 i;
	UINT8 *addr;
	
	addr=MACRADDR;
	byte=*addr++;
	if(byte!='M')	
		return;				
	byte=*addr++;	
	if(byte!='A')
		return;	
	byte=*addr++;	
	if(byte!='C')
		return;
	byte=*addr++;	
	if(byte!=':')
		return;		
	memset(hard_addr,0,sizeof(hard_addr));
	for(i=0;i<sizeof(hard_addr);i++)
	{
		hard_addr[i]=*addr++;	
	}		
}
#if 0
void show_mac_cmd()
{
	read_mac();
	printf("  Current mac = %02X:%02X:%02X:%02X:%02X:%02X\n\r",hard_addr[0],
		hard_addr[1],hard_addr[2],hard_addr[3],hard_addr[4],hard_addr[5]);
}
#endif
void show_reg_cmd(void)
{
	UINT8 phyAddr;
	UINT8 regAddr;
	UINT16 val,index;	
	
	if(valid_input_number(cmd[2],0,0x1d,&val)==0)
		return;	
	phyAddr=val&0xff;
	if(valid_input_number(cmd[3],0,35,&val)==0)
		return;
	regAddr=val&0xff;
	
	if(regAddr <= 31)
	{		
		hwGetReg(phyAddr, regAddr, &val);
		printf("  Reg %d %d value is 0x%X\n\r",phyAddr,regAddr,val);
	}
	else if(regAddr == 32) /*read all phy reg*/
	{			
		printf("  Phy %d all reg:\n\r",phyAddr);
		printf("  ");
		for(regAddr=0; regAddr<=31;)
		{
			hwGetReg(phyAddr, regAddr,&val);
			printf("%02x:%04x ",regAddr,val);
			regAddr++;
			if((regAddr%8)==0)
			{
				printf("\n\r");
				printf("  ");
			}
		}
		printf("\n\r");	
	}	
	else /*read all phy reg n times*/
	{
		printf("  Read phy %d all reg %d times:\n\r",phyAddr,index);
		for(index=100*(regAddr-31); index>0; index--)
		{					
			printf("  ");
			for(regAddr=0; regAddr<=31;)
			{
				hwGetReg(phyAddr, regAddr,&val);
				printf("%02x:%04x ",regAddr,val);
				regAddr++;
				if((regAddr%8)==0)
				{
					printf("\n\r");
					printf("  ");
				}
			}
			printf("\n\r");
		}		
	}
}

void set_reg_cmd(void)
{
	UINT8 phyAddr;
	UINT8 regAddr;
	UINT16 val;	
	
	if(valid_input_number(cmd[2],0,0x1d,&val)==0)
		return;	
	phyAddr=val&0xff;
	if(valid_input_number(cmd[3],0,31,&val)==0)
		return;	
	regAddr=val&0xff;
	if(valid_input_number(cmd[4],0,0xffff,&val)==0)
		return;

 	hwSetReg(phyAddr,regAddr,val);	
	printf("  Set reg %d %d to 0x%X OK\n\r",phyAddr,regAddr,val);
}
#if 0
void show_mcureg_cmd()
{
	UINT8 regVal;
	UINT16 regAddr;
	
	if(valid_input_number(cmd[2],0,0xffff,&regAddr)==0)
		return;

	regVal = *((volatile UINT8 *)(regAddr));

	printf("  The mcu reg 0x%x value is 0x%x\n\r",regAddr,regVal);
}

void set_mcureg_cmd()
{
	UINT16 regAddr,regVal;
	
	if(valid_input_number(cmd[2],0,0xffff,&regAddr)==0)
		return;

	if(valid_input_number(cmd[3],0,0xff,&regVal)==0)
		return;
	
	*((volatile UINT8 *)(regAddr)) = (UINT8)regVal;

	printf("  Set mcu reg 0x%x to 0x%x OK\n\r",regAddr,regVal);	
}
#endif
UINT8 set_port_info(UINT8 port,UINT8 singleFx, UINT8 fxMode, UINT8 fxCnctr, UINT16 fxDistance)
{
	UINT16 buffer[20];
	UINT8 position;

	if((localDTEType==OL100CR_X4X_V5)&&(port==1))	
		return ERROR;
	
	/*read mac addr and port info*/
	for(position=0;position<20;)
	{
		buffer[position]=*(MACWADDR+position);
		position++;
	}
	position=5;
	buffer[position++]=(UINT16)('F'<<8 |'X');
	position += (5*(port-1));
	buffer[position++]=(UINT16)((singleFx<<8)|fxMode);
	buffer[position++]=(UINT16)(fxCnctr<<8);
	buffer[position++]=fxDistance;
	Flash_Erase_Sector(MACWADDR);
	Flash_Write_Block(buffer,MACWADDR,20);
	return OK;
}

UINT8 get_port_info(UINT8 port,UINT8 *singleFx, UINT8 *fxMode, UINT8 *fxCnctr, UINT16 *fxDistance)
{
	UINT8 byte;
	UINT8 *addr;
	if((port!=1)&&(port!=2))
		return ERROR;
	
	*singleFx = 0;
	*fxMode = 0;
	*fxCnctr = 0;
	*fxDistance = 0;

	if((localDTEType==OL100CR_X4X_V5)&&(port==1))
		return;

	*singleFx = 1;
	
	addr = MACRADDR;
	addr += 10;
	byte = *addr++;
	if(byte != 'F')
		return ERROR;
	byte = *addr++;
	if(byte != 'X')
		return ERROR;

	addr += (10*(port-1));
	*singleFx = *addr++;
	*fxMode = *addr++;
	*fxCnctr = *addr++;
	addr++;
	byte = *addr++;
	*fxDistance = (UINT16)(byte<<8);
	byte = *addr++;
	*fxDistance += byte;
	return OK;
}

UINT8 set_wave_info(UINT8 port,UINT16 txWaveLen, UINT16 rxWaveLen)
{
	UINT16 buffer[20];
	UINT8 position;

	if((localDTEType==OL100CR_X4X_V5)&&(port==1))	
		return ERROR;
	
	/*read mac addr and port info*/
	for(position=0;position<20;)
	{
		buffer[position]=*(MACWADDR+position);
		position++;
	}
	position=5;
	buffer[position++]=(UINT16)('F'<<8 |'X');
	position += ((5*(port-1))+3);
	buffer[position++]=txWaveLen;
	buffer[position++]=rxWaveLen;
	Flash_Erase_Sector(MACWADDR);
	Flash_Write_Block(buffer,MACWADDR,20);
	return OK;
}

UINT8 get_wave_info(UINT8 port,UINT16 *txWaveLen, UINT16 *rxWaveLen)
{
	UINT8 byte;
	UINT8 *addr;

	if((port!=1)&&(port!=2))
		return ERROR;
	
	*txWaveLen = 0;
	*rxWaveLen = 0;

	if((localDTEType==OL100CR_X4X_V5)&&(port==1))
		return;	
	
	addr = MACRADDR;
	addr += 10;
	byte = *addr++;
	if(byte != 'F')
		return ERROR;
	byte = *addr++;
	if(byte != 'X')
		return ERROR;

	addr += (10*(port-1)+6);	
	byte = *addr++;
	*txWaveLen = (UINT16)(byte<<8);
	byte = *addr++;
	*txWaveLen += byte;
	byte = *addr++;
	*rxWaveLen = (UINT16)(byte<<8);
	byte = *addr++;
	*rxWaveLen += byte;
	return OK;
}

void port_info_cmd(void)
{
	UINT8 ports[MAX_PORT/2];
	UINT8 i;
	UINT16 singleFx,fxMode,fxCnctr,fxDistance;

	for(i=0;i<MAX_PORT/2;i++)
		ports[i]=0;	 	
	if(valid_port_list(cmd[1],ports)==0)
		return;
	if(valid_input_number(cmd[2],1,2,&singleFx)==0)
		return;
	if(valid_input_number(cmd[3],1,3,&fxMode)==0)
		return;
	if(valid_input_number(cmd[4],1,4,&fxCnctr)==0)
		return;	
	if(valid_input_number(cmd[5],0,4096,&fxDistance)==0)
		return;

	for(i=1;i<=MAX_PORT;i++)
	{
		if(bitListTst(ports,i-1)==1)
		{	
			if(set_port_info(i,(UINT8)singleFx,(UINT8)fxMode,(UINT8)fxCnctr,fxDistance)==ERROR)
			{
				//printf("  %%Failed to config port %d\n\r",i);
				continue;
			}
		}
	}
}

void port_wavelength_cmd(void)
{
	UINT8 ports[MAX_PORT/2];
	UINT8 i;
	UINT16 txWaveLen,rxWaveLen;

	for(i=0;i<MAX_PORT/2;i++)
		ports[i]=0;	 	
	if(valid_port_list(cmd[1],ports)==0)
		return;
	if(valid_input_number(cmd[2],0,4096,&txWaveLen)==0)
		return;
	if(valid_input_number(cmd[3],0,4096,&rxWaveLen)==0)
		return;
	
	for(i=1;i<=MAX_PORT;i++)
	{
		if(bitListTst(ports,i-1)==1)
		{	
			if(set_wave_info(i,txWaveLen,rxWaveLen)==ERROR)
			{
				//printf("  %%Failed to config port %d\n\r",i);
				continue;
			}
		}
	}
}


void ping_host(void)
{
	UINT8 count=5;
	UINT32 ipaddr;
	ipaddr=inet_addr(cmd[1]);
	printf("  Pinging %d.%d.%d.%d with 32 bytes of data:\n\r",(UINT8)(ipaddr>>24),
			(UINT8)(ipaddr>>16),(UINT8)(ipaddr>>8),(UINT8)(ipaddr));
	ping_send_req(ipaddr);
	while(count>0)
	{
		if(TERMIO_GetChar()==0x03)/*CTRL+C*/
		{
			printf("  Cancled by user\n\r");
			break;
		}
		if(check_ping_finished())
		{
			count--;
			if(get_ping_result()==0)
			{
				printf("  Request timed out.\n\r");
			}
			else
			{
				printf("  Reply from %d.%d.%d.%d: Byte=32 TTL=100.\n\r",(UINT8)(ipaddr>>24),
					(UINT8)(ipaddr>>16),(UINT8)(ipaddr>>8),(UINT8)(ipaddr));
			}
			ping_send_req(ipaddr);
		}
		process_tcpip();
	}
}

void debug_cmd(void)
{
	UINT16 number;

	if(valid_input_number(cmd[1],0,512,&number)==0)
		return;

	debug=(UINT16)number;
}

⌨️ 快捷键说明

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