⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 command.h

📁 大名鼎鼎的路由器源码。程序分ZEBRA、OSPFRIP等3个包。程序框架采用一个路由协议一个进程的方式
💻 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 + -