From bb10cfce7c1528b1be7bbf7cdd20d7ed23c3c562 Mon Sep 17 00:00:00 2001 From: Stephen Sun Date: Wed, 27 Nov 2024 03:43:17 +0200 Subject: [PATCH] Support split counter IDs based on prefix Signed-off-by: Stephen Sun --- orchagent/flexcounterorch.cpp | 4 ++++ orchagent/saihelper.cpp | 19 +++++++++++++++++++ orchagent/saihelper.h | 4 ++++ 3 files changed, 27 insertions(+) diff --git a/orchagent/flexcounterorch.cpp b/orchagent/flexcounterorch.cpp index 931488b857e..4c7d6017941 100644 --- a/orchagent/flexcounterorch.cpp +++ b/orchagent/flexcounterorch.cpp @@ -255,6 +255,10 @@ void FlexCounterOrch::doTask(Consumer &consumer) { setFlexCounterGroupBulkChunkSize(flexCounterGroupMap[key], value, false); } + else if (field == BULK_CHUNK_SIZE_PER_PREFIX_FIELD) + { + setFlexCounterGroupBulkChunkSizePerPrefix(flexCounterGroupMap[key], value, false); + } else { SWSS_LOG_NOTICE("Unsupported field %s", field.c_str()); diff --git a/orchagent/saihelper.cpp b/orchagent/saihelper.cpp index 91776a0ab39..0ef3e272859 100644 --- a/orchagent/saihelper.cpp +++ b/orchagent/saihelper.cpp @@ -855,6 +855,7 @@ static inline void initSaiRedisCounterEmptyParameter(sai_redis_flex_counter_grou initSaiRedisCounterEmptyParameter(flex_counter_group_param.plugin_name); initSaiRedisCounterEmptyParameter(flex_counter_group_param.plugins); initSaiRedisCounterEmptyParameter(flex_counter_group_param.bulk_chunk_size); + initSaiRedisCounterEmptyParameter(flex_counter_group_param.bulk_chunk_size_per_prefix); } static inline void initSaiRedisCounterParameterFromString(sai_s8_list_t &sai_s8_list, const std::string &str) @@ -940,6 +941,7 @@ void setFlexCounterGroupParameter(const string &group, attr.value.ptr = &flex_counter_group_param; initSaiRedisCounterEmptyParameter(flex_counter_group_param.bulk_chunk_size); + initSaiRedisCounterEmptyParameter(flex_counter_group_param.bulk_chunk_size_per_prefix); initSaiRedisCounterParameterFromString(flex_counter_group_param.counter_group_name, group); initSaiRedisCounterParameterFromString(flex_counter_group_param.poll_interval, poll_interval); initSaiRedisCounterParameterFromString(flex_counter_group_param.operation, operation); @@ -1036,6 +1038,23 @@ void setFlexCounterGroupBulkChunkSize(const std::string &group, notifySyncdCounterOperation(is_gearbox, attr); } +void setFlexCounterGroupBulkChunkSizePerPrefix(const std::string &group, + const std::string &bulk_chunk_size_per_prefix, + bool is_gearbox) +{ + sai_attribute_t attr; + sai_redis_flex_counter_group_parameter_t flex_counter_group_param; + + attr.id = SAI_REDIS_SWITCH_ATTR_FLEX_COUNTER_GROUP; + attr.value.ptr = &flex_counter_group_param; + + initSaiRedisCounterEmptyParameter(flex_counter_group_param); + initSaiRedisCounterParameterFromString(flex_counter_group_param.counter_group_name, group); + initSaiRedisCounterParameterFromString(flex_counter_group_param.bulk_chunk_size_per_prefix, bulk_chunk_size_per_prefix); + + notifySyncdCounterOperation(is_gearbox, attr); +} + void delFlexCounterGroup(const std::string &group, bool is_gearbox) { diff --git a/orchagent/saihelper.h b/orchagent/saihelper.h index 8e1223f1ac8..3ba335fd6e5 100644 --- a/orchagent/saihelper.h +++ b/orchagent/saihelper.h @@ -43,6 +43,10 @@ void setFlexCounterGroupBulkChunkSize(const std::string &group, const std::string &bulk_size, bool is_gearbox); +void setFlexCounterGroupBulkChunkSizePerPrefix(const std::string &group, + const std::string &bulk_chunk_size_per_prefix, + bool is_gearbox); + void delFlexCounterGroup(const std::string &group, bool is_gearbox=false);