Improve the "show version" command 65/13465/3
authorDave Barach <dave@barachs.net>
Fri, 13 Jul 2018 13:59:45 +0000 (09:59 -0400)
committerFlorin Coras <florin.coras@gmail.com>
Fri, 13 Jul 2018 17:58:59 +0000 (17:58 +0000)
Add "show version cmdline" to display the command line
Add doxygen tags to the source code

Change-Id: I0205b373062fd88f176d9c8086d89d7784a5172f
Signed-off-by: Dave Barach <dave@barachs.net>
src/vpp/app/version.c

index d99f875..58ac9ba 100644 (file)
 #include <vppinfra/cpu.h>
 #include <vpp/app/version.h>
 
-/* N.B. Variable is not static to ensure it's visible in core dumps, i.e.,
- * it doesn't go to rodata segment */
+/** \file
+    Display image version information
+*/
+
+/*? %%clicmd:group_label Image Version Information %% ?*/
+
+/*
+ * Version variables are static to ensure that they're visible in core
+ * dumps, i.e., not in the rodata segment
+ */
+
+/** The image version string */
 char *vpe_version_string =
   "vpp v" VPP_BUILD_VER
   " built by " VPP_BUILD_USER " on " VPP_BUILD_HOST " at " VPP_BUILD_DATE;
 
+/** The name of the compiler */
 static char *vpe_compiler =
 #if defined(__INTEL_COMPILER)
 #define __(x) #x
@@ -37,12 +48,30 @@ static char *vpe_compiler =
   "unknown compiler";
 #endif
 
+/** \brief Display image version info, a debug CLI command function
+ */
 static clib_error_t *
 show_vpe_version_command_fn (vlib_main_t * vm,
                             unformat_input_t * input,
                             vlib_cli_command_t * cmd)
 {
-  if (unformat (input, "verbose"))
+  int i;
+  int verbose = 0;
+  int cmdline = 0;
+  int indent = 2;
+  char **argv = (char **) vm->argv;
+
+  while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
+    {
+      if (unformat (input, "verbose %=", &verbose, 1))
+       ;
+      else if (unformat (input, "cmdline %=", &cmdline, 1))
+       ;
+      else
+       break;
+    }
+
+  if (verbose)
     {
 #define _(a,b,c) vlib_cli_output (vm, "%-25s " b, a ":", c);
       _("Version", "%s", "v" VPP_BUILD_VER);
@@ -54,31 +83,79 @@ show_vpe_version_command_fn (vlib_main_t * vm,
       _("Current PID", "%d", getpid ());
 #undef _
     }
-  else
+  if (cmdline)
+    {
+      vlib_cli_output (vm, "%-25s", "Command line arguments:");
+
+      for (i = 0; argv[i]; i++)
+       {
+         if (strstr (argv[i], "{"))
+           indent += 2;
+         vlib_cli_output (vm, "%U%s", format_white_space, indent, argv[i]);
+         if (strstr (argv[i], "}"))
+           indent -= 2;
+       }
+    }
+  if ((verbose + cmdline) == 0)
     vlib_cli_output (vm, "%s", vpe_version_string);
   return 0;
 }
 
+/*?
+ * This commmand displays image version and command line arguments
+ *
+ * @cliexpar
+ * How to display the image version string:
+ * @cliexstart{show version}
+ * vpp v18.07-rc0~509-gb9124828 built by vppuser on vppbuild at date
+ * @cliexend
+ *
+ * @cliexpar
+ * How to display verbose image version information:
+ * @cliexstart{show version verbose}
+ * Version:                  v18.07-rc0~509-gb9124828
+ * Compiled by:              vppuser
+ * Compile host:             vppbuild
+ * Compile date:             Fri Jul 13 09:05:37 EDT 2018
+ * Compile location:         /scratch/vpp-showversion
+ * Compiler:                 GCC 7.3.0
+ * Current PID:              5334
+ * @cliexend
+ *
+ * @cliexpar
+ * How to display the vpp command line arguments:
+ * @cliexstart{show version cmdline}
+ * vpp# show version cmdline
+ * Command line arguments:
+ *   /scratch/vpp-showversion/build-root/install-vpp_debug-native/vpp/bin/vpp
+ *   unix
+ *   interactive
+ * @cliexend
+?*/
+
 /* *INDENT-OFF* */
 VLIB_CLI_COMMAND (show_vpe_version_command, static) = {
   .path = "show version",
-  .short_help = "show version information",
+  .short_help = "show version [verbose] [cmdline]",
   .function = show_vpe_version_command_fn,
 };
 /* *INDENT-ON* */
 
+/** Return the image build directory name */
 char *
 vpe_api_get_build_directory (void)
 {
   return VPP_BUILD_TOPDIR;
 }
 
+/** Return the image version string */
 char *
 vpe_api_get_version (void)
 {
   return VPP_BUILD_VER;
 }
 
+/** return the build date */
 char *
 vpe_api_get_build_date (void)
 {