?? cli_cmd.c
字號:
}
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, ®Val);
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, ®Val);
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, ®Val);
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, ®Val);
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,®Addr)==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,®Addr)==0)
return;
if(valid_input_number(cmd[3],0,0xff,®Val)==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 + -