vxlan-gbp: Add support for vxlan gbp
[vpp.git] / src / vnet / udp / udp.h
index 920ef96..91d063a 100644 (file)
@@ -36,9 +36,11 @@ typedef enum
 
 typedef struct
 {
-  transport_connection_t connection;         /** must be first */
-  /** ersatz MTU to limit fifo pushes to test data size */
-  u32 mtu;
+  /** Required for pool_get_aligned */
+  CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
+  transport_connection_t connection;   /**< must be first */
+  clib_spinlock_t rx_lock;             /**< rx fifo lock */
+  u8 is_connected;                     /**< connected mode */
 } udp_connection_t;
 
 #define foreach_udp4_dst_port                  \
@@ -51,9 +53,11 @@ _ (3784, bfd4)                                  \
 _ (3785, bfd_echo4)                             \
 _ (4341, lisp_gpe)                              \
 _ (4342, lisp_cp)                              \
+_ (4500, ipsec)                                 \
 _ (4739, ipfix)                                 \
 _ (4789, vxlan)                                        \
 _ (4789, vxlan6)                               \
+_ (48879, vxlan_gbp)                           \
 _ (4790, VXLAN_GPE)                            \
 _ (6633, vpath_3)                              \
 _ (6081, geneve)                               \
@@ -69,9 +73,11 @@ _ (3784, bfd6)                                  \
 _ (3785, bfd_echo6)                             \
 _ (4341, lisp_gpe6)                             \
 _ (4342, lisp_cp6)                             \
+_ (48879, vxlan6_gbp)                          \
 _ (4790, VXLAN6_GPE)                            \
 _ (6633, vpath6_3)                             \
 _ (6081, geneve6)                              \
+_ (8138, BIER)                                 \
 _ (53053, dns_reply6)
 
 typedef enum
@@ -206,7 +212,7 @@ udp_pool_remove_peeker (u32 thread_index)
 }
 
 always_inline udp_connection_t *
-udp_conenction_clone_safe (u32 connection_index, u32 thread_index)
+udp_connection_clone_safe (u32 connection_index, u32 thread_index)
 {
   udp_connection_t *old_c, *new_c;
   u32 current_thread_index = vlib_get_thread_index ();
@@ -250,12 +256,15 @@ always_inline void *
 vlib_buffer_push_udp (vlib_buffer_t * b, u16 sp, u16 dp, u8 offload_csum)
 {
   udp_header_t *uh;
+  u16 udp_len = sizeof (udp_header_t) + b->current_length;
+  if (PREDICT_FALSE (b->flags & VLIB_BUFFER_TOTAL_LENGTH_VALID))
+    udp_len += b->total_length_not_including_first_buffer;
 
   uh = vlib_buffer_push_uninit (b, sizeof (udp_header_t));
   uh->src_port = sp;
   uh->dst_port = dp;
   uh->checksum = 0;
-  uh->length = clib_host_to_net_u16 (b->current_length);
+  uh->length = clib_host_to_net_u16 (udp_len);
   if (offload_csum)
     {
       b->flags |= VNET_BUFFER_F_OFFLOAD_UDP_CKSUM;