fixing typos
[vpp.git] / src / vnet / ip / ip4_forward.c
index ec4eda4..4a2d413 100644 (file)
@@ -55,6 +55,7 @@
 #include <vnet/mfib/mfib_table.h>      /* for mFIB table and entry creation */
 
 #include <vnet/ip/ip4_forward.h>
+#include <vnet/interface_output.h>
 
 /** @brief IPv4 lookup node.
     @node ip4-lookup
@@ -2297,10 +2298,8 @@ ip4_rewrite_inline_with_gso (vlib_main_t * vm,
                    IP4_ERROR_SAME_INTERFACE : error1);
        }
 
-      b[0]->error = error_node->errors[error0];
-      b[1]->error = error_node->errors[error1];
       /* Don't adjust the buffer for ttl issue; icmp-error node wants
-       * to see the IP headerr */
+       * to see the IP header */
       if (PREDICT_TRUE (error0 == IP4_ERROR_NONE))
        {
          u32 next_index = adj0[0].rewrite_header.next_index;
@@ -2315,6 +2314,10 @@ ip4_rewrite_inline_with_gso (vlib_main_t * vm,
                                    tx_sw_if_index0, &next_index, b[0]);
          next[0] = next_index;
        }
+      else
+       {
+         b[0]->error = error_node->errors[error0];
+       }
       if (PREDICT_TRUE (error1 == IP4_ERROR_NONE))
        {
          u32 next_index = adj1[0].rewrite_header.next_index;
@@ -2330,7 +2333,15 @@ ip4_rewrite_inline_with_gso (vlib_main_t * vm,
                                    tx_sw_if_index1, &next_index, b[1]);
          next[1] = next_index;
        }
-
+      else
+       {
+         b[1]->error = error_node->errors[error1];
+       }
+      if (is_midchain)
+       {
+         calc_checksums (vm, b[0]);
+         calc_checksums (vm, b[1]);
+       }
       /* Guess we are only writing on simple Ethernet header. */
       vnet_rewrite_two_headers (adj0[0], adj1[0],
                                ip0, ip1, sizeof (ethernet_header_t));
@@ -2353,10 +2364,12 @@ ip4_rewrite_inline_with_gso (vlib_main_t * vm,
 
       if (is_midchain)
        {
-         adj0->sub_type.midchain.fixup_func
-           (vm, adj0, b[0], adj0->sub_type.midchain.fixup_data);
-         adj1->sub_type.midchain.fixup_func
-           (vm, adj1, b[1], adj1->sub_type.midchain.fixup_data);
+         if (adj0->sub_type.midchain.fixup_func)
+           adj0->sub_type.midchain.fixup_func
+             (vm, adj0, b[0], adj0->sub_type.midchain.fixup_data);
+         if (adj1->sub_type.midchain.fixup_func)
+           adj1->sub_type.midchain.fixup_func
+             (vm, adj1, b[1], adj1->sub_type.midchain.fixup_data);
        }
 
       if (is_mcast)
@@ -2420,10 +2433,9 @@ ip4_rewrite_inline_with_gso (vlib_main_t * vm,
                     vnet_buffer (b[0])->sw_if_index[VLIB_RX]) ?
                    IP4_ERROR_SAME_INTERFACE : error0);
        }
-      b[0]->error = error_node->errors[error0];
 
       /* Don't adjust the buffer for ttl issue; icmp-error node wants
-       * to see the IP headerr */
+       * to see the IP header */
       if (PREDICT_TRUE (error0 == IP4_ERROR_NONE))
        {
          u32 next_index = adj0[0].rewrite_header.next_index;
@@ -2438,7 +2450,14 @@ ip4_rewrite_inline_with_gso (vlib_main_t * vm,
                                    tx_sw_if_index0, &next_index, b[0]);
          next[0] = next_index;
        }
-
+      else
+       {
+         b[0]->error = error_node->errors[error0];
+       }
+      if (is_midchain)
+       {
+         calc_checksums (vm, b[0]);
+       }
       /* Guess we are only writing on simple Ethernet header. */
       vnet_rewrite_one_header (adj0[0], ip0, sizeof (ethernet_header_t));
 
@@ -2450,8 +2469,9 @@ ip4_rewrite_inline_with_gso (vlib_main_t * vm,
 
       if (is_midchain)
        {
-         adj0->sub_type.midchain.fixup_func
-           (vm, adj0, b[0], adj0->sub_type.midchain.fixup_data);
+         if (adj0->sub_type.midchain.fixup_func)
+           adj0->sub_type.midchain.fixup_func
+             (vm, adj0, b[0], adj0->sub_type.midchain.fixup_data);
        }
 
       if (is_mcast)