vlib: introduce vlib_get_elog_main()
[vpp.git] / src / vlib / cli.c
index c6f71a5..3215a32 100644 (file)
@@ -304,7 +304,7 @@ vlib_cli_get_possible_completions (u8 * str)
    * autocomplete the next level of subcommands */
   help_next_level = (vec_len (str) == 0) || isspace (str[vec_len (str) - 1]);
   /* *INDENT-OFF* */
-  clib_bitmap_foreach(index, match_bitmap, {
+  clib_bitmap_foreach (index, match_bitmap) {
     if (help_next_level && is_unique) {
        c = get_sub_command (vcm, c, index);
        vec_foreach (sc, c->sub_commands) {
@@ -314,7 +314,7 @@ vlib_cli_get_possible_completions (u8 * str)
     }
     sc = &c->sub_commands[index];
     vec_add1(result, (u8*) sc->name);
-  });
+  }
   /* *INDENT-ON* */
 
 done:
@@ -472,6 +472,23 @@ vlib_cli_dispatch_sub_commands (vlib_main_t * vm,
       vec_free (string);
     }
 
+  else if (unformat (input, "vpplog %v", &string))
+    {
+      int i;
+      /*
+       * Delete leading whitespace, so "vpplog { this and that }"
+       * and "vpplog this" line up nicely.
+       */
+      for (i = 0; i < vec_len (string); i++)
+       if (string[i] != ' ')
+         break;
+      if (i > 0)
+       vec_delete (string, i, 0);
+
+      vlib_log_notice (cm->log, "CLI: %v", string);
+      vec_free (string);
+    }
+
   else if (unformat (input, "uncomment %U",
                     unformat_vlib_cli_sub_input, &sub_input))
     {
@@ -558,8 +575,8 @@ vlib_cli_dispatch_sub_commands (vlib_main_t * vm,
                  {
                    u32 c;
                  } *ed;
-                 ed = ELOG_DATA (&vm->elog_main, e);
-                 ed->c = elog_string (&vm->elog_main, "%v", c->path);
+                 ed = ELOG_DATA (vlib_get_elog_main (), e);
+                 ed->c = elog_string (vlib_get_elog_main (), "%v", c->path);
                }
 
              if (!c->is_mp_safe)
@@ -590,17 +607,17 @@ vlib_cli_dispatch_sub_commands (vlib_main_t * vm,
                  {
                    u32 c, err;
                  } *ed;
-                 ed = ELOG_DATA (&vm->elog_main, e);
-                 ed->c = elog_string (&vm->elog_main, "%v", c->path);
+                 ed = ELOG_DATA (vlib_get_elog_main (), e);
+                 ed->c = elog_string (vlib_get_elog_main (), "%v", c->path);
                  if (c_error)
                    {
                      vec_add1 (c_error->what, 0);
-                     ed->err =
-                       elog_string (&vm->elog_main, (char *) c_error->what);
+                     ed->err = elog_string (vlib_get_elog_main (),
+                                            (char *) c_error->what);
                      _vec_len (c_error->what) -= 1;
                    }
                  else
-                   ed->err = elog_string (&vm->elog_main, "OK");
+                   ed->err = elog_string (vlib_get_elog_main (), "OK");
                }
 
              if (c_error)
@@ -1077,11 +1094,11 @@ restart_cmd_fn (vlib_main_t * vm, unformat_input_t * input,
 
   /* Close all known open files */
   /* *INDENT-OFF* */
-  pool_foreach(f, fm->file_pool,
-    ({
+  pool_foreach (f, fm->file_pool)
+     {
       if (f->file_descriptor > 2)
         close(f->file_descriptor);
-    }));
+    }
   /* *INDENT-ON* */
 
   /* Exec ourself */
@@ -1530,7 +1547,7 @@ event_logger_trace_command_fn (vlib_main_t * vm,
    */
   if (dispatch || circuit)
     {
-      elog_main_t *em = &vm->elog_main;
+      elog_main_t *em = &vlib_global_main.elog_main;
 
       em->n_total_events_disable_limit =
        em->n_total_events + vec_len (em->event_ring);
@@ -1817,6 +1834,9 @@ vlib_cli_init (vlib_main_t * vm)
        return error;
       cmd = cmd->next_cli_command;
     }
+
+  cm->log = vlib_log_register_class_rate_limit (
+    "cli", "log", 0x7FFFFFFF /* aka no rate limit */);
   return error;
 }