tcp: cleanup timers
[vpp.git] / src / vnet / ip / ip6_reassembly.c
index 10fc6f1..20bb772 100644 (file)
@@ -280,12 +280,6 @@ ip6_reass_add_trace (vlib_main_t * vm, vlib_node_runtime_t * node,
 {
   vlib_buffer_t *b = vlib_get_buffer (vm, bi);
   vnet_buffer_opaque_t *vnb = vnet_buffer (b);
-  if (pool_is_free_index (vm->trace_main.trace_buffer_pool, b->trace_index))
-    {
-      // this buffer's trace is gone
-      b->flags &= ~VLIB_BUFFER_IS_TRACED;
-      return;
-    }
   ip6_reass_trace_t *t = vlib_add_trace (vm, node, b, sizeof (t[0]));
   t->reass_id = reass->id;
   t->action = action;
@@ -1187,7 +1181,8 @@ VLIB_REGISTER_NODE (ip6_reass_node_feature) = {
 VNET_FEATURE_INIT (ip6_reassembly_feature, static) = {
     .arc_name = "ip6-unicast",
     .node_name = "ip6-reassembly-feature",
-    .runs_before = VNET_FEATURES ("ip6-lookup"),
+    .runs_before = VNET_FEATURES ("ip6-lookup",
+                                  "ipsec6-input-feature"),
     .runs_after = 0,
 };
 /* *INDENT-ON* */
@@ -1276,6 +1271,7 @@ ip6_reass_set (u32 timeout_ms, u32 max_reassemblies,
          clib_bihash_free_48_8 (&ip6_reass_main.hash);
          clib_memcpy_fast (&ip6_reass_main.hash, &new_hash,
                            sizeof (ip6_reass_main.hash));
+         clib_bihash_copied (&ip6_reass_main.hash, &new_hash);
        }
     }
   return 0;
@@ -1399,21 +1395,10 @@ ip6_reass_walk_expired (vlib_main_t * vm,
           {
             ip6_reass_t *reass = pool_elt_at_index (rt->pool, i[0]);
             u32 icmp_bi = ~0;
-            vlib_buffer_t *b = vlib_get_buffer (vm, reass->first_bi);
-            if (PREDICT_FALSE (b->flags & VLIB_BUFFER_IS_TRACED))
-              {
-                if (pool_is_free_index (vm->trace_main.trace_buffer_pool,
-                                        b->trace_index))
-                  {
-                    /* the trace is gone, don't trace this buffer anymore */
-                    b->flags &= ~VLIB_BUFFER_IS_TRACED;
-                  }
-              }
             ip6_reass_on_timeout (vm, node, rm, reass, &icmp_bi);
             if (~0 != icmp_bi)
-              {
-                vec_add1 (vec_icmp_bi, icmp_bi);
-              }
+              vec_add1 (vec_icmp_bi, icmp_bi);
+
             ip6_reass_free (rm, rt, reass);
           }
           /* *INDENT-ON* */
@@ -1433,18 +1418,7 @@ ip6_reass_walk_expired (vlib_main_t * vm,
              u32 bi = vec_pop (vec_icmp_bi);
              vlib_buffer_t *b = vlib_get_buffer (vm, bi);
              if (PREDICT_FALSE (b->flags & VLIB_BUFFER_IS_TRACED))
-               {
-                 if (pool_is_free_index (vm->trace_main.trace_buffer_pool,
-                                         b->trace_index))
-                   {
-                     /* the trace is gone, don't trace this buffer anymore */
-                     b->flags &= ~VLIB_BUFFER_IS_TRACED;
-                   }
-                 else
-                   {
-                     trace_frame = 1;
-                   }
-               }
+               trace_frame = 1;
              b->error = node->errors[IP6_ERROR_REASS_TIMEOUT];
              to_next[0] = bi;
              ++f->n_vectors;