ip: reassembly: don't set error if no error 47/26247/3
authorKlement Sekera <ksekera@cisco.com>
Mon, 30 Mar 2020 14:59:38 +0000 (16:59 +0200)
committerOle Trøan <otroan@employees.org>
Mon, 6 Apr 2020 08:59:20 +0000 (08:59 +0000)
Type: fix

Signed-off-by: Klement Sekera <ksekera@cisco.com>
Change-Id: I9d25129fbf1ea880121b281f41750155286fb489

src/vnet/ip/reass/ip4_full_reass.c
src/vnet/ip/reass/ip4_sv_reass.c
src/vnet/ip/reass/ip6_full_reass.c
src/vnet/ip/reass/ip6_sv_reass.c

index b1d8a56..94136ff 100644 (file)
@@ -1233,7 +1233,10 @@ ip4_full_reass_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
 
              /* bi0 might have been updated by reass_finalize, reload */
              b0 = vlib_get_buffer (vm, bi0);
-             b0->error = node->errors[error0];
+             if (IP4_ERROR_NONE != error0)
+               {
+                 b0->error = node->errors[error0];
+               }
 
              if (next0 == IP4_FULL_REASS_NEXT_HANDOFF)
                {
index 29877cf..9b6116c 100644 (file)
@@ -504,6 +504,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;
@@ -532,6 +533,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;
            }
 
@@ -556,7 +558,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,
@@ -644,8 +645,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;
index 7d6a31e..ff3475a 100644 (file)
@@ -1208,7 +1208,10 @@ ip6_full_reassembly_inline (vlib_main_t * vm,
 
              /* bi0 might have been updated by reass_finalize, reload */
              b0 = vlib_get_buffer (vm, bi0);
-             b0->error = node->errors[error0];
+             if (IP6_ERROR_NONE != error0)
+               {
+                 b0->error = node->errors[error0];
+               }
 
              if (next0 == IP6_FULL_REASSEMBLY_NEXT_HANDOFF)
                {
index b928bb0..e026597 100644 (file)
@@ -556,6 +556,7 @@ ip6_sv_reassembly_inline (vlib_main_t * vm,
                   &(vnet_buffer (b0)->ip.reass.tcp_seq_number)))
                {
                  error0 = IP6_ERROR_REASS_UNSUPP_IP_PROTO;
+                 b0->error = node->errors[error0];
                  next0 = IP6_SV_REASSEMBLY_NEXT_DROP;
                  goto packet_enqueue;
                }
@@ -623,6 +624,7 @@ ip6_sv_reassembly_inline (vlib_main_t * vm,
            {
              next0 = IP6_SV_REASSEMBLY_NEXT_DROP;
              error0 = IP6_ERROR_REASS_LIMIT_REACHED;
+             b0->error = node->errors[error0];
              goto packet_enqueue;
            }
 
@@ -640,7 +642,6 @@ ip6_sv_reassembly_inline (vlib_main_t * vm,
              vnet_buffer (b0)->ip.reass.l4_src_port = reass->l4_src_port;
              vnet_buffer (b0)->ip.reass.l4_dst_port = reass->l4_dst_port;
              next0 = IP6_SV_REASSEMBLY_NEXT_INPUT;
-             error0 = IP6_ERROR_NONE;
              if (PREDICT_FALSE (b0->flags & VLIB_BUFFER_IS_TRACED))
                {
                  ip6_sv_reass_add_trace (vm, node, rm, reass, bi0,
@@ -680,8 +681,6 @@ ip6_sv_reassembly_inline (vlib_main_t * vm,
              break;
            }
 
-         b0->error = node->errors[error0];
-
          if (reass->is_complete)
            {
              u32 idx;