2004-10-22 Paul Jakma <paul@dishone.st>
* command.h: Cleanup the defines a bit, add helper defines and
collapse all defines to use those. Add an attribute field to
cmd_element to support, eg hidden or deprecated commands, add
defun defines for such. All that's left to do is add logic
to command.c to check these attributes... ;)
diff --git a/lib/ChangeLog b/lib/ChangeLog
index 6611196..40e0f22 100644
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -6,6 +6,11 @@
* sockopt.h: Cleanup SOCKOPT_CMSG defines a bit. Add a throwaway
define for SOPT_SIZE_CMSG_IFINDEX_IPV4 for systems which have
neither IP_RECVIF nor IP_PKTINFO (eg openbsd).
+ * command.h: Cleanup the defines a bit, add helper defines and
+ collapse all defines to use those. Add an attribute field to
+ cmd_element to support, eg hidden or deprecated commands, add
+ defun defines for such. All that's left to do is add logic
+ to command.c to check these attributes... ;)
2004-10-19 Hasso Tepper <hasso at quagga.net>
diff --git a/lib/command.h b/lib/command.h
index 8a17bbb..d357698 100644
--- a/lib/command.h
+++ b/lib/command.h
@@ -125,6 +125,12 @@
vector cmd_vector;
};
+enum
+{
+ CMD_ATTR_DEPRECATED,
+ CMD_ATTR_HIDDEN,
+};
+
/* Structure of command element. */
struct cmd_element
{
@@ -136,6 +142,7 @@
unsigned int cmdsize; /* Command index count. */
char *config; /* Configuration string */
vector subconfig; /* Sub configuration string */
+ u_char attr; /* Command attributes */
};
/* Command description structure. */
@@ -164,17 +171,40 @@
/* 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, const char *[]); \
+/* helper defines for end-user DEFUN* macros */
+#define DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, attrs, dnum) \
struct cmd_element cmdname = \
{ \
.string = cmdstr, \
.func = funcname, \
- .doc = helpstr \
- }; \
+ .doc = helpstr, \
+ .attr = attrs, \
+ .daemon = dnum, \
+ };
+
+#define DEFUN_CMD_FUNC_DECL(funcname) \
+ int funcname (struct cmd_element *, struct vty *, int, const char *[]); \
+
+#define DEFUN_CMD_FUNC_TEXT(funcname) \
int funcname \
- (struct cmd_element *self, struct vty *vty, int argc, const char *argv[])
+ (struct cmd_element *self, struct vty *vty, int argc, const char *argv[])
+
+/* DEFUN for vty command interafce. Little bit hacky ;-). */
+#define DEFUN(funcname, cmdname, cmdstr, helpstr) \
+ DEFUN_CMD_FUNC_DECL(funcname) \
+ DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, 0, 0) \
+ DEFUN_CMD_FUNC_TEXT(funcname)
+
+#define DEFUN_ATTR(funcname, cmdname, cmdstr, helpstr, attr) \
+ DEFUN_CMD_FUNC_DECL(funcname) \
+ DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, attr, 0) \
+ DEFUN_CMD_FUNC_TEXT(funcname)
+
+#define DEFUN_HIDDEN(funcname, cmdname, cmdstr, helpstr) \
+ DEFUN_ATTR (funcname, cmdname, cmdstr, helpstr, CMD_ATTR_HIDDEN)
+
+#define DEFUN_DEPRECATED(funcname, cmdname, cmdstr, helpstr) \
+ DEFUN (funcname, cmdname, cmdstr, helpstr, CMD_ATTR_DEPRECATED) \
/* DEFUN_NOSH for commands that vtysh should ignore */
#define DEFUN_NOSH(funcname, cmdname, cmdstr, helpstr) \
@@ -182,35 +212,26 @@
/* DEFSH for vtysh. */
#define DEFSH(daemon, cmdname, cmdstr, helpstr) \
- struct cmd_element cmdname = \
- { \
- cmdstr, \
- NULL, \
- helpstr, \
- daemon \
- }; \
+ DEFUN_CMD_ELEMENT(NULL, cmdname, cmdstr, helpstr, 0, daemon) \
/* DEFUN + DEFSH */
#define DEFUNSH(daemon, funcname, cmdname, cmdstr, helpstr) \
- int funcname (struct cmd_element *, struct vty *, int, const char *[]); \
- struct cmd_element cmdname = \
- { \
- cmdstr, \
- funcname, \
- helpstr, \
- daemon \
- }; \
- int funcname \
- (struct cmd_element *self, struct vty *vty, int argc, const char *argv[])
+ DEFUN_CMD_FUNC_DECL(funcname) \
+ DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, 0, daemon) \
+ DEFUN_CMD_FUNC_TEXT(funcname)
/* ALIAS macro which define existing command's alias. */
#define ALIAS(funcname, cmdname, cmdstr, helpstr) \
- struct cmd_element cmdname = \
- { \
- cmdstr, \
- funcname, \
- helpstr \
- };
+ DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, 0, 0)
+
+#define ALIAS_ATTR(funcname, cmdname, cmdstr, helpstr, attr) \
+ DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, attr, daemon) \
+
+#define ALIAS_HIDDEN(funcname, cmdname, cmdstr, helpstr) \
+ DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, CMD_ATTR_HIDDEN, 0)
+
+#define ALIAS_DEPRECATED(funcname, cmdname, cmdstr, helpstr) \
+ DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, CMD_ATTR_DEPRECATED, 0)
#endif /* VTYSH_EXTRACT_PL */