]> git.proxmox.com Git - mirror_frr.git/blobdiff - lib/command.h
ldpd: adapt the code for Quagga
[mirror_frr.git] / lib / command.h
index f9f4c7e397b1b23a2b1118d82579ea7bd7a24573..7a4c53a616cfd99ed32c7d990ff78c4dd382cddd 100644 (file)
 #include "vector.h"
 #include "vty.h"
 #include "lib/route_types.h"
+#include "memory.h"
+
+DECLARE_MTYPE(HOST)
+
+/* for test-commands.c */
+DECLARE_MTYPE(STRVEC)
 
 /* Host configuration variable */
 struct host
@@ -70,24 +76,37 @@ enum node_type
   CONFIG_NODE,                 /* Config node. Default mode of config file. */
   SERVICE_NODE,                /* Service node. */
   DEBUG_NODE,                  /* Debug node. */
+  VRF_DEBUG_NODE,               /* Vrf Debug node. */
   AAA_NODE,                    /* AAA node. */
   KEYCHAIN_NODE,               /* Key-chain node. */
   KEYCHAIN_KEY_NODE,           /* Key-chain key node. */
+  NS_NODE,                     /* Logical-Router node. */
+  VRF_NODE,                    /* VRF mode 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. */
-  BABEL_NODE,                  /* Babel protocol mode node. */
   BGP_NODE,                    /* BGP protocol mode which includes BGP4+ */
   BGP_VPNV4_NODE,              /* BGP MPLS-VPN PE exchange. */
+  BGP_VPNV6_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 */
   BGP_IPV6M_NODE,              /* BGP IPv6 multicast address family. */
+  BGP_ENCAP_NODE,              /* BGP ENCAP SAFI */
+  BGP_ENCAPV6_NODE,            /* BGP ENCAP SAFI */
   OSPF_NODE,                   /* OSPF protocol mode */
   OSPF6_NODE,                  /* OSPF protocol for IPv6 mode */
+  LDP_NODE,                    /* LDP protocol mode */
+  LDP_IPV4_NODE,               /* LDP IPv4 address family */
+  LDP_IPV6_NODE,               /* LDP IPv6 address family */
+  LDP_IPV4_IFACE_NODE,         /* LDP IPv4 Interface */
+  LDP_IPV6_IFACE_NODE,         /* LDP IPv6 Interface */
+  LDP_L2VPN_NODE,              /* LDP L2VPN node */
+  LDP_PSEUDOWIRE_NODE,         /* LDP Pseudowire node */
   ISIS_NODE,                   /* ISIS protocol mode */
+  PIM_NODE,                    /* PIM protocol mode */
   MASC_NODE,                   /* MASC for multicast.  */
   IRDP_NODE,                   /* ICMP Router Discovery Protocol mode. */ 
   IP_NODE,                     /* Static ip route node. */
@@ -102,7 +121,9 @@ enum node_type
   DUMP_NODE,                   /* Packet dump node. */
   FORWARDING_NODE,             /* IP forwarding node. */
   PROTOCOL_NODE,                /* protocol filtering node */
+  MPLS_NODE,                    /* MPLS config node */
   VTY_NODE,                    /* Vty node. */
+  LINK_PARAMS_NODE,            /* Link-parameters node */
 };
 
 /* Node which has some commands and prompt string and configuration
@@ -150,10 +171,28 @@ enum cmd_token_type
   TOKEN_KEYWORD,
 };
 
+enum cmd_terminal_type
+{
+  _TERMINAL_BUG = 0,
+  TERMINAL_LITERAL,
+  TERMINAL_OPTION,
+  TERMINAL_VARIABLE,
+  TERMINAL_VARARG,
+  TERMINAL_RANGE,
+  TERMINAL_IPV4,
+  TERMINAL_IPV4_PREFIX,
+  TERMINAL_IPV6,
+  TERMINAL_IPV6_PREFIX,
+};
+
+/* argument to be recorded on argv[] if it's not a literal */
+#define TERMINAL_RECORD(t) ((t) >= TERMINAL_OPTION)
+
 /* Command description structure. */
 struct cmd_token
 {
   enum cmd_token_type type;
+  enum cmd_terminal_type terminal;
 
   /* Used for type == MULTIPLE */
   vector multiple; /* vector of cmd_token, type == FINAL */
@@ -178,6 +217,7 @@ struct cmd_token
 #define CMD_COMPLETE_MATCH       8
 #define CMD_COMPLETE_LIST_MATCH  9
 #define CMD_SUCCESS_DAEMON      10
+#define CMD_ERR_NO_FILE         11
 
 /* Argc max counts. */
 #define CMD_ARGC_MAX   25
@@ -394,6 +434,9 @@ struct cmd_token
 #define DEFSH(daemon, cmdname, cmdstr, helpstr) \
   DEFUN_CMD_ELEMENT(NULL, cmdname, cmdstr, helpstr, 0, daemon) \
 
+#define DEFSH_HIDDEN(daemon, cmdname, cmdstr, helpstr) \
+  DEFUN_CMD_ELEMENT(NULL, cmdname, cmdstr, helpstr, CMD_ATTR_HIDDEN, daemon) \
+
 /* DEFUN + DEFSH */
 #define DEFUNSH(daemon, funcname, cmdname, cmdstr, helpstr) \
   DEFUN_CMD_FUNC_DECL(funcname) \
@@ -448,16 +491,6 @@ struct cmd_token
 #define CMD_CREATE_STR_HELPER(s) #s
 #define CMD_RANGE_STR(a,s) "<" CMD_CREATE_STR(a) "-" CMD_CREATE_STR(s) ">"
 
-#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"
@@ -497,6 +530,13 @@ struct cmd_token
 "(neighbor|interface|area|lsa|zebra|config|dbex|spf|route|lsdb|redistribute|hook|asbr|prefix|abr)"
 #define ISIS_STR "IS-IS information\n"
 #define AREA_TAG_STR "[area tag]\n"
+#define COMMUNITY_AANN_STR "Community number where AA and NN are <0-65535>\n"
+#define COMMUNITY_VAL_STR  "Community number in AA:NN format (where AA and NN are <0-65535>) or local-AS|no-advertise|no-export|internet or additive\n"
+#define MPLS_TE_STR "MPLS-TE specific commands\n"
+#define LINK_PARAMS_STR "Configure interface link parameters\n"
+#define OSPF_RI_STR "OSPF Router Information specific commands\n"
+#define PCE_STR "PCE Router Information specific commands\n"
+#define MPLS_STR "MPLS information\n"
 
 #define CONF_BACKUP_EXT ".sav"
 
@@ -542,6 +582,7 @@ extern vector cmd_make_strvec (const char *);
 extern void cmd_free_strvec (vector);
 extern vector cmd_describe_command (vector, struct vty *, int *status);
 extern char **cmd_complete_command (vector, struct vty *, int *status);
+extern char **cmd_complete_command_lib (vector, struct vty *, int *status, int islib);
 extern const char *cmd_prompt (enum node_type);
 extern int command_config_read_one_line (struct vty *vty, struct cmd_element **, int use_config_node);
 extern int config_from_file (struct vty *, FILE *, unsigned int *line_num);
@@ -562,6 +603,8 @@ extern void host_config_set (const char *);
 
 extern void print_version (const char *);
 
+extern int cmd_banner_motd_file (const char *);
+
 /* struct host global, ick */
 extern struct host host;