session: Increasing the Header lengthe size
[vpp.git] / src / vnet / session / transport_types.h
index 224c820..b39a07c 100644 (file)
@@ -20,7 +20,8 @@
 #include <vnet/ip/ip.h>
 #include <vnet/tcp/tcp_debug.h>
 
-#define TRANSPORT_MAX_HDRS_LEN    100  /* Max number of bytes for headers */
+#define TRANSPORT_MAX_HDRS_LEN    140  /* Max number of bytes for headers */
+
 
 typedef enum transport_dequeue_type_
 {
@@ -47,17 +48,12 @@ typedef enum transport_connection_flags_
                                                  transports using the network layer (udp/tcp) */
 } transport_connection_flags_t;
 
-typedef struct _transport_stats
-{
-  u64 tx_bytes;
-} transport_stats_t;
-
 typedef struct _spacer
 {
+  u64 bytes_per_sec;
   u64 bucket;
-  u32 max_burst_size;
+  clib_us_time_t last_update;
   f32 tokens_per_period;
-  u64 last_update;
 } spacer_t;
 
 #define TRANSPORT_CONN_ID_LEN  44
@@ -77,9 +73,9 @@ typedef struct _transport_connection
     {
       ip46_address_t rmt_ip;   /**< Remote IP */
       ip46_address_t lcl_ip;   /**< Local IP */
+      u32 fib_index;           /**< Network namespace */
       u16 rmt_port;            /**< Remote port */
       u16 lcl_port;            /**< Local port */
-      u32 fib_index;           /**< Network namespace */
       u8 is_ip4;               /**< Flag if IP4 connection */
       u8 proto;                        /**< Protocol id */
       u8 unused[2];            /**< First field after id wants to be
@@ -99,7 +95,6 @@ typedef struct _transport_connection
   /*fib_node_index_t rmt_fei;
      dpo_id_t rmt_dpo; */
 
-  transport_stats_t stats;     /**< Transport connection stats */
   spacer_t pacer;              /**< Simple transport pacer */
 
 #if TRANSPORT_DEBUG
@@ -107,6 +102,12 @@ typedef struct _transport_connection
   u32 cc_stat_tstamp;          /**< CC stats timestamp */
 #endif
 
+  /**
+   * Transport specific state starts in next cache line. Meant to avoid
+   * alignment surprises in transports when base class changes.
+   */
+    CLIB_CACHE_LINE_ALIGN_MARK (end);
+
   /** Macros for 'derived classes' where base is named "connection" */
 #define c_lcl_ip connection.lcl_ip
 #define c_rmt_ip connection.rmt_ip
@@ -135,15 +136,25 @@ typedef struct _transport_connection
 STATIC_ASSERT (STRUCT_OFFSET_OF (transport_connection_t, s_index)
               == TRANSPORT_CONN_ID_LEN, "update conn id len");
 
+/* Warn if size changes. Two cache lines is already generous, hopefully we
+ * won't have to outgrow that. */
+STATIC_ASSERT (sizeof (transport_connection_t) <= 128,
+              "moved into 3rd cache line");
+
+#define foreach_transport_proto                                \
+  _(TCP, "tcp", "T")                                   \
+  _(UDP, "udp", "U")                                   \
+  _(SCTP, "sctp", "S")                                 \
+  _(NONE, "ct", "C")                                   \
+  _(TLS, "tls", "J")                                   \
+  _(UDPC, "udpc", "U")                                 \
+  _(QUIC, "quic", "Q")                                 \
+
 typedef enum _transport_proto
 {
-  TRANSPORT_PROTO_TCP,
-  TRANSPORT_PROTO_UDP,
-  TRANSPORT_PROTO_SCTP,
-  TRANSPORT_PROTO_NONE,
-  TRANSPORT_PROTO_TLS,
-  TRANSPORT_PROTO_UDPC,
-  TRANSPORT_PROTO_QUIC,
+#define _(sym, str, sstr) TRANSPORT_PROTO_ ## sym,
+  foreach_transport_proto
+#undef _
   TRANSPORT_N_PROTO
 } transport_proto_t;