From bb1441b5ba780930ecab86ccf99cd244a32405f1 Mon Sep 17 00:00:00 2001 From: saksarav-nokia Date: Tue, 4 Jun 2024 22:24:18 -0400 Subject: [PATCH] [chassis][voq] Added support for Voq Counters(SAI_SWITCH_STAT_PACKET_INTEGRITY_DROP,SAI_QUEUE_STAT_CREDIT_WD_DELETED_PACKETS) for Voq/Fabric switches (#3322) What I did Added cli support to show SAI_SWITCH_STAT_PACKET_INTEGRITY_DROP counter in show dropcounter counts command and show SAI_QUEUE_STAT_CREDIT_WD_DELETED_PACKETS counters in show queue counter --voq command. How I did it Modified the dropstat and queuestat cli commands to show these new counters How to verify it Simulated the Packet integrity (CRC, RQP errors) and Credit Watchdog delete drops (disabled the TX for the ports and simulated the credit watchdog deletes) and verified that the show commands are showing the correct output from COUNTERS_DB. Previous command output (if the output of a command-line utility has changed) New command output (if the output of a command-line utility has changed) 1)show dropcounter counts 2)show queue counter --voq Signed-off-by: saksarav --- scripts/dropconfig | 2 +- scripts/dropstat | 80 +++++++++- scripts/queuestat | 109 +++++++++---- tests/drops_group_test.py | 33 +++- tests/mock_tables/counters_db.json | 78 ++++++--- tests/queue_counter_test.py | 248 ++++++++++++++++------------- 6 files changed, 376 insertions(+), 174 deletions(-) diff --git a/scripts/dropconfig b/scripts/dropconfig index 180c6166c6..1fc812a474 100755 --- a/scripts/dropconfig +++ b/scripts/dropconfig @@ -105,7 +105,7 @@ class DropConfig(object): if supported_reasons and int(capabilities.get('count', 0)) > 0: print('\n{}'.format(counter)) for reason in supported_reasons: - print('\t{}'.format(reason)) + print(' {}'.format(reason)) def create_counter(self, counter_name, alias, group, counter_type, description, reasons): diff --git a/scripts/dropstat b/scripts/dropstat index 4e9f5bb4d0..485ac65637 100755 --- a/scripts/dropstat +++ b/scripts/dropstat @@ -43,6 +43,7 @@ DEBUG_COUNTER_PORT_STAT_MAP = 'COUNTERS_DEBUG_NAME_PORT_STAT_MAP' DEBUG_COUNTER_SWITCH_STAT_MAP = 'COUNTERS_DEBUG_NAME_SWITCH_STAT_MAP' COUNTERS_PORT_NAME_MAP = 'COUNTERS_PORT_NAME_MAP' COUNTER_TABLE_PREFIX = 'COUNTERS:' +SWITCH_LEVEL_COUNTER_PREFIX = 'SWITCH_STD_DROP_COUNTER-' # ASIC_DB Tables ASIC_SWITCH_INFO_PREFIX = 'ASIC_STATE:SAI_OBJECT_TYPE_SWITCH:' @@ -79,6 +80,10 @@ std_port_headers_map = { # Standard Switch-Level Headers std_switch_description_header = ['DEVICE'] +std_switch_dflt_drop_headers= [ 'SWITCH-ID'] +std_switch_drop_headers_map = { + 'SAI_SWITCH_STAT_PACKET_INTEGRITY_DROP': 'PKT_INTEGRITY_ERR' +} def get_dropstat_dir(): return UserCache().get_directory() @@ -93,10 +98,12 @@ class DropStat(object): self.db.connect(self.db.COUNTERS_DB) self.db.connect(self.db.ASIC_DB) self.db.connect(self.db.APPL_DB) + self.db.connect(self.db.CONFIG_DB) dropstat_dir = get_dropstat_dir() self.port_drop_stats_file = os.path.join(dropstat_dir, 'port-stats') self.switch_drop_stats_file = os.path.join(dropstat_dir + 'switch-stats') + self.switch_std_drop_stats_file = os.path.join(dropstat_dir, 'switch-std-drop-stats') self.stat_lookup = {} self.reverse_stat_lookup = {} @@ -107,6 +114,7 @@ class DropStat(object): switch-level. """ + self.show_switch_std_drop_counts(group, counter_type) self.show_port_drop_counts(group, counter_type) print('') self.show_switch_drop_counts(group, counter_type) @@ -119,13 +127,68 @@ class DropStat(object): try: json.dump(self.get_counts_table(self.gather_counters(std_port_rx_counters + std_port_tx_counters, DEBUG_COUNTER_PORT_STAT_MAP), COUNTERS_PORT_NAME_MAP), open(self.port_drop_stats_file, 'w+')) - json.dump(self.get_counts(self.gather_counters([], DEBUG_COUNTER_SWITCH_STAT_MAP), self.get_switch_id()), - open(self.switch_drop_stats_file, 'w+')) + counters = self.gather_counters([], DEBUG_COUNTER_SWITCH_STAT_MAP) + if counters: + json.dump(self.get_counts(counters, self.get_switch_id()), open(self.switch_drop_stats_file, 'w+')) + + counters = self.get_configured_counters(DEBUG_COUNTER_SWITCH_STAT_MAP, True) + if counters: + json.dump(self.get_counts(counters, self.get_switch_id()), open(self.switch_std_drop_stats_file, 'w+')) except IOError as e: print(e) sys.exit(e.errno) print("Cleared drop counters") + def show_switch_std_drop_counts(self, group, counter_type): + """ + Prints out the standard drop counts (packet integrity drop etc) at the switch level, if such counts exist. + """ + + if group is not None or counter_type is not None: + return + + #Currently the switch drop counter (packet integrity) is supported only for chassis. + if os.environ.get("VOQ_DROP_COUNTER_TESTING", "0") == "1": + #fake the switch_type for mock-test code coverage + switch_type = "voq" + else: + switch_type = self.db.get(self.db.CONFIG_DB, "DEVICE_METADATA|localhost", "switch_type") + + if switch_type is None: + return + if switch_type != "fabric" and switch_type != "voq": + return + + switch_std_drop_ckpt = {} + + # Grab the latest clear checkpoint, if it exists + if os.path.isfile(self.switch_std_drop_stats_file): + switch_std_drop_ckpt = json.load(open(self.switch_std_drop_stats_file, 'r')) + + counters = self.get_configured_counters(DEBUG_COUNTER_SWITCH_STAT_MAP, True) + if not counters: + return + switch_id = self.get_switch_id() + switch_std_stats = self.get_counts(counters, switch_id) + + if not switch_std_stats: + return + + if os.environ.get("VOQ_DROP_COUNTER_TESTING", "0") == "1": + row = [socket.gethostname()] + else: + cfg_switch_id = self.db.get(self.db.CONFIG_DB, "DEVICE_METADATA|localhost", "switch_id") + row = [cfg_switch_id] + + headers = std_switch_dflt_drop_headers + for cntr in counters: + if cntr in std_switch_drop_headers_map: + row.append(switch_std_stats.get(cntr, 0) - switch_std_drop_ckpt.get(cntr, 0)) + headers.append(std_switch_drop_headers_map[cntr]) + if row: + print(tabulate([row], headers, tablefmt='simple', stralign='right')) + print('') + def show_port_drop_counts(self, group, counter_type): """ Prints out the drop counts at the port level, if such counts exist. @@ -189,7 +252,7 @@ class DropStat(object): the group or not the right counter type. """ - configured_counters = self.get_configured_counters(object_stat_map) + configured_counters = self.get_configured_counters(object_stat_map, False) counters = std_counters + configured_counters return [ctr for ctr in counters if self.in_group(ctr, object_stat_map, group) and @@ -282,7 +345,7 @@ class DropStat(object): return self.reverse_stat_lookup[object_stat_map] - def get_configured_counters(self, object_stat_map): + def get_configured_counters(self, object_stat_map, std_switch_cntr=False): """ Returns the list of counters that have been configured to track packet drops. @@ -294,6 +357,15 @@ class DropStat(object): if not counters: return configured_counters + #Switch level standard drop counters are added by default and added to DEBUG_COUNTER_SWITCH_STAT_MAP table, + #so remove it from configrued counters + if object_stat_map == DEBUG_COUNTER_SWITCH_STAT_MAP: + if std_switch_cntr: + new_cntrs = {k:counters[k] for k in counters if SWITCH_LEVEL_COUNTER_PREFIX in k} + else: + new_cntrs = {k:counters[k] for k in counters if not SWITCH_LEVEL_COUNTER_PREFIX in k} + return list(new_cntrs.values()) + return list(counters.values()) def get_counter_name(self, object_stat_map, counter_stat): diff --git a/scripts/queuestat b/scripts/queuestat index 8f95554481..dd8c9d7e0c 100755 --- a/scripts/queuestat +++ b/scripts/queuestat @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 +#!/usr/bin/python3 ##################################################################### # @@ -38,8 +38,9 @@ from utilities_common import constants import utilities_common.multi_asic as multi_asic_util QueueStats = namedtuple("QueueStats", "queueindex, queuetype, totalpacket, totalbytes, droppacket, dropbytes") +VoqStats = namedtuple("VoqStats", "queueindex, queuetype, totalpacket, totalbytes, droppacket, dropbytes, creditWDpkts") header = ['Port', 'TxQ', 'Counter/pkts', 'Counter/bytes', 'Drop/pkts', 'Drop/bytes'] -voq_header = ['Port', 'Voq', 'Counter/pkts', 'Counter/bytes', 'Drop/pkts', 'Drop/bytes'] +voq_header = ['Port', 'Voq', 'Counter/pkts', 'Counter/bytes', 'Drop/pkts', 'Drop/bytes', 'Credit-WD-Del/pkts'] counter_bucket_dict = { 'SAI_QUEUE_STAT_PACKETS': 2, @@ -47,6 +48,9 @@ counter_bucket_dict = { 'SAI_QUEUE_STAT_DROPPED_PACKETS': 4, 'SAI_QUEUE_STAT_DROPPED_BYTES': 5, } +voq_counter_bucket_dict = { + 'SAI_QUEUE_STAT_CREDIT_WD_DELETED_PACKETS': 6 +} from utilities_common.cli import json_dump from utilities_common.netstat import ns_diff, STATUS_NA @@ -73,15 +77,24 @@ cnstat_dir = 'N/A' cnstat_fqn_file = 'N/A' -def build_json(port, cnstat): +def build_json(port, cnstat, voq=False): def ports_stats(k): p = {} - p[k[1]] = { - "totalpacket": k[2], - "totalbytes": k[3], - "droppacket": k[4], - "dropbytes": k[5] - } + if voq: + p[k[1]] = { + "totalpacket": k[2], + "totalbytes": k[3], + "droppacket": k[4], + "dropbytes": k[5], + "creditWDPkts": k[6] + } + else: + p[k[1]] = { + "totalpacket": k[2], + "totalbytes": k[3], + "droppacket": k[4], + "dropbytes": k[5] + } return p out = {} @@ -175,18 +188,30 @@ class Queuestat(object): print("Queue Type is invalid:", table_id, queue_type) sys.exit(1) - fields = ["0","0","0","0","0","0"] + if self.voq: + fields = ["0","0","0","0","0","0","0"] + else: + fields = ["0","0","0","0","0","0"] fields[0] = get_queue_index(table_id) fields[1] = get_queue_type(table_id) - for counter_name, pos in counter_bucket_dict.items(): + counter_dict = {} + counter_dict.update(counter_bucket_dict) + if self.voq: + counter_dict.update(voq_counter_bucket_dict) + + for counter_name, pos in counter_dict.items(): full_table_id = COUNTER_TABLE_PREFIX + table_id counter_data = self.db.get(self.db.COUNTERS_DB, full_table_id, counter_name) if counter_data is None: fields[pos] = STATUS_NA elif fields[pos] != STATUS_NA: fields[pos] = str(int(counter_data)) - cntr = QueueStats._make(fields)._asdict() + + if self.voq: + cntr = VoqStats._make(fields)._asdict() + else: + cntr = QueueStats._make(fields)._asdict() return cntr # Build a dictionary of the stats @@ -211,14 +236,21 @@ class Queuestat(object): if json_opt: json_output[port][key] = data continue - if not non_zero or data['totalpacket'] != '0' or data['totalbytes'] != '0' or \ - data['droppacket'] != '0' or data['dropbytes'] != '0': - table.append((port, data['queuetype'] + str(data['queueindex']), - data['totalpacket'], data['totalbytes'], - data['droppacket'], data['dropbytes'])) + if self.voq: + if not non_zero or data['totalpacket'] != '0' or data['totalbytes'] != '0' or \ + data['droppacket'] != '0' or data['dropbytes'] != '0' or data['creditWDpkts'] != '0': + table.append((port, data['queuetype'] + str(data['queueindex']), + data['totalpacket'], data['totalbytes'], + data['droppacket'], data['dropbytes'], data['creditWDpkts'])) + else: + if not non_zero or data['totalpacket'] != '0' or data['totalbytes'] != '0' or \ + data['droppacket'] != '0' or data['dropbytes'] != '0': + table.append((port, data['queuetype'] + str(data['queueindex']), + data['totalpacket'], data['totalbytes'], + data['droppacket'], data['dropbytes'])) if json_opt: - json_output[port].update(build_json(port, table)) + json_output[port].update(build_json(port, table, self.voq)) return json_output else: hdr = voq_header if self.voq else header @@ -242,25 +274,42 @@ class Queuestat(object): old_cntr = None if key in cnstat_old_dict: old_cntr = cnstat_old_dict.get(key) - if old_cntr is not None: - if not non_zero or ns_diff(cntr['totalpacket'], old_cntr['totalpacket']) != '0' or \ + if self.voq: + if not non_zero or ns_diff(cntr['totalpacket'], old_cntr['totalpacket']) != '0' or \ + ns_diff(cntr['totalbytes'], old_cntr['totalbytes']) != '0' or \ + ns_diff(cntr['droppacket'], old_cntr['droppacket']) != '0' or \ + ns_diff(cntr['dropbytes'], old_cntr['dropbytes']) != '0' or \ + ns_diff(cntr['creditWDpkts'], old_cntr['creditWDpkts']) != '0': + table.append((port, cntr['queuetype'] + str(cntr['queueindex']), + ns_diff(cntr['totalpacket'], old_cntr['totalpacket']), + ns_diff(cntr['totalbytes'], old_cntr['totalbytes']), + ns_diff(cntr['droppacket'], old_cntr['droppacket']), + ns_diff(cntr['dropbytes'], old_cntr['dropbytes']), + ns_diff(cntr['creditWDpkts'], old_cntr['creditWDpkts']))) + elif not non_zero or cntr['totalpacket'] != '0' or cntr['totalbytes'] != '0' or \ + cntr['droppacket'] != '0' or cntr['dropbytes'] != '0' or cntr['creditWDpkts'] != '0': + table.append((port, cntr['queuetype'] + str(cntr['queueindex']), + cntr['totalpacket'], cntr['totalbytes'], + cntr['droppacket'], cntr['dropbytes'], cntr['creditWDpkts'])) + else: + if not non_zero or ns_diff(cntr['totalpacket'], old_cntr['totalpacket']) != '0' or \ ns_diff(cntr['totalbytes'], old_cntr['totalbytes']) != '0' or \ ns_diff(cntr['droppacket'], old_cntr['droppacket']) != '0' or \ ns_diff(cntr['dropbytes'], old_cntr['dropbytes']) != '0': - table.append((port, cntr['queuetype'] + str(cntr['queueindex']), - ns_diff(cntr['totalpacket'], old_cntr['totalpacket']), - ns_diff(cntr['totalbytes'], old_cntr['totalbytes']), - ns_diff(cntr['droppacket'], old_cntr['droppacket']), - ns_diff(cntr['dropbytes'], old_cntr['dropbytes']))) - elif not non_zero or cntr['totalpacket'] != '0' or cntr['totalbytes'] != '0' or \ + table.append((port, cntr['queuetype'] + str(cntr['queueindex']), + ns_diff(cntr['totalpacket'], old_cntr['totalpacket']), + ns_diff(cntr['totalbytes'], old_cntr['totalbytes']), + ns_diff(cntr['droppacket'], old_cntr['droppacket']), + ns_diff(cntr['dropbytes'], old_cntr['dropbytes']))) + elif not non_zero or cntr['totalpacket'] != '0' or cntr['totalbytes'] != '0' or \ cntr['droppacket'] != '0' or cntr['dropbytes'] != '0': - table.append((port, cntr['queuetype'] + str(cntr['queueindex']), - cntr['totalpacket'], cntr['totalbytes'], - cntr['droppacket'], cntr['dropbytes'])) + table.append((port, cntr['queuetype'] + str(cntr['queueindex']), + cntr['totalpacket'], cntr['totalbytes'], + cntr['droppacket'], cntr['dropbytes'])) if json_opt: - json_output[port].update(build_json(port, table)) + json_output[port].update(build_json(port, table, self.voq)) return json_output else: hdr = voq_header if self.voq else header diff --git a/tests/drops_group_test.py b/tests/drops_group_test.py index d374275a48..ad8c8a4203 100644 --- a/tests/drops_group_test.py +++ b/tests/drops_group_test.py @@ -20,13 +20,13 @@ SWITCH_EGRESS_DROPS 2 PORT_INGRESS_DROPS - IP_HEADER_ERROR - NO_L3_HEADER + IP_HEADER_ERROR + NO_L3_HEADER SWITCH_EGRESS_DROPS - ACL_ANY - L2_ANY - L3_ANY + ACL_ANY + L2_ANY + L3_ANY """ expected_counter_configuration = """\ @@ -56,6 +56,21 @@ sonic_drops_test 1000 0 """ +expected_counts_voq = """\ + SWITCH-ID PKT_INTEGRITY_ERR +---------------- ------------------- +sonic_drops_test 500 + + IFACE STATE RX_ERR RX_DROPS TX_ERR TX_DROPS DEBUG_0 DEBUG_2 +--------- ------- -------- ---------- -------- ---------- --------- --------- +Ethernet0 D 10 100 0 0 80 20 +Ethernet4 N/A 0 1000 0 0 800 100 +Ethernet8 N/A 100 10 0 0 10 0 + + DEVICE SWITCH_DROPS lowercase_counter +---------------- -------------- ------------------- +sonic_drops_test 1000 0 +""" expected_counts_with_group = """ DEVICE SWITCH_DROPS ---------------- -------------- @@ -117,6 +132,14 @@ def test_show_counts(self): print(result.output) assert result.output == expected_counts + def test_show_counts_voq(self): + runner = CliRunner() + os.environ["VOQ_DROP_COUNTER_TESTING"] = "1" + result = runner.invoke(show.cli.commands["dropcounters"].commands["counts"], []) + os.environ["VOQ_DROP_COUNTER_TESTING"] = "0" + print(result.output) + assert result.output == expected_counts_voq + def test_show_counts_with_group(self): runner = CliRunner() result = runner.invoke(show.cli.commands["dropcounters"].commands["counts"], ["-g", "PACKET_DROPS"]) diff --git a/tests/mock_tables/counters_db.json b/tests/mock_tables/counters_db.json index d62c34cb3c..2f16c7014d 100644 --- a/tests/mock_tables/counters_db.json +++ b/tests/mock_tables/counters_db.json @@ -402,145 +402,169 @@ "SAI_QUEUE_STAT_BYTES": "0", "SAI_QUEUE_STAT_DROPPED_BYTES": "0", "SAI_QUEUE_STAT_DROPPED_PACKETS": "0", - "SAI_QUEUE_STAT_PACKETS": "0" + "SAI_QUEUE_STAT_PACKETS": "0", + "SAI_QUEUE_STAT_CREDIT_WD_DELETED_PACKETS": "0" }, "COUNTERS:oid:0x15000000000658": { "SAI_QUEUE_STAT_BYTES": "43", "SAI_QUEUE_STAT_DROPPED_BYTES": "1", "SAI_QUEUE_STAT_DROPPED_PACKETS": "39", - "SAI_QUEUE_STAT_PACKETS": "60" + "SAI_QUEUE_STAT_PACKETS": "60", + "SAI_QUEUE_STAT_CREDIT_WD_DELETED_PACKETS": "1" }, "COUNTERS:oid:0x15000000000659": { "SAI_QUEUE_STAT_BYTES": "7", "SAI_QUEUE_STAT_DROPPED_BYTES": "21", "SAI_QUEUE_STAT_DROPPED_PACKETS": "39", - "SAI_QUEUE_STAT_PACKETS": "82" + "SAI_QUEUE_STAT_PACKETS": "82", + "SAI_QUEUE_STAT_CREDIT_WD_DELETED_PACKETS": "19" }, "COUNTERS:oid:0x1500000000065a": { "SAI_QUEUE_STAT_BYTES": "59", "SAI_QUEUE_STAT_DROPPED_BYTES": "94", "SAI_QUEUE_STAT_DROPPED_PACKETS": "12", - "SAI_QUEUE_STAT_PACKETS": "11" + "SAI_QUEUE_STAT_PACKETS": "11", + "SAI_QUEUE_STAT_CREDIT_WD_DELETED_PACKETS": "12" }, "COUNTERS:oid:0x1500000000065b": { "SAI_QUEUE_STAT_BYTES": "62", "SAI_QUEUE_STAT_DROPPED_BYTES": "40", "SAI_QUEUE_STAT_DROPPED_PACKETS": "35", - "SAI_QUEUE_STAT_PACKETS": "36" + "SAI_QUEUE_STAT_PACKETS": "36", + "SAI_QUEUE_STAT_CREDIT_WD_DELETED_PACKETS": "11" }, "COUNTERS:oid:0x1500000000065c": { "SAI_QUEUE_STAT_BYTES": "91", "SAI_QUEUE_STAT_DROPPED_BYTES": "88", "SAI_QUEUE_STAT_DROPPED_PACKETS": "2", - "SAI_QUEUE_STAT_PACKETS": "49" + "SAI_QUEUE_STAT_PACKETS": "49", + "SAI_QUEUE_STAT_CREDIT_WD_DELETED_PACKETS": "15" }, "COUNTERS:oid:0x1500000000065d": { "SAI_QUEUE_STAT_BYTES": "17", "SAI_QUEUE_STAT_DROPPED_BYTES": "74", "SAI_QUEUE_STAT_DROPPED_PACKETS": "94", - "SAI_QUEUE_STAT_PACKETS": "33" + "SAI_QUEUE_STAT_PACKETS": "33", + "SAI_QUEUE_STAT_CREDIT_WD_DELETED_PACKETS": "17" }, "COUNTERS:oid:0x1500000000065e": { "SAI_QUEUE_STAT_BYTES": "71", "SAI_QUEUE_STAT_DROPPED_BYTES": "33", "SAI_QUEUE_STAT_DROPPED_PACKETS": "95", - "SAI_QUEUE_STAT_PACKETS": "40" + "SAI_QUEUE_STAT_PACKETS": "40", + "SAI_QUEUE_STAT_CREDIT_WD_DELETED_PACKETS": "73" }, "COUNTERS:oid:0x15000000000667": { "SAI_QUEUE_STAT_BYTES": "8", "SAI_QUEUE_STAT_DROPPED_BYTES": "78", "SAI_QUEUE_STAT_DROPPED_PACKETS": "93", - "SAI_QUEUE_STAT_PACKETS": "54" + "SAI_QUEUE_STAT_PACKETS": "54", + "SAI_QUEUE_STAT_CREDIT_WD_DELETED_PACKETS": "29" }, "COUNTERS:oid:0x15000000000668": { "SAI_QUEUE_STAT_BYTES": "96", "SAI_QUEUE_STAT_DROPPED_BYTES": "9", "SAI_QUEUE_STAT_DROPPED_PACKETS": "74", - "SAI_QUEUE_STAT_PACKETS": "83" + "SAI_QUEUE_STAT_PACKETS": "83", + "SAI_QUEUE_STAT_CREDIT_WD_DELETED_PACKETS": "42" }, "COUNTERS:oid:0x15000000000669": { "SAI_QUEUE_STAT_BYTES": "60", "SAI_QUEUE_STAT_DROPPED_BYTES": "31", "SAI_QUEUE_STAT_DROPPED_PACKETS": "61", - "SAI_QUEUE_STAT_PACKETS": "15" + "SAI_QUEUE_STAT_PACKETS": "15", + "SAI_QUEUE_STAT_CREDIT_WD_DELETED_PACKETS": "54" }, "COUNTERS:oid:0x1500000000066a": { "SAI_QUEUE_STAT_BYTES": "52", "SAI_QUEUE_STAT_DROPPED_BYTES": "94", "SAI_QUEUE_STAT_DROPPED_PACKETS": "82", - "SAI_QUEUE_STAT_PACKETS": "45" + "SAI_QUEUE_STAT_PACKETS": "45", + "SAI_QUEUE_STAT_CREDIT_WD_DELETED_PACKETS": "19" }, "COUNTERS:oid:0x1500000000066b": { "SAI_QUEUE_STAT_BYTES": "88", "SAI_QUEUE_STAT_DROPPED_BYTES": "52", "SAI_QUEUE_STAT_DROPPED_PACKETS": "89", - "SAI_QUEUE_STAT_PACKETS": "55" + "SAI_QUEUE_STAT_PACKETS": "55", + "SAI_QUEUE_STAT_CREDIT_WD_DELETED_PACKETS": "28" }, "COUNTERS:oid:0x1500000000066c": { "SAI_QUEUE_STAT_BYTES": "70", "SAI_QUEUE_STAT_DROPPED_BYTES": "79", "SAI_QUEUE_STAT_DROPPED_PACKETS": "95", - "SAI_QUEUE_STAT_PACKETS": "14" + "SAI_QUEUE_STAT_PACKETS": "14", + "SAI_QUEUE_STAT_CREDIT_WD_DELETED_PACKETS": "13" }, "COUNTERS:oid:0x1500000000066d": { "SAI_QUEUE_STAT_BYTES": "60", "SAI_QUEUE_STAT_DROPPED_BYTES": "81", "SAI_QUEUE_STAT_DROPPED_PACKETS": "66", - "SAI_QUEUE_STAT_PACKETS": "68" + "SAI_QUEUE_STAT_PACKETS": "68", + "SAI_QUEUE_STAT_CREDIT_WD_DELETED_PACKETS": "22" }, "COUNTERS:oid:0x1500000000066e": { "SAI_QUEUE_STAT_BYTES": "4", "SAI_QUEUE_STAT_DROPPED_BYTES": "76", "SAI_QUEUE_STAT_DROPPED_PACKETS": "48", - "SAI_QUEUE_STAT_PACKETS": "63" + "SAI_QUEUE_STAT_PACKETS": "63", + "SAI_QUEUE_STAT_CREDIT_WD_DELETED_PACKETS": "53" }, "COUNTERS:oid:0x15000000000677": { "SAI_QUEUE_STAT_BYTES": "73", "SAI_QUEUE_STAT_DROPPED_BYTES": "74", "SAI_QUEUE_STAT_DROPPED_PACKETS": "77", - "SAI_QUEUE_STAT_PACKETS": "41" + "SAI_QUEUE_STAT_PACKETS": "41", + "SAI_QUEUE_STAT_CREDIT_WD_DELETED_PACKETS": "67" }, "COUNTERS:oid:0x15000000000678": { "SAI_QUEUE_STAT_BYTES": "21", "SAI_QUEUE_STAT_DROPPED_BYTES": "54", "SAI_QUEUE_STAT_DROPPED_PACKETS": "56", - "SAI_QUEUE_STAT_PACKETS": "60" + "SAI_QUEUE_STAT_PACKETS": "60", + "SAI_QUEUE_STAT_CREDIT_WD_DELETED_PACKETS": "79" }, "COUNTERS:oid:0x15000000000679": { "SAI_QUEUE_STAT_BYTES": "31", "SAI_QUEUE_STAT_DROPPED_BYTES": "39", "SAI_QUEUE_STAT_DROPPED_PACKETS": "12", - "SAI_QUEUE_STAT_PACKETS": "57" + "SAI_QUEUE_STAT_PACKETS": "57", + "SAI_QUEUE_STAT_CREDIT_WD_DELETED_PACKETS": "35" }, "COUNTERS:oid:0x1500000000067a": { "SAI_QUEUE_STAT_BYTES": "96", "SAI_QUEUE_STAT_DROPPED_BYTES": "98", "SAI_QUEUE_STAT_DROPPED_PACKETS": "70", - "SAI_QUEUE_STAT_PACKETS": "41" + "SAI_QUEUE_STAT_PACKETS": "41", + "SAI_QUEUE_STAT_CREDIT_WD_DELETED_PACKETS": "47" }, "COUNTERS:oid:0x1500000000067b": { "SAI_QUEUE_STAT_BYTES": "49", "SAI_QUEUE_STAT_DROPPED_BYTES": "36", "SAI_QUEUE_STAT_DROPPED_PACKETS": "63", - "SAI_QUEUE_STAT_PACKETS": "18" + "SAI_QUEUE_STAT_PACKETS": "18", + "SAI_QUEUE_STAT_CREDIT_WD_DELETED_PACKETS": "62" }, "COUNTERS:oid:0x1500000000067c": { "SAI_QUEUE_STAT_BYTES": "90", "SAI_QUEUE_STAT_DROPPED_BYTES": "15", "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", - "SAI_QUEUE_STAT_PACKETS": "99" + "SAI_QUEUE_STAT_PACKETS": "99", + "SAI_QUEUE_STAT_CREDIT_WD_DELETED_PACKETS": "19" }, "COUNTERS:oid:0x1500000000067d": { "SAI_QUEUE_STAT_BYTES": "84", "SAI_QUEUE_STAT_DROPPED_BYTES": "94", "SAI_QUEUE_STAT_DROPPED_PACKETS": "82", - "SAI_QUEUE_STAT_PACKETS": "8" + "SAI_QUEUE_STAT_PACKETS": "8", + "SAI_QUEUE_STAT_CREDIT_WD_DELETED_PACKETS": "33" }, "COUNTERS:oid:0x1500000000067e": { "SAI_QUEUE_STAT_BYTES": "15", "SAI_QUEUE_STAT_DROPPED_BYTES": "92", "SAI_QUEUE_STAT_DROPPED_PACKETS": "75", - "SAI_QUEUE_STAT_PACKETS": "83" + "SAI_QUEUE_STAT_PACKETS": "83", + "SAI_QUEUE_STAT_CREDIT_WD_DELETED_PACKETS": "3" }, "COUNTERS:oid:0x60000000005a3": { "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "0", @@ -982,7 +1006,8 @@ }, "COUNTERS:oid:0x21000000000000": { "SAI_SWITCH_STAT_OUT_DROP_REASON_RANGE_BASE": "1000", - "SAI_SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS": "0" + "SAI_SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS": "0", + "SAI_SWITCH_STAT_PACKET_INTEGRITY_DROP": "500" }, "COUNTERS:oid:0x1a00000000034f": { @@ -1772,7 +1797,8 @@ }, "COUNTERS_DEBUG_NAME_SWITCH_STAT_MAP": { "DEBUG_1": "SAI_SWITCH_STAT_OUT_DROP_REASON_RANGE_BASE", - "lowercase_counter": "SAI_SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS" + "lowercase_counter": "SAI_SWITCH_STAT_OUT_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS", + "SWITCH_STD_DROP_COUNTER-SAI_SWITCH_STAT_PACKET_INTEGRITY_DROP": "SAI_SWITCH_STAT_PACKET_INTEGRITY_DROP" }, "COUNTERS:oid:0x1500000000035a": { "PFC_WD_ACTION": "drop", diff --git a/tests/queue_counter_test.py b/tests/queue_counter_test.py index 20b9516fbc..391d004872 100644 --- a/tests/queue_counter_test.py +++ b/tests/queue_counter_test.py @@ -1851,136 +1851,136 @@ show_queue_voq_counters = """\ - Port Voq Counter/pkts Counter/bytes Drop/pkts Drop/bytes ----------------- ----- -------------- --------------- ----------- ------------ -testsw|Ethernet0 VOQ0 0 0 0 0 -testsw|Ethernet0 VOQ1 60 43 39 1 -testsw|Ethernet0 VOQ2 82 7 39 21 -testsw|Ethernet0 VOQ3 11 59 12 94 -testsw|Ethernet0 VOQ4 36 62 35 40 -testsw|Ethernet0 VOQ5 49 91 2 88 -testsw|Ethernet0 VOQ6 33 17 94 74 -testsw|Ethernet0 VOQ7 40 71 95 33 + Port Voq Counter/pkts Counter/bytes Drop/pkts Drop/bytes Credit-WD-Del/pkts +---------------- ----- -------------- --------------- ----------- ------------ -------------------- +testsw|Ethernet0 VOQ0 0 0 0 0 0 +testsw|Ethernet0 VOQ1 60 43 39 1 1 +testsw|Ethernet0 VOQ2 82 7 39 21 19 +testsw|Ethernet0 VOQ3 11 59 12 94 12 +testsw|Ethernet0 VOQ4 36 62 35 40 11 +testsw|Ethernet0 VOQ5 49 91 2 88 15 +testsw|Ethernet0 VOQ6 33 17 94 74 17 +testsw|Ethernet0 VOQ7 40 71 95 33 73 - Port Voq Counter/pkts Counter/bytes Drop/pkts Drop/bytes ----------------- ----- -------------- --------------- ----------- ------------ -testsw|Ethernet4 VOQ0 54 8 93 78 -testsw|Ethernet4 VOQ1 83 96 74 9 -testsw|Ethernet4 VOQ2 15 60 61 31 -testsw|Ethernet4 VOQ3 45 52 82 94 -testsw|Ethernet4 VOQ4 55 88 89 52 -testsw|Ethernet4 VOQ5 14 70 95 79 -testsw|Ethernet4 VOQ6 68 60 66 81 -testsw|Ethernet4 VOQ7 63 4 48 76 + Port Voq Counter/pkts Counter/bytes Drop/pkts Drop/bytes Credit-WD-Del/pkts +---------------- ----- -------------- --------------- ----------- ------------ -------------------- +testsw|Ethernet4 VOQ0 54 8 93 78 29 +testsw|Ethernet4 VOQ1 83 96 74 9 42 +testsw|Ethernet4 VOQ2 15 60 61 31 54 +testsw|Ethernet4 VOQ3 45 52 82 94 19 +testsw|Ethernet4 VOQ4 55 88 89 52 28 +testsw|Ethernet4 VOQ5 14 70 95 79 13 +testsw|Ethernet4 VOQ6 68 60 66 81 22 +testsw|Ethernet4 VOQ7 63 4 48 76 53 - Port Voq Counter/pkts Counter/bytes Drop/pkts Drop/bytes ----------------- ----- -------------- --------------- ----------- ------------ -testsw|Ethernet8 VOQ0 41 73 77 74 -testsw|Ethernet8 VOQ1 60 21 56 54 -testsw|Ethernet8 VOQ2 57 31 12 39 -testsw|Ethernet8 VOQ3 41 96 70 98 -testsw|Ethernet8 VOQ4 18 49 63 36 -testsw|Ethernet8 VOQ5 99 90 3 15 -testsw|Ethernet8 VOQ6 8 84 82 94 -testsw|Ethernet8 VOQ7 83 15 75 92 + Port Voq Counter/pkts Counter/bytes Drop/pkts Drop/bytes Credit-WD-Del/pkts +---------------- ----- -------------- --------------- ----------- ------------ -------------------- +testsw|Ethernet8 VOQ0 41 73 77 74 67 +testsw|Ethernet8 VOQ1 60 21 56 54 79 +testsw|Ethernet8 VOQ2 57 31 12 39 35 +testsw|Ethernet8 VOQ3 41 96 70 98 47 +testsw|Ethernet8 VOQ4 18 49 63 36 62 +testsw|Ethernet8 VOQ5 99 90 3 15 19 +testsw|Ethernet8 VOQ6 8 84 82 94 33 +testsw|Ethernet8 VOQ7 83 15 75 92 3 """ show_queue_voq_counters_nz = """\ - Port Voq Counter/pkts Counter/bytes Drop/pkts Drop/bytes ----------------- ----- -------------- --------------- ----------- ------------ -testsw|Ethernet0 VOQ1 60 43 39 1 -testsw|Ethernet0 VOQ2 82 7 39 21 -testsw|Ethernet0 VOQ3 11 59 12 94 -testsw|Ethernet0 VOQ4 36 62 35 40 -testsw|Ethernet0 VOQ5 49 91 2 88 -testsw|Ethernet0 VOQ6 33 17 94 74 -testsw|Ethernet0 VOQ7 40 71 95 33 + Port Voq Counter/pkts Counter/bytes Drop/pkts Drop/bytes Credit-WD-Del/pkts +---------------- ----- -------------- --------------- ----------- ------------ -------------------- +testsw|Ethernet0 VOQ1 60 43 39 1 1 +testsw|Ethernet0 VOQ2 82 7 39 21 19 +testsw|Ethernet0 VOQ3 11 59 12 94 12 +testsw|Ethernet0 VOQ4 36 62 35 40 11 +testsw|Ethernet0 VOQ5 49 91 2 88 15 +testsw|Ethernet0 VOQ6 33 17 94 74 17 +testsw|Ethernet0 VOQ7 40 71 95 33 73 - Port Voq Counter/pkts Counter/bytes Drop/pkts Drop/bytes ----------------- ----- -------------- --------------- ----------- ------------ -testsw|Ethernet4 VOQ0 54 8 93 78 -testsw|Ethernet4 VOQ1 83 96 74 9 -testsw|Ethernet4 VOQ2 15 60 61 31 -testsw|Ethernet4 VOQ3 45 52 82 94 -testsw|Ethernet4 VOQ4 55 88 89 52 -testsw|Ethernet4 VOQ5 14 70 95 79 -testsw|Ethernet4 VOQ6 68 60 66 81 -testsw|Ethernet4 VOQ7 63 4 48 76 + Port Voq Counter/pkts Counter/bytes Drop/pkts Drop/bytes Credit-WD-Del/pkts +---------------- ----- -------------- --------------- ----------- ------------ -------------------- +testsw|Ethernet4 VOQ0 54 8 93 78 29 +testsw|Ethernet4 VOQ1 83 96 74 9 42 +testsw|Ethernet4 VOQ2 15 60 61 31 54 +testsw|Ethernet4 VOQ3 45 52 82 94 19 +testsw|Ethernet4 VOQ4 55 88 89 52 28 +testsw|Ethernet4 VOQ5 14 70 95 79 13 +testsw|Ethernet4 VOQ6 68 60 66 81 22 +testsw|Ethernet4 VOQ7 63 4 48 76 53 - Port Voq Counter/pkts Counter/bytes Drop/pkts Drop/bytes ----------------- ----- -------------- --------------- ----------- ------------ -testsw|Ethernet8 VOQ0 41 73 77 74 -testsw|Ethernet8 VOQ1 60 21 56 54 -testsw|Ethernet8 VOQ2 57 31 12 39 -testsw|Ethernet8 VOQ3 41 96 70 98 -testsw|Ethernet8 VOQ4 18 49 63 36 -testsw|Ethernet8 VOQ5 99 90 3 15 -testsw|Ethernet8 VOQ6 8 84 82 94 -testsw|Ethernet8 VOQ7 83 15 75 92 + Port Voq Counter/pkts Counter/bytes Drop/pkts Drop/bytes Credit-WD-Del/pkts +---------------- ----- -------------- --------------- ----------- ------------ -------------------- +testsw|Ethernet8 VOQ0 41 73 77 74 67 +testsw|Ethernet8 VOQ1 60 21 56 54 79 +testsw|Ethernet8 VOQ2 57 31 12 39 35 +testsw|Ethernet8 VOQ3 41 96 70 98 47 +testsw|Ethernet8 VOQ4 18 49 63 36 62 +testsw|Ethernet8 VOQ5 99 90 3 15 19 +testsw|Ethernet8 VOQ6 8 84 82 94 33 +testsw|Ethernet8 VOQ7 83 15 75 92 3 """ show_queue_voq_counters_with_clear = ["""\ - Port Voq Counter/pkts Counter/bytes Drop/pkts Drop/bytes ----------------- ----- -------------- --------------- ----------- ------------ -testsw|Ethernet0 VOQ0 0 0 0 0 -testsw|Ethernet0 VOQ1 0 0 0 0 -testsw|Ethernet0 VOQ2 0 0 0 0 -testsw|Ethernet0 VOQ3 0 0 0 0 -testsw|Ethernet0 VOQ4 0 0 0 0 -testsw|Ethernet0 VOQ5 0 0 0 0 -testsw|Ethernet0 VOQ6 0 0 0 0 -testsw|Ethernet0 VOQ7 0 0 0 0 + Port Voq Counter/pkts Counter/bytes Drop/pkts Drop/bytes Credit-WD-Del/pkts +---------------- ----- -------------- --------------- ----------- ------------ -------------------- +testsw|Ethernet0 VOQ0 0 0 0 0 0 +testsw|Ethernet0 VOQ1 0 0 0 0 0 +testsw|Ethernet0 VOQ2 0 0 0 0 0 +testsw|Ethernet0 VOQ3 0 0 0 0 0 +testsw|Ethernet0 VOQ4 0 0 0 0 0 +testsw|Ethernet0 VOQ5 0 0 0 0 0 +testsw|Ethernet0 VOQ6 0 0 0 0 0 +testsw|Ethernet0 VOQ7 0 0 0 0 0 """, """\ - Port Voq Counter/pkts Counter/bytes Drop/pkts Drop/bytes ----------------- ----- -------------- --------------- ----------- ------------ -testsw|Ethernet4 VOQ0 0 0 0 0 -testsw|Ethernet4 VOQ1 0 0 0 0 -testsw|Ethernet4 VOQ2 0 0 0 0 -testsw|Ethernet4 VOQ3 0 0 0 0 -testsw|Ethernet4 VOQ4 0 0 0 0 -testsw|Ethernet4 VOQ5 0 0 0 0 -testsw|Ethernet4 VOQ6 0 0 0 0 -testsw|Ethernet4 VOQ7 0 0 0 0 + Port Voq Counter/pkts Counter/bytes Drop/pkts Drop/bytes Credit-WD-Del/pkts +---------------- ----- -------------- --------------- ----------- ------------ -------------------- +testsw|Ethernet4 VOQ0 0 0 0 0 0 +testsw|Ethernet4 VOQ1 0 0 0 0 0 +testsw|Ethernet4 VOQ2 0 0 0 0 0 +testsw|Ethernet4 VOQ3 0 0 0 0 0 +testsw|Ethernet4 VOQ4 0 0 0 0 0 +testsw|Ethernet4 VOQ5 0 0 0 0 0 +testsw|Ethernet4 VOQ6 0 0 0 0 0 +testsw|Ethernet4 VOQ7 0 0 0 0 0 """, """\ - Port Voq Counter/pkts Counter/bytes Drop/pkts Drop/bytes ----------------- ----- -------------- --------------- ----------- ------------ -testsw|Ethernet8 VOQ0 0 0 0 0 -testsw|Ethernet8 VOQ1 0 0 0 0 -testsw|Ethernet8 VOQ2 0 0 0 0 -testsw|Ethernet8 VOQ3 0 0 0 0 -testsw|Ethernet8 VOQ4 0 0 0 0 -testsw|Ethernet8 VOQ5 0 0 0 0 -testsw|Ethernet8 VOQ6 0 0 0 0 -testsw|Ethernet8 VOQ7 0 0 0 0 + Port Voq Counter/pkts Counter/bytes Drop/pkts Drop/bytes Credit-WD-Del/pkts +---------------- ----- -------------- --------------- ----------- ------------ -------------------- +testsw|Ethernet8 VOQ0 0 0 0 0 0 +testsw|Ethernet8 VOQ1 0 0 0 0 0 +testsw|Ethernet8 VOQ2 0 0 0 0 0 +testsw|Ethernet8 VOQ3 0 0 0 0 0 +testsw|Ethernet8 VOQ4 0 0 0 0 0 +testsw|Ethernet8 VOQ5 0 0 0 0 0 +testsw|Ethernet8 VOQ6 0 0 0 0 0 +testsw|Ethernet8 VOQ7 0 0 0 0 0 """ ] show_queue_port_voq_counters = """\ - Port Voq Counter/pkts Counter/bytes Drop/pkts Drop/bytes ----------------- ----- -------------- --------------- ----------- ------------ -testsw|Ethernet0 VOQ0 0 0 0 0 -testsw|Ethernet0 VOQ1 60 43 39 1 -testsw|Ethernet0 VOQ2 82 7 39 21 -testsw|Ethernet0 VOQ3 11 59 12 94 -testsw|Ethernet0 VOQ4 36 62 35 40 -testsw|Ethernet0 VOQ5 49 91 2 88 -testsw|Ethernet0 VOQ6 33 17 94 74 -testsw|Ethernet0 VOQ7 40 71 95 33 + Port Voq Counter/pkts Counter/bytes Drop/pkts Drop/bytes Credit-WD-Del/pkts +---------------- ----- -------------- --------------- ----------- ------------ -------------------- +testsw|Ethernet0 VOQ0 0 0 0 0 0 +testsw|Ethernet0 VOQ1 60 43 39 1 1 +testsw|Ethernet0 VOQ2 82 7 39 21 19 +testsw|Ethernet0 VOQ3 11 59 12 94 12 +testsw|Ethernet0 VOQ4 36 62 35 40 11 +testsw|Ethernet0 VOQ5 49 91 2 88 15 +testsw|Ethernet0 VOQ6 33 17 94 74 17 +testsw|Ethernet0 VOQ7 40 71 95 33 73 """ show_queue_port_voq_counters_nz = """\ - Port Voq Counter/pkts Counter/bytes Drop/pkts Drop/bytes ----------------- ----- -------------- --------------- ----------- ------------ -testsw|Ethernet0 VOQ1 60 43 39 1 -testsw|Ethernet0 VOQ2 82 7 39 21 -testsw|Ethernet0 VOQ3 11 59 12 94 -testsw|Ethernet0 VOQ4 36 62 35 40 -testsw|Ethernet0 VOQ5 49 91 2 88 -testsw|Ethernet0 VOQ6 33 17 94 74 -testsw|Ethernet0 VOQ7 40 71 95 33 + Port Voq Counter/pkts Counter/bytes Drop/pkts Drop/bytes Credit-WD-Del/pkts +---------------- ----- -------------- --------------- ----------- ------------ -------------------- +testsw|Ethernet0 VOQ1 60 43 39 1 1 +testsw|Ethernet0 VOQ2 82 7 39 21 19 +testsw|Ethernet0 VOQ3 11 59 12 94 12 +testsw|Ethernet0 VOQ4 36 62 35 40 11 +testsw|Ethernet0 VOQ5 49 91 2 88 15 +testsw|Ethernet0 VOQ6 33 17 94 74 17 +testsw|Ethernet0 VOQ7 40 71 95 33 73 """ @@ -1988,48 +1988,56 @@ { "testsw|Ethernet0": { "VOQ0": { + "creditWDPkts": "0", "dropbytes": "0", "droppacket": "0", "totalbytes": "0", "totalpacket": "0" }, "VOQ1": { + "creditWDPkts": "1", "dropbytes": "1", "droppacket": "39", "totalbytes": "43", "totalpacket": "60" }, "VOQ2": { + "creditWDPkts": "19", "dropbytes": "21", "droppacket": "39", "totalbytes": "7", "totalpacket": "82" }, "VOQ3": { + "creditWDPkts": "12", "dropbytes": "94", "droppacket": "12", "totalbytes": "59", "totalpacket": "11" }, "VOQ4": { + "creditWDPkts": "11", "dropbytes": "40", "droppacket": "35", "totalbytes": "62", "totalpacket": "36" }, "VOQ5": { + "creditWDPkts": "15", "dropbytes": "88", "droppacket": "2", "totalbytes": "91", "totalpacket": "49" }, "VOQ6": { + "creditWDPkts": "17", "dropbytes": "74", "droppacket": "94", "totalbytes": "17", "totalpacket": "33" }, "VOQ7": { + "creditWDPkts": "73", "dropbytes": "33", "droppacket": "95", "totalbytes": "71", @@ -2038,48 +2046,56 @@ }, "testsw|Ethernet4": { "VOQ0": { + "creditWDPkts": "29", "dropbytes": "78", "droppacket": "93", "totalbytes": "8", "totalpacket": "54" }, "VOQ1": { + "creditWDPkts": "42", "dropbytes": "9", "droppacket": "74", "totalbytes": "96", "totalpacket": "83" }, "VOQ2": { + "creditWDPkts": "54", "dropbytes": "31", "droppacket": "61", "totalbytes": "60", "totalpacket": "15" }, "VOQ3": { + "creditWDPkts": "19", "dropbytes": "94", "droppacket": "82", "totalbytes": "52", "totalpacket": "45" }, "VOQ4": { + "creditWDPkts": "28", "dropbytes": "52", "droppacket": "89", "totalbytes": "88", "totalpacket": "55" }, "VOQ5": { + "creditWDPkts": "13", "dropbytes": "79", "droppacket": "95", "totalbytes": "70", "totalpacket": "14" }, "VOQ6": { + "creditWDPkts": "22", "dropbytes": "81", "droppacket": "66", "totalbytes": "60", "totalpacket": "68" }, "VOQ7": { + "creditWDPkts": "53", "dropbytes": "76", "droppacket": "48", "totalbytes": "4", @@ -2088,48 +2104,56 @@ }, "testsw|Ethernet8": { "VOQ0": { + "creditWDPkts": "67", "dropbytes": "74", "droppacket": "77", "totalbytes": "73", "totalpacket": "41" }, "VOQ1": { + "creditWDPkts": "79", "dropbytes": "54", "droppacket": "56", "totalbytes": "21", "totalpacket": "60" }, "VOQ2": { + "creditWDPkts": "35", "dropbytes": "39", "droppacket": "12", "totalbytes": "31", "totalpacket": "57" }, "VOQ3": { + "creditWDPkts": "47", "dropbytes": "98", "droppacket": "70", "totalbytes": "96", "totalpacket": "41" }, "VOQ4": { + "creditWDPkts": "62", "dropbytes": "36", "droppacket": "63", "totalbytes": "49", "totalpacket": "18" }, "VOQ5": { + "creditWDPkts": "19", "dropbytes": "15", "droppacket": "3", "totalbytes": "90", "totalpacket": "99" }, "VOQ6": { + "creditWDPkts": "33", "dropbytes": "94", "droppacket": "82", "totalbytes": "84", "totalpacket": "8" }, "VOQ7": { + "creditWDPkts": "3", "dropbytes": "92", "droppacket": "75", "totalbytes": "15", @@ -2142,48 +2166,56 @@ { "testsw|Ethernet0": { "VOQ0": { + "creditWDPkts": "0", "dropbytes": "0", "droppacket": "0", "totalbytes": "0", "totalpacket": "0" }, "VOQ1": { + "creditWDPkts": "1", "dropbytes": "1", "droppacket": "39", "totalbytes": "43", "totalpacket": "60" }, "VOQ2": { + "creditWDPkts": "19", "dropbytes": "21", "droppacket": "39", "totalbytes": "7", "totalpacket": "82" }, "VOQ3": { + "creditWDPkts": "12", "dropbytes": "94", "droppacket": "12", "totalbytes": "59", "totalpacket": "11" }, "VOQ4": { + "creditWDPkts": "11", "dropbytes": "40", "droppacket": "35", "totalbytes": "62", "totalpacket": "36" }, "VOQ5": { + "creditWDPkts": "15", "dropbytes": "88", "droppacket": "2", "totalbytes": "91", "totalpacket": "49" }, "VOQ6": { + "creditWDPkts": "17", "dropbytes": "74", "droppacket": "94", "totalbytes": "17", "totalpacket": "33" }, "VOQ7": { + "creditWDPkts": "73", "dropbytes": "33", "droppacket": "95", "totalbytes": "71",