CLI:add l2 input/outut to "sh int features"
[vpp.git] / src / vnet / l2 / l2_output.c
index b3537a3..500fc5d 100644 (file)
@@ -40,6 +40,29 @@ l2output_get_feat_names (void)
   return l2output_feat_names;
 }
 
+u8 *
+format_l2_output_features (u8 * s, va_list * args)
+{
+  static char *display_names[] = {
+#define _(sym,name) #sym,
+    foreach_l2output_feat
+#undef _
+  };
+  u32 feature_bitmap = va_arg (*args, u32);
+
+  if (feature_bitmap == 0)
+    {
+      s = format (s, "  none configured");
+      return s;
+    }
+
+  int i;
+  for (i = L2OUTPUT_N_FEAT - 1; i >= 0; i--)
+    if (feature_bitmap & (1 << i))
+      s = format (s, "%10s (%s)\n", display_names[i], l2output_feat_names[i]);
+  return s;
+}
+
 l2output_main_t l2output_main;
 
 typedef struct
@@ -195,8 +218,6 @@ l2output_vtr (vlib_node_runtime_t * node, l2_output_config_t * config,
 }
 
 
-static vlib_node_registration_t l2output_node;
-
 static_always_inline uword
 l2output_node_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
                      vlib_frame_t * frame, int do_trace)
@@ -477,7 +498,7 @@ l2output_node_fn (vlib_main_t * vm,
 }
 
 /* *INDENT-OFF* */
-VLIB_REGISTER_NODE (l2output_node,static) = {
+VLIB_REGISTER_NODE (l2output_node) = {
   .function = l2output_node_fn,
   .name = "l2-output",
   .vector_size = sizeof (u32),
@@ -495,6 +516,8 @@ VLIB_REGISTER_NODE (l2output_node,static) = {
         [L2OUTPUT_NEXT_BAD_INTF] = "l2-output-bad-intf",
   },
 };
+
+VLIB_NODE_FUNCTION_MULTIARCH (l2output_node, l2output_node_fn);
 /* *INDENT-ON* */
 
 
@@ -601,11 +624,12 @@ VLIB_REGISTER_NODE (l2output_bad_intf_node,static) = {
        [0] = "error-drop",
   },
 };
-/* *INDENT-ON* */
 
+VLIB_NODE_FUNCTION_MULTIARCH (l2output_bad_intf_node, l2output_bad_intf_node_fn);
+/* *INDENT-ON* */
 
-VLIB_NODE_FUNCTION_MULTIARCH (l2output_node, l2output_node_fn)
-     clib_error_t *l2output_init (vlib_main_t * vm)
+static clib_error_t *
+l2output_init (vlib_main_t * vm)
 {
   l2output_main_t *mp = &l2output_main;