tcp: use scaled window for new connects
[vpp.git] / src / vnet / tcp / tcp.h
index 176de2c..165659b 100644 (file)
@@ -32,7 +32,7 @@
 #define TCP_MAX_OPTION_SPACE 40
 
 #define TCP_DUPACK_THRESHOLD   3
-#define TCP_MAX_RX_FIFO_SIZE   4 << 20
+#define TCP_MAX_RX_FIFO_SIZE   32 << 20
 #define TCP_MIN_RX_FIFO_SIZE   4 << 10
 #define TCP_IW_N_SEGMENTS      10
 #define TCP_ALWAYS_ACK         1       /**< On/off delayed acks */
@@ -379,6 +379,9 @@ typedef struct tcp_worker_ctx_
                                                     output nodes */
   vlib_frame_t *ip_lookup_tx_frames[2];                /**< tx frames for ip 4/6
                                                     lookup nodes */
+    CLIB_CACHE_LINE_ALIGN_MARK (cacheline1);
+  u8 cached_opts[40];                          /**< cached 'on the wire'
+                                                    options for bursts */
 } tcp_worker_ctx_t;
 
 typedef struct _tcp_main
@@ -405,9 +408,20 @@ typedef struct _tcp_main
   /* Congestion control algorithms registered */
   tcp_cc_algorithm_t *cc_algos;
 
+  /** vlib buffer size */
+  u32 bytes_per_buffer;
+
+  /*
+   * Configuration
+   */
+
   /* Flag that indicates if stack is on or off */
   u8 is_enabled;
 
+  /** Max rx fifo size for a session. It is used in to compute the
+   *  rfc 7323 window scaling factor */
+  u32 max_rx_fifo;
+
   /** Number of preallocated connections */
   u32 preallocated_connections;
   u32 preallocated_half_open_connections;
@@ -418,9 +432,6 @@ typedef struct _tcp_main
   u32 last_v6_address_rotor;
   ip6_address_t *ip6_src_addresses;
 
-  /** vlib buffer size */
-  u32 bytes_per_buffer;
-
   u8 punt_unknown4;
   u8 punt_unknown6;
 
@@ -527,7 +538,7 @@ void tcp_send_reset (tcp_connection_t * tc);
 void tcp_send_syn (tcp_connection_t * tc);
 void tcp_send_fin (tcp_connection_t * tc);
 void tcp_init_mss (tcp_connection_t * tc);
-void tcp_update_snd_mss (tcp_connection_t * tc);
+void tcp_update_burst_snd_vars (tcp_connection_t * tc);
 void tcp_update_rto (tcp_connection_t * tc);
 void tcp_flush_frame_to_output (vlib_main_t * vm, u8 thread_index, u8 is_ip4);
 void tcp_flush_frames_to_output (u8 thread_index);
@@ -647,6 +658,7 @@ tcp_is_lost_fin (tcp_connection_t * tc)
   return 0;
 }
 
+u32 tcp_snd_space (tcp_connection_t * tc);
 void tcp_retransmit_first_unacked (tcp_connection_t * tc);
 void tcp_fast_retransmit_no_sack (tcp_connection_t * tc);
 void tcp_fast_retransmit_sack (tcp_connection_t * tc);