From d8b8ca941f6a883451c86fc57305b9f2e5d20a58 Mon Sep 17 00:00:00 2001 From: Ann Pokora <44511240+qbdwlr@users.noreply.github.com> Date: Fri, 9 Apr 2021 11:41:08 -0400 Subject: [PATCH] fix for CRM available bug (#1699) Changes update switch statement in CrmOrch::getResAvailableCounters() to use CrmResourceType enum which guarantees the uniqueness of labels in the switch statement. --- orchagent/crmorch.cpp | 48 ++++++++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/orchagent/crmorch.cpp b/orchagent/crmorch.cpp index 659d35fb728a..14b0cab4d159 100644 --- a/orchagent/crmorch.cpp +++ b/orchagent/crmorch.cpp @@ -442,24 +442,24 @@ void CrmOrch::getResAvailableCounters() continue; } - sai_attribute_t attr; - attr.id = crmResSaiAvailAttrMap.at(res.first); - - switch (attr.id) + switch (res.first) { - case SAI_SWITCH_ATTR_AVAILABLE_IPV4_ROUTE_ENTRY: - case SAI_SWITCH_ATTR_AVAILABLE_IPV6_ROUTE_ENTRY: - case SAI_SWITCH_ATTR_AVAILABLE_IPV4_NEXTHOP_ENTRY: - case SAI_SWITCH_ATTR_AVAILABLE_IPV6_NEXTHOP_ENTRY: - case SAI_SWITCH_ATTR_AVAILABLE_IPV4_NEIGHBOR_ENTRY: - case SAI_SWITCH_ATTR_AVAILABLE_IPV6_NEIGHBOR_ENTRY: - case SAI_SWITCH_ATTR_AVAILABLE_NEXT_HOP_GROUP_MEMBER_ENTRY: - case SAI_SWITCH_ATTR_AVAILABLE_NEXT_HOP_GROUP_ENTRY: - case SAI_SWITCH_ATTR_AVAILABLE_FDB_ENTRY: - case SAI_SWITCH_ATTR_AVAILABLE_IPMC_ENTRY: - case SAI_SWITCH_ATTR_AVAILABLE_SNAT_ENTRY: - case SAI_SWITCH_ATTR_AVAILABLE_DNAT_ENTRY: + case CrmResourceType::CRM_IPV4_ROUTE: + case CrmResourceType::CRM_IPV6_ROUTE: + case CrmResourceType::CRM_IPV4_NEXTHOP: + case CrmResourceType::CRM_IPV6_NEXTHOP: + case CrmResourceType::CRM_IPV4_NEIGHBOR: + case CrmResourceType::CRM_IPV6_NEIGHBOR: + case CrmResourceType::CRM_NEXTHOP_GROUP_MEMBER: + case CrmResourceType::CRM_NEXTHOP_GROUP: + case CrmResourceType::CRM_FDB_ENTRY: + case CrmResourceType::CRM_IPMC_ENTRY: + case CrmResourceType::CRM_SNAT_ENTRY: + case CrmResourceType::CRM_DNAT_ENTRY: { + sai_attribute_t attr; + attr.id = crmResSaiAvailAttrMap.at(res.first); + sai_status_t status = sai_switch_api->get_switch_attribute(gSwitchId, 1, &attr); if (status != SAI_STATUS_SUCCESS) { @@ -482,9 +482,12 @@ void CrmOrch::getResAvailableCounters() break; } - case SAI_SWITCH_ATTR_AVAILABLE_ACL_TABLE: - case SAI_SWITCH_ATTR_AVAILABLE_ACL_TABLE_GROUP: + case CrmResourceType::CRM_ACL_TABLE: + case CrmResourceType::CRM_ACL_GROUP: { + sai_attribute_t attr; + attr.id = crmResSaiAvailAttrMap.at(res.first); + vector resources(CRM_ACL_RESOURCE_COUNT); attr.value.aclresource.count = CRM_ACL_RESOURCE_COUNT; @@ -512,9 +515,12 @@ void CrmOrch::getResAvailableCounters() break; } - case SAI_ACL_TABLE_ATTR_AVAILABLE_ACL_ENTRY: - case SAI_ACL_TABLE_ATTR_AVAILABLE_ACL_COUNTER: + case CrmResourceType::CRM_ACL_ENTRY: + case CrmResourceType::CRM_ACL_COUNTER: { + sai_attribute_t attr; + attr.id = crmResSaiAvailAttrMap.at(res.first); + for (auto &cnt : res.second.countersMap) { sai_status_t status = sai_acl_api->get_acl_table_attribute(cnt.second.id, 1, &attr); @@ -531,7 +537,7 @@ void CrmOrch::getResAvailableCounters() } default: - SWSS_LOG_ERROR("Failed to get CRM attribute %u. Unknown attribute.\n", attr.id); + SWSS_LOG_ERROR("Failed to get CRM resource type %u. Unknown resource type.\n", (uint32_t)res.first); return; } }