From 3be8f145c3ed704c032805975af433ba435fa89d Mon Sep 17 00:00:00 2001 From: Mahesh Maddikayala <10645050+smaheshm@users.noreply.github.com> Date: Sat, 19 Sep 2020 15:01:40 -0700 Subject: [PATCH] [CLI][PFCWD][Multi-ASIC] Added multi ASIC support to 'pfcwd' CLI (#1102) * [pfcwd] Add single asic unit tests for show commands [CLI][PFCWD][Multi-ASIC] Added multi ASIC support to 'pfcwd' CLI * fix the API args caused by merge, make linter happy * fix typo * fix merge issue --- pfcwd/main.py | 661 +++++--- setup.py | 3 +- show/main.py | 14 +- .../mock_tables/asic0/config_db.json | 26 +- .../mock_tables/asic0/counters_db.json | 1410 +++++++++++++++++ .../mock_tables/asic1/config_db.json | 14 + .../mock_tables/asic1/counters_db.json | 2 +- .../mock_tables/config_db.json | 18 + .../mock_tables/counters_db.json | 59 + sonic-utilities-tests/pfcstat_test.py | 28 +- sonic-utilities-tests/pfcwd_input/__init__.py | 0 .../pfcwd_input/pfcwd_test_vectors.py | 244 +++ sonic-utilities-tests/pfcwd_test.py | 153 ++ 13 files changed, 2374 insertions(+), 258 deletions(-) create mode 100644 sonic-utilities-tests/pfcwd_input/__init__.py create mode 100644 sonic-utilities-tests/pfcwd_input/pfcwd_test_vectors.py create mode 100644 sonic-utilities-tests/pfcwd_test.py diff --git a/pfcwd/main.py b/pfcwd/main.py index 2941f754f6..d956d9c143 100644 --- a/pfcwd/main.py +++ b/pfcwd/main.py @@ -1,11 +1,32 @@ #! /usr/bin/python -u -import click -import swsssdk import os import sys -from tabulate import tabulate + +import click + from natsort import natsorted +from sonic_py_common.multi_asic import get_external_ports +from tabulate import tabulate +from tabulate import tabulate +from utilities_common import multi_asic as multi_asic_util +from utilities_common import constants + +# mock the redis for unit test purposes # +try: + if os.environ["UTILITIES_UNIT_TESTING"] == "2": + modules_path = os.path.join(os.path.dirname(__file__), "..") + tests_path = os.path.join(modules_path, "sonic-utilities-tests") + sys.path.insert(0, modules_path) + sys.path.insert(0, tests_path) + import mock_tables.dbconnector + if os.environ["UTILITIES_UNIT_TESTING_TOPOLOGY"] == "multi_asic": + import mock_tables.mock_multi_asic + mock_tables.dbconnector.load_namespace_config() + +except KeyError: + pass + # Default configuration DEFAULT_DETECTION_TIME = 200 @@ -38,267 +59,423 @@ def cli(): """ SONiC PFC Watchdog """ -def get_all_queues(db): + +def get_all_queues(db, namespace=None, display=constants.DISPLAY_ALL): queue_names = db.get_all(db.COUNTERS_DB, 'COUNTERS_QUEUE_NAME_MAP') - return natsorted(queue_names.keys() if queue_names else {}) + queues = queue_names.keys() if queue_names else {} + if display == constants.DISPLAY_ALL: + return natsorted(queues) + # filter the backend ports + display_ports = [q.split(":")[0] for q in queues] + display_ports = get_external_ports(display_ports, namespace) + queues = [q for q in queues if q.split(":")[0] in display_ports] + return natsorted(queues) + -def get_all_ports(db): +def get_all_ports(db, namespace=None, display=constants.DISPLAY_ALL): all_port_names = db.get_all(db.COUNTERS_DB, 'COUNTERS_PORT_NAME_MAP') # Get list of physical ports port_names = {} for i in all_port_names: if i.startswith('Ethernet'): - port_names[i]= all_port_names[i] - return natsorted(port_names.keys()) + port_names[i] = all_port_names[i] + display_ports = port_names.keys() + if display == constants.DISPLAY_EXTERNAL: + display_ports = get_external_ports(display_ports, namespace) + return natsorted(display_ports) + def get_server_facing_ports(db): candidates = db.get_table('DEVICE_NEIGHBOR') server_facing_ports = [] for port in candidates.keys(): - neighbor = db.get_entry('DEVICE_NEIGHBOR_METADATA', candidates[port]['name']) + neighbor = db.get_entry( + 'DEVICE_NEIGHBOR_METADATA', candidates[port]['name'] + ) if neighbor and neighbor['type'].lower() == 'server': server_facing_ports.append(port) if not server_facing_ports: server_facing_ports = [p[1] for p in db.get_table('VLAN_MEMBER').keys()] return server_facing_ports -# Show commands -@cli.group() -def show(): - """ Show PFC Watchdog information""" - -# Show stats -@show.command() -@click.option('-e', '--empty', is_flag = True) -@click.argument('queues', nargs = -1) -def stats(empty, queues): - """ Show PFC Watchdog stats per queue """ - db = swsssdk.SonicV2Connector(host='127.0.0.1') - db.connect(db.COUNTERS_DB) - table = [] - - if len(queues) == 0: - queues = get_all_queues(db) - - for queue in queues: - stats_list = [] - queue_oid = db.get(db.COUNTERS_DB, 'COUNTERS_QUEUE_NAME_MAP', queue) - if queue_oid is None: - continue - stats = db.get_all(db.COUNTERS_DB, 'COUNTERS:' + queue_oid) - if stats is None: - continue - for stat in STATS_DESCRIPTION: - line = stats.get(stat[1], '0') + '/' + stats.get(stat[2], '0') - stats_list.append(line) - if stats_list != ['0/0'] * len(STATS_DESCRIPTION) or empty: - table.append([queue, stats.get('PFC_WD_STATUS', 'N/A')] + stats_list) - - click.echo(tabulate(table, STATS_HEADER, stralign='right', numalign='right', tablefmt='simple')) - -# Show stats -@show.command() -@click.argument('ports', nargs = -1) -def config(ports): - """ Show PFC Watchdog configuration """ - configdb = swsssdk.ConfigDBConnector() - configdb.connect() - countersdb = swsssdk.SonicV2Connector(host='127.0.0.1') - countersdb.connect(countersdb.COUNTERS_DB) - table = [] - - all_ports = get_all_ports(countersdb) - - if len(ports) == 0: - ports = all_ports - - for port in ports: - config_list = [] - config_entry = configdb.get_entry(CONFIG_DB_PFC_WD_TABLE_NAME, port) - if config_entry is None or config_entry == {}: - continue - for config in CONFIG_DESCRIPTION: - line = config_entry.get(config[1], config[2]) - config_list.append(line) - table.append([port] + config_list) - poll_interval = configdb.get_entry( CONFIG_DB_PFC_WD_TABLE_NAME, 'GLOBAL').get('POLL_INTERVAL') - if poll_interval is not None: - click.echo("Changed polling interval to " + poll_interval + "ms") - - big_red_switch = configdb.get_entry( CONFIG_DB_PFC_WD_TABLE_NAME, 'GLOBAL').get('BIG_RED_SWITCH') - if big_red_switch is not None: - click.echo("BIG_RED_SWITCH status is " + big_red_switch) - - click.echo(tabulate(table, CONFIG_HEADER, stralign='right', numalign='right', tablefmt='simple')) - -# Start WD -@cli.command() -@click.option('--action', '-a', type=click.Choice(['drop', 'forward', 'alert'])) -@click.option('--restoration-time', '-r', type=click.IntRange(100, 60000)) -@click.argument('ports', nargs=-1) -@click.argument('detection-time', type=click.IntRange(100, 5000)) -def start(action, restoration_time, ports, detection_time): - """ - Start PFC watchdog on port(s). To config all ports, use all as input. - - Example: - - sudo pfcwd start --action drop ports all detection-time 400 --restoration-time 400 - - """ - if os.geteuid() != 0: - exit("Root privileges are required for this operation") - allowed_strs = ['ports', 'all', 'detection-time'] - configdb = swsssdk.ConfigDBConnector() - configdb.connect() - countersdb = swsssdk.SonicV2Connector(host='127.0.0.1') - countersdb.connect(countersdb.COUNTERS_DB) - - all_ports = get_all_ports(countersdb) - allowed_strs = allowed_strs + all_ports - for p in ports: - if p not in allowed_strs: - raise click.BadOptionUsage("Bad command line format. Try 'pfcwd start --help' for usage") - - if len(ports) == 0: - ports = all_ports - - pfcwd_info = { - 'detection_time': detection_time, - } - if action is not None: - pfcwd_info['action'] = action - if restoration_time is not None: - pfcwd_info['restoration_time'] = restoration_time - else: - pfcwd_info['restoration_time'] = 2 * detection_time - print "restoration time not defined; default to 2 times detection time: %d ms" % (2 * detection_time) - - for port in ports: - if port == "all": - for p in all_ports: - configdb.mod_entry(CONFIG_DB_PFC_WD_TABLE_NAME, p, None) - configdb.mod_entry(CONFIG_DB_PFC_WD_TABLE_NAME, p, pfcwd_info) + +class PfcwdCli(object): + def __init__(self, namespace=None, display=constants.DISPLAY_ALL): + self.db = None + self.config_db = None + self.multi_asic = multi_asic_util.MultiAsic(display, namespace) + self.table = [] + + @multi_asic_util.run_on_multi_asic + def collect_stats(self, empty, queues): + table = [] + + if len(queues) == 0: + queues = get_all_queues( + self.db, + self.multi_asic.current_namespace, + self.multi_asic.display_option + ) + + for queue in queues: + stats_list = [] + queue_oid = self.db.get( + self.db.COUNTERS_DB, 'COUNTERS_QUEUE_NAME_MAP', queue + ) + if queue_oid is None: + continue + stats = self.db.get_all( + self.db.COUNTERS_DB, 'COUNTERS:' + queue_oid + ) + if stats is None: + continue + for stat in STATS_DESCRIPTION: + line = stats.get(stat[1], '0') + '/' + stats.get(stat[2], '0') + stats_list.append(line) + if stats_list != ['0/0'] * len(STATS_DESCRIPTION) or empty: + table.append( + [queue, stats.get('PFC_WD_STATUS', 'N/A')] + stats_list + ) + + self.table += table + + def show_stats(self, empty, queues): + del self.table[:] + self.collect_stats(empty, queues) + click.echo(tabulate( + self.table, STATS_HEADER, stralign='right', numalign='right', + tablefmt='simple' + )) + + @multi_asic_util.run_on_multi_asic + def collect_config(self, ports): + table = [] + if len(ports) == 0: + ports = get_all_ports( + self.db, self.multi_asic.current_namespace, + self.multi_asic.display_option + ) + + ports_found = False + for port in ports: + config_list = [] + config_entry = self.config_db.get_entry( + CONFIG_DB_PFC_WD_TABLE_NAME, port + ) + if config_entry is None or config_entry == {}: + continue + ports_found = True + for config in CONFIG_DESCRIPTION: + line = config_entry.get(config[1], config[2]) + config_list.append(line) + table.append([port] + config_list) + + if not ports_found: + return + + poll_interval = self.config_db.get_entry( + CONFIG_DB_PFC_WD_TABLE_NAME, 'GLOBAL' + ).get('POLL_INTERVAL') + + current_ns = self.multi_asic.current_namespace + asic_namesapce = \ + "" if current_ns is None or current_ns == "" else " on {}".format( + current_ns + ) + if poll_interval is not None: + click.echo( + "Changed polling interval to {}ms{}".format( + poll_interval, asic_namesapce + ) + ) + + big_red_switch = self.config_db.get_entry( + CONFIG_DB_PFC_WD_TABLE_NAME, 'GLOBAL' + ).get('BIG_RED_SWITCH') + + if big_red_switch is not None: + click.echo("BIG_RED_SWITCH status is {}{}".format( + big_red_switch, asic_namesapce + )) + + self.table += table + + def config(self, ports): + del self.table[:] + self.collect_config(ports) + click.echo(tabulate( + self.table, CONFIG_HEADER, stralign='right', numalign='right', + tablefmt='simple' + )) + + @multi_asic_util.run_on_multi_asic + def start(self, action, restoration_time, ports, detection_time): + if os.geteuid() != 0: + exit("Root privileges are required for this operation") + allowed_strs = ['ports', 'all', 'detection-time'] + + all_ports = get_all_ports( + self.db, self.multi_asic.current_namespace, + self.multi_asic.display_option + ) + allowed_strs = allowed_strs + all_ports + for p in ports: + if p not in allowed_strs: + raise click.BadOptionUsage( + "Bad command line format. Try 'pfcwd start --help' for " + "usage" + ) + + if len(ports) == 0: + ports = all_ports + + pfcwd_info = { + 'detection_time': detection_time, + } + if action is not None: + pfcwd_info['action'] = action + if restoration_time is not None: + pfcwd_info['restoration_time'] = restoration_time else: + pfcwd_info['restoration_time'] = 2 * detection_time + click.echo( + "restoration time not defined; default to 2 times " + "detection time: {} ms".format(2 * detection_time) + ) + + for port in ports: + if port == "all": + for p in all_ports: + self.config_db.mod_entry( + CONFIG_DB_PFC_WD_TABLE_NAME, p, None + ) + self.config_db.mod_entry( + CONFIG_DB_PFC_WD_TABLE_NAME, p, pfcwd_info + ) + else: + if port not in all_ports: + continue + self.config_db.mod_entry( + CONFIG_DB_PFC_WD_TABLE_NAME, port, None + ) + self.config_db.mod_entry( + CONFIG_DB_PFC_WD_TABLE_NAME, port, pfcwd_info + ) + + @multi_asic_util.run_on_multi_asic + def interval(self, poll_interval): + if os.geteuid() != 0: + exit("Root privileges are required for this operation") + pfcwd_info = {} + if poll_interval is not None: + pfcwd_table = self.config_db.get_table(CONFIG_DB_PFC_WD_TABLE_NAME) + entry_min = 3000 + for entry in pfcwd_table: + if("Ethernet" not in entry): + continue + detection_time_entry_value = int(self.config_db.get_entry( + CONFIG_DB_PFC_WD_TABLE_NAME, entry + ).get('detection_time')) + restoration_time_entry_value = int(self.config_db.get_entry( + CONFIG_DB_PFC_WD_TABLE_NAME, entry + ).get('restoration_time')) + if ((detection_time_entry_value is not None) and + (detection_time_entry_value < entry_min) + ): + entry_min = detection_time_entry_value + entry_min_str = "detection time" + if ((restoration_time_entry_value is not None) and + (restoration_time_entry_value < entry_min) + ): + entry_min = restoration_time_entry_value + entry_min_str = "restoration time" + if entry_min < poll_interval: + click.echo( + "unable to use polling interval = {}ms, value is " + "bigger than one of the configured {} values, " + "please choose a smaller polling_interval".format( + poll_interval, entry_min_str + ), err=True + ) + exit(1) + + pfcwd_info['POLL_INTERVAL'] = poll_interval + self.config_db.mod_entry( + CONFIG_DB_PFC_WD_TABLE_NAME, "GLOBAL", pfcwd_info + ) + + @multi_asic_util.run_on_multi_asic + def stop(self, ports): + if os.geteuid() != 0: + exit("Root privileges are required for this operation") + + all_ports = get_all_ports( + self.db, self.multi_asic.current_namespace, + self.multi_asic.display_option + ) + + if len(ports) == 0: + ports = all_ports + + for port in ports: if port not in all_ports: continue - configdb.mod_entry(CONFIG_DB_PFC_WD_TABLE_NAME, port, None) - configdb.mod_entry(CONFIG_DB_PFC_WD_TABLE_NAME, port, pfcwd_info) - -# Set WD poll interval -@cli.command() -@click.argument('poll_interval', type=click.IntRange(100, 3000)) -def interval(poll_interval): - """ Set PFC watchdog counter polling interval """ - if os.geteuid() != 0: - exit("Root privileges are required for this operation") - configdb = swsssdk.ConfigDBConnector() - configdb.connect() - pfcwd_info = {} - if poll_interval is not None: - pfcwd_table = configdb.get_table(CONFIG_DB_PFC_WD_TABLE_NAME) - entry_min = 3000 - for entry in pfcwd_table: - if("Ethernet" not in entry): - continue - detection_time_entry_value = int(configdb.get_entry(CONFIG_DB_PFC_WD_TABLE_NAME, entry).get('detection_time')) - restoration_time_entry_value = int(configdb.get_entry(CONFIG_DB_PFC_WD_TABLE_NAME, entry).get('restoration_time')) - if ((detection_time_entry_value != None) and (detection_time_entry_value < entry_min)): - entry_min = detection_time_entry_value - entry_min_str = "detection time" - if ((restoration_time_entry_value != None) and (restoration_time_entry_value < entry_min)): - entry_min = restoration_time_entry_value - entry_min_str = "restoration time" - if entry_min < poll_interval: - print >> sys.stderr, "unable to use polling interval = {}ms, value is bigger than one of the configured {} values, please choose a smaller polling_interval".format(poll_interval,entry_min_str) - exit(1) - - pfcwd_info['POLL_INTERVAL'] = poll_interval - configdb.mod_entry(CONFIG_DB_PFC_WD_TABLE_NAME, "GLOBAL", pfcwd_info) - -# Stop WD -@cli.command() -@click.argument('ports', nargs = -1) -def stop(ports): - """ Stop PFC watchdog on port(s) """ - if os.geteuid() != 0: - exit("Root privileges are required for this operation") - configdb = swsssdk.ConfigDBConnector() - configdb.connect() - countersdb = swsssdk.SonicV2Connector(host='127.0.0.1') - countersdb.connect(countersdb.COUNTERS_DB) - - all_ports = get_all_ports(countersdb) - - if len(ports) == 0: - ports = all_ports - - for port in ports: - if port not in all_ports: - continue - configdb.mod_entry(CONFIG_DB_PFC_WD_TABLE_NAME, port, None) - -# Set WD default configuration on server facing ports when enable flag is on -@cli.command("start_default") -def start_default(): - """ Start PFC WD by default configurations """ - if os.geteuid() != 0: - exit("Root privileges are required for this operation") - configdb = swsssdk.ConfigDBConnector() - configdb.connect() - enable = configdb.get_entry('DEVICE_METADATA', 'localhost').get('default_pfcwd_status') - - # Get active ports from Config DB - active_ports = natsorted(configdb.get_table('DEVICE_NEIGHBOR').keys()) - - if not enable or enable.lower() != "enable": - return - - port_num = len(configdb.get_table('PORT').keys()) - - # Paramter values positively correlate to the number of ports. - multiply = max(1, (port_num-1)/DEFAULT_PORT_NUM+1) - pfcwd_info = { - 'detection_time': DEFAULT_DETECTION_TIME * multiply, - 'restoration_time': DEFAULT_RESTORATION_TIME * multiply, - 'action': DEFAULT_ACTION - } - - for port in active_ports: - configdb.set_entry(CONFIG_DB_PFC_WD_TABLE_NAME, port, pfcwd_info) - - pfcwd_info = {} - pfcwd_info['POLL_INTERVAL'] = DEFAULT_POLL_INTERVAL * multiply - configdb.mod_entry(CONFIG_DB_PFC_WD_TABLE_NAME, "GLOBAL", pfcwd_info) - -# Enable/disable PFC WD counter polling -@cli.command('counter_poll') -@click.argument('counter_poll', type=click.Choice(['enable', 'disable'])) -def counter_poll(counter_poll): - """ Enable/disable counter polling """ - if os.geteuid() != 0: - exit("Root privileges are required for this operation") - configdb = swsssdk.ConfigDBConnector() - configdb.connect() - pfcwd_info = {} - pfcwd_info['FLEX_COUNTER_STATUS'] = counter_poll - configdb.mod_entry("FLEX_COUNTER_TABLE", "PFCWD", pfcwd_info) - -# Enable/disable PFC WD BIG_RED_SWITCH mode -@cli.command('big_red_switch') -@click.argument('big_red_switch', type=click.Choice(['enable', 'disable'])) -def big_red_switch(big_red_switch): - """ Enable/disable BIG_RED_SWITCH mode """ - if os.geteuid() != 0: - exit("Root privileges are required for this operation") - configdb = swsssdk.ConfigDBConnector() - configdb.connect() - pfcwd_info = {} - if big_red_switch is not None: - pfcwd_info['BIG_RED_SWITCH'] = big_red_switch - - configdb.mod_entry(CONFIG_DB_PFC_WD_TABLE_NAME, "GLOBAL", pfcwd_info) + self.config_db.mod_entry(CONFIG_DB_PFC_WD_TABLE_NAME, port, None) + + @multi_asic_util.run_on_multi_asic + def start_default(self): + if os.geteuid() != 0: + exit("Root privileges are required for this operation") + enable = self.config_db.get_entry('DEVICE_METADATA', 'localhost').get( + 'default_pfcwd_status' + ) + + # Get active ports from Config DB + active_ports = natsorted( + self.config_db.get_table('DEVICE_NEIGHBOR').keys() + ) + + if not enable or enable.lower() != "enable": + return + + port_num = len(self.config_db.get_table('PORT').keys()) + + # Paramter values positively correlate to the number of ports. + multiply = max(1, (port_num-1)/DEFAULT_PORT_NUM+1) + pfcwd_info = { + 'detection_time': DEFAULT_DETECTION_TIME * multiply, + 'restoration_time': DEFAULT_RESTORATION_TIME * multiply, + 'action': DEFAULT_ACTION + } + + for port in active_ports: + self.config_db.set_entry( + CONFIG_DB_PFC_WD_TABLE_NAME, port, pfcwd_info + ) + + pfcwd_info = {} + pfcwd_info['POLL_INTERVAL'] = DEFAULT_POLL_INTERVAL * multiply + self.config_db.mod_entry( + CONFIG_DB_PFC_WD_TABLE_NAME, "GLOBAL", pfcwd_info + ) + + @multi_asic_util.run_on_multi_asic + def counter_poll(self, counter_poll): + if os.geteuid() != 0: + exit("Root privileges are required for this operation") + pfcwd_info = {} + pfcwd_info['FLEX_COUNTER_STATUS'] = counter_poll + self.config_db.mod_entry("FLEX_COUNTER_TABLE", "PFCWD", pfcwd_info) + + @multi_asic_util.run_on_multi_asic + def big_red_switch(self, big_red_switch): + if os.geteuid() != 0: + exit("Root privileges are required for this operation") + pfcwd_info = {} + if big_red_switch is not None: + pfcwd_info['BIG_RED_SWITCH'] = big_red_switch + self.config_db.mod_entry( + CONFIG_DB_PFC_WD_TABLE_NAME, "GLOBAL", + pfcwd_info + ) + + +class Show(object): + # Show commands + @cli.group() + def show(): + """ Show PFC Watchdog information""" + + @show.command() + @multi_asic_util.multi_asic_click_options + @click.option('-e', '--empty', is_flag=True) + @click.argument('queues', nargs=-1) + def stats(namespace, display, empty, queues): + """ Show PFC Watchdog stats per queue """ + if (len(queues)): + display = constants.DISPLAY_ALL + PfcwdCli(namespace, display).show_stats(empty, queues) + + # Show config + @show.command() + @multi_asic_util.multi_asic_click_options + @click.argument('ports', nargs=-1) + def config(namespace, display, ports): + """ Show PFC Watchdog configuration """ + PfcwdCli(namespace, display).config(ports) + + +class Start(object): + @cli.command() + @click.option( + '--action', '-a', type=click.Choice(['drop', 'forward', 'alert']) + ) + @click.option('--restoration-time', '-r', type=click.IntRange(100, 60000)) + @click.argument('ports', nargs=-1) + @click.argument('detection-time', type=click.IntRange(100, 5000)) + def start(action, restoration_time, ports, detection_time): + """ + Start PFC watchdog on port(s). To config all ports, use all as input. + + Example: + + sudo pfcwd start --action drop ports all detection-time 400 --restoration-time 400 + + """ + PfcwdCli().start(action, restoration_time, ports, detection_time) + + +class Interval(object): + @cli.command() + @click.argument('poll_interval', type=click.IntRange(100, 3000)) + def interval(poll_interval): + """ Set PFC watchdog counter polling interval """ + PfcwdCli().interval(poll_interval) + + +class Stop(object): + @cli.command() + @click.argument('ports', nargs=-1) + def stop(ports): + """ Stop PFC watchdog on port(s) """ + PfcwdCli().stop(ports) + + +class StartDefault(object): + @cli.command("start_default") + def start_default(): + """ Start PFC WD by default configurations """ + PfcwdCli().start_default() + + +class CounterPoll(object): + @cli.command('counter_poll') + @click.argument('counter_poll', type=click.Choice(['enable', 'disable'])) + def counter_poll(counter_poll): + """ Enable/disable counter polling """ + PfcwdCli().counter_poll(counter_poll) + + +class BigRedSwitch(object): + @cli.command('big_red_switch') + @click.argument('big_red_switch', type=click.Choice(['enable', 'disable'])) + def big_red_switch(big_red_switch): + """ Enable/disable BIG_RED_SWITCH mode """ + PfcwdCli().big_red_switch(big_red_switch) + + +def get_pfcwd_clis(): + cli.add_command(BigRedSwitch().big_red_switch) + cli.add_command(CounterPoll().counter_poll) + cli.add_command(StartDefault().start_default) + cli.add_command(Stop().stop) + cli.add_command(Interval().interval) + cli.add_command(Start().start) + cli.add_command(Show().show) + return cli + if __name__ == '__main__': + cli = get_pfcwd_clis() cli() diff --git a/setup.py b/setup.py index b323fe1fc5..98013933ca 100644 --- a/setup.py +++ b/setup.py @@ -61,7 +61,8 @@ 'mock_tables/*.json', 'mock_tables/asic0/*.json', 'mock_tables/asic1/*.json', - 'filter_fdb_input/*'] + 'filter_fdb_input/*', + 'pfcwd_input/*'] }, scripts=[ 'scripts/aclshow', diff --git a/show/main.py b/show/main.py index 26bb76cdc5..80189004af 100755 --- a/show/main.py +++ b/show/main.py @@ -952,20 +952,26 @@ def pfcwd(): pass @pfcwd.command() +@multi_asic_util.multi_asic_click_options @click.option('--verbose', is_flag=True, help="Enable verbose output") -def config(verbose): +def config(namespace, display, verbose): """Show pfc watchdog config""" - cmd = "pfcwd show config" + cmd = "pfcwd show config -d {}".format(display) + if namespace is not None: + cmd += " -n {}".format(namespace) run_command(cmd, display_cmd=verbose) @pfcwd.command() +@multi_asic_util.multi_asic_click_options @click.option('--verbose', is_flag=True, help="Enable verbose output") -def stats(verbose): +def stats(namespace, display, verbose): """Show pfc watchdog stats""" - cmd = "pfcwd show stats" + cmd = "pfcwd show stats -d {}".format(display) + if namespace is not None: + cmd += " -n {}".format(namespace) run_command(cmd, display_cmd=verbose) diff --git a/sonic-utilities-tests/mock_tables/asic0/config_db.json b/sonic-utilities-tests/mock_tables/asic0/config_db.json index 79adcf758e..fb6169bfc7 100644 --- a/sonic-utilities-tests/mock_tables/asic0/config_db.json +++ b/sonic-utilities-tests/mock_tables/asic0/config_db.json @@ -83,5 +83,29 @@ }, "PORTCHANNEL_MEMBER|PortChannel4001|Ethernet-BP4": { "NULL": "NULL" + }, + "PFC_WD|Ethernet0": { + "action": "drop", + "detection_time": "200", + "restoration_time": "200" + }, + "PFC_WD|Ethernet4": { + "action": "drop", + "detection_time": "200", + "restoration_time": "200" + }, + "PFC_WD|Ethernet-BP0": { + "action": "drop", + "detection_time": "200", + "restoration_time": "200" + }, + "PFC_WD|Ethernet-BP4": { + "action": "drop", + "detection_time": "200", + "restoration_time": "200" + }, + "PFC_WD|GLOBAL": { + "BIG_RED_SWITCH": "enable", + "POLL_INTERVAL": "199" } -} \ No newline at end of file +} diff --git a/sonic-utilities-tests/mock_tables/asic0/counters_db.json b/sonic-utilities-tests/mock_tables/asic0/counters_db.json index 307c8a2337..3472ef9ebd 100644 --- a/sonic-utilities-tests/mock_tables/asic0/counters_db.json +++ b/sonic-utilities-tests/mock_tables/asic0/counters_db.json @@ -59,6 +59,1350 @@ "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "0", "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "0" }, + "COUNTERS:oid:0x1000000001000": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "440", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "55", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "28640", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "3580", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "44", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "352", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "31168", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "3896", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "5871", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "11", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "4740", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "47", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "499", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "2", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "7886", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "13" + + }, + "COUNTERS:oid:0x1000000001001": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "736", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "92", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "42512", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "5314", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "73", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "584", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "34352", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "4294", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "724", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "13", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "8548", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "2", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "226", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "5", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "8318", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "92" + + }, + "COUNTERS:oid:0x1000000001002": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "512", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "64", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "7080", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "885", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "20", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "160", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "39080", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "4885", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "1", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "3307", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "99", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "8919", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "20", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "999", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "0", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "9885", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "99" + + }, + "COUNTERS:oid:0x1000000001003": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "520", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "65", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "79336", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "9917", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "31", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "248", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "13000", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "1625", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "8814", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "0", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "1757", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "49", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "470", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "5", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "9734", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "35" + + }, + "COUNTERS:oid:0x1000000001004": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "224", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "28", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "47992", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "5999", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "36", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "288", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "30544", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "3818", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "8245", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "25", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "1954", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "26", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "880", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "1", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "8957", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "10" + + }, + "COUNTERS:oid:0x1000000001005": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "736", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "92", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "23344", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "2918", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "62", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "496", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "56040", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "7005", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "1", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "6730", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "99", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "5743", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "97", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "633", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "8", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "9538", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "54" + + }, + "COUNTERS:oid:0x1000000001006": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "584", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "73", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "25904", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "3238", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "63", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "504", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "38304", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "4788", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "74", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "72", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "3683", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "59", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "934", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "6", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "1060", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "53" + + }, + "COUNTERS:oid:0x1000000001007": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "512", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "64", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "76000", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "9500", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "67", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "536", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "2936", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "367", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "8805", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "95", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "4224", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "85", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "216", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "7", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "4283", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "0" + + }, + "COUNTERS:oid:0x1000000001008": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "456", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "57", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "43896", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "5487", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "4", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "32", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "8816", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "1102", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "1", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "1530", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "16", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "9282", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "62", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "235", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "6", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "3256", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "22" + + }, + "COUNTERS:oid:0x1000000001009": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "504", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "63", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "42344", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "5293", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "83", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "664", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "3832", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "479", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "3041", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "68", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "4391", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "86", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "172", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "9", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "8458", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "35" + + }, + "COUNTERS:oid:0x1000000001010": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "336", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "42", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "57424", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "7178", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "40", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "320", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "38416", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "4802", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "5356", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "70", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "2716", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "68", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "360", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "1", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "1394", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "13" + + }, + "COUNTERS:oid:0x1000000001011": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "760", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "95", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "35896", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "4487", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "47", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "376", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "69520", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "8690", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "1", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "5114", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "68", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "8389", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "23", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "777", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "4", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "8694", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "34" + + }, + "COUNTERS:oid:0x1000000001012": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "176", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "22", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "24064", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "3008", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "92", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "736", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "71704", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "8963", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "8759", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "98", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "8378", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "75", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "444", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "4", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "6390", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "11" + + }, + "COUNTERS:oid:0x1000000001013": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "168", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "21", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "19152", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "2394", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "80", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "640", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "22056", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "2757", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "9133", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "6", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "8308", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "65", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "496", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "5", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "3181", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "96" + + }, + "COUNTERS:oid:0x1000000001014": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "200", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "25", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "14536", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "1817", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "47", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "376", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "79696", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "9962", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "1819", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "34", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "7127", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "42", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "126", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "1", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "487", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "69" + + }, + "COUNTERS:oid:0x1000000001015": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "760", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "95", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "67288", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "8411", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "36", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "288", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "10848", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "1356", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "1", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "8152", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "34", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "3690", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "68", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "347", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "6", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "2844", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "88" + + }, + "COUNTERS:oid:0x1000000002000": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "664", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "83", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "78520", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "9815", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "62", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "496", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "51248", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "6406", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "1", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "1960", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "67", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "3987", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "77", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "997", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "3", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "4406", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "93" + + }, + "COUNTERS:oid:0x1000000002001": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "280", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "35", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "77616", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "9702", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "62", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "496", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "59440", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "7430", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "1880", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "83", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "8205", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "56", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "560", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "7", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "4320", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "95" + + }, + "COUNTERS:oid:0x1000000002002": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "240", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "30", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "17248", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "2156", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "20", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "160", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "14536", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "1817", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "7068", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "13", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "8087", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "35", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "196", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "2", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "150", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "56" + + }, + "COUNTERS:oid:0x1000000002003": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "648", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "81", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "60416", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "7552", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "98", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "784", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "65184", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "8148", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "1", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "1659", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "31", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "6912", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "79", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "515", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "3", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "5525", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "57" + + }, + "COUNTERS:oid:0x1000000002004": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "144", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "18", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "15456", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "1932", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "99", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "792", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "73632", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "9204", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "1", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "5010", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "55", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "7553", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "13", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "995", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "6", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "9133", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "46" + + }, + "COUNTERS:oid:0x1000000002005": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "384", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "48", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "7400", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "925", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "89", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "712", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "66432", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "8304", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "5746", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "92", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "8459", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "74", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "30", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "8", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "1972", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "4" + + }, + "COUNTERS:oid:0x1000000002006": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "568", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "71", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "56968", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "7121", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "46", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "368", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "76848", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "9606", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "1", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "3919", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "76", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "649", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "35", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "908", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "3", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "6804", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "10" + + }, + "COUNTERS:oid:0x1000000002007": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "160", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "20", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "9336", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "1167", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "30", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "240", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "39168", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "4896", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "1", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "3089", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "56", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "9521", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "83", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "875", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "0", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "2979", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "48" + + }, + "COUNTERS:oid:0x1000000002008": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "304", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "38", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "5624", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "703", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "17", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "136", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "46384", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "5798", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "1", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "8636", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "72", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "9950", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "76", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "67", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "2", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "4005", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "8" + + }, + "COUNTERS:oid:0x1000000002009": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "344", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "43", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "77968", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "9746", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "16", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "128", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "1624", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "203", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "6259", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "80", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "7033", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "96", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "226", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "8", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "1732", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "86" + + }, + "COUNTERS:oid:0x1000000002010": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "248", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "31", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "23888", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "2986", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "44", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "352", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "30872", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "3859", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "4585", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "17", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "3176", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "7", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "567", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "5", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "9822", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "32" + + }, + "COUNTERS:oid:0x1000000002011": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "552", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "69", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "35096", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "4387", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "4", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "32", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "4168", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "521", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "8590", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "76", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "7472", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "64", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "527", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "7", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "2772", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "1" + + }, + "COUNTERS:oid:0x1000000002012": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "600", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "75", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "69728", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "8716", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "23", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "184", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "30472", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "3809", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "5447", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "25", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "7670", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "60", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "537", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "4", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "4423", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "30" + + }, + "COUNTERS:oid:0x1000000002013": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "624", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "78", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "21416", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "2677", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "43", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "344", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "67040", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "8380", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "485", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "17", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "458", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "364", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "3", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "6280", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "94" + + }, + "COUNTERS:oid:0x1000000002014": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "504", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "63", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "20744", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "2593", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "7", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "56", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "12672", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "1584", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "1", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "8894", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "21", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "6258", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "57", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "69", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "8", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "5812", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "39" + + }, + "COUNTERS:oid:0x1000000002015": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "320", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "40", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "304", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "38", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "58", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "464", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "66480", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "8310", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "8073", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "38", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "2374", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "96", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "115", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "8", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "7589", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "9" + + }, + "COUNTERS:oid:0x1000000003000": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "328", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "41", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "26216", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "3277", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "87", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "696", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "57256", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "7157", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "5380", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "14", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "6152", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "83", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "719", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "9", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "7806", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "73" + + }, + "COUNTERS:oid:0x1000000003001": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "232", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "29", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "23968", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "2996", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "39", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "312", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "42136", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "5267", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "1", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "9206", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "77", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "2276", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "35", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "737", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "4", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "6904", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "71" + + }, + "COUNTERS:oid:0x1000000003002": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "792", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "99", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "35976", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "4497", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "97", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "776", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "76728", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "9591", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "1", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "9789", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "96", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "3424", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "34", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "946", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "9", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "7498", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "13" + + }, + "COUNTERS:oid:0x1000000003003": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "592", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "74", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "52440", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "6555", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "95", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "760", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "22360", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "2795", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "640", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "9", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "5797", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "4", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "5", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "0", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "1876", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "43" + + }, + "COUNTERS:oid:0x1000000003004": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "120", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "15", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "58576", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "7322", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "44", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "352", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "26960", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "3370", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "1", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "6613", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "67", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "849", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "73", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "648", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "8", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "1599", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "78" + + }, + "COUNTERS:oid:0x1000000003005": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "656", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "82", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "57088", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "7136", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "51", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "408", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "7680", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "960", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "7360", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "2", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "7571", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "21", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "127", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "8", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "2939", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "48" + + }, + "COUNTERS:oid:0x1000000003006": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "136", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "17", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "31312", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "3914", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "78", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "624", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "7088", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "886", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "9634", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "51", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "7451", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "76", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "940", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "0", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "3828", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "20" + + }, + "COUNTERS:oid:0x1000000003007": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "88", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "11", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "77264", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "9658", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "46", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "368", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "4824", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "603", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "1", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "1435", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "95", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "8539", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "54", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "685", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "9", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "9058", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "54" + + }, + "COUNTERS:oid:0x1000000003008": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "208", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "26", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "24360", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "3045", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "7", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "56", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "17720", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "2215", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "695", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "68", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "8592", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "5", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "181", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "4", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "4963", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "85" + + }, + "COUNTERS:oid:0x1000000003009": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "616", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "77", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "42696", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "5337", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "82", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "656", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "33936", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "4242", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "6729", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "15", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "7587", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "66", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "359", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "8", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "5498", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "36" + + }, + "COUNTERS:oid:0x1000000003010": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "376", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "47", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "2584", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "323", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "76", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "608", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "42376", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "5297", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "6733", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "76", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "3287", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "6", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "902", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "0", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "8748", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "26" + + }, + "COUNTERS:oid:0x1000000003011": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "264", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "33", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "67680", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "8460", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "78", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "624", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "64720", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "8090", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "1", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "1394", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "51", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "988", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "15", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "116", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "4", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "8272", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "94" + + }, + "COUNTERS:oid:0x1000000003012": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "152", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "19", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "55904", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "6988", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "36", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "288", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "38064", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "4758", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "5088", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "71", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "373", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "19", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "74", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "8", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "5817", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "0" + + }, + "COUNTERS:oid:0x1000000003013": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "728", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "91", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "69376", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "8672", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "83", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "664", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "23856", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "2982", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "1", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "6203", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "97", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "6916", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "49", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "253", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "4", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "4833", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "65" + + }, + "COUNTERS:oid:0x1000000003014": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "136", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "17", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "75744", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "9468", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "44", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "352", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "52240", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "6530", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "1970", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "26", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "6055", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "83", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "573", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "5", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "2860", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "48" + + }, + "COUNTERS:oid:0x1000000003015": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "88", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "11", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "50096", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "6262", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "65", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "520", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "44240", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "5530", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "4331", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "30", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "6559", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "27", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "230", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "4", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "6469", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "50" + + }, + "COUNTERS:oid:0x1000000004000": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "72", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "9", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "65888", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "8236", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "32", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "256", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "34400", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "4300", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "3836", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "77", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "891", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "99", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "962", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "2", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "3473", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "45" + + }, + "COUNTERS:oid:0x1000000004001": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "408", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "51", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "34304", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "4288", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "15", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "120", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "12760", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "1595", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "3922", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "54", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "4771", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "10", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "788", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "8", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "8089", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "15" + + }, + "COUNTERS:oid:0x1000000004002": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "568", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "71", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "59176", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "7397", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "67", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "536", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "43744", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "5468", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "972", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "34", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "6501", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "56", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "413", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "3", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "9569", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "8" + + }, + "COUNTERS:oid:0x1000000004003": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "8", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "1", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "51000", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "6375", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "86", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "688", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "50104", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "6263", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "4753", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "76", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "4747", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "60", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "701", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "7", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "8669", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "96" + + }, + "COUNTERS:oid:0x1000000004004": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "576", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "72", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "75448", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "9431", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "11", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "88", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "24520", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "3065", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "4486", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "8", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "5426", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "25", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "860", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "4", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "3633", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "92" + + }, + "COUNTERS:oid:0x1000000004005": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "392", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "49", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "38360", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "4795", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "71", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "568", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "2232", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "279", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "1", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "1848", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "39", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "1624", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "78", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "45", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "8", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "5074", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "10" + + }, + "COUNTERS:oid:0x1000000004006": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "200", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "25", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "65856", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "8232", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "64", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "512", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "79264", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "9908", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "1", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "3999", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "71", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "7447", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "15", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "6", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "7", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "3372", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "93" + + }, + "COUNTERS:oid:0x1000000004007": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "72", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "9", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "75600", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "9450", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "94", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "752", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "70608", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "8826", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "1", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "6653", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "11", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "1168", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "90", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "440", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "1", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "1084", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "7" + + }, + "COUNTERS:oid:0x1000000004008": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "136", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "17", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "2184", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "273", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "15", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "120", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "13360", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "1670", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "1", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "3865", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "47", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "7067", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "53", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "281", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "1", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "5858", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "45" + + }, + "COUNTERS:oid:0x1000000004009": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "312", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "39", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "38600", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "4825", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "51", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "408", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "17984", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "2248", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "5094", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "92", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "6991", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "96", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "636", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "8", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "1734", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "63" + + }, + "COUNTERS:oid:0x1000000004010": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "120", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "15", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "63392", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "7924", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "63", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "504", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "74536", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "9317", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "9421", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "50", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "9647", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "44", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "625", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "7", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "3991", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "1" + + }, + "COUNTERS:oid:0x1000000004011": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "344", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "43", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "75800", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "9475", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "95", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "760", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "6136", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "767", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "1", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "9667", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "70", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "3847", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "79", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "778", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "0", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "133", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "29" + + }, + "COUNTERS:oid:0x1000000004012": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "616", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "77", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "21072", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "2634", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "55", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "440", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "29736", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "3717", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "1", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "4691", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "26", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "7944", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "34", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "573", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "7", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "6631", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "57" + + }, + "COUNTERS:oid:0x1000000004013": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "232", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "29", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "54920", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "6865", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "30", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "240", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "51208", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "6401", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "8728", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "32", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "5931", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "39", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "768", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "1", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "9010", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "41" + + }, + "COUNTERS:oid:0x1000000004014": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "144", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "18", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "19680", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "2460", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "18", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "144", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "52576", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "6572", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "2668", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "54", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "8344", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "63", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "288", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "1", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "4343", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "60" + + }, + "COUNTERS:oid:0x1000000004015": { + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_OCTETS": "48", + "SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS": "6", + "SAI_ROUTER_INTERFACE_STAT_IN_OCTETS": "61744", + "SAI_ROUTER_INTERFACE_STAT_IN_PACKETS": "7718", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_OCTETS": "25", + "SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS": "200", + "SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS": "69400", + "SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS": "8675", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "0", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "1", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "9808", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "12", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "6644", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "2", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "758", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "7", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "7599", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "8" + + }, "COUNTERS_RIF_NAME_MAP": { "Ethernet20": "oid:0x600000000065f", "PortChannel0001": "oid:0x60000000005a1", @@ -246,6 +1590,72 @@ "PortChannel0003": "oid:0x600000000063c", "PortChannel0004": "oid:0x600000000063d" }, + "COUNTERS_QUEUE_NAME_MAP": { + "Ethernet0:0": "oid:0x1000000001000", + "Ethernet0:1": "oid:0x1000000001001", + "Ethernet0:2": "oid:0x1000000001002", + "Ethernet0:3": "oid:0x1000000001003", + "Ethernet0:4": "oid:0x1000000001004", + "Ethernet0:5": "oid:0x1000000001005", + "Ethernet0:6": "oid:0x1000000001006", + "Ethernet0:7": "oid:0x1000000001007", + "Ethernet0:8": "oid:0x1000000001008", + "Ethernet0:9": "oid:0x1000000001009", + "Ethernet0:10": "oid:0x1000000001010", + "Ethernet0:11": "oid:0x1000000001011", + "Ethernet0:12": "oid:0x1000000001012", + "Ethernet0:13": "oid:0x1000000001013", + "Ethernet0:14": "oid:0x1000000001014", + "Ethernet0:15": "oid:0x1000000001015", + "Ethernet4:0": "oid:0x1000000002000", + "Ethernet4:1": "oid:0x1000000002001", + "Ethernet4:2": "oid:0x1000000002002", + "Ethernet4:3": "oid:0x1000000002003", + "Ethernet4:4": "oid:0x1000000002004", + "Ethernet4:5": "oid:0x1000000002005", + "Ethernet4:6": "oid:0x1000000002006", + "Ethernet4:7": "oid:0x1000000002007", + "Ethernet4:8": "oid:0x1000000002008", + "Ethernet4:9": "oid:0x1000000002009", + "Ethernet4:10": "oid:0x1000000002010", + "Ethernet4:11": "oid:0x1000000002011", + "Ethernet4:12": "oid:0x1000000002012", + "Ethernet4:13": "oid:0x1000000002013", + "Ethernet4:14": "oid:0x1000000002014", + "Ethernet4:15": "oid:0x1000000002015", + "Ethernet-BP0:0": "oid:0x1000000003000", + "Ethernet-BP0:1": "oid:0x1000000003001", + "Ethernet-BP0:2": "oid:0x1000000003002", + "Ethernet-BP0:3": "oid:0x1000000003003", + "Ethernet-BP0:4": "oid:0x1000000003004", + "Ethernet-BP0:5": "oid:0x1000000003005", + "Ethernet-BP0:6": "oid:0x1000000003006", + "Ethernet-BP0:7": "oid:0x1000000003007", + "Ethernet-BP0:8": "oid:0x1000000003008", + "Ethernet-BP0:9": "oid:0x1000000003009", + "Ethernet-BP0:10": "oid:0x1000000003010", + "Ethernet-BP0:11": "oid:0x1000000003011", + "Ethernet-BP0:12": "oid:0x1000000003012", + "Ethernet-BP0:13": "oid:0x1000000003013", + "Ethernet-BP0:14": "oid:0x1000000003014", + "Ethernet-BP0:15": "oid:0x1000000003015", + "Ethernet-BP4:0": "oid:0x1000000004000", + "Ethernet-BP4:1": "oid:0x1000000004001", + "Ethernet-BP4:2": "oid:0x1000000004002", + "Ethernet-BP4:3": "oid:0x1000000004003", + "Ethernet-BP4:4": "oid:0x1000000004004", + "Ethernet-BP4:5": "oid:0x1000000004005", + "Ethernet-BP4:6": "oid:0x1000000004006", + "Ethernet-BP4:7": "oid:0x1000000004007", + "Ethernet-BP4:8": "oid:0x1000000004008", + "Ethernet-BP4:9": "oid:0x1000000004009", + "Ethernet-BP4:10": "oid:0x1000000004010", + "Ethernet-BP4:11": "oid:0x1000000004011", + "Ethernet-BP4:12": "oid:0x1000000004012", + "Ethernet-BP4:13": "oid:0x1000000004013", + "Ethernet-BP4:14": "oid:0x1000000004014", + "Ethernet-BP4:15": "oid:0x1000000004015" + }, "COUNTERS_DEBUG_NAME_PORT_STAT_MAP": { "DEBUG_0": "SAI_PORT_STAT_IN_DROP_REASON_RANGE_BASE", "DEBUG_2": "SAI_PORT_STAT_OUT_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS" diff --git a/sonic-utilities-tests/mock_tables/asic1/config_db.json b/sonic-utilities-tests/mock_tables/asic1/config_db.json index bdcca2dcfe..1ae3cff40b 100644 --- a/sonic-utilities-tests/mock_tables/asic1/config_db.json +++ b/sonic-utilities-tests/mock_tables/asic1/config_db.json @@ -62,5 +62,19 @@ }, "PORTCHANNEL_MEMBER|PortChannel4009|Ethernet-BP260" : { "NULL": "NULL" + }, + "PFC_WD|Ethernet-BP256": { + "action": "drop", + "detection_time": "200", + "restoration_time": "200" + }, + "PFC_WD|Ethernet-BP260": { + "action": "drop", + "detection_time": "200", + "restoration_time": "200" + }, + "PFC_WD|GLOBAL": { + "BIG_RED_SWITCH": "enable", + "POLL_INTERVAL": "199" } } diff --git a/sonic-utilities-tests/mock_tables/asic1/counters_db.json b/sonic-utilities-tests/mock_tables/asic1/counters_db.json index e6779332f7..588651560f 100644 --- a/sonic-utilities-tests/mock_tables/asic1/counters_db.json +++ b/sonic-utilities-tests/mock_tables/asic1/counters_db.json @@ -870,4 +870,4 @@ "COUNTERS_DEBUG_NAME_SWITCH_STAT_MAP": { "DEBUG_1": "SAI_SWITCH_STAT_IN_DROP_REASON_RANGE_BASE" } -} \ No newline at end of file +} diff --git a/sonic-utilities-tests/mock_tables/config_db.json b/sonic-utilities-tests/mock_tables/config_db.json index 35ce76fa8f..a29e6f279e 100644 --- a/sonic-utilities-tests/mock_tables/config_db.json +++ b/sonic-utilities-tests/mock_tables/config_db.json @@ -658,6 +658,24 @@ "FLEX_COUNTER_TABLE|PG_WATERMARK": { "POLL_INTERVAL": "10000", "FLEX_COUNTER_STATUS": "enable" + }, + "PFC_WD|Ethernet0": { + "action": "drop", + "detection_time": "600", + "restoration_time": "600" + }, + "PFC_WD|Ethernet4": { + "action": "drop", + "detection_time": "600", + "restoration_time": "600" + }, + "PFC_WD|Ethernet8": { + "action": "drop", + "detection_time": "600", + "restoration_time": "600" + }, + "PFC_WD|GLOBAL": { + "POLL_INTERVAL": "600" } } diff --git a/sonic-utilities-tests/mock_tables/counters_db.json b/sonic-utilities-tests/mock_tables/counters_db.json index d0be7f91c9..ff20dd0104 100644 --- a/sonic-utilities-tests/mock_tables/counters_db.json +++ b/sonic-utilities-tests/mock_tables/counters_db.json @@ -206,6 +206,11 @@ "Ethernet0": "oid:0x1000000000002", "Ethernet4": "oid:0x1000000000004", "Ethernet8": "oid:0x1000000000006" + }, + "COUNTERS_QUEUE_NAME_MAP": { + "Ethernet0:3": "oid:0x1500000000035b", + "Ethernet4:3": "oid:0x15000000000383", + "Ethernet8:4": "oid:0x150000000003ac" }, "COUNTERS_DEBUG_NAME_PORT_STAT_MAP": { "DEBUG_0": "SAI_PORT_STAT_IN_DROP_REASON_RANGE_BASE", @@ -213,5 +218,59 @@ }, "COUNTERS_DEBUG_NAME_SWITCH_STAT_MAP": { "DEBUG_1": "SAI_SWITCH_STAT_IN_DROP_REASON_RANGE_BASE" + }, + "COUNTERS:oid:0x1500000000035b": { + "PFC_WD_ACTION": "drop", + "PFC_WD_DETECTION_TIME": "600000", + "PFC_WD_DETECTION_TIME_LEFT": "600000", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "1", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "0", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "300", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "200", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "100", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "0", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "300", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "200", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "100", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "0", + "PFC_WD_RESTORATION_TIME": "600000", + "PFC_WD_RESTORATION_TIME_LEFT": "600000", + "PFC_WD_STATUS": "stormed" + }, + "COUNTERS:oid:0x15000000000383": { + "PFC_WD_ACTION": "drop", + "PFC_WD_DETECTION_TIME": "600000", + "PFC_WD_DETECTION_TIME_LEFT": "600000", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "2", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "2", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "100", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "0", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "100", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "0", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "100", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "0", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "100", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "0", + "PFC_WD_RESTORATION_TIME": "600000", + "PFC_WD_RESTORATION_TIME_LEFT": "600000", + "PFC_WD_STATUS": "operational" + }, + "COUNTERS:oid:0x150000000003ac": { + "PFC_WD_ACTION": "drop", + "PFC_WD_DETECTION_TIME": "600000", + "PFC_WD_DETECTION_TIME_LEFT": "600000", + "PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED": "3", + "PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED": "2", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS": "300", + "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "200", + "PFC_WD_QUEUE_STATS_RX_PACKETS": "100", + "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "0", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS": "300", + "PFC_WD_QUEUE_STATS_TX_DROPPED_PACKETS_LAST": "200", + "PFC_WD_QUEUE_STATS_TX_PACKETS": "100", + "PFC_WD_QUEUE_STATS_TX_PACKETS_LAST": "0", + "PFC_WD_RESTORATION_TIME": "600000", + "PFC_WD_RESTORATION_TIME_LEFT": "600000", + "PFC_WD_STATUS": "stormed" } } diff --git a/sonic-utilities-tests/pfcstat_test.py b/sonic-utilities-tests/pfcstat_test.py index 096035c5c6..6c9e5aff70 100644 --- a/sonic-utilities-tests/pfcstat_test.py +++ b/sonic-utilities-tests/pfcstat_test.py @@ -1,4 +1,3 @@ -import imp import os import shutil @@ -59,7 +58,8 @@ Ethernet-BP256 400 201 202 203 204 205 206 207 Ethernet-BP260 400 401 402 403 404 405 406 407 """ -show_pfc_counters_asic0 = """\ + +show_pfc_counters_all_asic = """\ Port Rx PFC0 PFC1 PFC2 PFC3 PFC4 PFC5 PFC6 PFC7 ------------ ------ ------ ------ ------ ------ ------ ------ ------ Ethernet0 400 201 202 203 204 205 206 207 @@ -107,14 +107,20 @@ """ +def del_cached_stats(): + uid = str(os.getuid()) + cnstat_dir = os.path.join(os.sep, "tmp", "pfcstat-{}".format(uid)) + shutil.rmtree(cnstat_dir, ignore_errors=True, onerror=None) + + def pfc_clear(expected_output): - uid = str(os.getuid()) - cnstat_dir = os.path.join(os.sep, "tmp", "pfcstat-{}".format(uid)) - shutil.rmtree(cnstat_dir, ignore_errors=True, onerror=None) + del_cached_stats() get_result_and_return_code('pfcstat -c') # verify that files are created with stats + uid = str(os.getuid()) + cnstat_dir = os.path.join(os.sep, "tmp", "pfcstat-{}".format(uid)) cnstat_fqn_file_rx = "{}rx".format(uid) cnstat_fqn_file_tx = "{}tx".format(uid) file_list = [cnstat_fqn_file_tx, cnstat_fqn_file_rx] @@ -131,7 +137,7 @@ def pfc_clear(expected_output): # this will also verify the saved counters are correct since the # expected counters are all '0s' assert result_stat == expected - shutil.rmtree(cnstat_dir, ignore_errors=True, onerror=None) + del_cached_stats() class TestPfcstat(object): @@ -140,6 +146,7 @@ def setup_class(cls): print("SETUP") os.environ["PATH"] += os.pathsep + scripts_path os.environ["UTILITIES_UNIT_TESTING"] = "2" + del_cached_stats() def test_pfc_counters(self): runner = CliRunner() @@ -161,6 +168,8 @@ def teardown_class(cls): os.environ["PATH"].split(os.pathsep)[:-1] ) os.environ["UTILITIES_UNIT_TESTING"] = "0" + del_cached_stats() + class TestMultiAsicPfcstat(object): @@ -170,7 +179,7 @@ def setup_class(cls): os.environ["PATH"] += os.pathsep + scripts_path os.environ["UTILITIES_UNIT_TESTING"] = "2" os.environ["UTILITIES_UNIT_TESTING_TOPOLOGY"] = "multi_asic" - imp.reload(show) + del_cached_stats() def test_pfc_counters_all(self): runner = CliRunner() @@ -197,9 +206,9 @@ def test_pfc_counters_asic_all(self): _, result = get_result_and_return_code( 'pfcstat -n asic0 -s all' ) - assert result == show_pfc_counters_asic0 + assert result == show_pfc_counters_all_asic - def test_pfc_clear(self): + def test_masic_pfc_clear(self): pfc_clear(show_pfc_counters_msaic_output_diff) @classmethod @@ -210,3 +219,4 @@ def teardown_class(cls): ) os.environ["UTILITIES_UNIT_TESTING"] = "0" os.environ["UTILITIES_UNIT_TESTING_TOPOLOGY"] = "" + del_cached_stats() diff --git a/sonic-utilities-tests/pfcwd_input/__init__.py b/sonic-utilities-tests/pfcwd_input/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/sonic-utilities-tests/pfcwd_input/pfcwd_test_vectors.py b/sonic-utilities-tests/pfcwd_input/pfcwd_test_vectors.py new file mode 100644 index 0000000000..41ad34e9d7 --- /dev/null +++ b/sonic-utilities-tests/pfcwd_input/pfcwd_test_vectors.py @@ -0,0 +1,244 @@ +pfcwd_show_config_output="""\ +Changed polling interval to 600ms + PORT ACTION DETECTION TIME RESTORATION TIME +--------- -------- ---------------- ------------------ +Ethernet0 drop 600 600 +Ethernet4 drop 600 600 +Ethernet8 drop 600 600 +""" + +pfcwd_show_config_single_port_output="""\ +Changed polling interval to 600ms + PORT ACTION DETECTION TIME RESTORATION TIME +--------- -------- ---------------- ------------------ +Ethernet0 drop 600 600 +""" + +pfcwd_show_config_multi_port_output="""\ +Changed polling interval to 600ms + PORT ACTION DETECTION TIME RESTORATION TIME +--------- -------- ---------------- ------------------ +Ethernet0 drop 600 600 +Ethernet4 drop 600 600 +""" + +pfcwd_show_config_invalid_port_output="""\ + PORT ACTION DETECTION TIME RESTORATION TIME +------ -------- ---------------- ------------------ +""" + +pfcwd_show_stats_output="""\ + QUEUE STATUS STORM DETECTED/RESTORED TX OK/DROP RX OK/DROP TX LAST OK/DROP RX LAST OK/DROP +----------- ----------- ------------------------- ------------ ------------ ----------------- ----------------- +Ethernet0:3 stormed 1/0 100/300 100/300 0/200 0/200 +Ethernet4:3 operational 2/2 100/100 100/100 0/0 0/0 +Ethernet8:4 stormed 3/2 100/300 100/300 0/200 0/200 +""" + +pfcwd_show_stats_single_queue_output="""\ + QUEUE STATUS STORM DETECTED/RESTORED TX OK/DROP RX OK/DROP TX LAST OK/DROP RX LAST OK/DROP +----------- -------- ------------------------- ------------ ------------ ----------------- ----------------- +Ethernet0:3 stormed 1/0 100/300 100/300 0/200 0/200 +""" + +pfcwd_show_stats_multi_queue_output="""\ + QUEUE STATUS STORM DETECTED/RESTORED TX OK/DROP RX OK/DROP TX LAST OK/DROP RX LAST OK/DROP +----------- ----------- ------------------------- ------------ ------------ ----------------- ----------------- +Ethernet0:3 stormed 1/0 100/300 100/300 0/200 0/200 +Ethernet4:3 operational 2/2 100/100 100/100 0/0 0/0 +""" + +pfcwd_show_stats_invalid_queue_output="""\ + QUEUE STATUS STORM DETECTED/RESTORED TX OK/DROP RX OK/DROP TX LAST OK/DROP RX LAST OK/DROP +------- -------- ------------------------- ------------ ------------ ----------------- ----------------- +""" + +testData = { + 'pfcwd_show_config' : [ {'cmd' : ['show', 'config'], + 'args': [], + 'rc': 0, + 'rc_output': pfcwd_show_config_output + } + ], + 'pfcwd_show_config_single_port' : [ {'cmd' : ['show', 'config'], + 'args': ['Ethernet0'], + 'rc': 0, + 'rc_output': pfcwd_show_config_single_port_output + } + ], + 'pfcwd_show_config_multi_port' : [ {'cmd' : ['show', 'config'], + 'args': ['Ethernet0', 'Ethernet4'], + 'rc': 0, + 'rc_output': pfcwd_show_config_multi_port_output + } + ], + 'pfcwd_show_config_invalid_port' : [ {'cmd' : ['show', 'config'], + 'args': ['Ethernet400'], + 'rc': 0, + 'rc_output': pfcwd_show_config_invalid_port_output + } + ], + 'pfcwd_show_stats' : [ {'cmd' : ['show', 'stats'], + 'args': [], + 'rc': 0, + 'rc_output': pfcwd_show_stats_output + } + ], + 'pfcwd_show_stats_single_queue' : [ {'cmd' : ['show', 'stats'], + 'args': ['Ethernet0:3'], + 'rc': 0, + 'rc_output': pfcwd_show_stats_single_queue_output + } + ], + 'pfcwd_show_stats_multi_queue' : [ {'cmd' : ['show', 'stats'], + 'args': ['Ethernet0:3', 'Ethernet4:3'], + 'rc': 0, + 'rc_output': pfcwd_show_stats_multi_queue_output + } + ], + 'pfcwd_show_stats_invalid_queue' : [ {'cmd' : ['show', 'stats'], + 'args': ['Ethernet0:100'], + 'rc': 0, + 'rc_output': pfcwd_show_stats_invalid_queue_output + } + ] + } + +""" Multi ASIC show command output """ + +show_pfcwd_stats_all = """\ + QUEUE STATUS STORM DETECTED/RESTORED TX OK/DROP RX OK/DROP TX LAST OK/DROP RX LAST OK/DROP +----------------- -------- ------------------------- ------------ ------------ ----------------- ----------------- + Ethernet0:0 N/A 0/0 5871/11 4740/47 499/2 7886/13 + Ethernet0:1 N/A 0/1 724/13 8548/2 226/5 8318/92 + Ethernet0:2 N/A 1/0 3307/99 8919/20 999/0 9885/99 + Ethernet0:3 N/A 0/1 8814/0 1757/49 470/5 9734/35 + Ethernet0:4 N/A 0/0 8245/25 1954/26 880/1 8957/10 + Ethernet0:5 N/A 1/0 6730/99 5743/97 633/8 9538/54 + Ethernet0:6 N/A 0/1 74/72 3683/59 934/6 1060/53 + Ethernet0:7 N/A 0/1 8805/95 4224/85 216/7 4283/0 + Ethernet0:8 N/A 1/0 1530/16 9282/62 235/6 3256/22 + Ethernet0:9 N/A 0/1 3041/68 4391/86 172/9 8458/35 + Ethernet0:10 N/A 0/1 5356/70 2716/68 360/1 1394/13 + Ethernet0:11 N/A 1/1 5114/68 8389/23 777/4 8694/34 + Ethernet0:12 N/A 0/0 8759/98 8378/75 444/4 6390/11 + Ethernet0:13 N/A 0/0 9133/6 8308/65 496/5 3181/96 + Ethernet0:14 N/A 0/0 1819/34 7127/42 126/1 487/69 + Ethernet0:15 N/A 1/0 8152/34 3690/68 347/6 2844/88 + Ethernet4:0 N/A 1/1 1960/67 3987/77 997/3 4406/93 + Ethernet4:1 N/A 0/1 1880/83 8205/56 560/7 4320/95 + Ethernet4:2 N/A 0/1 7068/13 8087/35 196/2 150/56 + Ethernet4:3 N/A 1/0 1659/31 6912/79 515/3 5525/57 + Ethernet4:4 N/A 1/1 5010/55 7553/13 995/6 9133/46 + Ethernet4:5 N/A 0/1 5746/92 8459/74 30/8 1972/4 + Ethernet4:6 N/A 1/1 3919/76 649/35 908/3 6804/10 + Ethernet4:7 N/A 1/1 3089/56 9521/83 875/0 2979/48 + Ethernet4:8 N/A 1/0 8636/72 9950/76 67/2 4005/8 + Ethernet4:9 N/A 0/0 6259/80 7033/96 226/8 1732/86 + Ethernet4:10 N/A 0/0 4585/17 3176/7 567/5 9822/32 + Ethernet4:11 N/A 0/0 8590/76 7472/64 527/7 2772/1 + Ethernet4:12 N/A 0/1 5447/25 7670/60 537/4 4423/30 + Ethernet4:13 N/A 0/0 485/17 458/1 364/3 6280/94 + Ethernet4:14 N/A 1/1 8894/21 6258/57 69/8 5812/39 + Ethernet4:15 N/A 0/1 8073/38 2374/96 115/8 7589/9 + Ethernet-BP0:0 N/A 0/0 5380/14 6152/83 719/9 7806/73 + Ethernet-BP0:1 N/A 1/1 9206/77 2276/35 737/4 6904/71 + Ethernet-BP0:2 N/A 1/0 9789/96 3424/34 946/9 7498/13 + Ethernet-BP0:3 N/A 0/1 640/9 5797/4 5/0 1876/43 + Ethernet-BP0:4 N/A 1/0 6613/67 849/73 648/8 1599/78 + Ethernet-BP0:5 N/A 0/1 7360/2 7571/21 127/8 2939/48 + Ethernet-BP0:6 N/A 0/1 9634/51 7451/76 940/0 3828/20 + Ethernet-BP0:7 N/A 1/0 1435/95 8539/54 685/9 9058/54 + Ethernet-BP0:8 N/A 0/0 695/68 8592/5 181/4 4963/85 + Ethernet-BP0:9 N/A 0/1 6729/15 7587/66 359/8 5498/36 + Ethernet-BP0:10 N/A 0/0 6733/76 3287/6 902/0 8748/26 + Ethernet-BP0:11 N/A 1/1 1394/51 988/15 116/4 8272/94 + Ethernet-BP0:12 N/A 0/1 5088/71 373/19 74/8 5817/0 + Ethernet-BP0:13 N/A 1/0 6203/97 6916/49 253/4 4833/65 + Ethernet-BP0:14 N/A 0/0 1970/26 6055/83 573/5 2860/48 + Ethernet-BP0:15 N/A 0/1 4331/30 6559/27 230/4 6469/50 + Ethernet-BP4:0 N/A 0/1 3836/77 891/99 962/2 3473/45 + Ethernet-BP4:1 N/A 0/0 3922/54 4771/10 788/8 8089/15 + Ethernet-BP4:2 N/A 0/0 972/34 6501/56 413/3 9569/8 + Ethernet-BP4:3 N/A 0/0 4753/76 4747/60 701/7 8669/96 + Ethernet-BP4:4 N/A 0/0 4486/8 5426/25 860/4 3633/92 + Ethernet-BP4:5 N/A 1/1 1848/39 1624/78 45/8 5074/10 + Ethernet-BP4:6 N/A 1/1 3999/71 7447/15 6/7 3372/93 + Ethernet-BP4:7 N/A 1/1 6653/11 1168/90 440/1 1084/7 + Ethernet-BP4:8 N/A 1/0 3865/47 7067/53 281/1 5858/45 + Ethernet-BP4:9 N/A 0/0 5094/92 6991/96 636/8 1734/63 + Ethernet-BP4:10 N/A 0/1 9421/50 9647/44 625/7 3991/1 + Ethernet-BP4:11 N/A 1/1 9667/70 3847/79 778/0 133/29 + Ethernet-BP4:12 N/A 1/0 4691/26 7944/34 573/7 6631/57 + Ethernet-BP4:13 N/A 0/1 8728/32 5931/39 768/1 9010/41 + Ethernet-BP4:14 N/A 0/1 2668/54 8344/63 288/1 4343/60 + Ethernet-BP4:15 N/A 0/1 9808/12 6644/2 758/7 7599/8 + Ethernet-BP256:0 N/A 0/1 5844/42 7126/54 286/1 8381/53 + Ethernet-BP256:1 N/A 1/0 1926/34 4091/88 421/8 858/11 + Ethernet-BP256:2 N/A 1/0 1140/80 6288/71 962/9 4965/15 + Ethernet-BP256:3 N/A 1/0 3774/65 5501/86 327/5 2963/25 + Ethernet-BP256:4 N/A 1/0 9515/34 682/62 601/9 6934/59 + Ethernet-BP256:5 N/A 1/0 5953/12 47/21 129/2 3149/85 + Ethernet-BP256:6 N/A 1/1 2419/61 4296/53 132/9 447/1 + Ethernet-BP256:7 N/A 1/0 1194/96 5915/41 418/0 2540/60 + Ethernet-BP256:8 N/A 0/1 7366/36 6813/41 342/3 8365/84 + Ethernet-BP256:9 N/A 0/1 3419/18 6963/36 113/3 2178/39 +Ethernet-BP256:10 N/A 1/0 4559/78 8647/85 6/5 9111/92 +Ethernet-BP256:11 N/A 0/0 6226/95 5515/94 377/1 1879/61 +Ethernet-BP256:12 N/A 1/1 5660/10 9653/88 69/3 6656/59 +Ethernet-BP256:13 N/A 0/1 3522/10 106/19 114/6 4592/40 +Ethernet-BP256:14 N/A 0/1 3252/68 6306/55 78/7 7846/99 +Ethernet-BP256:15 N/A 1/0 968/15 8387/98 15/2 6495/35 + Ethernet-BP260:0 N/A 1/0 2030/40 6262/29 922/2 4880/84 + Ethernet-BP260:1 N/A 0/1 935/94 8236/44 139/0 3945/6 + Ethernet-BP260:2 N/A 0/0 3989/29 4700/54 250/3 5431/27 + Ethernet-BP260:3 N/A 0/0 8774/59 5977/88 853/6 123/22 + Ethernet-BP260:4 N/A 1/1 3289/58 8762/40 509/9 5097/75 + Ethernet-BP260:5 N/A 1/0 3083/84 1933/90 818/8 590/24 + Ethernet-BP260:6 N/A 1/0 1460/71 5827/5 775/5 9836/77 + Ethernet-BP260:7 N/A 0/1 7692/28 3935/8 299/3 2368/75 + Ethernet-BP260:8 N/A 1/1 7370/87 6133/16 581/1 7944/62 + Ethernet-BP260:9 N/A 1/1 5719/87 1561/11 235/1 4054/49 +Ethernet-BP260:10 N/A 1/0 6526/9 5217/26 260/4 9338/69 +Ethernet-BP260:11 N/A 1/1 5615/81 9506/12 185/5 9902/28 +Ethernet-BP260:12 N/A 1/1 76/28 4344/45 532/7 8590/69 +Ethernet-BP260:13 N/A 0/1 3839/80 8143/47 601/7 575/97 +Ethernet-BP260:14 N/A 1/1 3787/72 9865/4 493/6 537/95 +Ethernet-BP260:15 N/A 0/1 6803/57 804/71 104/3 8343/72 +""" + +show_pfc_config_all = """\ +Changed polling interval to 199ms on asic0 +BIG_RED_SWITCH status is enable on asic0 +Changed polling interval to 199ms on asic1 +BIG_RED_SWITCH status is enable on asic1 + PORT ACTION DETECTION TIME RESTORATION TIME +-------------- -------- ---------------- ------------------ + Ethernet0 drop 200 200 + Ethernet4 drop 200 200 + Ethernet-BP0 drop 200 200 + Ethernet-BP4 drop 200 200 +Ethernet-BP256 drop 200 200 +Ethernet-BP260 drop 200 200 +""" + +show_pfcwd_stats_with_queues = """\ + QUEUE STATUS STORM DETECTED/RESTORED TX OK/DROP RX OK/DROP TX LAST OK/DROP RX LAST OK/DROP +----------------- -------- ------------------------- ------------ ------------ ----------------- ----------------- + Ethernet0:3 N/A 0/1 8814/0 1757/49 470/5 9734/35 + Ethernet4:15 N/A 0/1 8073/38 2374/96 115/8 7589/9 + Ethernet-BP0:13 N/A 1/0 6203/97 6916/49 253/4 4833/65 +Ethernet-BP260:10 N/A 1/0 6526/9 5217/26 260/4 9338/69 +""" + +show_pfcwd_config_with_ports = """\ +Changed polling interval to 199ms on asic0 +BIG_RED_SWITCH status is enable on asic0 +Changed polling interval to 199ms on asic1 +BIG_RED_SWITCH status is enable on asic1 + PORT ACTION DETECTION TIME RESTORATION TIME +-------------- -------- ---------------- ------------------ + Ethernet0 drop 200 200 + Ethernet-BP0 drop 200 200 +Ethernet-BP256 drop 200 200 +""" diff --git a/sonic-utilities-tests/pfcwd_test.py b/sonic-utilities-tests/pfcwd_test.py new file mode 100644 index 0000000000..16c449dcd5 --- /dev/null +++ b/sonic-utilities-tests/pfcwd_test.py @@ -0,0 +1,153 @@ +import imp +import os +import sys + +from click.testing import CliRunner +from swsssdk import ConfigDBConnector + +from pfcwd_input.pfcwd_test_vectors import ( + testData, show_pfcwd_stats_all, show_pfc_config_all, + show_pfcwd_stats_with_queues, show_pfcwd_config_with_ports +) + +test_path = os.path.dirname(os.path.abspath(__file__)) +modules_path = os.path.dirname(test_path) +scripts_path = os.path.join(modules_path, "pfcwd") +sys.path.insert(0, test_path) +sys.path.insert(0, modules_path) + + +class TestPfcwd(object): + @classmethod + def setup_class(cls): + os.environ["PATH"] += os.pathsep + scripts_path + os.environ['UTILITIES_UNIT_TESTING'] = "2" + print("SETUP") + + def test_pfcwd_show_config(self): + self.executor(testData['pfcwd_show_config']) + + def test_pfcwd_show_config_single_port(self): + self.executor(testData['pfcwd_show_config_single_port']) + + def test_pfcwd_show_config_multi_port(self): + self.executor(testData['pfcwd_show_config_multi_port']) + + def test_pfcwd_show_config_invalid_port(self): + self.executor(testData['pfcwd_show_config_invalid_port']) + + def test_pfcwd_show_stats(self): + self.executor(testData['pfcwd_show_stats']) + + def test_pfcwd_show_stats_single_queue(self): + self.executor(testData['pfcwd_show_stats_single_queue']) + + def test_pfcwd_show_stats_multi_queue(self): + self.executor(testData['pfcwd_show_stats_multi_queue']) + + def test_pfcwd_show_stats_invalid_queue(self): + self.executor(testData['pfcwd_show_stats_invalid_queue']) + + def executor(self, testcase): + import pfcwd.main as pfcwd + runner = CliRunner() + db = ConfigDBConnector() + db.connect() + + for input in testcase: + exec_cmd = "" + if len(input['cmd']) == 1: + exec_cmd = pfcwd.cli.commands[input['cmd'][0]] + else: + exec_cmd = pfcwd.cli.commands[input['cmd'][0]].commands[input['cmd'][1]] + + if 'db' in input and input['db']: + result = runner.invoke(exec_cmd, input['args'], obj=db) + else: + result = runner.invoke(exec_cmd, input['args']) + + print(result.exit_code) + print(result.output) + + if input['rc'] == 0: + assert result.exit_code == 0 + else: + assert result.exit_code != 0 + + if 'rc_msg' in input: + assert input['rc_msg'] in result.output + + if 'rc_output' in input: + assert result.output == input['rc_output'] + + @classmethod + def teardown_class(cls): + os.environ["PATH"] = os.pathsep.join(os.environ["PATH"].split(os.pathsep)[:-1]) + os.environ['UTILITIES_UNIT_TESTING'] = "0" + print("TEARDOWN") + + +class TestMultiAsicPfcwdShow(object): + @classmethod + def setup_class(cls): + print("SETUP") + os.environ["PATH"] += os.pathsep + scripts_path + os.environ["UTILITIES_UNIT_TESTING"] = "2" + os.environ["UTILITIES_UNIT_TESTING_TOPOLOGY"] = "multi_asic" + import pfcwd.main + imp.reload(pfcwd.main) + + def test_pfcwd_stats_all(self): + import pfcwd.main as pfcwd + print(pfcwd.__file__) + runner = CliRunner() + result = runner.invoke( + pfcwd.cli.commands["show"].commands["stats"] + ) + print(result.output) + assert result.exit_code == 0 + assert result.output == show_pfcwd_stats_all + + def test_pfcwd_stats_with_queues(self): + import pfcwd.main as pfcwd + runner = CliRunner() + result = runner.invoke( + pfcwd.cli.commands["show"].commands["stats"], + [ + "Ethernet0:3", "Ethernet4:15", "Ethernet-BP0:13", + "Ethernet-BP260:10", "InvalidQueue" + ] + ) + print(result.output) + assert result.exit_code == 0 + assert result.output == show_pfcwd_stats_with_queues + + def test_pfcwd_config_all(self): + import pfcwd.main as pfcwd + runner = CliRunner() + result = runner.invoke( + pfcwd.cli.commands["show"].commands["config"] + ) + print(result.output) + assert result.exit_code == 0 + assert result.output == show_pfc_config_all + + def test_pfcwd_config_with_ports(self): + import pfcwd.main as pfcwd + runner = CliRunner() + result = runner.invoke( + pfcwd.cli.commands["show"].commands["config"], + ["Ethernet0", "Ethernet-BP0", "Ethernet-BP256", "InvalidPort"] + ) + print(result.output) + assert result.exit_code == 0 + assert result.output == show_pfcwd_config_with_ports + + @classmethod + def teardown_class(cls): + print("TEARDOWN") + os.environ["PATH"] = os.pathsep.join( + os.environ["PATH"].split(os.pathsep)[:-1] + ) + os.environ["UTILITIES_UNIT_TESTING"] = "0" + os.environ["UTILITIES_UNIT_TESTING_TOPOLOGY"] = ""