ip: use thread local vm instead of thread main for vlib_time_now calls
[vpp.git] / src / vnet / ip / reass / ip4_sv_reass.c
index b94e9b2..bc7da30 100644 (file)
@@ -305,10 +305,9 @@ ip4_sv_reass_find_or_create (vlib_main_t * vm, ip4_sv_reass_main_t * rm,
                             ip4_sv_reass_kv_t * kv, u8 * do_handoff)
 {
   ip4_sv_reass_t *reass = NULL;
-  f64 now = vlib_time_now (rm->vlib_main);
+  f64 now = vlib_time_now (vm);
 
-  if (!clib_bihash_search_16_8
-      (&rm->hash, (clib_bihash_kv_16_8_t *) kv, (clib_bihash_kv_16_8_t *) kv))
+  if (!clib_bihash_search_16_8 (&rm->hash, &kv->kv, &kv->kv))
     {
       if (vm->thread_index != kv->v.thread_index)
        {
@@ -356,13 +355,13 @@ ip4_sv_reass_find_or_create (vlib_main_t * vm, ip4_sv_reass_main_t * rm,
       rt->lru_first = rt->lru_last = reass - rt->pool;
     }
 
-  reass->key.as_u64[0] = ((clib_bihash_kv_16_8_t *) kv)->key[0];
-  reass->key.as_u64[1] = ((clib_bihash_kv_16_8_t *) kv)->key[1];
+  reass->key.as_u64[0] = kv->kv.key[0];
+  reass->key.as_u64[1] = kv->kv.key[1];
   kv->v.reass_index = (reass - rt->pool);
   kv->v.thread_index = vm->thread_index;
   reass->last_heard = now;
 
-  if (clib_bihash_add_del_16_8 (&rm->hash, (clib_bihash_kv_16_8_t *) kv, 1))
+  if (clib_bihash_add_del_16_8 (&rm->hash, &kv->kv, 1))
     {
       ip4_sv_reass_free (vm, rm, rt, reass);
       reass = NULL;
@@ -466,8 +465,6 @@ ip4_sv_reass_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
                {
                  next0 = IP4_SV_REASSEMBLY_NEXT_INPUT;
                }
-             vnet_buffer (b0)->ip.reass.save_rewrite_length =
-               vnet_buffer (b0)->ip.save_rewrite_length;
              vnet_buffer (b0)->ip.reass.is_non_first_fragment = 0;
              vnet_buffer (b0)->ip.reass.ip_proto = ip0->protocol;
              if (IP_PROTOCOL_TCP == ip0->protocol)
@@ -506,6 +503,7 @@ ip4_sv_reass_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
            {
              next0 = IP4_SV_REASSEMBLY_NEXT_DROP;
              error0 = IP4_ERROR_REASS_MALFORMED_PACKET;
+             b0->error = node->errors[error0];
              goto packet_enqueue;
            }
          ip4_sv_reass_kv_t kv;
@@ -534,6 +532,7 @@ ip4_sv_reass_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
            {
              next0 = IP4_SV_REASSEMBLY_NEXT_DROP;
              error0 = IP4_ERROR_REASS_LIMIT_REACHED;
+             b0->error = node->errors[error0];
              goto packet_enqueue;
            }
 
@@ -547,8 +546,6 @@ ip4_sv_reass_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
                {
                  next0 = IP4_SV_REASSEMBLY_NEXT_INPUT;
                }
-             vnet_buffer (b0)->ip.reass.save_rewrite_length =
-               vnet_buffer (b0)->ip.save_rewrite_length;
              vnet_buffer (b0)->ip.reass.is_non_first_fragment =
                ! !fragment_first;
              vnet_buffer (b0)->ip.reass.ip_proto = reass->ip_proto;
@@ -560,7 +557,6 @@ ip4_sv_reass_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
                reass->tcp_seq_number;
              vnet_buffer (b0)->ip.reass.l4_src_port = reass->l4_src_port;
              vnet_buffer (b0)->ip.reass.l4_dst_port = reass->l4_dst_port;
-             error0 = IP4_ERROR_NONE;
              if (PREDICT_FALSE (b0->flags & VLIB_BUFFER_IS_TRACED))
                {
                  ip4_sv_reass_add_trace (vm, node, rm, reass, bi0,
@@ -620,9 +616,6 @@ ip4_sv_reass_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
                to_next[0] = bi0;
                to_next += 1;
                n_left_to_next -= 1;
-               ASSERT (vnet_buffer (b0)->ip.save_rewrite_length < (2 << 14));
-               vnet_buffer (b0)->ip.reass.save_rewrite_length =
-                 vnet_buffer (b0)->ip.save_rewrite_length;
                vnet_buffer (b0)->ip.reass.is_non_first_fragment =
                  ! !ip4_get_fragment_offset (vlib_buffer_get_current (b0));
                vnet_buffer (b0)->ip.reass.ip_proto = reass->ip_proto;
@@ -651,8 +644,6 @@ ip4_sv_reass_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
          goto next_packet;
 
        packet_enqueue:
-         b0->error = node->errors[error0];
-
          to_next[0] = bi0;
          to_next += 1;
          n_left_to_next -= 1;
@@ -1122,8 +1113,14 @@ show_ip4_reass (vlib_main_t * vm,
   vlib_cli_output (vm, "Current IP4 reassemblies count: %lu\n",
                   (long unsigned) sum_reass_n);
   vlib_cli_output (vm,
-                  "Maximum configured concurrent IP4 reassemblies per worker-thread: %lu\n",
+                  "Maximum configured concurrent shallow virtual IP4 reassemblies per worker-thread: %lu\n",
                   (long unsigned) rm->max_reass_n);
+  vlib_cli_output (vm,
+                  "Maximum configured shallow virtual IP4 reassembly timeout: %lums\n",
+                  (long unsigned) rm->timeout_ms);
+  vlib_cli_output (vm,
+                  "Maximum configured shallow virtual IP4 reassembly expire walk interval: %lums\n",
+                  (long unsigned) rm->expire_walk_interval_ms);
   return 0;
 }