From bf9207ba918543414049593d3a2361451fb656ee Mon Sep 17 00:00:00 2001 From: Justin Wong Date: Tue, 20 Aug 2024 22:00:14 +0000 Subject: [PATCH 1/3] Fix SNMP output having fewer unicast queues than expected SNMP assumes the first half of the queues to be unicast and the second half to be multicast. This assumption was fine for most hwSkus but not new ones being added to support, i.e. x86_64-arista_7060x6 Only tested on Arista hwSkus. --- .../mibs/vendor/cisco/ciscoSwitchQosMIB.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/sonic_ax_impl/mibs/vendor/cisco/ciscoSwitchQosMIB.py b/src/sonic_ax_impl/mibs/vendor/cisco/ciscoSwitchQosMIB.py index 31df647d0..696b42b5c 100644 --- a/src/sonic_ax_impl/mibs/vendor/cisco/ciscoSwitchQosMIB.py +++ b/src/sonic_ax_impl/mibs/vendor/cisco/ciscoSwitchQosMIB.py @@ -134,11 +134,19 @@ def update_stats(self): if_queues = self.port_queue_list_map[if_index] namespace = self.port_index_namespace[if_index] - # The first half of queue id is for ucast, and second half is for mcast + # Count number of unicast queues + pq_count = 0 + for queue in if_queues: + queue_sai_oid = self.port_queues_map[mibs.queue_key(if_index, queue)] + if self.queue_type_map[namespace].get(queue_sai_oid) == 'SAI_QUEUE_TYPE_UNICAST': + pq_count = pq_count + 1 + # If there are fewer unicast queues than multicast queues we use the old assumption of second half mcast # To simulate vendor OID, we wrap queues by max priority groups port_max_queues = Namespace.dbs_get_all(self.db_conn, mibs.STATE_DB, mibs.buffer_max_parm_table(self.oid_name_map[if_index]))['max_queues'] - pq_count = math.ceil(int(port_max_queues) / 2) + max_queues_half = math.ceil(int(port_max_queues) / 2) + if pq_count < max_queues_half: + pq_count = max_queues_half for queue in if_queues: # Get queue type and statistics From 664cd6b6dda3c2a59a5db1ab7963a62bb0dc41fe Mon Sep 17 00:00:00 2001 From: Justin Wong Date: Thu, 5 Sep 2024 15:27:08 -0700 Subject: [PATCH 2/3] Updated comment and better formatting --- src/sonic_ax_impl/mibs/vendor/cisco/ciscoSwitchQosMIB.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/sonic_ax_impl/mibs/vendor/cisco/ciscoSwitchQosMIB.py b/src/sonic_ax_impl/mibs/vendor/cisco/ciscoSwitchQosMIB.py index 696b42b5c..d0a9fb916 100644 --- a/src/sonic_ax_impl/mibs/vendor/cisco/ciscoSwitchQosMIB.py +++ b/src/sonic_ax_impl/mibs/vendor/cisco/ciscoSwitchQosMIB.py @@ -140,7 +140,8 @@ def update_stats(self): queue_sai_oid = self.port_queues_map[mibs.queue_key(if_index, queue)] if self.queue_type_map[namespace].get(queue_sai_oid) == 'SAI_QUEUE_TYPE_UNICAST': pq_count = pq_count + 1 - # If there are fewer unicast queues than multicast queues we use the old assumption of second half mcast + + # If there are fewer unicast queues than half of max queues, we use the old assumption of second half mcast # To simulate vendor OID, we wrap queues by max priority groups port_max_queues = Namespace.dbs_get_all(self.db_conn, mibs.STATE_DB, mibs.buffer_max_parm_table(self.oid_name_map[if_index]))['max_queues'] From 6f8f1734f5c55d6c678c180da654692674a70615 Mon Sep 17 00:00:00 2001 From: Justin Wong Date: Wed, 9 Oct 2024 11:46:15 -0700 Subject: [PATCH 3/3] Added unit test to check #UC > half total queue behavior Added a unit test subcase and relevant mock tablesto check for SNMP behavior when there are more unicast queues than half of the total number of queues. This is to ensure SNMP does not operate on the false assumption where there is always a 50-50 split between unicast and multicast queues. --- tests/mock_tables/appl_db.json | 21 ++- tests/mock_tables/counters_db.json | 263 +++++++++++++++++++++++++++++ tests/mock_tables/state_db.json | 3 + tests/test_queues_stat.py | 13 +- 4 files changed, 297 insertions(+), 3 deletions(-) diff --git a/tests/mock_tables/appl_db.json b/tests/mock_tables/appl_db.json index c76c1e534..cfbb79146 100644 --- a/tests/mock_tables/appl_db.json +++ b/tests/mock_tables/appl_db.json @@ -447,6 +447,20 @@ "lldp_rem_port_id": "Ethernet32", "lldp_rem_man_addr": "10.224.25.131" }, + "LLDP_ENTRY_TABLE:Ethernet78": { + "lldp_rem_port_id_subtype": "5", + "lldp_rem_sys_cap_supported": "28 00", + "lldp_rem_index": "1", + "lldp_rem_chassis_id": "00:11:22:33:44:55", + "lldp_rem_sys_desc": "I'm a little teapot.", + "lldp_rem_time_mark": "4844", + "lldp_rem_sys_cap_enabled": "28 00", + "lldp_rem_port_desc": " ", + "lldp_rem_chassis_id_subtype": "4", + "lldp_rem_sys_name": "switch13", + "lldp_rem_port_id": "Ethernet33", + "lldp_rem_man_addr": "10.224.25.132" + }, "LLDP_ENTRY_TABLE:eth1": { "lldp_rem_port_id_subtype": "5", "lldp_rem_sys_cap_supported": "28 00", @@ -628,8 +642,13 @@ "alias": "etp32", "speed": 100000 }, + "PORT_TABLE:Ethernet78": { + "description": "snowflake", + "alias": "etp33", + "speed": 100000 + }, "ROUTE_TABLE:0.0.0.0/0": { - "ifname": "Ethernet0,Ethernet4,Ethernet8,Ethernet12,Ethernet16,Ethernet20,Ethernet24,Ethernet28,Ethernet32,Ethernet36,Ethernet40,Ethernet44,Ethernet48,Ethernet52", + "ifname": "Ethernet0,Ethernet4,Ethernet8,Ethernet12,Ethernet16,Ethernet20,Ethernet24,Ethernet28,Ethernet32,Ethernet36,Ethernet40,Ethernet44,Ethernet48,Ethernet52,Ethernet78", "nexthop": "10.0.0.1,10.0.0.3,10.0.0.5,10.0.0.7,10.0.0.9,10.0.0.11,10.0.0.13,10.0.0.15,10.0.0.17,10.0.0.19,10.0.0.21,10.0.0.23,10.0.0.25,10.0.0.27" }, "ROUTE_TABLE:10.1.0.32": { diff --git a/tests/mock_tables/counters_db.json b/tests/mock_tables/counters_db.json index 6d22635d1..94a83829f 100755 --- a/tests/mock_tables/counters_db.json +++ b/tests/mock_tables/counters_db.json @@ -2173,6 +2173,7 @@ "Ethernet64": "oid:0x100000000001f", "Ethernet60": "oid:0x100000000001e", "Ethernet20": "oid:0x1000000000015", + "Ethernet78": "oid:0x1000000000024", "Ethernet68": "oid:0x1000000000020" }, "COUNTERS_LAG_NAME_MAP": { @@ -3507,6 +3508,108 @@ "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, + "COUNTERS:oid:0x1000000000024": { + "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", + "SAI_PORT_STAT_ETHER_STATS_OVERSIZE_PKTS": "0", + "SAI_PORT_STAT_IF_OUT_ERRORS": "0", + "SAI_PORT_STAT_ETHER_TX_OVERSIZE_PKTS": "0", + "SAI_PORT_STAT_ETHER_STATS_PKTS_1519_TO_2047_OCTETS": "0", + "SAI_PORT_STAT_IP_IN_RECEIVES": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_64_OCTETS": "0", + "SAI_PORT_STAT_IPV6_OUT_UCAST_PKTS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_4096_TO_9216_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_ERRORS": "0", + "SAI_PORT_STAT_ETHER_STATS_PKTS": "0", + "SAI_PORT_STAT_ETHER_STATS_BROADCAST_PKTS": "0", + "SAI_PORT_STAT_IF_IN_DISCARDS": "0", + "SAI_PORT_STAT_IP_OUT_DISCARDS": "0", + "SAI_PORT_STAT_IF_IN_UNKNOWN_PROTOS": "0", + "SAI_PORT_STAT_IPV6_IN_DISCARDS": "0", + "SAI_PORT_STAT_IPV6_OUT_DISCARDS": "0", + "SAI_PORT_STAT_IPV6_IN_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_65_TO_127_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_BROADCAST_PKTS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_1519_TO_2047_OCTETS": "0", + "SAI_PORT_STAT_IF_OUT_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_512_TO_1023_OCTETS": "0", + "SAI_PORT_STAT_ETHER_STATS_PKTS_256_TO_511_OCTETS": "0", + "SAI_PORT_STAT_ETHER_STATS_PKTS_9217_TO_16383_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_512_TO_1023_OCTETS": "0", + "SAI_PORT_STAT_IPV6_IN_NON_UCAST_PKTS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_4096_TO_9216_OCTETS": "0", + "SAI_PORT_STAT_IF_OUT_BROADCAST_PKTS": "0", + "SAI_PORT_STAT_IPV6_OUT_NON_UCAST_PKTS": "0", + "SAI_PORT_STAT_IF_IN_VLAN_DISCARDS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_65_TO_127_OCTETS": "0", + "SAI_PORT_STAT_IP_IN_NON_UCAST_PKTS": "0", + "SAI_PORT_STAT_ETHER_STATS_FRAGMENTS": "0", + "SAI_PORT_STAT_IPV6_IN_UCAST_PKTS": "0", + "SAI_PORT_STAT_IPV6_IN_RECEIVES": "0", + "SAI_PORT_STAT_ETHER_STATS_PKTS_4096_TO_9216_OCTETS": "0", + "SAI_PORT_STAT_IF_OUT_DISCARDS": "0", + "SAI_PORT_STAT_ETHER_STATS_DROP_EVENTS": "0", + "SAI_PORT_STAT_IPV6_OUT_MCAST_PKTS": "0", + "SAI_PORT_STAT_ETHER_RX_OVERSIZE_PKTS": "0", + "SAI_PORT_STAT_IF_OUT_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_NON_UCAST_PKTS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_9217_TO_16383_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_1024_TO_1518_OCTETS": "0", + "SAI_PORT_STAT_ETHER_STATS_PKTS_2048_TO_4095_OCTETS": "0", + "SAI_PORT_STAT_ETHER_STATS_PKTS_512_TO_1023_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_1519_TO_2047_OCTETS": "0", + "SAI_PORT_STAT_ETHER_STATS_RX_NO_ERRORS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_64_OCTETS": "0", + "SAI_PORT_STAT_ETHER_STATS_COLLISIONS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_1024_TO_1518_OCTETS": "0", + "SAI_PORT_STAT_ETHER_STATS_PKTS_1024_TO_1518_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_256_TO_511_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_2048_TO_4095_OCTETS": "0", + "SAI_PORT_STAT_ETHER_STATS_OCTETS": "0", + "SAI_PORT_STAT_IF_OUT_UCAST_PKTS": "0", + "SAI_PORT_STAT_ETHER_STATS_UNDERSIZE_PKTS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_128_TO_255_OCTETS": "0", + "SAI_PORT_STAT_ETHER_STATS_PKTS_64_OCTETS": "0", + "SAI_PORT_STAT_IP_OUT_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_UCAST_PKTS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_9217_TO_16383_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_2048_TO_4095_OCTETS": "0", + "SAI_PORT_STAT_IP_OUT_NON_UCAST_PKTS": "0", + "SAI_PORT_STAT_ETHER_STATS_JABBERS": "0", + "SAI_PORT_STAT_IF_IN_OCTETS": "0", + "SAI_PORT_STAT_IPV6_IN_MCAST_PKTS": "0", + "SAI_PORT_STAT_ETHER_STATS_PKTS_65_TO_127_OCTETS": "0", + "SAI_PORT_STAT_IF_OUT_QLEN": "0", + "SAI_PORT_STAT_ETHER_STATS_PKTS_128_TO_255_OCTETS": "0", + "SAI_PORT_STAT_IP_IN_DISCARDS": "0", + "SAI_PORT_STAT_IPV6_OUT_OCTETS": "0", + "SAI_PORT_STAT_IF_OUT_NON_UCAST_PKTS": "0", + "SAI_PORT_STAT_IP_IN_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_256_TO_511_OCTETS": "0", + "SAI_PORT_STAT_ETHER_STATS_CRC_ALIGN_ERRORS": "0", + "SAI_PORT_STAT_IP_OUT_UCAST_PKTS": "0", + "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", + "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" + }, "COUNTERS_QUEUE_NAME_MAP": { "Ethernet0:0": "oid:0x15000000000230", "Ethernet0:1": "oid:0x15000000000231", @@ -3568,6 +3671,22 @@ "Ethernet24:13": "oid:0x15000000010275", "Ethernet24:14": "oid:0x15000000010276", "Ethernet24:15": "oid:0x15000000010277", + "Ethernet78:1": "oid:0x15000000000381", + "Ethernet78:2": "oid:0x15000000000382", + "Ethernet78:3": "oid:0x15000000000383", + "Ethernet78:4": "oid:0x15000000000384", + "Ethernet78:5": "oid:0x15000000000385", + "Ethernet78:6": "oid:0x15000000000386", + "Ethernet78:7": "oid:0x15000000000387", + "Ethernet78:8": "oid:0x15000000000388", + "Ethernet78:9": "oid:0x15000000000389", + "Ethernet78:10": "oid:0x1500000000038a", + "Ethernet78:11": "oid:0x15000000010381", + "Ethernet78:13": "oid:0x15000000010382", + "Ethernet78:12": "oid:0x15000000010383", + "Ethernet78:14": "oid:0x15000000010384", + "Ethernet78:15": "oid:0x15000000010385", + "Ethernet78:16": "oid:0x15000000010386", "Ethernet32:1": "oid:0x15000000000281", "Ethernet32:2": "oid:0x15000000000282", "Ethernet32:4": "oid:0x15000000000284", @@ -3640,6 +3759,22 @@ "oid:0x15000000010275": "SAI_QUEUE_TYPE_MULTICAST", "oid:0x15000000010276": "SAI_QUEUE_TYPE_MULTICAST", "oid:0x15000000010277": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000000381": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000382": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000383": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000384": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000385": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000386": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000387": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000388": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000389": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x1500000000038a": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000010381": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000010382": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000010383": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000010384": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000010385": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000010386": "SAI_QUEUE_TYPE_MULTICAST", "oid:0x15000000000281": "SAI_QUEUE_TYPE_UNICAST", "oid:0x15000000000282": "SAI_QUEUE_TYPE_UNICAST", "oid:0x15000000000284": "SAI_QUEUE_TYPE_UNICAST", @@ -4131,6 +4266,134 @@ "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" }, + "COUNTERS:oid:0x15000000000381": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000382": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000383": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000384": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000385": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000386": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000387": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000388": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000389": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x1500000000038a": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000010381": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000010382": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000010383": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000010384": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000010385": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000010386": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, "COUNTERS:oid:0x15000000000281": { "SAI_QUEUE_STAT_PACKETS": "1", "SAI_QUEUE_STAT_BYTES": "2", diff --git a/tests/mock_tables/state_db.json b/tests/mock_tables/state_db.json index ad4cd5eca..7de231f3d 100644 --- a/tests/mock_tables/state_db.json +++ b/tests/mock_tables/state_db.json @@ -213,5 +213,8 @@ }, "BUFFER_MAX_PARAM_TABLE|Ethernet32": { "max_queues": "16" + }, + "BUFFER_MAX_PARAM_TABLE|Ethernet78": { + "max_queues": "16" } } diff --git a/tests/test_queues_stat.py b/tests/test_queues_stat.py index 3ae9695c9..ed9be1592 100644 --- a/tests/test_queues_stat.py +++ b/tests/test_queues_stat.py @@ -21,7 +21,6 @@ class TestQueueCounters(TestCase): @classmethod def setUpClass(cls): cls.lut = MIBTable(ciscoSwitchQosMIB.csqIfQosGroupStatsTable) - # Update MIBs for updater in cls.lut.updater_instances: updater.reinit_data() @@ -49,6 +48,10 @@ def test_getQueueCounters(self): # Ethernet16 is created on mock_tables\counters_db.json with only counters for UC 0,1,2,3,4,6 # Ethernet24 is created on mock_tables\counters_db.json with only counters for MC 0,2,3,5,6,7 # Ethernet32 is created on mock_tables\counters_db.json with only counters for UC 1,2,4,6,7 and MC 0,1,3,5,6 + # Test issue https://github.com/sonic-net/sonic-snmpagent/pull/330 + # Ethernet78 is created on mock_tables\counters_db.json with counters for UC 0,1,2,3,4,5,6,7,8,9,10 and MC 2,3,4,5,6,7 + # It is important there are more UC queues than half of the total number of queues. + # A total of 16 queues for Ethernet78 is defined in mock_tables\state_db.json def test_getQueueCountersForPortWithAllCounters(self): tested_ports_counters_data = { 17: { 1: {1:1, 2:23492723984237432, 5:3,6:0}, 2: {1:1, 2:2, 5:3, 6:0}, @@ -63,11 +66,17 @@ def test_getQueueCountersForPortWithAllCounters(self): 3: {1:1, 2:2, 5:3, 6:0}, 4: {3:1, 4:2, 7:3, 8:0}, 5: {1:1, 2:2, 5:3, 6:0}, 6: {3:1, 4:2, 7:3, 8:0}, 7: {1:1, 2:2, 3:1, 4:2, 5:3, 6:0, 7:3,8:0}, 8: {1:1, 2:2, 5:3, 6:0} + }, + 79: { 1: {1:1, 2:2, 5:3, 6:0}, 2: {1:1, 2:2, 3:1, 4:2, 5:3, 6:0, 7:3, 8:0}, + 3: {1:1, 2:2, 3:1, 4:2, 5:3, 6:0, 7:3, 8:0}, 4: {1:1, 2:2, 3:1, 4:2, 5:3, 6:0, 7:3, 8:0}, + 5: {1:1, 2:2, 3:1, 4:2, 5:3, 6:0, 7:3, 8:0}, 6: {1:1, 2:2, 3:1, 4:2, 5:3, 6:0, 7:3, 8:0}, + 7: {1:1, 2:2, 3:1, 4:2, 5:3, 6:0, 7:3, 8:0}, 8: {1:1, 2:2, 5:3, 6:0}, + 9: {1:1, 2:2, 5:3, 6:0}, 10: {1:1, 2:2, 5:3, 6:0} } } for port, configured_queues in tested_ports_counters_data.items(): - for queue_id in range(1, 8): + for queue_id in range(1, sorted(configured_queues.keys(), reverse=True)[0]): for counter_id in range(1, 8): oid = ObjectIdentifier(8, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 580, 1, 5, 5, 1, 4, port, 2, queue_id, counter_id)) get_pdu = GetPDU(