fib: fib api updates
[vpp.git] / src / vnet / dpo / mpls_disposition.c
index 66f74f9..7bc2cb6 100644 (file)
@@ -18,6 +18,7 @@
 #include <vnet/dpo/mpls_disposition.h>
 #include <vnet/mpls/mpls.h>
 
+#ifndef CLIB_MARCH_VARIANT
 /*
  * pool of all MPLS Label DPOs
  */
@@ -29,7 +30,7 @@ mpls_disp_dpo_alloc (void)
     mpls_disp_dpo_t *mdd;
 
     pool_get_aligned(mpls_disp_dpo_pool, mdd, CLIB_CACHE_LINE_BYTES);
-    memset(mdd, 0, sizeof(*mdd));
+    clib_memset(mdd, 0, sizeof(*mdd));
 
     dpo_reset(&mdd->mdd_dpo);
 
@@ -87,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);
 
@@ -123,6 +128,7 @@ mpls_disp_dpo_unlock (dpo_id_t *dpo)
        pool_put(mpls_disp_dpo_pool, mdd);
     }
 }
+#endif /* CLIB_MARCH_VARIANT */
 
 /**
  * @brief A struct to hold tracing information for the MPLS label disposition
@@ -130,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;
@@ -291,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,
@@ -381,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,
@@ -401,12 +415,15 @@ 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);
 }
 
-static uword
-ip4_mpls_label_disposition_pipe (vlib_main_t * vm,
+VLIB_NODE_FN (ip4_mpls_label_disposition_pipe_node) (vlib_main_t * vm,
                                  vlib_node_runtime_t * node,
                                  vlib_frame_t * frame)
 {
@@ -415,7 +432,6 @@ ip4_mpls_label_disposition_pipe (vlib_main_t * vm,
 }
 
 VLIB_REGISTER_NODE(ip4_mpls_label_disposition_pipe_node) = {
-    .function = ip4_mpls_label_disposition_pipe,
     .name = "ip4-mpls-label-disposition-pipe",
     .vector_size = sizeof(u32),
 
@@ -424,11 +440,8 @@ VLIB_REGISTER_NODE(ip4_mpls_label_disposition_pipe_node) = {
     .n_errors = IP4_N_ERROR,
     .error_strings = ip4_error_strings,
 };
-VLIB_NODE_FUNCTION_MULTIARCH(ip4_mpls_label_disposition_pipe_node,
-                              ip4_mpls_label_disposition_pipe)
 
-static uword
-ip6_mpls_label_disposition_pipe (vlib_main_t * vm,
+VLIB_NODE_FN (ip6_mpls_label_disposition_pipe_node) (vlib_main_t * vm,
                                  vlib_node_runtime_t * node,
                                  vlib_frame_t * frame)
 {
@@ -437,7 +450,6 @@ ip6_mpls_label_disposition_pipe (vlib_main_t * vm,
 }
 
 VLIB_REGISTER_NODE(ip6_mpls_label_disposition_pipe_node) = {
-    .function = ip6_mpls_label_disposition_pipe,
     .name = "ip6-mpls-label-disposition-pipe",
     .vector_size = sizeof(u32),
 
@@ -446,11 +458,8 @@ VLIB_REGISTER_NODE(ip6_mpls_label_disposition_pipe_node) = {
     .n_errors = IP6_N_ERROR,
     .error_strings = ip6_error_strings,
 };
-VLIB_NODE_FUNCTION_MULTIARCH(ip6_mpls_label_disposition_pipe_node,
-                             ip6_mpls_label_disposition_pipe)
 
-static uword
-ip4_mpls_label_disposition_uniform (vlib_main_t * vm,
+VLIB_NODE_FN (ip4_mpls_label_disposition_uniform_node) (vlib_main_t * vm,
                                  vlib_node_runtime_t * node,
                                  vlib_frame_t * frame)
 {
@@ -459,7 +468,6 @@ ip4_mpls_label_disposition_uniform (vlib_main_t * vm,
 }
 
 VLIB_REGISTER_NODE(ip4_mpls_label_disposition_uniform_node) = {
-    .function = ip4_mpls_label_disposition_uniform,
     .name = "ip4-mpls-label-disposition-uniform",
     .vector_size = sizeof(u32),
 
@@ -468,11 +476,8 @@ VLIB_REGISTER_NODE(ip4_mpls_label_disposition_uniform_node) = {
     .n_errors = IP4_N_ERROR,
     .error_strings = ip4_error_strings,
 };
-VLIB_NODE_FUNCTION_MULTIARCH(ip4_mpls_label_disposition_uniform_node,
-                             ip4_mpls_label_disposition_uniform)
 
-static uword
-ip6_mpls_label_disposition_uniform (vlib_main_t * vm,
+VLIB_NODE_FN (ip6_mpls_label_disposition_uniform_node) (vlib_main_t * vm,
                                     vlib_node_runtime_t * node,
                                     vlib_frame_t * frame)
 {
@@ -481,7 +486,6 @@ ip6_mpls_label_disposition_uniform (vlib_main_t * vm,
 }
 
 VLIB_REGISTER_NODE(ip6_mpls_label_disposition_uniform_node) = {
-    .function = ip6_mpls_label_disposition_uniform,
     .name = "ip6-mpls-label-disposition-uniform",
     .vector_size = sizeof(u32),
 
@@ -490,9 +494,8 @@ VLIB_REGISTER_NODE(ip6_mpls_label_disposition_uniform_node) = {
     .n_errors = IP6_N_ERROR,
     .error_strings = ip6_error_strings,
 };
-VLIB_NODE_FUNCTION_MULTIARCH(ip6_mpls_label_disposition_uniform_node,
-                             ip6_mpls_label_disposition_uniform)
 
+#ifndef CLIB_MARCH_VARIANT
 static void
 mpls_disp_dpo_mem_show (void)
 {
@@ -550,3 +553,4 @@ mpls_disp_dpo_module_init(void)
     dpo_register(DPO_MPLS_DISPOSITION_UNIFORM, &mdd_vft,
                  mpls_label_disp_uniform_nodes);
 }
+#endif /* CLIB_MARCH_VARIANT */