vxlan-gbp: Add support for vxlan gbp
[vpp.git] / src / vnet / udp / udp.h
index 8e3ab9e..91d063a 100644 (file)
@@ -36,6 +36,8 @@ typedef enum
 
 typedef struct
 {
+  /** 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 */
@@ -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,6 +73,7 @@ _ (3784, bfd6)                                  \
 _ (3785, bfd_echo6)                             \
 _ (4341, lisp_gpe6)                             \
 _ (4342, lisp_cp6)                             \
+_ (48879, vxlan6_gbp)                          \
 _ (4790, VXLAN6_GPE)                            \
 _ (6633, vpath6_3)                             \
 _ (6081, geneve6)                              \
@@ -251,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;