📄 cli_cmd.c
字号:
position+=sizeof(localmachine.defgw)/2;
/*write trap-server addr&port 5*3words*/
for(i=0;i<5;i++)
{
memcpy((UINT8 *)(buffer+position),&(gTrapServer[i].addr),4);
position+=sizeof(gTrapServer[i].addr)/2;
memcpy((UINT8 *)(buffer+position),&(gTrapServer[i].port),2);
position+=sizeof(gTrapServer[i].port)/2;
}
/*write manager vid*/
memcpy((UINT8 *)(buffer+position),&manager_first_vid,2);
position++;
memcpy((UINT8 *)(buffer+position),&manager_second_vid,2);
position++;
/*write snmp community 5*8.5words*/
for(i=0;i<5;i++)
{
memcpy((UINT8 *)(buffer+position),gCommunity[i].name,sizeof(gCommunity[i].name));
position+=sizeof(gCommunity[i].name)/2;
memcpy((UINT8 *)(buffer+position),&(gCommunity[i].ability),1);
position++;
}
#endif
buffer[position++]=(UINT16)('@'<<8 |'@');
buffer[position++]=(UINT16)('@'<<8 |'@');
Flash_Write_Block(buffer,WRITEADDR,position);
}
void write_file_cmd(void)
{
UINT8 key;
printf(" Save the configuration! Continue?(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==1)
{
return;
}
}
else
{
printf("\n\r");
return;
}
printf("\n\r");
sys_cfg_save();
}
void erase_file_cmd(void)
{
UINT16 *addr;
UINT16 buffer[2];
UINT8 key;
printf(" Erase the configuration! Continue?(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==1)
{
return;
}
}
else
{
printf("\n\r");
return;
}
printf("\n\r");
Flash_Erase_Sector(WRITEADDR);/*erase sector*/
addr = WRITEADDR;
memset((UINT8 *)buffer,0,4);
Flash_Write_Block(buffer,WRITEADDR,2);
}
void reboot_cmd(void)
{
UINT8 key = 0;
printf(" WARNING:System will reboot! Continue?(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");
}
UINT32 valid_input_number(UINT8 *str,UINT16 minVal,UINT16 maxVal,UINT16 *num)
{
UINT8 len;
UINT16 tmp;
UINT32 i;
if(*str==0)
{
*num=0;
return;
}
if((*str=='0')&&((*(str+1)=='x')||(*(str+1)=='X')))/*hex*/
{
if((strlen(str) > 6) || (strlen(str) < 3))
{
printf(" %%Invalid input :%s\n\r",str);
return 0;
}
len = (strlen(str)-2);
*num = 0;
for(i=2;i<(len+2);i++)
{
if((*(str+i)>='0')&&(*(str+i)<='9'))
{
tmp = (*(str+i)-'0');
tmp <<= ((len+1-i)*4);
*num += tmp;
}
else if((*(str+i)>='a')&&(*(str+i)<='f'))
{
tmp = (*(str+i)-'a'+10);
tmp <<= ((len+1-i)*4);
*num += tmp;
}
else if((*(str+i)>='A')&&(*(str+i)<='F'))
{
tmp = (*(str+i)-'A'+10);
tmp <<= ((len+1-i)*4);
*num += tmp;
}
else
{
printf(" %%Invalid input :%s\n\r",str);
return 0;
}
}
}
else /*int*/
{
for(i=0;i<strlen(str);i++)
{
if( (*(str+i) >'9') || (*(str+i)<'0'))
{
printf(" %%Invalid input :%s\n\r",str);
return 0;
}
}
i=atoi(str);
*num=(UINT16)i;
}
if(*num>maxVal)
{
printf(" %%Invalid input :%s,max value is %u\n\r",str,maxVal);
return 0;
}
else if(*num<minVal)
{
printf(" %%Invalid input :%s,min value is %u\n\r",str,minVal);
return 0;
}
return 1;
}
UINT8 ConvertOneByte(UINT8 oldByte)
{
UINT8 newByte=0;
UINT32 i=0;
for(i=0;i<=7;i++)
{
if( oldByte & (0x01<<i) )
newByte |= (0x80>>i);
}
return newByte;
}
UINT32 listToString(UINT8 *list,UINT8 listLen,UINT8 *string)
{
UINT8 i;
UINT8 str[8];
UINT8 start=0,end=0;
UINT8 index;
UINT8 flag=-1;
for(i=0;i<listLen*8;i++)
{
if(bitListTst(list,i)>0)
{
index=i+1;
if(start<=0)
{
start=index;
end=index;
sprintf(str,"%d",start);
strcat(string,str);
}
if(index-end>1)
{
if(end>start)
{
sprintf(str,"-%d",end);
strcat(string,str);
}
start=index;
end=index;
sprintf(str,",%d",index);
strcat(string,str);
}
else
end=index;
flag=0;
}
}
if(end>start)
{
sprintf(str,"-%d",end);
strcat(string,str);
}
return flag;
}
UINT8 valid_port_list(UINT8 *portstr,UINT8 *portlist)
{
UINT8 *temp=portstr;
UINT8 port,i;
UINT8 from=1;
UINT8 to=1;
UINT8 fsm=0;/*status machine----0:start
1:last character is ","
2:last character is "-"
3:last character is number*/
while(temp!=NULL && *temp!='\0')
{
switch(*temp)
{
case ',':
if(fsm==3)
{
bitListSet(portlist,port-1);
}
else
{
printf(" %%Invalid input :%s\n\r",portstr);
return 0;
}
fsm=1;
temp++;
break;
case '-':
if(fsm!=3)
{
printf(" %%Invalid input :%s\n\r",portstr);
return 0;
}
temp++;
fsm=2;
break;
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
port=atoi(temp);
if(port>MAX_PORT)
{
printf(" %%Invalid input :%s\n\r",portstr);
return 0;
}
if(port>=10)
temp+=2;
else
temp++;
if(fsm==2)
{
to=port;
if(from>to)
{
printf(" %%Invalid input :%s\n\r",portstr);
return 0;
}
else
{
for(i=from;i<=to;i++)
{
bitListSet(portlist,i-1);
}
}
}
else if(fsm==0 || fsm==1)
{
bitListSet(portlist,port-1);
from=port;
}
else
{
printf(" %%Invalid input :%s\n\r",portstr);
return 0;
}
fsm=3;
break;
default:
printf(" %%Invalid input :%s\n\r",portstr);
return 0;
break;
}
}
return 1;
}
UINT8 valid_mac_addr(UINT8* mac_str)
{
UINT8 i;
INT8 last_dot_place=-1;
UINT8 dot_number=0;
if(strlen(mac_str)!=MAX_MAC_ADDR_LENTH)
return 0;
for(i=0;i<strlen(mac_str);i++)
{
if( (mac_str[i]==SEPERATE_CHAR_2 || mac_str[i]==SEPERATE_CHAR_1) && (i-last_dot_place)==3)
{
last_dot_place=i;
dot_number++;
}
if((mac_str[i] !=SEPERATE_CHAR_2) && (mac_str[i] !=SEPERATE_CHAR_1) && ( ( mac_str[i]>'F' || mac_str[i] <'A') &&
(mac_str[i] >'f' || mac_str[i]<'a')
&& (mac_str[i]<'0' || mac_str[i] >'9') ) )
return 0;
}
if(dot_number!=MAX_DOT_NUMBER)
return 0;
return 1;
}
UINT8 mac_strtohex(UINT8*mac_str,UINT8* mac_hex)
{
mac_hex[0]=16*chartoint(mac_str[0])+chartoint(mac_str[1]);
mac_hex[1]=16*chartoint(mac_str[3])+chartoint(mac_str[4]);
mac_hex[2]=16*chartoint(mac_str[6])+chartoint(mac_str[7]);
mac_hex[3]=16*chartoint(mac_str[9])+chartoint(mac_str[10]);
mac_hex[4]=16*chartoint(mac_str[12])+chartoint(mac_str[13]);
mac_hex[5]=16*chartoint(mac_str[15])+chartoint(mac_str[16]);
return 1;
}
UINT32 chartoint(UINT8 x)
{
UINT32 value=0;
switch(x)
{
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
value=x-'A'+10;
break;
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
value=x-'a'+10;
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
value=x-'0';
break;
default:
break;
}
return value;
}
UINT8 rmtManageChk(void)
{
if(rmtCfgFlag)
{
printf(" %%Failed because managed by local device\n\r");
return TRUE;
}
return FALSE;
}
void show_version_cmd(void)
{
printf(" SoftWare Version : V1.3\n\r");
printf(" HardWare Version : V0.%d\n\r",localHWVersion);
printf(" Copyright 2000-2006 FiberHome Networks\n\r");
}
void show_system_cmd(void)
{
UINT8 port,byte;
UINT8 *addr;
UINT16 word;
if(localDTEType == OL100CR_X4X_V5)
printf(" Device Type: OL100CR-X4X-V5\n\r");
else
printf(" Device Type: OL100CR-GE-XXX-XXX-V5\n\r");
printf(" Device Mac Address: %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]);
addr=MACRADDR;
addr+=10;
byte=*addr++;
if(byte!='F')
return;
byte=*addr++;
if(byte!='X')
return;
for(port=1;port<=MAX_PORT;port++)
{
printf(" Device Port %d Information\n\r",port);
if((port==1)&&(localDTEType==OL100CR_X4X_V5))
{
printf(" Type: Twisted-pair Port\n\r");
printf(" Physical Connector: RJ45\n\r");
addr += 10;
}
else
{
printf(" Type: ");
byte=*addr++;
if(byte==1)
printf("Double-fiber Port\n\r");
else if(byte==2)
printf("Single-fiber port\n\r");
else
printf("Unknown Type\n\r");
addr++;
byte=*addr++;
printf(" Physical Connector: ");
switch(byte)
{
case 1:
printf("SC Connector\n\r");
break;
case 2:
printf("FC Connector\n\r");
break;
case 3:
printf("ST Connector\n\r");
break;
case 4:
printf("LC Connector\n\r");
break;
default:
printf("Unknown\n\r");
break;
}
addr++;
addr+=2;
byte=*addr++;
word=(UINT16)(byte<<8);
byte=*addr++;
word+=byte;
addr-=7;
byte=*addr++;
printf(" TX Wavelength: ");
if((word==0xffff)||(word==0))
{
printf("Unknown Wavelength\n\r");
}
else
{
switch(byte)
{
case 1:
printf("Multi-mode %d nm\n\r",word);
break;
case 2:
printf("Single-mode %d nm\n\r",word);
break;
case 3:
printf("CWDM Wavelength %d nm\n\r",word);
break;
default:
printf("Unknown Wavelength\n\r");
break;
}
}
addr+=6;
byte=*addr++;
word=(UINT16)(byte<<8);
byte=*addr++;
word+=byte;
addr-=9;
byte=*addr++;
printf(" RX Wavelength: ");
if((word==0xffff)||(word==0))
{
printf("Unknown Wavelength\n\r");
}
else
{
switch(byte)
{
case 1:
printf("Multi-mode %d nm\n\r",word);
break;
case 2:
printf("Single-mode %d nm\n\r",word);
break;
case 3:
printf("CWDM Wavelength %d nm\n\r",word);
break;
default:
printf("Unknown Wavelength\n\r");
break;
}
}
addr+=2;
byte=*addr++;
word=(UINT16)(byte<<8);
byte=*addr++;
word+=byte;
if((word==0xffff)||(word==0))
printf(" Transmit Distance: Unknown\n\r");
else
printf(" Transmit Distance: %d %s\n\r",word,(word>120)?"m":"Km");
addr+=4;
}
}
}
void show_log_cmd(void)
{
UINT8 i;
printf(" System run %d years %d days %d hours %d minutes %d seconds.\n\r",sysRunYear,sysRunDay,sysRunHour,sysRunMin,sysRunSec);
if(sysLogCurrent == 0)
i = SYS_LOG_MAX - 1;
else
i = sysLogCurrent - 1;
for(;;)
{
if(sysLog[i][0]!=0)
printf(" %s\n\r",&sysLog[i][0]);
if(i==sysLogCurrent)
break;
if(i==0)
i = SYS_LOG_MAX - 1;
else
i -= 1;
}
}
void hostname_cmd()
{
if(strlen(cmd[1])>15)
{
printf(" %%hostname must be less than 15 characters\n\r");
return;
}
strcpy(hostname,cmd[1]);
return;
}
void password_cmd()
{
if(strlen(cmd[1])>7)
{
printf(" %%password must be less than 8 characters\n\r");
return;
}
strcpy(password,cmd[1]);
return;
}
void port_shutdown_cmd(void)
{
UINT8 ports[MAX_PORT/2];
UINT8 i;
if(rmtManageChk()==TRUE)
return;
for(i=0;i<MAX_PORT/2;i++)
ports[i]=0;
if(valid_port_list(cmd[1],ports)==0)
return;
for(i=1;i<=MAX_PORT;i++)
{
if(bitListTst(ports,i-1)==1)
{
if(hwSetPortStat(i,0)==ERROR)
{
//printf(" %%Failed to shutdown port %d\n\r",i);
continue;
}
}
}
}
void port_no_shutdown_cmd(void)
{
UINT8 ports[MAX_PORT/2];
UINT8 i;
if(rmtManageChk()==TRUE)
return;
for(i=0;i<MAX_PORT/2;i++)
ports[i]=0;
if(valid_port_list(cmd[1],ports)==0)
return;
for(i=1;i<=MAX_PORT;i++)
{
if(bitListTst(ports,i-1)==1)
{
if(hwSetPortStat(i,1)==ERROR)
{
//printf(" %%Failed to no-shutdown port %d\n\r",i);
continue;
}
}
}
}
void show_if_cmd(void)
{
UINT8 port;
UINT8 u8Val;
UINT16 u16Val=0;
printf("*********Interface Infomation************\n\r");
printf(" Port ");
printf("Admin ");
printf("Link ");
printf("Cur-Dplx/Spd ");
printf("Cfg-Auto/Dplx/Spd ");
printf("FlowCtrl ");
printf("TxRateLmt \n\r");
for(port=1;port<=MAX_PORT;port++)
{
printf(" %d ",port);
u8Val=1;
hwGetPortStat(port, &u8Val);
if(u8Val==0)
printf("Down ");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -