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;
{
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 */