session: add session stats
[vpp.git] / src / vnet / dpo / mpls_disposition.c
index cf0b5fc..2f99672 100644 (file)
@@ -88,8 +88,12 @@ format_mpls_disp_dpo (u8 *s, va_list *args)
 
     mdd = mpls_disp_dpo_get(index);
 
-    s = format(s, "mpls-disposition:[%d]:[%U, %U]",
-               index,
+    s = format(s, "mpls-disposition:[%d]:[", index);
+
+    if (0 != mdd->mdd_rpf_id)
+        s = format(s, "rpf-id:%d ", mdd->mdd_rpf_id);
+
+    s = format(s, "%U, %U]",
                format_dpo_proto, mdd->mdd_payload_proto,
                format_fib_mpls_lsp_mode, mdd->mdd_mode);
 
@@ -132,7 +136,9 @@ mpls_disp_dpo_unlock (dpo_id_t *dpo)
  */
 typedef struct mpls_label_disposition_trace_t_
 {
-    index_t mdd;
+    dpo_proto_t mddt_payload_proto;
+    fib_rpf_id_t mddt_rpf_id;
+    fib_mpls_lsp_mode_t mddt_mode;
 } mpls_label_disposition_trace_t;
 
 extern vlib_node_registration_t ip4_mpls_label_disposition_pipe_node;
@@ -293,13 +299,17 @@ mpls_label_disposition_inline (vlib_main_t * vm,
                 mpls_label_disposition_trace_t *tr =
                     vlib_add_trace(vm, node, b0, sizeof(*tr));
 
-                tr->mdd = mddi0;
+                tr->mddt_payload_proto = mdd0->mdd_payload_proto;
+                tr->mddt_rpf_id = mdd0->mdd_rpf_id;
+                tr->mddt_mode = mdd0->mdd_mode;
             }
             if (PREDICT_FALSE(b1->flags & VLIB_BUFFER_IS_TRACED))
             {
                 mpls_label_disposition_trace_t *tr =
                     vlib_add_trace(vm, node, b1, sizeof(*tr));
-                tr->mdd = mddi1;
+                tr->mddt_payload_proto = mdd1->mdd_payload_proto;
+                tr->mddt_rpf_id = mdd1->mdd_rpf_id;
+                tr->mddt_mode = mdd1->mdd_mode;
             }
 
             vlib_validate_buffer_enqueue_x2(vm, node, next_index, to_next,
@@ -383,7 +393,9 @@ mpls_label_disposition_inline (vlib_main_t * vm,
             {
                 mpls_label_disposition_trace_t *tr =
                     vlib_add_trace(vm, node, b0, sizeof(*tr));
-                tr->mdd = mddi0;
+                tr->mddt_payload_proto = mdd0->mdd_payload_proto;
+                tr->mddt_rpf_id = mdd0->mdd_rpf_id;
+                tr->mddt_mode = mdd0->mdd_mode;
             }
 
             vlib_validate_buffer_enqueue_x1(vm, node, next_index, to_next,
@@ -403,7 +415,11 @@ format_mpls_label_disposition_trace (u8 * s, va_list * args)
 
     t = va_arg(*args, mpls_label_disposition_trace_t *);
 
-    s = format(s, "disp:%d", t->mdd);
+    s = format(s, "rpf-id:%d %U, %U",
+               t->mddt_rpf_id,
+               format_dpo_proto, t->mddt_payload_proto,
+               format_fib_mpls_lsp_mode, t->mddt_mode);
+
     return (s);
 }
 
@@ -415,14 +431,14 @@ VLIB_NODE_FN (ip4_mpls_label_disposition_pipe_node) (vlib_main_t * vm,
                                           FIB_MPLS_LSP_MODE_PIPE));
 }
 
-VLIB_REGISTER_NODE(ip4_mpls_label_disposition_pipe_node) = {
-    .name = "ip4-mpls-label-disposition-pipe",
-    .vector_size = sizeof(u32),
+VLIB_REGISTER_NODE (ip4_mpls_label_disposition_pipe_node) = {
+  .name = "ip4-mpls-label-disposition-pipe",
+  .vector_size = sizeof (u32),
 
-    .format_trace = format_mpls_label_disposition_trace,
-    .sibling_of = "ip4-input",
-    .n_errors = IP4_N_ERROR,
-    .error_strings = ip4_error_strings,
+  .format_trace = format_mpls_label_disposition_trace,
+  .sibling_of = "ip4-input",
+  .n_errors = IP4_N_ERROR,
+  .error_counters = ip4_error_counters,
 };
 
 VLIB_NODE_FN (ip6_mpls_label_disposition_pipe_node) (vlib_main_t * vm,
@@ -433,14 +449,14 @@ VLIB_NODE_FN (ip6_mpls_label_disposition_pipe_node) (vlib_main_t * vm,
                                           FIB_MPLS_LSP_MODE_PIPE));
 }
 
-VLIB_REGISTER_NODE(ip6_mpls_label_disposition_pipe_node) = {
-    .name = "ip6-mpls-label-disposition-pipe",
-    .vector_size = sizeof(u32),
+VLIB_REGISTER_NODE (ip6_mpls_label_disposition_pipe_node) = {
+  .name = "ip6-mpls-label-disposition-pipe",
+  .vector_size = sizeof (u32),
 
-    .format_trace = format_mpls_label_disposition_trace,
-    .sibling_of = "ip6-input",
-    .n_errors = IP6_N_ERROR,
-    .error_strings = ip6_error_strings,
+  .format_trace = format_mpls_label_disposition_trace,
+  .sibling_of = "ip6-input",
+  .n_errors = IP6_N_ERROR,
+  .error_counters = ip6_error_counters,
 };
 
 VLIB_NODE_FN (ip4_mpls_label_disposition_uniform_node) (vlib_main_t * vm,
@@ -451,14 +467,14 @@ VLIB_NODE_FN (ip4_mpls_label_disposition_uniform_node) (vlib_main_t * vm,
                                           FIB_MPLS_LSP_MODE_UNIFORM));
 }
 
-VLIB_REGISTER_NODE(ip4_mpls_label_disposition_uniform_node) = {
-    .name = "ip4-mpls-label-disposition-uniform",
-    .vector_size = sizeof(u32),
+VLIB_REGISTER_NODE (ip4_mpls_label_disposition_uniform_node) = {
+  .name = "ip4-mpls-label-disposition-uniform",
+  .vector_size = sizeof (u32),
 
-    .format_trace = format_mpls_label_disposition_trace,
-    .sibling_of = "ip4-input",
-    .n_errors = IP4_N_ERROR,
-    .error_strings = ip4_error_strings,
+  .format_trace = format_mpls_label_disposition_trace,
+  .sibling_of = "ip4-input",
+  .n_errors = IP4_N_ERROR,
+  .error_counters = ip4_error_counters,
 };
 
 VLIB_NODE_FN (ip6_mpls_label_disposition_uniform_node) (vlib_main_t * vm,
@@ -469,14 +485,14 @@ VLIB_NODE_FN (ip6_mpls_label_disposition_uniform_node) (vlib_main_t * vm,
                                           FIB_MPLS_LSP_MODE_UNIFORM));
 }
 
-VLIB_REGISTER_NODE(ip6_mpls_label_disposition_uniform_node) = {
-    .name = "ip6-mpls-label-disposition-uniform",
-    .vector_size = sizeof(u32),
+VLIB_REGISTER_NODE (ip6_mpls_label_disposition_uniform_node) = {
+  .name = "ip6-mpls-label-disposition-uniform",
+  .vector_size = sizeof (u32),
 
-    .format_trace = format_mpls_label_disposition_trace,
-    .sibling_of = "ip6-input",
-    .n_errors = IP6_N_ERROR,
-    .error_strings = ip6_error_strings,
+  .format_trace = format_mpls_label_disposition_trace,
+  .sibling_of = "ip6-input",
+  .n_errors = IP6_N_ERROR,
+  .error_counters = ip6_error_counters,
 };
 
 #ifndef CLIB_MARCH_VARIANT