?? cli_cmd.c
字號:
#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, ®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);
}
#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);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -