From a5fb0ec6c3b19c5fe74f171297afe68be897548c Mon Sep 17 00:00:00 2001 From: Dave Barach Date: Mon, 3 Dec 2018 19:07:09 -0500 Subject: [PATCH] Add VNET_BUFFER_F_AVAIL definitions Add a check to make sure that the vlib and vnet buffer flag bit definitions do not overlap. The VNET_BUFFER_F_AVAIL1...8 definitions allow out-of-tree codes to: #define VNET_BUFFER_F_MY_USECASE VNET_BUFFER_F_AVAIL1 and so on. This avoids introducing irrelevant and/or proprietary bit definitions into vnet/buffer.h, and hopefully minimizes merge pain for everyone involved. Change-Id: I5be4f61dceb81b5bfca005f6d609ade074af205b Signed-off-by: Dave Barach --- src/vlib/buffer.h | 1 + src/vnet/buffer.h | 26 +++++++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/vlib/buffer.h b/src/vlib/buffer.h index 02b170907ba..ceab94f25fd 100644 --- a/src/vlib/buffer.h +++ b/src/vlib/buffer.h @@ -98,6 +98,7 @@ enum /* User defined buffer flags. */ #define LOG2_VLIB_BUFFER_FLAG_USER(n) (32 - (n)) #define VLIB_BUFFER_FLAG_USER(n) (1 << LOG2_VLIB_BUFFER_FLAG_USER(n)) +#define VLIB_BUFFER_FLAGS_ALL (0x1f) /* VLIB buffer representation. */ typedef struct diff --git a/src/vnet/buffer.h b/src/vnet/buffer.h index d701e21141d..89dd84567bc 100644 --- a/src/vnet/buffer.h +++ b/src/vnet/buffer.h @@ -44,6 +44,7 @@ /** * Flags that are set in the high order bits of ((vlib_buffer*)b)->flags + * */ #define foreach_vnet_buffer_flag \ _( 1, L4_CHECKSUM_COMPUTED, "l4-cksum-computed", 1) \ @@ -64,7 +65,26 @@ _(16, L4_HDR_OFFSET_VALID, "l4_hdr_offset_valid", 0) \ _(17, FLOW_REPORT, "flow-report", 1) \ _(18, IS_DVR, "dvr", 1) \ - _(19, QOS_DATA_VALID, "qos-data-valid", 0) + _(19, QOS_DATA_VALID, "qos-data-valid", 0) \ + _(20, AVAIL1, "avail1", 1) \ + _(21, AVAIL2, "avail2", 1) \ + _(22, AVAIL3, "avail3", 1) \ + _(23, AVAIL4, "avail4", 1) \ + _(24, AVAIL5, "avail5", 1) \ + _(25, AVAIL6, "avail6", 1) \ + _(26, AVAIL7, "avail7", 1) \ + _(27, AVAIL8, "avail8", 1) + +/* + * Please allocate the FIRST available bit, redefine + * AVAIL 1 ... AVAILn-1, and remove AVAILn. Please maintain the + * VNET_BUFFER_FLAGS_ALL_AVAIL definition. + */ + +#define VNET_BUFFER_FLAGS_ALL_AVAIL \ + (VNET_BUFFER_F_AVAIL1 | VNET_BUFFER_F_AVAIL2 | VNET_BUFFER_F_AVAIL3 | \ + VNET_BUFFER_F_AVAIL4 | VNET_BUFFER_F_AVAIL5 | VNET_BUFFER_F_AVAIL6 | \ + VNET_BUFFER_F_AVAIL7) #define VNET_BUFFER_FLAGS_VLAN_BITS \ (VNET_BUFFER_F_VLAN_1_DEEP | VNET_BUFFER_F_VLAN_2_DEEP) @@ -83,6 +103,10 @@ enum #undef _ }; +/* Make sure that the vnet and vlib bits are disjoint */ +STATIC_ASSERT (((VNET_BUFFER_FLAGS_ALL_AVAIL & VLIB_BUFFER_FLAGS_ALL) == 0), + "VLIB / VNET buffer flags overlap"); + #define foreach_buffer_opaque_union_subtype \ _(ip) \ _(l2) \ -- 2.16.6