一 视图介绍
由上面几篇文章分析可见,所有的命令都是包含在node中的,根据Cisco或者H3常见路由器或者交换机的CLI格式可见,一个node就对应着一个视图(View)。常用的视图包括:普通视图,管理视图,文件系统视图,配置视图,以及接口配置视图和VLAN视图等。
在Zebra-VTYSH源码中,实现了的有Enable视图和配置视图。如下图所示:
/ # vtysh
Copyright 2010-2011 IBM Co., Ltd.
CLI> enable
CLI#
clear Reset functions
configure Configuration from vty interface
copy Copy from one file to another
debug Debugging functions (see also 'undebug')
disable Turn off privileged mode command
end End current mode and down to previous mode
exit Exit current mode and down to previous mode
list Print command list
no Negate a command or set its defaults
ping send echo messages
quit Exit current mode and down to previous mode
show Show running system information
start-shell Start UNIX shell
telnet Open a telnet connection
terminal Set terminal line parameters
traceroute Trace route to destination
undebug Disable debugging functions (see also 'debug')
write Write running configuration to memory, network, or terminal
CLI# configure terminal
CLI(config)#
access-list Add an access list entry
bgp BGP information
debug Debugging functions (see also 'undebug')
device-config Device configuration
dump Dump packet
enable Modify enable password parameters
end End current mode and down to previous mode
exit Exit current mode and down to previous mode
hostname Set system's network name
interface Select an interface to configure
ip IP information
ipv6 IPv6 information
key Authentication key management
list Print command list
log Logging control
no Negate a command or set its defaults
password Assign the terminal connection password
route-map Create route-map or enter route-map command mode
router Enable a routing process
system-config System and management configuration
username
write Write running configuration to memory, network, or terminal
CLI(config)# system-config
CLI(config-system)#
access Set CPE access ND flag
admin-idle-time Set system idle time
admin-psw Set system administrator password
admin-username Set system administrator username
connection-mode Set network connection mode : static and dynamic
datetime Set date time (format:2000-01-01 00:00:00)
default-gateway Set system's network default gateway
dns-server-1 Set system network DNS server 1
dns-server-2 Set system network DNS server 2
exit Exit current mode and down to previous mode
factory-defaults Restore ALL configure to factory default values( 0: reset all 1: reset with network parameters unchanged)
hostname Set system's network name
image-upgrade Upgrade image via ftp method
ip Set system ip address and netmask
list Print command list
managment-ip-range Set management IP range and netmask
managment-ip-range-flag Set management IP range service flag
mgr-vlan-id Set management VLAN ID
ntpserver Set NTP server
quit Exit current mode and down to previous mode
reset Reset system
snmp-refresh-time Set SNMP service refresh time cycle
snmp-rwcommunicty Set SNMP read/write community
snmp-service Set SNMP service enable or disable
snmp-trap-ip1 Set SNMP trap ip 1 address
snmp-trap-ip2 Set SNMP trap ip 2 address
snmp-trap1-ip-flag Set SNMP trap ip 1 service flag(enable/disable)
snmp-trap2-ip-flag Set SNMP trap ip 2 service flag(enable/disable)
ssh Set ssh service port and timeout values
ssh-service Set ssh service flag
telnet Set telnet PORT
telnet-service Set telnet service flag
timesync Set time sync service flag
timezone Set time zone (0:ShangHai,1:ChongQing)
CLI(config-system)# quit
CLI(config)# device-config
CLI(config-device)#
exit Exit current mode and down to previous mode
list Print command list
port-mirror-analysis-port Device configuration: Set analysis port(1: eth1 2: eth2)
port-mirror-flag Device configuration: Enable or disable port mirror service(0:disable,1:enable)
port-mirror-packet Device configuration: Set packet type to be mirrored(1:Import & Export 2: Import 3: Export)
port-mirror-port Device configuration:Set port to be mirrored
port1-rate Device configuration: set duplex mode and import/export/broadcast/unkown/multicast rate limit.
port2-rate Device configuration: set duplex mode and import/export/broadcast/unkown/multicast rate limit.
quit Exit current mode and down to previous mode
CLI(config-device)#
CLI(config-device)#
如果想要添加自己的命令,可以在原有的视图上增加(也就是在原有的node中增加commands),或者新开自己的视图,然后在新视图中添加自己的commands。
二 添加命令
进入vtysh目录中,查看vtysh_main.c文件的main函数,也就是和vtysh初始化相关的一切都在这里,基本上在这里可以完成你需要的一些基本命令。
在函数vtysh_init_vty()中,有个
/* Initialize command interface. Install basic nodes and commands. */
Void cmd_init (int terminal)
的函数,就是负责初始化command接口,安装node和命令的。
比如你就可以添加自己的视图如下:
/*Added by xyang*/
install_element (CONFIG_NODE, &vtysh_sysconfig_cmd);
install_element (CONFIG_NODE, &vtysh_devconfig_cmd);
(其中,安装的system和device配置的视图)
/*Added by xyang
* system config node*
*/
DEFUN (system_config,
vtysh_sysconfig_cmd,
"system-config",
SYS_CFG_STR
"\n")
{
//vty_out (vty, "testing by xyang.%s", VTY_NEWLINE);
vty->node = SYSCONFIG_NODE;
return CMD_SUCCESS;
}
DEFUN (device_config,
vtysh_devconfig_cmd,
"device-config",
DEV_CFG_STR
"\n")
{
//vty_out (vty, "testing by xyang.%s", VTY_NEWLINE);
vty->node = DEVCONFIG_NODE;
return CMD_SUCCESS;
}
DEFUN定义为:
/* DEFUN for vty command interafce. Little bit hacky ;-). */
#define DEFUN(funcname, cmdname, cmdstr, helpstr) \
int funcname (struct cmd_element *, struct vty *, int, char **); \
struct cmd_element cmdname = \
{ \
cmdstr, \
funcname, \
helpstr \
}; \
int funcname \
(struct cmd_element *self, struct vty *vty, int argc, char **argv)
SYSCONFIG_NODE和DEVCONFIG_NODE要添加进enum node_type{}中去。
最后就要在init_cmd的最后加进自己的command了
比如
/*add commands to system config node
* added by xyang @ 2012-02-01*
*/
/*management network settings*/
install_element (SYSCONFIG_NODE, &vtysh_system_cfg_ip_cmd);//ip and subnet mask
其中,函数指针需要定义先:
DEFUN (vtysh_system_cfg_ip,
vtysh_system_cfg_ip_cmd,
"ip ADDRESS NETMASK",
"Set system ip address and netmask\n")
{
applyCfg(argv[0],"IPADDR");
applyCfg(argv[1],"NETMASK");
system(NETWORK_SETTING_SCRIPT);
return CMD_SUCCESS;
}
这样,基本上完成了添加node和命令的任务了。
其他Zebra-VTYH自带的命令如果不想要的话删除掉就行了。