X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fbuffer.h;h=8cb55454462093cf0ecf298c0d5d8b9489dafc4f;hb=9128637ee8f7b0d903551f165a1447d427e8dd19;hp=fbefe7c2f5671c638577806c6c88c9cf9ac97940;hpb=5a6508d7269266b4a3ecacdd197ea3514a0c0e28;p=vpp.git diff --git a/src/vnet/buffer.h b/src/vnet/buffer.h index fbefe7c2f56..8cb55454462 100644 --- a/src/vnet/buffer.h +++ b/src/vnet/buffer.h @@ -43,32 +43,36 @@ #include #define foreach_vnet_buffer_field \ - _( 1, L4_CHECKSUM_COMPUTED) \ - _( 2, L4_CHECKSUM_CORRECT) \ - _( 3, VLAN_2_DEEP) \ - _( 4, VLAN_1_DEEP) \ - _( 8, SPAN_CLONE) \ - _( 6, HANDOFF_NEXT_VALID) \ - _( 7, LOCALLY_ORIGINATED) \ - _( 8, IS_IP4) \ - _( 9, IS_IP6) \ - _(10, OFFLOAD_IP_CKSUM) \ - _(11, OFFLOAD_TCP_CKSUM) \ - _(12, OFFLOAD_UDP_CKSUM) + _( 1, L4_CHECKSUM_COMPUTED, "l4-cksum-computed") \ + _( 2, L4_CHECKSUM_CORRECT, "l4-cksum-correct") \ + _( 3, VLAN_2_DEEP, "vlan-2-deep") \ + _( 4, VLAN_1_DEEP, "vlan-1-deep") \ + _( 8, SPAN_CLONE, "span-clone") \ + _( 6, HANDOFF_NEXT_VALID, "handoff-next-valid") \ + _( 7, LOCALLY_ORIGINATED, "local") \ + _( 8, IS_IP4, "ip4") \ + _( 9, IS_IP6, "ip6") \ + _(10, OFFLOAD_IP_CKSUM, "offload-ip-cksum") \ + _(11, OFFLOAD_TCP_CKSUM, "offload-tcp-cksum") \ + _(12, OFFLOAD_UDP_CKSUM, "offload-udp-cksum") \ + _(13, IS_NATED, "nated") \ + _(14, L2_HDR_OFFSET_VALID, 0) \ + _(15, L3_HDR_OFFSET_VALID, 0) \ + _(16, L4_HDR_OFFSET_VALID, 0) #define VNET_BUFFER_FLAGS_VLAN_BITS \ (VNET_BUFFER_F_VLAN_1_DEEP | VNET_BUFFER_F_VLAN_2_DEEP) enum { -#define _(bit, name) VNET_BUFFER_F_##name = (1 << LOG2_VLIB_BUFFER_FLAG_USER(bit)), +#define _(bit, name, v) VNET_BUFFER_F_##name = (1 << LOG2_VLIB_BUFFER_FLAG_USER(bit)), foreach_vnet_buffer_field #undef _ }; enum { -#define _(bit, name) VNET_BUFFER_F_LOG2_##name = LOG2_VLIB_BUFFER_FLAG_USER(bit), +#define _(bit, name, v) VNET_BUFFER_F_LOG2_##name = LOG2_VLIB_BUFFER_FLAG_USER(bit), foreach_vnet_buffer_field #undef _ }; @@ -87,6 +91,7 @@ _(ipsec) \ _(map) \ _(map_t) \ _(ip_frag) \ +_(mpls) \ _(tcp) /* @@ -125,8 +130,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; @@ -156,6 +167,15 @@ typedef struct u8 ttl; u8 exp; u8 first; + /* + * 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; } mpls; /* ip4-in-ip6 softwire termination, only valid there */ @@ -310,10 +330,28 @@ 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"); +format_function_t format_vnet_buffer; #endif /* included_vnet_buffer_h */