Skip to content

Commit 806c656

Browse files
authored
Convert DASH meter bucket object to table entry (#2056)
Bring in SAI API changes from this DASH PR sonic-net/DASH#605
1 parent 684a8ee commit 806c656

File tree

4 files changed

+157
-77
lines changed

4 files changed

+157
-77
lines changed

experimental/saiexperimentaldashmeter.h

Lines changed: 144 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -36,57 +36,84 @@
3636
*/
3737

3838
/**
39-
* @brief Attribute ID for meter bucket
39+
* @brief Attribute data for #SAI_METER_BUCKET_ENTRY_ATTR_ACTION
4040
*/
41-
typedef enum _sai_meter_bucket_attr_t
41+
typedef enum _sai_meter_bucket_entry_action_t
42+
{
43+
SAI_METER_BUCKET_ENTRY_ACTION_UPDATE_METER_BUCKET,
44+
45+
} sai_meter_bucket_entry_action_t;
46+
47+
/**
48+
* @brief Entry for meter_bucket_entry
49+
*/
50+
typedef struct _sai_meter_bucket_entry_t
4251
{
4352
/**
44-
* @brief Start of attributes
53+
* @brief Switch ID
54+
*
55+
* @objects SAI_OBJECT_TYPE_SWITCH
4556
*/
46-
SAI_METER_BUCKET_ATTR_START,
57+
sai_object_id_t switch_id;
4758

4859
/**
4960
* @brief Exact matched key eni_id
5061
*
51-
* @type sai_object_id_t
52-
* @flags MANDATORY_ON_CREATE | CREATE_ONLY
5362
* @objects SAI_OBJECT_TYPE_ENI
5463
*/
55-
SAI_METER_BUCKET_ATTR_ENI_ID = SAI_METER_BUCKET_ATTR_START,
64+
sai_object_id_t eni_id;
5665

5766
/**
5867
* @brief Exact matched key meter_class
68+
*/
69+
sai_uint32_t meter_class;
70+
71+
} sai_meter_bucket_entry_t;
72+
73+
/**
74+
* @brief Attribute ID for meter bucket entry
75+
*/
76+
typedef enum _sai_meter_bucket_entry_attr_t
77+
{
78+
/**
79+
* @brief Start of attributes
80+
*/
81+
SAI_METER_BUCKET_ENTRY_ATTR_START,
82+
83+
/**
84+
* @brief Action
5985
*
60-
* @type sai_uint32_t
61-
* @flags MANDATORY_ON_CREATE | CREATE_ONLY
86+
* @type sai_meter_bucket_entry_action_t
87+
* @flags CREATE_AND_SET
88+
* @default SAI_METER_BUCKET_ENTRY_ACTION_UPDATE_METER_BUCKET
6289
*/
63-
SAI_METER_BUCKET_ATTR_METER_CLASS,
90+
SAI_METER_BUCKET_ENTRY_ATTR_ACTION = SAI_METER_BUCKET_ENTRY_ATTR_START,
6491

6592
/**
6693
* @brief End of attributes
6794
*/
68-
SAI_METER_BUCKET_ATTR_END,
95+
SAI_METER_BUCKET_ENTRY_ATTR_END,
6996

7097
/** Custom range base value */
71-
SAI_METER_BUCKET_ATTR_CUSTOM_RANGE_START = 0x10000000,
98+
SAI_METER_BUCKET_ENTRY_ATTR_CUSTOM_RANGE_START = 0x10000000,
7299

73100
/** End of custom range base */
74-
SAI_METER_BUCKET_ATTR_CUSTOM_RANGE_END,
101+
SAI_METER_BUCKET_ENTRY_ATTR_CUSTOM_RANGE_END,
75102

76-
} sai_meter_bucket_attr_t;
103+
} sai_meter_bucket_entry_attr_t;
77104

78105
/**
79-
* @brief Counter IDs for METER BUCKET
106+
* @brief Counter IDs for meter bucket entry
80107
*/
81-
typedef enum _sai_meter_bucket_stat_t
108+
typedef enum _sai_meter_bucket_entry_stat_t
82109
{
83-
/** DASH METER_BUCKET OUTBOUND_BYTES stat count */
84-
SAI_METER_BUCKET_STAT_OUTBOUND_BYTES,
110+
/** DASH METER_BUCKET_ENTRY OUTBOUND_BYTES stat count */
111+
SAI_METER_BUCKET_ENTRY_STAT_OUTBOUND_BYTES,
85112

86-
/** DASH METER_BUCKET INBOUND_BYTES stat count */
87-
SAI_METER_BUCKET_STAT_INBOUND_BYTES,
113+
/** DASH METER_BUCKET_ENTRY INBOUND_BYTES stat count */
114+
SAI_METER_BUCKET_ENTRY_STAT_INBOUND_BYTES,
88115

89-
} sai_meter_bucket_stat_t;
116+
} sai_meter_bucket_entry_stat_t;
90117

91118
/**
92119
* @brief Attribute ID for meter policy
@@ -197,105 +224,148 @@ typedef enum _sai_meter_rule_attr_t
197224
} sai_meter_rule_attr_t;
198225

199226
/**
200-
* @brief Create meter bucket
227+
* @brief Create meter bucket entry
201228
*
202-
* @param[out] meter_bucket_id Entry id
203-
* @param[in] switch_id Switch id
229+
* @param[in] meter_bucket_entry Entry
204230
* @param[in] attr_count Number of attributes
205231
* @param[in] attr_list Array of attributes
206232
*
207233
* @return #SAI_STATUS_SUCCESS on success Failure status code on error
208234
*/
209-
typedef sai_status_t (*sai_create_meter_bucket_fn)(
210-
_Out_ sai_object_id_t *meter_bucket_id,
211-
_In_ sai_object_id_t switch_id,
235+
typedef sai_status_t (*sai_create_meter_bucket_entry_fn)(
236+
_In_ const sai_meter_bucket_entry_t *meter_bucket_entry,
212237
_In_ uint32_t attr_count,
213238
_In_ const sai_attribute_t *attr_list);
214239

215240
/**
216-
* @brief Remove meter bucket
241+
* @brief Remove meter bucket entry
217242
*
218-
* @param[in] meter_bucket_id Entry id
243+
* @param[in] meter_bucket_entry Entry
219244
*
220245
* @return #SAI_STATUS_SUCCESS on success Failure status code on error
221246
*/
222-
typedef sai_status_t (*sai_remove_meter_bucket_fn)(
223-
_In_ sai_object_id_t meter_bucket_id);
247+
typedef sai_status_t (*sai_remove_meter_bucket_entry_fn)(
248+
_In_ const sai_meter_bucket_entry_t *meter_bucket_entry);
224249

225250
/**
226-
* @brief Set attribute for meter bucket
251+
* @brief Set attribute for meter bucket entry
227252
*
228-
* @param[in] meter_bucket_id Entry id
253+
* @param[in] meter_bucket_entry Entry
229254
* @param[in] attr Attribute
230255
*
231256
* @return #SAI_STATUS_SUCCESS on success Failure status code on error
232257
*/
233-
typedef sai_status_t (*sai_set_meter_bucket_attribute_fn)(
234-
_In_ sai_object_id_t meter_bucket_id,
258+
typedef sai_status_t (*sai_set_meter_bucket_entry_attribute_fn)(
259+
_In_ const sai_meter_bucket_entry_t *meter_bucket_entry,
235260
_In_ const sai_attribute_t *attr);
236261

237262
/**
238-
* @brief Get attribute for meter bucket
263+
* @brief Get attribute for meter bucket entry
239264
*
240-
* @param[in] meter_bucket_id Entry id
265+
* @param[in] meter_bucket_entry Entry
241266
* @param[in] attr_count Number of attributes
242267
* @param[inout] attr_list Array of attributes
243268
*
244269
* @return #SAI_STATUS_SUCCESS on success Failure status code on error
245270
*/
246-
typedef sai_status_t (*sai_get_meter_bucket_attribute_fn)(
247-
_In_ sai_object_id_t meter_bucket_id,
271+
typedef sai_status_t (*sai_get_meter_bucket_entry_attribute_fn)(
272+
_In_ const sai_meter_bucket_entry_t *meter_bucket_entry,
248273
_In_ uint32_t attr_count,
249274
_Inout_ sai_attribute_t *attr_list);
250275

251276
/**
252-
* @brief Get METER_BUCKET statistics counters. Deprecated for backward compatibility.
277+
* @brief Get METER_BUCKET_ENTRY statistics counters. Deprecated for backward compatibility.
253278
*
254-
* @param[in] meter_bucket_id Entry id
279+
* @param[in] meter_bucket_entry Entry
255280
* @param[in] number_of_counters Number of counters in the array
256281
* @param[in] counter_ids Specifies the array of counter ids
257282
* @param[out] counters Array of resulting counter values.
258283
*
259284
* @return #SAI_STATUS_SUCCESS on success, failure status code on error
260285
*/
261-
typedef sai_status_t (*sai_get_meter_bucket_stats_fn)(
262-
_In_ sai_object_id_t meter_bucket_id,
286+
typedef sai_status_t (*sai_get_meter_bucket_entry_stats_fn)(
287+
_In_ const sai_meter_bucket_entry_t *meter_bucket_entry,
263288
_In_ uint32_t number_of_counters,
264289
_In_ const sai_stat_id_t *counter_ids,
265290
_Out_ uint64_t *counters);
266291

267292
/**
268-
* @brief Get METER_BUCKET statistics counters extended.
293+
* @brief Get METER_BUCKET_ENTRY statistics counters extended.
269294
*
270-
* @param[in] meter_bucket_id Entry id
295+
* @param[in] meter_bucket_entry Entry
271296
* @param[in] number_of_counters Number of counters in the array
272297
* @param[in] counter_ids Specifies the array of counter ids
273298
* @param[in] mode Statistics mode
274299
* @param[out] counters Array of resulting counter values.
275300
*
276301
* @return #SAI_STATUS_SUCCESS on success, failure status code on error
277302
*/
278-
typedef sai_status_t (*sai_get_meter_bucket_stats_ext_fn)(
279-
_In_ sai_object_id_t meter_bucket_id,
303+
typedef sai_status_t (*sai_get_meter_bucket_entry_stats_ext_fn)(
304+
_In_ const sai_meter_bucket_entry_t *meter_bucket_entry,
280305
_In_ uint32_t number_of_counters,
281306
_In_ const sai_stat_id_t *counter_ids,
282307
_In_ sai_stats_mode_t mode,
283308
_Out_ uint64_t *counters);
284309

285310
/**
286-
* @brief Clear METER_BUCKET statistics counters.
311+
* @brief Clear METER_BUCKET_ENTRY statistics counters.
287312
*
288-
* @param[in] meter_bucket_id Entry id
313+
* @param[in] meter_bucket_entry Entry
289314
* @param[in] number_of_counters Number of counters in the array
290315
* @param[in] counter_ids Specifies the array of counter ids
291316
*
292317
* @return #SAI_STATUS_SUCCESS on success, failure status code on error
293318
*/
294-
typedef sai_status_t (*sai_clear_meter_bucket_stats_fn)(
295-
_In_ sai_object_id_t meter_bucket_id,
319+
typedef sai_status_t (*sai_clear_meter_bucket_entry_stats_fn)(
320+
_In_ const sai_meter_bucket_entry_t *meter_bucket_entry,
296321
_In_ uint32_t number_of_counters,
297322
_In_ const sai_stat_id_t *counter_ids);
298323

324+
/**
325+
* @brief Bulk create meter bucket entry
326+
*
327+
* @param[in] object_count Number of objects to create
328+
* @param[in] meter_bucket_entry List of object to create
329+
* @param[in] attr_count List of attr_count. Caller passes the number
330+
* of attribute for each object to create.
331+
* @param[in] attr_list List of attributes for every object.
332+
* @param[in] mode Bulk operation error handling mode.
333+
* @param[out] object_statuses List of status for every object. Caller needs to
334+
* allocate the buffer
335+
*
336+
* @return #SAI_STATUS_SUCCESS on success when all objects are created or
337+
* #SAI_STATUS_FAILURE when any of the objects fails to create. When there is
338+
* failure, Caller is expected to go through the list of returned statuses to
339+
* find out which fails and which succeeds.
340+
*/
341+
typedef sai_status_t (*sai_bulk_create_meter_bucket_entry_fn)(
342+
_In_ uint32_t object_count,
343+
_In_ const sai_meter_bucket_entry_t *meter_bucket_entry,
344+
_In_ const uint32_t *attr_count,
345+
_In_ const sai_attribute_t **attr_list,
346+
_In_ sai_bulk_op_error_mode_t mode,
347+
_Out_ sai_status_t *object_statuses);
348+
349+
/**
350+
* @brief Bulk remove meter bucket entry
351+
*
352+
* @param[in] object_count Number of objects to remove
353+
* @param[in] meter_bucket_entry List of objects to remove
354+
* @param[in] mode Bulk operation error handling mode.
355+
* @param[out] object_statuses List of status for every object. Caller needs to
356+
* allocate the buffer
357+
*
358+
* @return #SAI_STATUS_SUCCESS on success when all objects are removed or
359+
* #SAI_STATUS_FAILURE when any of the objects fails to remove. When there is
360+
* failure, Caller is expected to go through the list of returned statuses to
361+
* find out which fails and which succeeds.
362+
*/
363+
typedef sai_status_t (*sai_bulk_remove_meter_bucket_entry_fn)(
364+
_In_ uint32_t object_count,
365+
_In_ const sai_meter_bucket_entry_t *meter_bucket_entry,
366+
_In_ sai_bulk_op_error_mode_t mode,
367+
_Out_ sai_status_t *object_statuses);
368+
299369
/**
300370
* @brief Create meter policy
301371
*
@@ -402,29 +472,29 @@ typedef sai_status_t (*sai_get_meter_rule_attribute_fn)(
402472

403473
typedef struct _sai_dash_meter_api_t
404474
{
405-
sai_create_meter_bucket_fn create_meter_bucket;
406-
sai_remove_meter_bucket_fn remove_meter_bucket;
407-
sai_set_meter_bucket_attribute_fn set_meter_bucket_attribute;
408-
sai_get_meter_bucket_attribute_fn get_meter_bucket_attribute;
409-
sai_get_meter_bucket_stats_fn get_meter_bucket_stats;
410-
sai_get_meter_bucket_stats_ext_fn get_meter_bucket_stats_ext;
411-
sai_clear_meter_bucket_stats_fn clear_meter_bucket_stats;
412-
sai_bulk_object_create_fn create_meter_buckets;
413-
sai_bulk_object_remove_fn remove_meter_buckets;
414-
415-
sai_create_meter_policy_fn create_meter_policy;
416-
sai_remove_meter_policy_fn remove_meter_policy;
417-
sai_set_meter_policy_attribute_fn set_meter_policy_attribute;
418-
sai_get_meter_policy_attribute_fn get_meter_policy_attribute;
419-
sai_bulk_object_create_fn create_meter_policys;
420-
sai_bulk_object_remove_fn remove_meter_policys;
421-
422-
sai_create_meter_rule_fn create_meter_rule;
423-
sai_remove_meter_rule_fn remove_meter_rule;
424-
sai_set_meter_rule_attribute_fn set_meter_rule_attribute;
425-
sai_get_meter_rule_attribute_fn get_meter_rule_attribute;
426-
sai_bulk_object_create_fn create_meter_rules;
427-
sai_bulk_object_remove_fn remove_meter_rules;
475+
sai_create_meter_bucket_entry_fn create_meter_bucket_entry;
476+
sai_remove_meter_bucket_entry_fn remove_meter_bucket_entry;
477+
sai_set_meter_bucket_entry_attribute_fn set_meter_bucket_entry_attribute;
478+
sai_get_meter_bucket_entry_attribute_fn get_meter_bucket_entry_attribute;
479+
sai_get_meter_bucket_entry_stats_fn get_meter_bucket_entry_stats;
480+
sai_get_meter_bucket_entry_stats_ext_fn get_meter_bucket_entry_stats_ext;
481+
sai_clear_meter_bucket_entry_stats_fn clear_meter_bucket_entry_stats;
482+
sai_bulk_create_meter_bucket_entry_fn create_meter_bucket_entries;
483+
sai_bulk_remove_meter_bucket_entry_fn remove_meter_bucket_entries;
484+
485+
sai_create_meter_policy_fn create_meter_policy;
486+
sai_remove_meter_policy_fn remove_meter_policy;
487+
sai_set_meter_policy_attribute_fn set_meter_policy_attribute;
488+
sai_get_meter_policy_attribute_fn get_meter_policy_attribute;
489+
sai_bulk_object_create_fn create_meter_policys;
490+
sai_bulk_object_remove_fn remove_meter_policys;
491+
492+
sai_create_meter_rule_fn create_meter_rule;
493+
sai_remove_meter_rule_fn remove_meter_rule;
494+
sai_set_meter_rule_attribute_fn set_meter_rule_attribute;
495+
sai_get_meter_rule_attribute_fn get_meter_rule_attribute;
496+
sai_bulk_object_create_fn create_meter_rules;
497+
sai_bulk_object_remove_fn remove_meter_rules;
428498

429499
} sai_dash_meter_api_t;
430500

experimental/saitypesextensions.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ typedef enum _sai_object_type_extensions_t
5454

5555
SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY,
5656

57-
SAI_OBJECT_TYPE_METER_BUCKET,
57+
SAI_OBJECT_TYPE_METER_BUCKET_ENTRY,
5858

5959
SAI_OBJECT_TYPE_METER_POLICY,
6060

inc/saiobject.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include <saisrv6.h>
3838

3939
/* new experimental object type includes */
40+
#include <saiexperimentaldashmeter.h>
4041
#include <saiexperimentaldashvip.h>
4142
#include <saiexperimentaldashpavalidation.h>
4243
#include <saiexperimentaldashvnet.h>
@@ -114,6 +115,9 @@ typedef union _sai_object_key_entry_t
114115
/** @validonly object_type == SAI_OBJECT_TYPE_VIP_ENTRY */
115116
sai_vip_entry_t vip_entry;
116117

118+
/** @validonly object_type == SAI_OBJECT_TYPE_METER_BUCKET_ENTRY */
119+
sai_meter_bucket_entry_t meter_bucket_entry;
120+
117121
/* Add new experimental entries above this line */
118122

119123
} sai_object_key_entry_t;

meta/style.pm

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,15 +215,21 @@ sub CheckStatsFunction
215215

216216
if (not $fnparams =~ /^\w+_id number_of_counters counter_ids( (mode )?counters)?$/)
217217
{
218-
LogWarning "invalid stat function $fname params names: $fnparams";
218+
if (not $fnparams =~ /^\w+_entry number_of_counters counter_ids( (mode )?counters)?$/)
219+
{
220+
LogWarning "invalid stat function $fname params names: $fnparams";
221+
}
219222
}
220223

221224
my @paramtypes = $fn =~ /_(?:In|Out|Inout)_\s*(.+?)\s*(?:\w+?)\s*[,\)]/gis;
222225
my $ptypes = "@paramtypes";
223226

224227
if (not $ptypes =~ /^sai_object_id_t uint32_t const sai_stat_id_t \*( (sai_stats_mode_t )?uint64_t \*)?$/)
225228
{
226-
LogWarning "invalid stat function $fname param types: $ptypes";
229+
if (not $ptypes =~ /^const \w+_entry_t \* uint32_t const sai_stat_id_t \*( (sai_stats_mode_t )?uint64_t \*)?$/)
230+
{
231+
LogWarning "invalid stat function $fname param types: $ptypes";
232+
}
227233
}
228234
}
229235

0 commit comments

Comments
 (0)