aboutsummaryrefslogtreecommitdiffstats
path: root/src/vnet/buffer.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/vnet/buffer.h')
-rw-r--r--src/vnet/buffer.h48
1 files changed, 22 insertions, 26 deletions
diff --git a/src/vnet/buffer.h b/src/vnet/buffer.h
index cbaf4d84e42..2f34aa4b5fc 100644
--- a/src/vnet/buffer.h
+++ b/src/vnet/buffer.h
@@ -190,8 +190,17 @@ typedef struct
/* Rewrite length */
u8 save_rewrite_length;
- /* MFIB RPF ID */
- u32 rpf_id;
+ union
+ {
+ /* sw_if_index of the local interface the buffer was received on
+ * - if hitting a DPO_RECEIVE - it is set in ip[46]-receive.
+ * This is ~0 if the dpo is not a receive dpo, or if the
+ * interface is not specified (e.g. route add via local) */
+ u32 rx_sw_if_index;
+
+ /* MFIB RPF ID */
+ u32 rpf_id;
+ };
};
/* ICMP */
@@ -235,7 +244,8 @@ typedef struct
u8 save_rewrite_length;
u8 ip_proto; /* protocol in ip header */
u8 icmp_type_or_tcp_flags;
- u8 is_non_first_fragment;
+ u8 is_non_first_fragment : 1;
+ u8 l4_layer_truncated : 7;
u32 tcp_seq_number;
};
/* full reassembly output variables */
@@ -310,13 +320,13 @@ typedef struct
/* L2 classify */
struct
{
- struct opaque_l2 pad;
+ u32 pad[4]; /* do not overlay w/ ip.fib_index nor l2 */
union
{
u32 table_index;
u32 opaque_index;
};
- u64 hash;
+ u32 hash;
} l2_classify;
/* vnet policer */
@@ -408,7 +418,9 @@ typedef struct
};
} vnet_buffer_opaque_t;
-#define VNET_REWRITE_TOTAL_BYTES (VLIB_BUFFER_PRE_DATA_SIZE)
+#define VNET_REWRITE_TOTAL_BYTES 128
+STATIC_ASSERT (VNET_REWRITE_TOTAL_BYTES <= VLIB_BUFFER_PRE_DATA_SIZE,
+ "VNET_REWRITE_TOTAL_BYTES too big");
STATIC_ASSERT (STRUCT_SIZE_OF (vnet_buffer_opaque_t, ip.save_rewrite_length)
== STRUCT_SIZE_OF (vnet_buffer_opaque_t,
@@ -455,15 +467,7 @@ typedef struct
} qos;
u8 loop_counter;
- u8 __unused[1];
-
- /* Group Based Policy */
- struct
- {
- u8 __unused;
- u8 flags;
- u16 sclass;
- } gbp;
+ u8 pad[5]; /* unused */
/**
* The L4 payload size set on input on GSO enabled interfaces
@@ -491,15 +495,7 @@ typedef struct
};
} nat;
- union
- {
- struct
- {
- u64 pad[1];
- u64 pg_replay_timestamp;
- };
- u32 unused[8];
- };
+ u32 unused[8];
} vnet_buffer_opaque2_t;
#define vnet_buffer2(b) ((vnet_buffer_opaque2_t *) (b)->opaque2)
@@ -508,8 +504,8 @@ typedef struct
* The opaque2 field of the vlib_buffer_t is interpreted 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),
+STATIC_ASSERT (sizeof (vnet_buffer_opaque2_t) ==
+ STRUCT_SIZE_OF (vlib_buffer_t, opaque2),
"VNET buffer opaque2 meta-data too large for vlib_buffer");
#define gso_mtu_sz(b) (vnet_buffer2(b)->gso_size + \