in syncd/FlexCounter.cpp [2299:2431]
std::shared_ptr<BaseCounterContext> FlexCounter::createCounterContext(
_In_ const std::string& context_name,
_In_ const std::string& instance)
{
SWSS_LOG_ENTER();
if (context_name == COUNTER_TYPE_PORT)
{
auto context = std::make_shared<CounterContext<sai_port_stat_t>>(context_name, instance, SAI_OBJECT_TYPE_PORT, m_vendorSai.get(), m_statsMode);
context->always_check_supported_counters = true;
return context;
}
else if (context_name == COUNTER_TYPE_WRED_ECN_PORT)
{
auto context = std::make_shared<CounterContext<sai_port_stat_t>>(context_name, instance, SAI_OBJECT_TYPE_PORT, m_vendorSai.get(), m_statsMode);
context->always_check_supported_counters = true;
return context;
}
else if (context_name == COUNTER_TYPE_PORT_DEBUG)
{
auto context = std::make_shared<CounterContext<sai_port_stat_t>>(context_name, instance, SAI_OBJECT_TYPE_PORT, m_vendorSai.get(), m_statsMode);
context->always_check_supported_counters = true;
context->use_sai_stats_capa_query = false;
context->use_sai_stats_ext = true;
return context;
}
else if (context_name == COUNTER_TYPE_QUEUE)
{
auto context = std::make_shared<CounterContext<sai_queue_stat_t>>(context_name, instance, SAI_OBJECT_TYPE_QUEUE, m_vendorSai.get(), m_statsMode);
context->always_check_supported_counters = true;
context->double_confirm_supported_counters = true;
return context;
}
else if (context_name == COUNTER_TYPE_WRED_ECN_QUEUE)
{
auto context = std::make_shared<CounterContext<sai_queue_stat_t>>(context_name, instance, SAI_OBJECT_TYPE_QUEUE, m_vendorSai.get(), m_statsMode);
context->always_check_supported_counters = true;
context->double_confirm_supported_counters = true;
return context;
}
else if (context_name == COUNTER_TYPE_PG)
{
auto context = std::make_shared<CounterContext<sai_ingress_priority_group_stat_t>>(context_name, instance, SAI_OBJECT_TYPE_INGRESS_PRIORITY_GROUP, m_vendorSai.get(), m_statsMode);
context->always_check_supported_counters = true;
context->double_confirm_supported_counters = true;
return context;
}
else if (context_name == COUNTER_TYPE_RIF)
{
return std::make_shared<CounterContext<sai_router_interface_stat_t>>(context_name, instance, SAI_OBJECT_TYPE_ROUTER_INTERFACE, m_vendorSai.get(), m_statsMode);
}
else if (context_name == COUNTER_TYPE_SWITCH_DEBUG)
{
auto context = std::make_shared<CounterContext<sai_switch_stat_t>>(context_name, instance, SAI_OBJECT_TYPE_SWITCH, m_vendorSai.get(), m_statsMode);
context->always_check_supported_counters = true;
context->use_sai_stats_capa_query = false;
context->use_sai_stats_ext = true;
return context;
}
else if (context_name == COUNTER_TYPE_MACSEC_FLOW)
{
auto context = std::make_shared<CounterContext<sai_macsec_flow_stat_t>>(context_name, instance, SAI_OBJECT_TYPE_MACSEC_FLOW, m_vendorSai.get(), m_statsMode);
context->use_sai_stats_capa_query = false;
return context;
}
else if (context_name == COUNTER_TYPE_MACSEC_SA)
{
auto context = std::make_shared<CounterContext<sai_macsec_sa_stat_t>>(context_name, instance, SAI_OBJECT_TYPE_MACSEC_SA, m_vendorSai.get(), m_statsMode);
context->always_check_supported_counters = true;
context->use_sai_stats_capa_query = false;
context->dont_clear_support_counter = true;
return context;
}
else if (context_name == COUNTER_TYPE_FLOW)
{
auto context = std::make_shared<CounterContext<sai_counter_stat_t>>(context_name, instance, SAI_OBJECT_TYPE_COUNTER, m_vendorSai.get(), m_statsMode);
context->use_sai_stats_capa_query = false;
context->use_sai_stats_ext = true;
return context;
}
else if (context_name == COUNTER_TYPE_TUNNEL)
{
auto context = std::make_shared<CounterContext<sai_tunnel_stat_t>>(context_name, instance, SAI_OBJECT_TYPE_TUNNEL, m_vendorSai.get(), m_statsMode);
context->use_sai_stats_capa_query = false;
return context;
}
else if (context_name == COUNTER_TYPE_BUFFER_POOL)
{
auto context = std::make_shared<CounterContext<sai_buffer_pool_stat_t>>(context_name, instance, SAI_OBJECT_TYPE_BUFFER_POOL, m_vendorSai.get(), m_statsMode);
context->always_check_supported_counters = true;
return context;
}
else if (context_name == COUNTER_TYPE_ENI)
{
auto context = std::make_shared<CounterContext<sai_eni_stat_t>>(context_name, instance, (sai_object_type_t)SAI_OBJECT_TYPE_ENI, m_vendorSai.get(), m_statsMode);
context->always_check_supported_counters = true;
return context;
}
else if (context_name == COUNTER_TYPE_METER_BUCKET)
{
return std::make_shared<DashMeterCounterContext>(context_name, instance, m_vendorSai.get(), m_dbCounters);
}
else if (context_name == ATTR_TYPE_QUEUE)
{
return std::make_shared<AttrContext<sai_queue_attr_t>>(context_name, instance, SAI_OBJECT_TYPE_QUEUE, m_vendorSai.get(), m_statsMode);
}
else if (context_name == ATTR_TYPE_PG)
{
return std::make_shared<AttrContext<sai_ingress_priority_group_attr_t>>(context_name, instance, SAI_OBJECT_TYPE_INGRESS_PRIORITY_GROUP, m_vendorSai.get(), m_statsMode);
}
else if (context_name == ATTR_TYPE_MACSEC_SA)
{
return std::make_shared<AttrContext<sai_macsec_sa_attr_t>>(context_name, instance, SAI_OBJECT_TYPE_MACSEC_SA, m_vendorSai.get(), m_statsMode);
}
else if (context_name == ATTR_TYPE_ACL_COUNTER)
{
return std::make_shared<AttrContext<sai_acl_counter_attr_t>>(context_name, instance, SAI_OBJECT_TYPE_ACL_COUNTER, m_vendorSai.get(), m_statsMode);
}
else if (context_name == COUNTER_TYPE_POLICER)
{
return std::make_shared<CounterContext<sai_policer_stat_t>>(context_name, instance, SAI_OBJECT_TYPE_POLICER, m_vendorSai.get(), m_statsMode);
}
else if (context_name == COUNTER_TYPE_SRV6)
{
return std::make_shared<CounterContext<sai_counter_stat_t>>(context_name, instance, SAI_OBJECT_TYPE_COUNTER, m_vendorSai.get(), m_statsMode);
}
SWSS_LOG_THROW("Invalid counter type %s", context_name.c_str());
// GCC 8.3 requires a return value here
return nullptr;
}