tcp: fix error counters
[vpp.git] / src / vnet / tcp / tcp_output.c
index 95480af..5172fca 100644 (file)
@@ -2191,6 +2191,7 @@ tcp46_output_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
   u32 n_left_from, *from, thread_index = vm->thread_index;
   vlib_buffer_t *bufs[VLIB_FRAME_SIZE], **b;
   u16 nexts[VLIB_FRAME_SIZE], *next;
+  u16 err_counters[TCP_N_ERROR] = { 0 };
 
   from = vlib_frame_vector_args (frame);
   n_left_from = frame->n_vectors;
@@ -2241,7 +2242,8 @@ tcp46_output_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
            }
          else
            {
-             b[0]->error = node->errors[TCP_ERROR_INVALID_CONNECTION];
+             tcp_inc_err_counter (err_counters, TCP_ERROR_INVALID_CONNECTION,
+                                  1);
              next[0] = TCP_OUTPUT_NEXT_DROP;
            }
          if (tc1 != 0)
@@ -2252,7 +2254,8 @@ tcp46_output_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
            }
          else
            {
-             b[1]->error = node->errors[TCP_ERROR_INVALID_CONNECTION];
+             tcp_inc_err_counter (err_counters, TCP_ERROR_INVALID_CONNECTION,
+                                  1);
              next[1] = TCP_OUTPUT_NEXT_DROP;
            }
        }
@@ -2282,7 +2285,7 @@ tcp46_output_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
        }
       else
        {
-         b[0]->error = node->errors[TCP_ERROR_INVALID_CONNECTION];
+         tcp_inc_err_counter (err_counters, TCP_ERROR_INVALID_CONNECTION, 1);
          next[0] = TCP_OUTPUT_NEXT_DROP;
        }
 
@@ -2291,6 +2294,7 @@ tcp46_output_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
       n_left_from -= 1;
     }
 
+  tcp_store_err_counters (output, err_counters);
   vlib_buffer_enqueue_to_next (vm, node, from, nexts, frame->n_vectors);
   vlib_node_increment_counter (vm, tcp_node_index (output, is_ip4),
                               TCP_ERROR_PKTS_SENT, frame->n_vectors);