Skip to content

Commit d8b8ca9

Browse files
authored
fix for CRM available bug (sonic-net#1699)
Changes update switch statement in CrmOrch::getResAvailableCounters() to use CrmResourceType enum which guarantees the uniqueness of labels in the switch statement.
1 parent 97f70d1 commit d8b8ca9

File tree

1 file changed

+27
-21
lines changed

1 file changed

+27
-21
lines changed

orchagent/crmorch.cpp

+27-21
Original file line numberDiff line numberDiff line change
@@ -442,24 +442,24 @@ void CrmOrch::getResAvailableCounters()
442442
continue;
443443
}
444444

445-
sai_attribute_t attr;
446-
attr.id = crmResSaiAvailAttrMap.at(res.first);
447-
448-
switch (attr.id)
445+
switch (res.first)
449446
{
450-
case SAI_SWITCH_ATTR_AVAILABLE_IPV4_ROUTE_ENTRY:
451-
case SAI_SWITCH_ATTR_AVAILABLE_IPV6_ROUTE_ENTRY:
452-
case SAI_SWITCH_ATTR_AVAILABLE_IPV4_NEXTHOP_ENTRY:
453-
case SAI_SWITCH_ATTR_AVAILABLE_IPV6_NEXTHOP_ENTRY:
454-
case SAI_SWITCH_ATTR_AVAILABLE_IPV4_NEIGHBOR_ENTRY:
455-
case SAI_SWITCH_ATTR_AVAILABLE_IPV6_NEIGHBOR_ENTRY:
456-
case SAI_SWITCH_ATTR_AVAILABLE_NEXT_HOP_GROUP_MEMBER_ENTRY:
457-
case SAI_SWITCH_ATTR_AVAILABLE_NEXT_HOP_GROUP_ENTRY:
458-
case SAI_SWITCH_ATTR_AVAILABLE_FDB_ENTRY:
459-
case SAI_SWITCH_ATTR_AVAILABLE_IPMC_ENTRY:
460-
case SAI_SWITCH_ATTR_AVAILABLE_SNAT_ENTRY:
461-
case SAI_SWITCH_ATTR_AVAILABLE_DNAT_ENTRY:
447+
case CrmResourceType::CRM_IPV4_ROUTE:
448+
case CrmResourceType::CRM_IPV6_ROUTE:
449+
case CrmResourceType::CRM_IPV4_NEXTHOP:
450+
case CrmResourceType::CRM_IPV6_NEXTHOP:
451+
case CrmResourceType::CRM_IPV4_NEIGHBOR:
452+
case CrmResourceType::CRM_IPV6_NEIGHBOR:
453+
case CrmResourceType::CRM_NEXTHOP_GROUP_MEMBER:
454+
case CrmResourceType::CRM_NEXTHOP_GROUP:
455+
case CrmResourceType::CRM_FDB_ENTRY:
456+
case CrmResourceType::CRM_IPMC_ENTRY:
457+
case CrmResourceType::CRM_SNAT_ENTRY:
458+
case CrmResourceType::CRM_DNAT_ENTRY:
462459
{
460+
sai_attribute_t attr;
461+
attr.id = crmResSaiAvailAttrMap.at(res.first);
462+
463463
sai_status_t status = sai_switch_api->get_switch_attribute(gSwitchId, 1, &attr);
464464
if (status != SAI_STATUS_SUCCESS)
465465
{
@@ -482,9 +482,12 @@ void CrmOrch::getResAvailableCounters()
482482
break;
483483
}
484484

485-
case SAI_SWITCH_ATTR_AVAILABLE_ACL_TABLE:
486-
case SAI_SWITCH_ATTR_AVAILABLE_ACL_TABLE_GROUP:
485+
case CrmResourceType::CRM_ACL_TABLE:
486+
case CrmResourceType::CRM_ACL_GROUP:
487487
{
488+
sai_attribute_t attr;
489+
attr.id = crmResSaiAvailAttrMap.at(res.first);
490+
488491
vector<sai_acl_resource_t> resources(CRM_ACL_RESOURCE_COUNT);
489492

490493
attr.value.aclresource.count = CRM_ACL_RESOURCE_COUNT;
@@ -512,9 +515,12 @@ void CrmOrch::getResAvailableCounters()
512515
break;
513516
}
514517

515-
case SAI_ACL_TABLE_ATTR_AVAILABLE_ACL_ENTRY:
516-
case SAI_ACL_TABLE_ATTR_AVAILABLE_ACL_COUNTER:
518+
case CrmResourceType::CRM_ACL_ENTRY:
519+
case CrmResourceType::CRM_ACL_COUNTER:
517520
{
521+
sai_attribute_t attr;
522+
attr.id = crmResSaiAvailAttrMap.at(res.first);
523+
518524
for (auto &cnt : res.second.countersMap)
519525
{
520526
sai_status_t status = sai_acl_api->get_acl_table_attribute(cnt.second.id, 1, &attr);
@@ -531,7 +537,7 @@ void CrmOrch::getResAvailableCounters()
531537
}
532538

533539
default:
534-
SWSS_LOG_ERROR("Failed to get CRM attribute %u. Unknown attribute.\n", attr.id);
540+
SWSS_LOG_ERROR("Failed to get CRM resource type %u. Unknown resource type.\n", (uint32_t)res.first);
535541
return;
536542
}
537543
}

0 commit comments

Comments
 (0)