IPv6 Classify Forwarding Graph errors
[vpp.git] / vnet / vnet / mpls / mpls_output.c
index 932fcb8..739e85d 100644 (file)
@@ -17,6 +17,7 @@
 
 #include <vlib/vlib.h>
 #include <vnet/pg/pg.h>
+#include <vnet/ip/ip.h>
 #include <vnet/mpls/mpls.h>
 
 typedef struct {
@@ -39,7 +40,7 @@ format_mpls_output_trace (u8 * s, va_list * args)
 
   s = format (s, "adj-idx %d : %U flow hash: 0x%08x",
               t->adj_index,
-              format_ip_adjacency, vnm, t->adj_index, FORMAT_IP_ADJACENCY_NONE,
+              format_ip_adjacency, t->adj_index, FORMAT_IP_ADJACENCY_NONE,
              t->flow_hash);
   s = format (s, "\n%U%U",
               format_white_space, indent,
@@ -52,7 +53,8 @@ format_mpls_output_trace (u8 * s, va_list * args)
 static inline uword
 mpls_output_inline (vlib_main_t * vm,
                     vlib_node_runtime_t * node,
-                    vlib_frame_t * from_frame)
+                    vlib_frame_t * from_frame,
+                   int is_midchain)
 {
   u32 n_left_from, next_index, * from, * to_next, cpu_index;
   vlib_node_runtime_t * error_node;
@@ -121,6 +123,11 @@ mpls_output_inline (vlib_main_t * vm,
               vnet_buffer (p0)->sw_if_index[VLIB_TX] =
                   adj0[0].rewrite_header.sw_if_index;
               next0 = adj0[0].rewrite_header.next_index;
+
+             if (is_midchain)
+               {
+                 adj0->sub_type.midchain.fixup_func(vm, adj0, p0);
+               }
             }
           else
             {
@@ -165,7 +172,7 @@ mpls_output (vlib_main_t * vm,
              vlib_node_runtime_t * node,
              vlib_frame_t * from_frame)
 {
-    return (mpls_output_inline(vm, node, from_frame));
+    return (mpls_output_inline(vm, node, from_frame, /* is_midchain */ 0));
 }
 
 VLIB_REGISTER_NODE (mpls_output_node) = {
@@ -193,11 +200,11 @@ mpls_midchain (vlib_main_t * vm,
                vlib_node_runtime_t * node,
                vlib_frame_t * from_frame)
 {
-    return (mpls_output_inline(vm, node, from_frame));
+    return (mpls_output_inline(vm, node, from_frame, /* is_midchain */ 1));
 }
 
 VLIB_REGISTER_NODE (mpls_midchain_node) = {
-  .function = mpls_output,
+  .function = mpls_midchain,
   .name = "mpls-midchain",
   .vector_size = sizeof (u32),