diff options
Diffstat (limited to 'src/vnet/ip/ip4_forward.c')
-rw-r--r-- | src/vnet/ip/ip4_forward.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/vnet/ip/ip4_forward.c b/src/vnet/ip/ip4_forward.c index ec4eda4e96a..981dfe3c91f 100644 --- a/src/vnet/ip/ip4_forward.c +++ b/src/vnet/ip/ip4_forward.c @@ -2297,8 +2297,6 @@ 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 */ if (PREDICT_TRUE (error0 == IP4_ERROR_NONE)) @@ -2315,6 +2313,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,6 +2332,10 @@ 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]; + } /* Guess we are only writing on simple Ethernet header. */ vnet_rewrite_two_headers (adj0[0], adj1[0], @@ -2420,7 +2426,6 @@ 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 */ @@ -2438,6 +2443,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]; + } /* Guess we are only writing on simple Ethernet header. */ vnet_rewrite_one_header (adj0[0], ip0, sizeof (ethernet_header_t)); |