Skip to content

Commit 59a504f

Browse files
authored
[meta] Force enums with strict flags to have zero enum defined (#2264)
This could be handy for serialization purposes if no flags are defined in serialized enum. But actual purpose of having zero value could have no meaning (for exaple stats mode)
1 parent 1f97ad9 commit 59a504f

4 files changed

Lines changed: 52 additions & 0 deletions

File tree

experimental/saitypesextensions.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,8 @@ typedef enum _sai_dash_tunnel_dscp_mode_t
141141
*/
142142
typedef enum _sai_dash_routing_actions_t
143143
{
144+
SAI_DASH_ROUTING_ACTIONS_NONE = 0,
145+
144146
SAI_DASH_ROUTING_ACTIONS_STATIC_ENCAP = 1,
145147

146148
SAI_DASH_ROUTING_ACTIONS_NAT = 2,
@@ -174,6 +176,8 @@ typedef enum _sai_dash_ha_role_t
174176
*/
175177
typedef enum _sai_dash_flow_enabled_key_t
176178
{
179+
SAI_DASH_FLOW_ENABLED_KEY_NONE = 0,
180+
177181
SAI_DASH_FLOW_ENABLED_KEY_ENI_MAC = 1,
178182

179183
SAI_DASH_FLOW_ENABLED_KEY_VNI = 2,

inc/saitypes.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1925,6 +1925,11 @@ typedef sai_status_t (*sai_bulk_object_get_attribute_fn)(
19251925
*/
19261926
typedef enum _sai_stats_mode_t
19271927
{
1928+
/**
1929+
* @brief No mode defined
1930+
*/
1931+
SAI_STATS_MODE_NONE = 0 << 0,
1932+
19281933
/**
19291934
* @brief Read statistics
19301935
*/
@@ -2102,6 +2107,11 @@ typedef enum _sai_ser_correction_type_t
21022107
*/
21032108
typedef enum _sai_ser_log_type_t
21042109
{
2110+
/**
2111+
* @brief No errors
2112+
*/
2113+
SAI_SER_LOG_TYPE_NONE = 0 << 0,
2114+
21052115
/**
21062116
* @brief Error happens on memory
21072117
*/

meta/saimetadatatypes.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -549,6 +549,13 @@ typedef enum _sai_attr_value_type_t
549549
*/
550550
typedef enum _sai_attr_flags_t
551551
{
552+
/**
553+
* @brief No flags defined.
554+
*
555+
* This member should not be used.
556+
*/
557+
SAI_ATTR_FLAGS_NONE = (0 << 0),
558+
552559
/**
553560
* @brief Mandatory on create flag.
554561
*

meta/saisanitycheck.c

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6110,6 +6110,36 @@ void check_enum_flags_type(
61106110
META_ASSERT_FAIL("enum %s flags type %d not supported yet, FIXME", emd->name, emd->flagstype);
61116111
}
61126112

6113+
void check_enum_flag_zero(
6114+
_In_ const sai_enum_metadata_t* emd)
6115+
{
6116+
META_LOG_ENTER();
6117+
6118+
/*
6119+
* this check tests whether each strict flag has value at index 0 which
6120+
* enum value is zero (no flags defined) this will be handy during
6121+
* serialization of empty flags
6122+
*/
6123+
6124+
if (emd->flagstype != SAI_ENUM_FLAGS_TYPE_STRICT)
6125+
return;
6126+
6127+
/* enum contains strict flags */
6128+
6129+
if (emd->valuescount == 0)
6130+
{
6131+
META_ASSERT_FAIL("enum %s (flags strict) don't contain any values!", emd->name);
6132+
}
6133+
6134+
if (emd->values[0] != 0)
6135+
{
6136+
META_ASSERT_FAIL("enum %s (flags strict) value %s = %d at index 0 is not zero (no flags):",
6137+
emd->name,
6138+
emd->valuesnames[0],
6139+
emd->values[0]);
6140+
}
6141+
}
6142+
61136143
void check_single_enum(
61146144
_In_ const sai_enum_metadata_t* emd)
61156145
{
@@ -6121,6 +6151,7 @@ void check_single_enum(
61216151
check_enum_flags_type_ranges(emd);
61226152
check_enum_flags_type_free(emd);
61236153
check_enum_object_type(emd);
6154+
check_enum_flag_zero(emd);
61246155
}
61256156

61266157
void check_all_enums()

0 commit comments

Comments
 (0)