📄 command.h
字号:
/* * Zebra configuration command interface routine * Copyright (C) 1997, 98 Kunihiro Ishiguro * * This file is part of GNU Zebra. * * GNU Zebra is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published * by the Free Software Foundation; either version 2, or (at your * option) any later version. * * GNU Zebra is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Zebra; see the file COPYING. If not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */#ifndef _ZEBRA_COMMAND_H#define _ZEBRA_COMMAND_H#include "vector.h"#include "vty.h"/* Host configuration variable */struct host{ /* Host name of this router. */ char *name; /* Password for vty interface. */ char *password; char *password_encrypt; /* Enable password */ char *enable; char *enable_encrypt; /* System wide terminal lines. */ int lines; /* Log filename. */ char *logfile; /* Log stdout. */ u_char log_stdout; /* Log syslog. */ u_char log_syslog; /* config file name of this host */ char *config; /* Flags for services */ int advanced; int encrypt; /* Banner configuration. */ char *motd;};/* There are some command levels which called from command node. */enum node_type { AUTH_NODE, /* Authentication mode of vty interface. */ VIEW_NODE, /* View node. Default mode of vty interface. */ AUTH_ENABLE_NODE, /* Authentication mode for change enable. */ ENABLE_NODE, /* Enable node. */ CONFIG_NODE, /* Config node. Default mode of config file. */ DEBUG_NODE, /* Debug node. */ AAA_NODE, /* AAA node. */ KEYCHAIN_NODE, /* Key-chain node. */ KEYCHAIN_KEY_NODE, /* Key-chain key node. */ INTERFACE_NODE, /* Interface mode node. */ ZEBRA_NODE, /* zebra connection node. */ TABLE_NODE, /* rtm_table selection node. */ RIP_NODE, /* RIP protocol mode node. */ RIPNG_NODE, /* RIPng protocol mode node. */ BGP_NODE, /* BGP protocol mode which includes BGP4+ */ BGP_VPNV4_NODE, /* BGP MPLS-VPN PE exchange. */ BGP_IPV4_NODE, /* BGP IPv4 unicast address family. */ BGP_IPV4M_NODE, /* BGP IPv4 multicast address family. */ BGP_IPV6_NODE, /* BGP IPv6 address family */ OSPF_NODE, /* OSPF protocol mode */ OSPF6_NODE, /* OSPF protocol for IPv6 mode */ MASC_NODE, /* MASC for multicast. */ IRDP_NODE, /* ICMP Router Discovery Protocol mode. */ IP_NODE, /* Static ip route node. */ ACCESS_NODE, /* Access list node. */ PREFIX_NODE, /* Prefix list node. */ ACCESS_IPV6_NODE, /* Access list node. */ PREFIX_IPV6_NODE, /* Prefix list node. */ AS_LIST_NODE, /* AS list node. */ COMMUNITY_LIST_NODE, /* Community list node. */ RMAP_NODE, /* Route map node. */ SMUX_NODE, /* SNMP configuration node. */ DUMP_NODE, /* Packet dump node. */ FORWARDING_NODE, /* IP forwarding node. */ VTY_NODE /* Vty node. */};/* Node which has some commands and prompt string and configuration function pointer . */struct cmd_node { /* Node index. */ enum node_type node; /* Prompt character at vty interface. */ char *prompt; /* Is this node's configuration goes to vtysh ? */ int vtysh; /* Node's configuration write function */ int (*func) (struct vty *); /* Vector of this node's command list. */ vector cmd_vector; };/* Structure of command element. */struct cmd_element { char *string; /* Command specification by string. */ int (*func) (struct cmd_element *, struct vty *, int, char **); char *doc; /* Documentation of this command. */ int daemon; /* Daemon to which this command belong. */ vector strvec; /* Pointing out each description vector. */ int cmdsize; /* Command index count. */ char *config; /* Configuration string */ vector subconfig; /* Sub configuration string */};/* Command description structure. */struct desc{ char *cmd; /* Command string. */ char *str; /* Command's description. */};/* Return value of the commands. */#define CMD_SUCCESS 0#define CMD_WARNING 1#define CMD_ERR_NO_MATCH 2#define CMD_ERR_AMBIGUOUS 3#define CMD_ERR_INCOMPLETE 4#define CMD_ERR_EXEED_ARGC_MAX 5#define CMD_ERR_NOTHING_TODO 6#define CMD_COMPLETE_FULL_MATCH 7#define CMD_COMPLETE_MATCH 8#define CMD_COMPLETE_LIST_MATCH 9#define CMD_SUCCESS_DAEMON 10/* Argc max counts. */#define CMD_ARGC_MAX 25/* Turn off these macros when uisng cpp with extract.pl */#ifndef VTYSH_EXTRACT_PL /* 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)/* DEFUN_NOSH for commands that vtysh should ignore */#define DEFUN_NOSH(funcname, cmdname, cmdstr, helpstr) \ DEFUN(funcname, cmdname, cmdstr, helpstr)/* DEFSH for vtysh. */#define DEFSH(daemon, cmdname, cmdstr, helpstr) \ struct cmd_element cmdname = \ { \ cmdstr, \ NULL, \ helpstr, \ daemon \ }; \/* DEFUN + DEFSH */#define DEFUNSH(daemon, funcname, cmdname, cmdstr, helpstr) \ int funcname (struct cmd_element *, struct vty *, int, char **); \ struct cmd_element cmdname = \ { \ cmdstr, \ funcname, \ helpstr, \ daemon \ }; \ int funcname \ (struct cmd_element *self, struct vty *vty, int argc, char **argv)/* ALIAS macro which define existing command's alias. */#define ALIAS(funcname, cmdname, cmdstr, helpstr) \ struct cmd_element cmdname = \ { \ cmdstr, \ funcname, \ helpstr \ };#endif /* VTYSH_EXTRACT_PL *//* Some macroes */#define CMD_OPTION(S) ((S[0]) == '[')#define CMD_VARIABLE(S) (((S[0]) >= 'A' && (S[0]) <= 'Z') || ((S[0]) == '<'))#define CMD_VARARG(S) ((S[0]) == '.')#define CMD_RANGE(S) ((S[0] == '<'))#define CMD_IPV4(S) ((strcmp ((S), "A.B.C.D") == 0))#define CMD_IPV4_PREFIX(S) ((strcmp ((S), "A.B.C.D/M") == 0))#define CMD_IPV6(S) ((strcmp ((S), "X:X::X:X") == 0))#define CMD_IPV6_PREFIX(S) ((strcmp ((S), "X:X::X:X/M") == 0))/* Common descriptions. */#define SHOW_STR "Show running system information\n"#define IP_STR "IP information\n"#define IPV6_STR "IPv6 information\n"#define NO_STR "Negate a command or set its defaults\n"#define CLEAR_STR "Reset functions\n"#define RIP_STR "RIP information\n"#define BGP_STR "BGP information\n"#define OSPF_STR "OSPF information\n"#define NEIGHBOR_STR "Specify neighbor router\n"#define DEBUG_STR "Debugging functions (see also 'undebug')\n"#define UNDEBUG_STR "Disable debugging functions (see also 'debug')\n"#define ROUTER_STR "Enable a routing process\n"#define AS_STR "AS number\n"#define MBGP_STR "MBGP information\n"#define MATCH_STR "Match values from routing table\n"#define SET_STR "Set values in destination routing protocol\n"#define OUT_STR "Filter outgoing routing updates\n"#define IN_STR "Filter incoming routing updates\n"#define V4NOTATION_STR "specify by IPv4 address notation(e.g. 0.0.0.0)\n"#define OSPF6_NUMBER_STR "Specify by number\n"#define INTERFACE_STR "Interface infomation\n"#define IFNAME_STR "Interface name(e.g. ep0)\n"#define IP6_STR "IPv6 Information\n"#define OSPF6_STR "Open Shortest Path First (OSPF) for IPv6\n"#define OSPF6_ROUTER_STR "Enable a routing process\n"#define OSPF6_INSTANCE_STR "<1-65535> Instance ID\n"#define SECONDS_STR "<1-65535> Seconds\n"#define ROUTE_STR "Routing Table\n"#define PREFIX_LIST_STR "Build a prefix list\n"#define OSPF6_DUMP_TYPE_LIST \"(neighbor|interface|area|lsa|zebra|config|dbex|spf|route|lsdb|redistribute|hook|asbr|prefix|abr)"#define CONF_BACKUP_EXT ".sav"/* IPv4 only machine should not accept IPv6 address for peer's IP address. So we replace VTY command string like below. */#ifdef HAVE_IPV6#define NEIGHBOR_CMD "neighbor (A.B.C.D|X:X::X:X) "#define NO_NEIGHBOR_CMD "no neighbor (A.B.C.D|X:X::X:X) "#define NEIGHBOR_ADDR_STR "Neighbor address\nIPv6 address\n"#define NEIGHBOR_CMD2 "neighbor (A.B.C.D|X:X::X:X|WORD) "#define NO_NEIGHBOR_CMD2 "no neighbor (A.B.C.D|X:X::X:X|WORD) "#define NEIGHBOR_ADDR_STR2 "Neighbor address\nNeighbor IPv6 address\nNeighbor tag\n"#else#define NEIGHBOR_CMD "neighbor A.B.C.D "#define NO_NEIGHBOR_CMD "no neighbor A.B.C.D "#define NEIGHBOR_ADDR_STR "Neighbor address\n"#define NEIGHBOR_CMD2 "neighbor (A.B.C.D|WORD) "#define NO_NEIGHBOR_CMD2 "no neighbor (A.B.C.D|WORD) "#define NEIGHBOR_ADDR_STR2 "Neighbor address\nNeighbor tag\n"#endif /* HAVE_IPV6 *//* Prototypes. */void install_node (struct cmd_node *, int (*) (struct vty *));void install_default (enum node_type);void install_element (enum node_type, struct cmd_element *);void sort_node ();char *argv_concat (char **, int, int);vector cmd_make_strvec (char *);void cmd_free_strvec (vector);vector cmd_describe_command ();char **cmd_complete_command ();char *cmd_prompt (enum node_type);int config_from_file (struct vty *, FILE *);int cmd_execute_command (vector, struct vty *, struct cmd_element **);int cmd_execute_command_strict (vector, struct vty *, struct cmd_element **);void config_replace_string (struct cmd_element *, char *, ...);void cmd_init (int);/* Export typical functions. */extern struct cmd_element config_end_cmd;extern struct cmd_element config_exit_cmd;extern struct cmd_element config_quit_cmd;extern struct cmd_element config_help_cmd;extern struct cmd_element config_list_cmd;int config_exit (struct cmd_element *, struct vty *, int, char **);int config_help (struct cmd_element *, struct vty *, int, char **);char *host_config_file ();void host_config_set (char *);#endif /* _ZEBRA_COMMAND_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -