Zebra-VTYSH原始碼分析和改造(三):新增定製命令
阿新 • • 發佈:2019-01-26
一 檢視介紹
由上面幾篇文章分析可見,所有的命令都是包含在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自帶的命令如果不想要的話刪除掉就行了。
(總完)