X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fbuffer.h;h=e4167eae6aee84d40f8eaf274f811a08240c00c9;hb=ce9e0b4d48705d693f4e03093e3f506bdecaf141;hp=dfab874070dbd702d9eef3c72ca0da5f46e6cbbc;hpb=c592ca527acee041ef330bb27de35764d746202c;p=vpp.git diff --git a/src/vnet/buffer.h b/src/vnet/buffer.h index dfab874070d..e4167eae6ae 100644 --- a/src/vnet/buffer.h +++ b/src/vnet/buffer.h @@ -45,13 +45,13 @@ /** * Flags that are set in the high order bits of ((vlib_buffer*)b)->flags */ -#define foreach_vnet_buffer_field \ +#define foreach_vnet_buffer_flag \ _( 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") \ + _( 5, SPAN_CLONE, "span-clone") \ + _( 6, LOOP_COUNTER_VALID, 0) \ _( 7, LOCALLY_ORIGINATED, "local") \ _( 8, IS_IP4, "ip4") \ _( 9, IS_IP6, "ip6") \ @@ -61,7 +61,10 @@ _(13, IS_NATED, "nated") \ _(14, L2_HDR_OFFSET_VALID, 0) \ _(15, L3_HDR_OFFSET_VALID, 0) \ - _(16, L4_HDR_OFFSET_VALID, 0) + _(16, L4_HDR_OFFSET_VALID, 0) \ + _(17, FLOW_REPORT, "flow-report") \ + _(18, IS_DVR, "dvr") \ + _(19, QOS_DATA_VALID, 0) #define VNET_BUFFER_FLAGS_VLAN_BITS \ (VNET_BUFFER_F_VLAN_1_DEEP | VNET_BUFFER_F_VLAN_2_DEEP) @@ -69,46 +72,22 @@ enum { #define _(bit, name, v) VNET_BUFFER_F_##name = (1 << LOG2_VLIB_BUFFER_FLAG_USER(bit)), - foreach_vnet_buffer_field + foreach_vnet_buffer_flag #undef _ }; enum { #define _(bit, name, v) VNET_BUFFER_F_LOG2_##name = LOG2_VLIB_BUFFER_FLAG_USER(bit), - foreach_vnet_buffer_field + foreach_vnet_buffer_flag #undef _ }; -/** - * @brief Flags set in ((vnet_buffer(b)->flags - */ -#define foreach_vnet_opaque_flag \ - _( 1, IS_DVR, "DVR-processed") - -enum -{ -#define _(bit, name, v) VNET_OPAQUE_F_##name = (1 << bit), - foreach_vnet_opaque_flag -#undef _ -}; - -enum -{ -#define _(bit, name, v) VNET_OPAQUE_F_LOG2_##name = bit, - foreach_vnet_opaque_flag -#undef _ -}; - - #define foreach_buffer_opaque_union_subtype \ _(ip) \ -_(swt) \ _(l2) \ _(l2t) \ -_(gre) \ _(l2_classify) \ -_(handoff) \ _(policer) \ _(ipsec) \ _(map) \ @@ -134,7 +113,8 @@ typedef struct i16 l2_hdr_offset; i16 l3_hdr_offset; i16 l4_hdr_offset; - u16 flags; + u8 feature_arc_index; + u8 dont_waste_me; union { @@ -177,6 +157,27 @@ typedef struct u8 code; u32 data; } icmp; + + /* reassembly */ + union + { + /* in/out variables */ + struct + { + u32 next_index; /* index of next node - ignored if "feature" node */ + u16 estimated_mtu; /* estimated MTU calculated during reassembly */ + }; + /* internal variables used during reassembly */ + struct + { + u16 fragment_first; + u16 fragment_last; + u16 range_first; + u16 range_last; + u32 next_range_bi; + u16 ip6_frag_hdr_offset; + }; + } reass; }; } ip; @@ -188,9 +189,13 @@ typedef struct */ struct { + /* do not overlay w/ ip.adj_index[0,1] nor flow hash */ + u32 pad[VLIB_N_RX_TX + 1]; u8 ttl; u8 exp; u8 first; + /* Rewrite length */ + u32 save_rewrite_length; /* * BIER - the nubmer of bytes in the header. * the len field inthe header is not authoritative. It's the @@ -202,13 +207,6 @@ typedef struct } bier; } mpls; - /* ip4-in-ip6 softwire termination, only valid there */ - struct - { - u8 swt_disable; - u32 mapping_index; - } swt; - /* l2 bridging path, only valid there */ struct opaque_l2 { @@ -228,11 +226,6 @@ typedef struct u32 session_index; } l2t; - struct - { - u32 src, dst; - } gre; - /* L2 classify */ struct { @@ -245,12 +238,6 @@ typedef struct u64 hash; } l2_classify; - /* IO - worker thread handoff */ - struct - { - u32 next_index; - } handoff; - /* vnet policer */ struct { @@ -310,13 +297,6 @@ typedef struct u16 overlay_afi; } lisp; - /* Driver rx feature */ - struct - { - u32 saved_next_index; /**< saved by drivers for short-cut */ - u16 buffer_advance; - } device_input_feat; - /* TCP */ struct { @@ -340,6 +320,7 @@ typedef struct u16 hdr_offset; /**< offset relative to ip hdr */ u16 data_offset; /**< offset relative to ip hdr */ u16 data_len; /**< data len */ + u8 subconn_idx; /**< index of the sub_connection being used */ u8 flags; } sctp; @@ -366,16 +347,41 @@ STATIC_ASSERT (sizeof (vnet_buffer_opaque_t) <= /* Full cache line (64 bytes) of additional space */ typedef struct { + /** + * QoS marking data that needs to persist from the recording nodes + * (nominally in the ingress path) to the marking node (in the + * egress path) + */ + struct + { + u8 bits; + u8 source; + } qos; + + u8 loop_counter; + u8 __unused[1]; + + /* Group Based Policy */ + struct + { + u32 src_epg; + } gbp; + union { -#if VLIB_BUFFER_TRACE_TRAJECTORY > 0 - /* buffer trajectory tracing */ struct { +#if VLIB_BUFFER_TRACE_TRAJECTORY > 0 + /* buffer trajectory tracing */ u16 *trajectory_trace; - }; #endif - u32 unused[12]; + }; + struct + { + u64 pad[1]; + u64 pg_replay_timestamp; + }; + u32 unused[10]; }; } vnet_buffer_opaque2_t;