in vslib/VirtualSwitchSaiInterface.cpp [977:1124]
sai_status_t VirtualSwitchSaiInterface::queryStatsCapability(
_In_ sai_object_id_t switchId,
_In_ sai_object_type_t objectType,
_Inout_ sai_stat_capability_list_t *stats_capability)
{
SWSS_LOG_ENTER();
if (m_switchStateMap.find(switchId) == m_switchStateMap.end())
{
SWSS_LOG_ERROR("failed to find switch %s in switch state map", sai_serialize_object_id(switchId).c_str());
return SAI_STATUS_FAILURE;
}
auto ss = m_switchStateMap.at(switchId);
if (objectType == SAI_OBJECT_TYPE_QUEUE)
{
if (stats_capability->count < SAI_OBJECT_TYPE_QUEUE)
{
stats_capability->count = SAI_QUEUE_STAT_DELAY_WATERMARK_NS;
return SAI_STATUS_BUFFER_OVERFLOW;
}
stats_capability->count = SAI_QUEUE_STAT_DELAY_WATERMARK_NS;
for(uint32_t i = 0; i < stats_capability->count; i++)
{
stats_capability->list[i].stat_modes = SAI_STATS_MODE_READ_AND_CLEAR | SAI_STATS_MODE_READ;
stats_capability->list[i].stat_enum = i;
}
return SAI_STATUS_SUCCESS;
}
else if (objectType == SAI_OBJECT_TYPE_PORT)
{
if (stats_capability->count < 91)
{
stats_capability->count = 91;
return SAI_STATUS_BUFFER_OVERFLOW;
}
stats_capability->count = 91;
stats_capability->list[0].stat_enum = SAI_PORT_STAT_IF_IN_OCTETS;
stats_capability->list[1].stat_enum = SAI_PORT_STAT_IF_IN_UCAST_PKTS;
stats_capability->list[2].stat_enum = SAI_PORT_STAT_IF_IN_NON_UCAST_PKTS;
stats_capability->list[3].stat_enum = SAI_PORT_STAT_IF_IN_DISCARDS;
stats_capability->list[4].stat_enum = SAI_PORT_STAT_IF_IN_ERRORS;
stats_capability->list[5].stat_enum = SAI_PORT_STAT_IF_IN_UNKNOWN_PROTOS;
stats_capability->list[6].stat_enum = SAI_PORT_STAT_IF_IN_BROADCAST_PKTS;
stats_capability->list[7].stat_enum = SAI_PORT_STAT_IF_IN_MULTICAST_PKTS;
stats_capability->list[8].stat_enum = SAI_PORT_STAT_IF_IN_VLAN_DISCARDS;
stats_capability->list[9].stat_enum = SAI_PORT_STAT_IF_OUT_OCTETS;
stats_capability->list[10].stat_enum = SAI_PORT_STAT_IF_OUT_UCAST_PKTS;
stats_capability->list[11].stat_enum = SAI_PORT_STAT_IF_OUT_NON_UCAST_PKTS;
stats_capability->list[12].stat_enum = SAI_PORT_STAT_IF_OUT_DISCARDS;
stats_capability->list[13].stat_enum = SAI_PORT_STAT_IF_OUT_ERRORS;
stats_capability->list[14].stat_enum = SAI_PORT_STAT_IF_OUT_QLEN;
stats_capability->list[15].stat_enum = SAI_PORT_STAT_IF_OUT_BROADCAST_PKTS;
stats_capability->list[16].stat_enum = SAI_PORT_STAT_IF_OUT_MULTICAST_PKTS;
stats_capability->list[17].stat_enum = SAI_PORT_STAT_ETHER_STATS_DROP_EVENTS;
stats_capability->list[18].stat_enum = SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS;
stats_capability->list[19].stat_enum = SAI_PORT_STAT_ETHER_STATS_BROADCAST_PKTS;
stats_capability->list[20].stat_enum = SAI_PORT_STAT_ETHER_STATS_UNDERSIZE_PKTS;
stats_capability->list[21].stat_enum = SAI_PORT_STAT_ETHER_STATS_FRAGMENTS;
stats_capability->list[22].stat_enum = SAI_PORT_STAT_ETHER_STATS_PKTS_64_OCTETS;
stats_capability->list[23].stat_enum = SAI_PORT_STAT_ETHER_STATS_PKTS_65_TO_127_OCTETS;
stats_capability->list[24].stat_enum = SAI_PORT_STAT_ETHER_STATS_PKTS_128_TO_255_OCTETS;
stats_capability->list[25].stat_enum = SAI_PORT_STAT_ETHER_STATS_PKTS_256_TO_511_OCTETS;
stats_capability->list[26].stat_enum = SAI_PORT_STAT_ETHER_STATS_PKTS_512_TO_1023_OCTETS;
stats_capability->list[27].stat_enum = SAI_PORT_STAT_ETHER_STATS_PKTS_1024_TO_1518_OCTETS;
stats_capability->list[28].stat_enum = SAI_PORT_STAT_ETHER_STATS_PKTS_1519_TO_2047_OCTETS;
stats_capability->list[29].stat_enum = SAI_PORT_STAT_ETHER_STATS_PKTS_2048_TO_4095_OCTETS;
stats_capability->list[30].stat_enum = SAI_PORT_STAT_ETHER_STATS_PKTS_4096_TO_9216_OCTETS;
stats_capability->list[31].stat_enum = SAI_PORT_STAT_ETHER_STATS_PKTS_9217_TO_16383_OCTETS;
stats_capability->list[32].stat_enum = SAI_PORT_STAT_ETHER_STATS_OVERSIZE_PKTS;
stats_capability->list[33].stat_enum = SAI_PORT_STAT_ETHER_RX_OVERSIZE_PKTS;
stats_capability->list[34].stat_enum = SAI_PORT_STAT_ETHER_TX_OVERSIZE_PKTS;
stats_capability->list[35].stat_enum = SAI_PORT_STAT_ETHER_STATS_JABBERS;
stats_capability->list[36].stat_enum = SAI_PORT_STAT_ETHER_STATS_OCTETS;
stats_capability->list[37].stat_enum = SAI_PORT_STAT_ETHER_STATS_PKTS;
stats_capability->list[38].stat_enum = SAI_PORT_STAT_ETHER_STATS_COLLISIONS;
stats_capability->list[39].stat_enum = SAI_PORT_STAT_ETHER_STATS_CRC_ALIGN_ERRORS;
stats_capability->list[40].stat_enum = SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS;
stats_capability->list[41].stat_enum = SAI_PORT_STAT_ETHER_STATS_RX_NO_ERRORS;
stats_capability->list[42].stat_enum = SAI_PORT_STAT_GREEN_WRED_DROPPED_PACKETS;
stats_capability->list[43].stat_enum = SAI_PORT_STAT_GREEN_WRED_DROPPED_BYTES;
stats_capability->list[44].stat_enum = SAI_PORT_STAT_YELLOW_WRED_DROPPED_PACKETS;
stats_capability->list[45].stat_enum = SAI_PORT_STAT_YELLOW_WRED_DROPPED_BYTES;
stats_capability->list[46].stat_enum = SAI_PORT_STAT_RED_WRED_DROPPED_PACKETS;
stats_capability->list[47].stat_enum = SAI_PORT_STAT_RED_WRED_DROPPED_BYTES;
stats_capability->list[48].stat_enum = SAI_PORT_STAT_WRED_DROPPED_PACKETS;
stats_capability->list[49].stat_enum = SAI_PORT_STAT_WRED_DROPPED_BYTES;
stats_capability->list[50].stat_enum = SAI_PORT_STAT_ECN_MARKED_PACKETS;
stats_capability->list[51].stat_enum = SAI_PORT_STAT_PFC_0_RX_PKTS;
stats_capability->list[52].stat_enum = SAI_PORT_STAT_PFC_0_TX_PKTS;
stats_capability->list[53].stat_enum = SAI_PORT_STAT_PFC_1_RX_PKTS;
stats_capability->list[54].stat_enum = SAI_PORT_STAT_PFC_1_TX_PKTS;
stats_capability->list[55].stat_enum = SAI_PORT_STAT_PFC_2_RX_PKTS;
stats_capability->list[56].stat_enum = SAI_PORT_STAT_PFC_2_TX_PKTS;
stats_capability->list[57].stat_enum = SAI_PORT_STAT_PFC_3_RX_PKTS;
stats_capability->list[58].stat_enum = SAI_PORT_STAT_PFC_3_TX_PKTS;
stats_capability->list[59].stat_enum = SAI_PORT_STAT_PFC_4_RX_PKTS;
stats_capability->list[60].stat_enum = SAI_PORT_STAT_PFC_4_TX_PKTS;
stats_capability->list[61].stat_enum = SAI_PORT_STAT_PFC_5_RX_PKTS;
stats_capability->list[62].stat_enum = SAI_PORT_STAT_PFC_5_TX_PKTS;
stats_capability->list[63].stat_enum = SAI_PORT_STAT_PFC_6_RX_PKTS;
stats_capability->list[64].stat_enum = SAI_PORT_STAT_PFC_6_TX_PKTS;
stats_capability->list[65].stat_enum = SAI_PORT_STAT_PFC_7_RX_PKTS;
stats_capability->list[66].stat_enum = SAI_PORT_STAT_PFC_7_TX_PKTS;
stats_capability->list[67].stat_enum = SAI_PORT_STAT_PFC_0_RX_PAUSE_DURATION_US;
stats_capability->list[68].stat_enum = SAI_PORT_STAT_PFC_0_TX_PAUSE_DURATION_US;
stats_capability->list[69].stat_enum = SAI_PORT_STAT_PFC_1_RX_PAUSE_DURATION_US;
stats_capability->list[70].stat_enum = SAI_PORT_STAT_PFC_1_TX_PAUSE_DURATION_US;
stats_capability->list[71].stat_enum = SAI_PORT_STAT_PFC_2_RX_PAUSE_DURATION_US;
stats_capability->list[72].stat_enum = SAI_PORT_STAT_PFC_2_TX_PAUSE_DURATION_US;
stats_capability->list[73].stat_enum = SAI_PORT_STAT_PFC_3_RX_PAUSE_DURATION_US;
stats_capability->list[74].stat_enum = SAI_PORT_STAT_PFC_3_TX_PAUSE_DURATION_US;
stats_capability->list[75].stat_enum = SAI_PORT_STAT_PFC_4_RX_PAUSE_DURATION_US;
stats_capability->list[76].stat_enum = SAI_PORT_STAT_PFC_4_TX_PAUSE_DURATION_US;
stats_capability->list[77].stat_enum = SAI_PORT_STAT_PFC_5_RX_PAUSE_DURATION_US;
stats_capability->list[78].stat_enum = SAI_PORT_STAT_PFC_5_TX_PAUSE_DURATION_US;
stats_capability->list[79].stat_enum = SAI_PORT_STAT_PFC_6_RX_PAUSE_DURATION_US;
stats_capability->list[80].stat_enum = SAI_PORT_STAT_PFC_6_TX_PAUSE_DURATION_US;
stats_capability->list[81].stat_enum = SAI_PORT_STAT_PFC_7_RX_PAUSE_DURATION_US;
stats_capability->list[82].stat_enum = SAI_PORT_STAT_PFC_7_TX_PAUSE_DURATION_US;
stats_capability->list[83].stat_enum = SAI_PORT_STAT_PFC_0_ON2OFF_RX_PKTS;
stats_capability->list[84].stat_enum = SAI_PORT_STAT_PFC_1_ON2OFF_RX_PKTS;
stats_capability->list[85].stat_enum = SAI_PORT_STAT_PFC_2_ON2OFF_RX_PKTS;
stats_capability->list[86].stat_enum = SAI_PORT_STAT_PFC_3_ON2OFF_RX_PKTS;
stats_capability->list[87].stat_enum = SAI_PORT_STAT_PFC_4_ON2OFF_RX_PKTS;
stats_capability->list[88].stat_enum = SAI_PORT_STAT_PFC_5_ON2OFF_RX_PKTS;
stats_capability->list[89].stat_enum = SAI_PORT_STAT_PFC_6_ON2OFF_RX_PKTS;
stats_capability->list[90].stat_enum = SAI_PORT_STAT_PFC_7_ON2OFF_RX_PKTS;
for(uint32_t i = 0; i < stats_capability->count; i++)
{
stats_capability->list[i].stat_modes = SAI_STATS_MODE_READ_AND_CLEAR | SAI_STATS_MODE_READ ;
}
return SAI_STATUS_SUCCESS;
}
return ss->queryStatsCapability(
switchId,
objectType,
stats_capability);
}