sai_status_t sai_get_object_count()

in fboss/agent/hw/sai/fake/FakeSaiObject.cpp [17:185]


sai_status_t sai_get_object_count(
    sai_object_id_t /* switch_id */,
    sai_object_type_t object_type,
    uint32_t* count) {
  *count = 0;
  auto fs = facebook::fboss::FakeSai::getInstance();
  switch (object_type) {
    case SAI_OBJECT_TYPE_PORT:
      // All ports excluding CPU port
      *count = fs->portManager.map().size() - 1;
      break;
    case SAI_OBJECT_TYPE_PORT_SERDES:
      *count = fs->portSerdesManager.map().size();
      break;
    case SAI_OBJECT_TYPE_PORT_CONNECTOR:
      *count = fs->portConnectorManager.map().size();
      break;
    case SAI_OBJECT_TYPE_VIRTUAL_ROUTER:
      *count = fs->virtualRouteManager.map().size();
      break;
    case SAI_OBJECT_TYPE_NEXT_HOP:
      *count = fs->nextHopManager.map().size();
      break;
    case SAI_OBJECT_TYPE_NEXT_HOP_GROUP:
      *count = fs->nextHopGroupManager.map().size();
      break;
    case SAI_OBJECT_TYPE_NEXT_HOP_GROUP_MEMBER: {
      for (const auto& nhg : fs->nextHopGroupManager.map()) {
        *count += nhg.second.fm().map().size();
      }
      break;
    }
    case SAI_OBJECT_TYPE_ROUTER_INTERFACE:
      *count = fs->routeInterfaceManager.map().size();
      break;
    case SAI_OBJECT_TYPE_HASH:
      *count = fs->hashManager.map().size();
      break;
    case SAI_OBJECT_TYPE_HOSTIF_TRAP_GROUP:
      *count = fs->hostifTrapGroupManager.map().size();
      break;
    case SAI_OBJECT_TYPE_FDB_ENTRY:
      *count = fs->fdbManager.map().size();
      break;
    case SAI_OBJECT_TYPE_SWITCH:
      *count = fs->switchManager.map().size();
      break;
    case SAI_OBJECT_TYPE_HOSTIF_TRAP:
      *count = fs->hostIfTrapManager.map().size();
      break;
    case SAI_OBJECT_TYPE_NEIGHBOR_ENTRY:
      *count = fs->neighborManager.map().size();
      break;
    case SAI_OBJECT_TYPE_ROUTE_ENTRY:
      *count = fs->routeManager.map().size();
      break;
    case SAI_OBJECT_TYPE_VLAN:
      *count = fs->vlanManager.map().size();
      break;
    case SAI_OBJECT_TYPE_VLAN_MEMBER: {
      for (const auto& v : fs->vlanManager.map()) {
        *count += v.second.fm().map().size();
      }
      break;
    }
    case SAI_OBJECT_TYPE_BRIDGE:
      *count = fs->bridgeManager.map().size();
      break;
    case SAI_OBJECT_TYPE_BUFFER_POOL:
      *count = fs->bufferPoolManager.map().size();
      break;
    case SAI_OBJECT_TYPE_BUFFER_PROFILE:
      *count = fs->bufferProfileManager.map().size();
      break;
    case SAI_OBJECT_TYPE_BRIDGE_PORT: {
      for (const auto& br : fs->bridgeManager.map()) {
        *count += br.second.fm().map().size();
      }
      break;
    }
    case SAI_OBJECT_TYPE_QOS_MAP:
      *count = fs->qosMapManager.map().size();
      break;
    case SAI_OBJECT_TYPE_QUEUE:
      *count = fs->queueManager.map().size();
      break;
    case SAI_OBJECT_TYPE_SAMPLEPACKET:
      *count = fs->samplePacketManager.map().size();
      break;
    case SAI_OBJECT_TYPE_SCHEDULER:
      *count = fs->scheduleManager.map().size();
      break;
    case SAI_OBJECT_TYPE_INSEG_ENTRY:
      *count = fs->inSegEntryManager.map().size();
      break;
    case SAI_OBJECT_TYPE_ACL_TABLE_GROUP:
      *count = fs->aclTableGroupManager.map().size();
      break;
    case SAI_OBJECT_TYPE_ACL_TABLE_GROUP_MEMBER: {
      for (const auto& aclTableGroupMember : fs->aclTableGroupManager.map()) {
        *count += aclTableGroupMember.second.fm().map().size();
      }
      break;
    }
    case SAI_OBJECT_TYPE_ACL_TABLE:
      *count = fs->aclTableManager.map().size();
      break;
    case SAI_OBJECT_TYPE_ACL_ENTRY: {
      *count = fs->aclEntryManager.map().size();
      break;
    }
    case SAI_OBJECT_TYPE_ACL_COUNTER:
      *count = fs->aclCounterManager.map().size();
      break;
    case SAI_OBJECT_TYPE_DEBUG_COUNTER:
      *count = fs->debugCounterManager.map().size();
      break;
    case SAI_OBJECT_TYPE_WRED:
      *count = fs->wredManager.map().size();
      break;
    case SAI_OBJECT_TYPE_TAM_REPORT:
      *count = fs->tamReportManager.map().size();
      break;
    case SAI_OBJECT_TYPE_TAM_EVENT_ACTION:
      *count = fs->tamEventActionManager.map().size();
      break;
    case SAI_OBJECT_TYPE_TAM_EVENT:
      *count = fs->tamEventManager.map().size();
      break;
    case SAI_OBJECT_TYPE_TAM:
      *count = fs->tamManager.map().size();
      break;
    case SAI_OBJECT_TYPE_MIRROR_SESSION:
      *count = fs->mirrorManager.map().size();
      break;
    case SAI_OBJECT_TYPE_LAG:
      *count = fs->lagManager.map().size();
      break;
    case SAI_OBJECT_TYPE_LAG_MEMBER: {
      for (const auto& obj : fs->lagManager.map()) {
        *count += obj.second.fm().map().size();
      }
      break;
    }
    case SAI_OBJECT_TYPE_MACSEC: {
      *count = fs->macsecManager.map().size();
      break;
    }
    case SAI_OBJECT_TYPE_MACSEC_PORT: {
      *count = fs->macsecPortManager.map().size();
      break;
    }
    case SAI_OBJECT_TYPE_MACSEC_SA: {
      *count = fs->macsecSAManager.map().size();
      break;
    }
    case SAI_OBJECT_TYPE_MACSEC_SC: {
      *count = fs->macsecSCManager.map().size();
      break;
    }
    case SAI_OBJECT_TYPE_MACSEC_FLOW: {
      *count = fs->macsecFlowManager.map().size();
      break;
    }
    default:
      return SAI_STATUS_INVALID_PARAMETER;
  }
  return SAI_STATUS_SUCCESS;
}