Save rewrite length for post-rewrite rewind action 91/2491/3
authorDave Barach <dave@barachs.net>
Wed, 24 Aug 2016 22:36:03 +0000 (18:36 -0400)
committerDamjan Marion <dmarion.lists@gmail.com>
Thu, 25 Aug 2016 17:50:57 +0000 (17:50 +0000)
Change-Id: I5dd52714f8422c15bf78da19bcb63246f9d0103d
Signed-off-by: Dave Barach <dave@barachs.net>
vnet/vnet/buffer.h
vnet/vnet/ip/ip4_forward.c
vnet/vnet/ip/ip6_forward.c

index cab716c..7aaa6ee 100644 (file)
@@ -125,19 +125,10 @@ typedef struct
 
          /* next protocol */
          u32 save_protocol;
-       };
-
-       /* Alternate used for local TCP packets. */
-       struct
-       {
-         u32 listener_index;
 
-         u32 established_connection_index;
-
-         u32 mini_connection_index;
-
-         u32 transmit_stamp;
-       } tcp;
+         /* Rewrite length */
+         u32 save_rewrite_length;
+       };
 
        /* ICMP */
        struct
index dd9fce4..8113cd7 100644 (file)
@@ -2825,6 +2825,8 @@ ip4_rewrite_inline (vlib_main_t * vm,
           /* Worth pipelining. No guarantee that adj0,1 are hot... */
          rw_len0 = adj0[0].rewrite_header.data_bytes;
          rw_len1 = adj1[0].rewrite_header.data_bytes;
+          vnet_buffer(p0)->ip.save_rewrite_length = rw_len0;
+          vnet_buffer(p1)->ip.save_rewrite_length = rw_len1;
 
           /* Check MTU of outgoing interface. */
           error0 = (vlib_buffer_length_in_chain (vm, p0) > adj0[0].rewrite_header.max_l3_packet_bytes
@@ -3006,6 +3008,7 @@ ip4_rewrite_inline (vlib_main_t * vm,
           
           /* Update packet buffer attributes/set output interface. */
           rw_len0 = adj0[0].rewrite_header.data_bytes;
+          vnet_buffer(p0)->ip.save_rewrite_length = rw_len0;
           
           if (PREDICT_FALSE (rw_len0 > sizeof(ethernet_header_t)))
               vlib_increment_combined_counter 
index 6ceb574..b076ed0 100644 (file)
@@ -2490,6 +2490,8 @@ ip6_rewrite_inline (vlib_main_t * vm,
 
          rw_len0 = adj0[0].rewrite_header.data_bytes;
          rw_len1 = adj1[0].rewrite_header.data_bytes;
+          vnet_buffer(p0)->ip.save_rewrite_length = rw_len0;
+          vnet_buffer(p1)->ip.save_rewrite_length = rw_len1;
 
          vlib_increment_combined_counter (&lm->adjacency_counters,
                                            cpu_index, 
@@ -2631,6 +2633,7 @@ ip6_rewrite_inline (vlib_main_t * vm,
       
          /* Update packet buffer attributes/set output interface. */
          rw_len0 = adj0[0].rewrite_header.data_bytes;
+          vnet_buffer(p0)->ip.save_rewrite_length = rw_len0;
 
          vlib_increment_combined_counter (&lm->adjacency_counters,
                                            cpu_index,