diff --git a/experimental/saiexperimentaldashmeter.h b/experimental/saiexperimentaldashmeter.h index 44ec940f3..d149ec8a2 100644 --- a/experimental/saiexperimentaldashmeter.h +++ b/experimental/saiexperimentaldashmeter.h @@ -36,57 +36,84 @@ */ /** - * @brief Attribute ID for meter bucket + * @brief Attribute data for #SAI_METER_BUCKET_ENTRY_ATTR_ACTION */ -typedef enum _sai_meter_bucket_attr_t +typedef enum _sai_meter_bucket_entry_action_t +{ + SAI_METER_BUCKET_ENTRY_ACTION_UPDATE_METER_BUCKET, + +} sai_meter_bucket_entry_action_t; + +/** + * @brief Entry for meter_bucket_entry + */ +typedef struct _sai_meter_bucket_entry_t { /** - * @brief Start of attributes + * @brief Switch ID + * + * @objects SAI_OBJECT_TYPE_SWITCH */ - SAI_METER_BUCKET_ATTR_START, + sai_object_id_t switch_id; /** * @brief Exact matched key eni_id * - * @type sai_object_id_t - * @flags MANDATORY_ON_CREATE | CREATE_ONLY * @objects SAI_OBJECT_TYPE_ENI */ - SAI_METER_BUCKET_ATTR_ENI_ID = SAI_METER_BUCKET_ATTR_START, + sai_object_id_t eni_id; /** * @brief Exact matched key meter_class + */ + sai_uint32_t meter_class; + +} sai_meter_bucket_entry_t; + +/** + * @brief Attribute ID for meter bucket entry + */ +typedef enum _sai_meter_bucket_entry_attr_t +{ + /** + * @brief Start of attributes + */ + SAI_METER_BUCKET_ENTRY_ATTR_START, + + /** + * @brief Action * - * @type sai_uint32_t - * @flags MANDATORY_ON_CREATE | CREATE_ONLY + * @type sai_meter_bucket_entry_action_t + * @flags CREATE_AND_SET + * @default SAI_METER_BUCKET_ENTRY_ACTION_UPDATE_METER_BUCKET */ - SAI_METER_BUCKET_ATTR_METER_CLASS, + SAI_METER_BUCKET_ENTRY_ATTR_ACTION = SAI_METER_BUCKET_ENTRY_ATTR_START, /** * @brief End of attributes */ - SAI_METER_BUCKET_ATTR_END, + SAI_METER_BUCKET_ENTRY_ATTR_END, /** Custom range base value */ - SAI_METER_BUCKET_ATTR_CUSTOM_RANGE_START = 0x10000000, + SAI_METER_BUCKET_ENTRY_ATTR_CUSTOM_RANGE_START = 0x10000000, /** End of custom range base */ - SAI_METER_BUCKET_ATTR_CUSTOM_RANGE_END, + SAI_METER_BUCKET_ENTRY_ATTR_CUSTOM_RANGE_END, -} sai_meter_bucket_attr_t; +} sai_meter_bucket_entry_attr_t; /** - * @brief Counter IDs for METER BUCKET + * @brief Counter IDs for meter bucket entry */ -typedef enum _sai_meter_bucket_stat_t +typedef enum _sai_meter_bucket_entry_stat_t { - /** DASH METER_BUCKET OUTBOUND_BYTES stat count */ - SAI_METER_BUCKET_STAT_OUTBOUND_BYTES, + /** DASH METER_BUCKET_ENTRY OUTBOUND_BYTES stat count */ + SAI_METER_BUCKET_ENTRY_STAT_OUTBOUND_BYTES, - /** DASH METER_BUCKET INBOUND_BYTES stat count */ - SAI_METER_BUCKET_STAT_INBOUND_BYTES, + /** DASH METER_BUCKET_ENTRY INBOUND_BYTES stat count */ + SAI_METER_BUCKET_ENTRY_STAT_INBOUND_BYTES, -} sai_meter_bucket_stat_t; +} sai_meter_bucket_entry_stat_t; /** * @brief Attribute ID for meter policy @@ -197,77 +224,75 @@ typedef enum _sai_meter_rule_attr_t } sai_meter_rule_attr_t; /** - * @brief Create meter bucket + * @brief Create meter bucket entry * - * @param[out] meter_bucket_id Entry id - * @param[in] switch_id Switch id + * @param[in] meter_bucket_entry Entry * @param[in] attr_count Number of attributes * @param[in] attr_list Array of attributes * * @return #SAI_STATUS_SUCCESS on success Failure status code on error */ -typedef sai_status_t (*sai_create_meter_bucket_fn)( - _Out_ sai_object_id_t *meter_bucket_id, - _In_ sai_object_id_t switch_id, +typedef sai_status_t (*sai_create_meter_bucket_entry_fn)( + _In_ const sai_meter_bucket_entry_t *meter_bucket_entry, _In_ uint32_t attr_count, _In_ const sai_attribute_t *attr_list); /** - * @brief Remove meter bucket + * @brief Remove meter bucket entry * - * @param[in] meter_bucket_id Entry id + * @param[in] meter_bucket_entry Entry * * @return #SAI_STATUS_SUCCESS on success Failure status code on error */ -typedef sai_status_t (*sai_remove_meter_bucket_fn)( - _In_ sai_object_id_t meter_bucket_id); +typedef sai_status_t (*sai_remove_meter_bucket_entry_fn)( + _In_ const sai_meter_bucket_entry_t *meter_bucket_entry); /** - * @brief Set attribute for meter bucket + * @brief Set attribute for meter bucket entry * - * @param[in] meter_bucket_id Entry id + * @param[in] meter_bucket_entry Entry * @param[in] attr Attribute * * @return #SAI_STATUS_SUCCESS on success Failure status code on error */ -typedef sai_status_t (*sai_set_meter_bucket_attribute_fn)( - _In_ sai_object_id_t meter_bucket_id, +typedef sai_status_t (*sai_set_meter_bucket_entry_attribute_fn)( + _In_ const sai_meter_bucket_entry_t *meter_bucket_entry, _In_ const sai_attribute_t *attr); /** - * @brief Get attribute for meter bucket + * @brief Get attribute for meter bucket entry * - * @param[in] meter_bucket_id Entry id + * @param[in] meter_bucket_entry Entry * @param[in] attr_count Number of attributes * @param[inout] attr_list Array of attributes * * @return #SAI_STATUS_SUCCESS on success Failure status code on error */ -typedef sai_status_t (*sai_get_meter_bucket_attribute_fn)( - _In_ sai_object_id_t meter_bucket_id, +typedef sai_status_t (*sai_get_meter_bucket_entry_attribute_fn)( + _In_ const sai_meter_bucket_entry_t *meter_bucket_entry, _In_ uint32_t attr_count, _Inout_ sai_attribute_t *attr_list); /** - * @brief Get METER_BUCKET statistics counters. Deprecated for backward compatibility. + * @brief Get METER_BUCKET_ENTRY statistics counters. Deprecated for backward compatibility. * - * @param[in] meter_bucket_id Entry id + * @param[in] meter_bucket_entry Entry * @param[in] number_of_counters Number of counters in the array * @param[in] counter_ids Specifies the array of counter ids * @param[out] counters Array of resulting counter values. * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ -typedef sai_status_t (*sai_get_meter_bucket_stats_fn)( - _In_ sai_object_id_t meter_bucket_id, +typedef sai_status_t (*sai_get_meter_bucket_entry_stats_fn)( + _In_ const sai_meter_bucket_entry_t *meter_bucket_entry, _In_ uint32_t number_of_counters, _In_ const sai_stat_id_t *counter_ids, _Out_ uint64_t *counters); /** - * @brief Get METER_BUCKET statistics counters extended. + * @brief Get METER_BUCKET_ENTRY statistics counters extended. * - * @param[in] meter_bucket_id Entry id + * @param[in] meter_bucket_entry Entry * @param[in] number_of_counters Number of counters in the array * @param[in] counter_ids Specifies the array of counter ids * @param[in] mode Statistics mode @@ -275,27 +300,72 @@ typedef sai_status_t (*sai_get_meter_bucket_stats_fn)( * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ -typedef sai_status_t (*sai_get_meter_bucket_stats_ext_fn)( - _In_ sai_object_id_t meter_bucket_id, +typedef sai_status_t (*sai_get_meter_bucket_entry_stats_ext_fn)( + _In_ const sai_meter_bucket_entry_t *meter_bucket_entry, _In_ uint32_t number_of_counters, _In_ const sai_stat_id_t *counter_ids, _In_ sai_stats_mode_t mode, _Out_ uint64_t *counters); /** - * @brief Clear METER_BUCKET statistics counters. + * @brief Clear METER_BUCKET_ENTRY statistics counters. * - * @param[in] meter_bucket_id Entry id + * @param[in] meter_bucket_entry Entry * @param[in] number_of_counters Number of counters in the array * @param[in] counter_ids Specifies the array of counter ids * * @return #SAI_STATUS_SUCCESS on success, failure status code on error */ -typedef sai_status_t (*sai_clear_meter_bucket_stats_fn)( - _In_ sai_object_id_t meter_bucket_id, +typedef sai_status_t (*sai_clear_meter_bucket_entry_stats_fn)( + _In_ const sai_meter_bucket_entry_t *meter_bucket_entry, _In_ uint32_t number_of_counters, _In_ const sai_stat_id_t *counter_ids); +/** + * @brief Bulk create meter bucket entry + * + * @param[in] object_count Number of objects to create + * @param[in] meter_bucket_entry List of object to create + * @param[in] attr_count List of attr_count. Caller passes the number + * of attribute for each object to create. + * @param[in] attr_list List of attributes for every object. + * @param[in] mode Bulk operation error handling mode. + * @param[out] object_statuses List of status for every object. Caller needs to + * allocate the buffer + * + * @return #SAI_STATUS_SUCCESS on success when all objects are created or + * #SAI_STATUS_FAILURE when any of the objects fails to create. When there is + * failure, Caller is expected to go through the list of returned statuses to + * find out which fails and which succeeds. + */ +typedef sai_status_t (*sai_bulk_create_meter_bucket_entry_fn)( + _In_ uint32_t object_count, + _In_ const sai_meter_bucket_entry_t *meter_bucket_entry, + _In_ const uint32_t *attr_count, + _In_ const sai_attribute_t **attr_list, + _In_ sai_bulk_op_error_mode_t mode, + _Out_ sai_status_t *object_statuses); + +/** + * @brief Bulk remove meter bucket entry + * + * @param[in] object_count Number of objects to remove + * @param[in] meter_bucket_entry List of objects to remove + * @param[in] mode Bulk operation error handling mode. + * @param[out] object_statuses List of status for every object. Caller needs to + * allocate the buffer + * + * @return #SAI_STATUS_SUCCESS on success when all objects are removed or + * #SAI_STATUS_FAILURE when any of the objects fails to remove. When there is + * failure, Caller is expected to go through the list of returned statuses to + * find out which fails and which succeeds. + */ +typedef sai_status_t (*sai_bulk_remove_meter_bucket_entry_fn)( + _In_ uint32_t object_count, + _In_ const sai_meter_bucket_entry_t *meter_bucket_entry, + _In_ sai_bulk_op_error_mode_t mode, + _Out_ sai_status_t *object_statuses); + /** * @brief Create meter policy * @@ -402,29 +472,29 @@ typedef sai_status_t (*sai_get_meter_rule_attribute_fn)( typedef struct _sai_dash_meter_api_t { - sai_create_meter_bucket_fn create_meter_bucket; - sai_remove_meter_bucket_fn remove_meter_bucket; - sai_set_meter_bucket_attribute_fn set_meter_bucket_attribute; - sai_get_meter_bucket_attribute_fn get_meter_bucket_attribute; - sai_get_meter_bucket_stats_fn get_meter_bucket_stats; - sai_get_meter_bucket_stats_ext_fn get_meter_bucket_stats_ext; - sai_clear_meter_bucket_stats_fn clear_meter_bucket_stats; - sai_bulk_object_create_fn create_meter_buckets; - sai_bulk_object_remove_fn remove_meter_buckets; - - sai_create_meter_policy_fn create_meter_policy; - sai_remove_meter_policy_fn remove_meter_policy; - sai_set_meter_policy_attribute_fn set_meter_policy_attribute; - sai_get_meter_policy_attribute_fn get_meter_policy_attribute; - sai_bulk_object_create_fn create_meter_policys; - sai_bulk_object_remove_fn remove_meter_policys; - - sai_create_meter_rule_fn create_meter_rule; - sai_remove_meter_rule_fn remove_meter_rule; - sai_set_meter_rule_attribute_fn set_meter_rule_attribute; - sai_get_meter_rule_attribute_fn get_meter_rule_attribute; - sai_bulk_object_create_fn create_meter_rules; - sai_bulk_object_remove_fn remove_meter_rules; + sai_create_meter_bucket_entry_fn create_meter_bucket_entry; + sai_remove_meter_bucket_entry_fn remove_meter_bucket_entry; + sai_set_meter_bucket_entry_attribute_fn set_meter_bucket_entry_attribute; + sai_get_meter_bucket_entry_attribute_fn get_meter_bucket_entry_attribute; + sai_get_meter_bucket_entry_stats_fn get_meter_bucket_entry_stats; + sai_get_meter_bucket_entry_stats_ext_fn get_meter_bucket_entry_stats_ext; + sai_clear_meter_bucket_entry_stats_fn clear_meter_bucket_entry_stats; + sai_bulk_create_meter_bucket_entry_fn create_meter_bucket_entries; + sai_bulk_remove_meter_bucket_entry_fn remove_meter_bucket_entries; + + sai_create_meter_policy_fn create_meter_policy; + sai_remove_meter_policy_fn remove_meter_policy; + sai_set_meter_policy_attribute_fn set_meter_policy_attribute; + sai_get_meter_policy_attribute_fn get_meter_policy_attribute; + sai_bulk_object_create_fn create_meter_policys; + sai_bulk_object_remove_fn remove_meter_policys; + + sai_create_meter_rule_fn create_meter_rule; + sai_remove_meter_rule_fn remove_meter_rule; + sai_set_meter_rule_attribute_fn set_meter_rule_attribute; + sai_get_meter_rule_attribute_fn get_meter_rule_attribute; + sai_bulk_object_create_fn create_meter_rules; + sai_bulk_object_remove_fn remove_meter_rules; } sai_dash_meter_api_t; diff --git a/experimental/saitypesextensions.h b/experimental/saitypesextensions.h index 578ab74b4..06aa0fc2f 100644 --- a/experimental/saitypesextensions.h +++ b/experimental/saitypesextensions.h @@ -54,7 +54,7 @@ typedef enum _sai_object_type_extensions_t SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY, - SAI_OBJECT_TYPE_METER_BUCKET, + SAI_OBJECT_TYPE_METER_BUCKET_ENTRY, SAI_OBJECT_TYPE_METER_POLICY, diff --git a/inc/saiobject.h b/inc/saiobject.h index 8ee253aac..530dfa06d 100644 --- a/inc/saiobject.h +++ b/inc/saiobject.h @@ -37,6 +37,7 @@ #include /* new experimental object type includes */ +#include #include #include #include @@ -114,6 +115,9 @@ typedef union _sai_object_key_entry_t /** @validonly object_type == SAI_OBJECT_TYPE_VIP_ENTRY */ sai_vip_entry_t vip_entry; + /** @validonly object_type == SAI_OBJECT_TYPE_METER_BUCKET_ENTRY */ + sai_meter_bucket_entry_t meter_bucket_entry; + /* Add new experimental entries above this line */ } sai_object_key_entry_t; diff --git a/meta/style.pm b/meta/style.pm index 6cdaf542c..7caa79839 100644 --- a/meta/style.pm +++ b/meta/style.pm @@ -215,7 +215,10 @@ sub CheckStatsFunction if (not $fnparams =~ /^\w+_id number_of_counters counter_ids( (mode )?counters)?$/) { - LogWarning "invalid stat function $fname params names: $fnparams"; + if (not $fnparams =~ /^\w+_entry number_of_counters counter_ids( (mode )?counters)?$/) + { + LogWarning "invalid stat function $fname params names: $fnparams"; + } } my @paramtypes = $fn =~ /_(?:In|Out|Inout)_\s*(.+?)\s*(?:\w+?)\s*[,\)]/gis; @@ -223,7 +226,10 @@ sub CheckStatsFunction if (not $ptypes =~ /^sai_object_id_t uint32_t const sai_stat_id_t \*( (sai_stats_mode_t )?uint64_t \*)?$/) { - LogWarning "invalid stat function $fname param types: $ptypes"; + if (not $ptypes =~ /^const \w+_entry_t \* uint32_t const sai_stat_id_t \*( (sai_stats_mode_t )?uint64_t \*)?$/) + { + LogWarning "invalid stat function $fname param types: $ptypes"; + } } }