Break up vpe.api
[vpp.git] / src / vnet / buffer.h
index 7dfc6b9..6518fb6 100644 (file)
@@ -54,7 +54,8 @@
   _( 9, IS_IP6)                                                \
   _(10, OFFLOAD_IP_CKSUM)                              \
   _(11, OFFLOAD_TCP_CKSUM)                             \
-  _(12, OFFLOAD_UDP_CKSUM)
+  _(12, OFFLOAD_UDP_CKSUM)                              \
+  _(13, IS_NATED)
 
 #define VNET_BUFFER_FLAGS_VLAN_BITS \
   (VNET_BUFFER_F_VLAN_1_DEEP | VNET_BUFFER_F_VLAN_2_DEEP)
@@ -87,6 +88,8 @@ _(ipsec)                                      \
 _(map)                                         \
 _(map_t)                                       \
 _(ip_frag)                                     \
+_(mpls)                                                \
+_(bier)                                        \
 _(tcp)
 
 /*
@@ -125,8 +128,14 @@ typedef struct
             protocol and ports. */
          u32 flow_hash;
 
-         /* next protocol */
-         u32 save_protocol;
+         union
+         {
+           /* next protocol */
+           u32 save_protocol;
+
+           /* Hint for transport protocols */
+           u32 fib_index;
+         };
 
          /* Rewrite length */
          u32 save_rewrite_length;
@@ -158,6 +167,16 @@ typedef struct
       u8 first;
     } mpls;
 
+    /*
+     * BIER - the nubmer of bytes in the header.
+     *  the len field inthe header is not authoritative. It's the
+     * value in the table that counts.
+     */
+    struct
+    {
+      u8 n_bytes;
+    } bier;
+
     /* ip4-in-ip6 softwire termination, only valid there */
     struct
     {
@@ -173,6 +192,7 @@ typedef struct
       u8 l2_len;               /* ethernet header length */
       u8 shg;                  /* split-horizon group */
       u16 l2fib_sn;            /* l2fib bd/int seq_num */
+      u8 bd_age;               /* aging enabled */
     } l2;
 
     /* l2tpv3 softwire encap, only valid there */
@@ -309,9 +329,26 @@ typedef struct
 {
   union
   {
+#if VLIB_BUFFER_TRACE_TRAJECTORY > 0
+    /* buffer trajectory tracing */
+    struct
+    {
+      u16 *trajectory_trace;
+    };
+#endif
+    u32 unused[12];
   };
 } vnet_buffer_opaque2_t;
 
+#define vnet_buffer2(b) ((vnet_buffer_opaque2_t *) (b)->opaque2)
+
+/*
+ * The opaque2 field of the vlib_buffer_t is intepreted as a
+ * vnet_buffer_opaque2_t. Hence it should be big enough to accommodate one.
+ */
+STATIC_ASSERT (sizeof (vnet_buffer_opaque2_t) <=
+              STRUCT_SIZE_OF (vlib_buffer_t, opaque2),
+              "VNET buffer opaque2 meta-data too large for vlib_buffer");
 
 
 #endif /* included_vnet_buffer_h */