replicate trace fix
[vpp.git] / src / vnet / dpo / replicate_dpo.c
index ae045f6..6742bff 100644 (file)
@@ -59,7 +59,12 @@ replicate_t *replicate_pool;
 /**
  * The one instance of replicate main
  */
-replicate_main_t replicate_main;
+replicate_main_t replicate_main = {
+    .repm_counters = {
+        .name = "mroutes",
+        .stat_segment_name = "/net/mroute",
+    },
+};
 
 static inline index_t
 replicate_get_index (const replicate_t *rep)
@@ -667,7 +672,8 @@ replicate_inline (vlib_main_t * vm,
 
            vec_validate (rm->clones[thread_index], rep0->rep_n_buckets - 1);
 
-           num_cloned = vlib_buffer_clone (vm, bi0, rm->clones[thread_index], rep0->rep_n_buckets, 128);
+           num_cloned = vlib_buffer_clone (vm, bi0, rm->clones[thread_index],
+                                            rep0->rep_n_buckets, 128);
 
            if (num_cloned != rep0->rep_n_buckets)
              {
@@ -689,11 +695,15 @@ replicate_inline (vlib_main_t * vm,
                 next0 = dpo0->dpoi_next_node;
                 vnet_buffer (c0)->ip.adj_index[VLIB_TX] = dpo0->dpoi_index;
 
-                if (PREDICT_FALSE(c0->flags & VLIB_BUFFER_IS_TRACED))
+                if (PREDICT_FALSE(b0->flags & VLIB_BUFFER_IS_TRACED))
                 {
                     replicate_trace_t *t;
 
-                    vlib_trace_buffer (vm, node, next0, c0, 0);
+                    if (c0 != b0)
+                    {
+                        vlib_buffer_copy_trace_flag (vm, b0, ci0);
+                        VLIB_BUFFER_TRACE_TRAJECTORY_INIT (c0);
+                    }
                     t = vlib_add_trace (vm, node, c0, sizeof (*t));
                     t->rep_index = repi0;
                     t->dpo = *dpo0;