diff --git a/config/main.py b/config/main.py index ae5fc45845f..94332926d4c 100644 --- a/config/main.py +++ b/config/main.py @@ -2649,7 +2649,7 @@ def reload(ctx, no_dynamic_buffer, dry_run, json_data, ports): namespace_list = multi_asic.get_namespaces_from_linux() buffer_model_updated = False - vendors_supporting_dynamic_buffer = ["mellanox"] + vendors_supporting_dynamic_buffer = ["mellanox", "barefoot"] for ns in namespace_list: if ns is DEFAULT_NAMESPACE: diff --git a/config/validated_config_db_connector.py b/config/validated_config_db_connector.py index b94a2df4a55..b230354ee34 100644 --- a/config/validated_config_db_connector.py +++ b/config/validated_config_db_connector.py @@ -5,59 +5,66 @@ from generic_config_updater.generic_updater import GenericUpdater, ConfigFormat from generic_config_updater.gu_common import EmptyTableError, genericUpdaterLogging -def ValidatedConfigDBConnector(config_db_connector): - yang_enabled = device_info.is_yang_config_validation_enabled(config_db_connector) - if yang_enabled: - config_db_connector.set_entry = validated_set_entry - config_db_connector.delete_table = validated_delete_table - return config_db_connector - -def make_path_value_jsonpatch_compatible(table, key, value): - if type(key) == tuple: - path = JsonPointer.from_parts([table, '|'.join(key)]).path - else: - path = JsonPointer.from_parts([table, key]).path - if value == {"NULL" : "NULL"}: - value = {} - return path, value - -def create_gcu_patch(op, table, key=None, value=None): - if key: - path, value = make_path_value_jsonpatch_compatible(table, key, value) - else: - path = "/{}".format(table) - - gcu_json_input = [] - gcu_json = {"op": "{}".format(op), - "path": "{}".format(path)} - if op == "add": - gcu_json["value"] = value - - gcu_json_input.append(gcu_json) - gcu_patch = jsonpatch.JsonPatch(gcu_json_input) - return gcu_patch - -def validated_delete_table(table): - gcu_patch = create_gcu_patch("remove", table) - format = ConfigFormat.CONFIGDB.name - config_format = ConfigFormat[format.upper()] - try: - GenericUpdater().apply_patch(patch=gcu_patch, config_format=config_format, verbose=False, dry_run=False, ignore_non_yang_tables=False, ignore_paths=None) - except ValueError as e: - logger = genericUpdaterLogging.get_logger(title="Patch Applier", print_all_to_console=True) - logger.log_notice("Unable to remove entry, as doing so will result in invalid config. Error: {}".format(e)) - -def validated_set_entry(table, key, value): - if value is not None: - op = "add" - else: - op = "remove" +class ValidatedConfigDBConnector(object): - gcu_patch = create_gcu_patch(op, table, key, value) - format = ConfigFormat.CONFIGDB.name - config_format = ConfigFormat[format.upper()] - - try: - GenericUpdater().apply_patch(patch=gcu_patch, config_format=config_format, verbose=False, dry_run=False, ignore_non_yang_tables=False, ignore_paths=None) - except EmptyTableError: - validated_delete_table(table) + def __init__(self, config_db_connector): + self.connector = config_db_connector + self.yang_enabled = device_info.is_yang_config_validation_enabled(self.connector) + + def __getattr__(self, name): + if self.yang_enabled: + if name == "set_entry": + return self.validated_set_entry + if name == "delete_table": + return self.validated_delete_table + return self.connector.__getattribute__(name) + + def make_path_value_jsonpatch_compatible(self, table, key, value): + if type(key) == tuple: + path = JsonPointer.from_parts([table, '|'.join(key)]).path + else: + path = JsonPointer.from_parts([table, key]).path + if value == {"NULL" : "NULL"}: + value = {} + return path, value + + def create_gcu_patch(self, op, table, key=None, value=None): + if key: + path, value = self.make_path_value_jsonpatch_compatible(table, key, value) + else: + path = "/{}".format(table) + + gcu_json_input = [] + gcu_json = {"op": "{}".format(op), + "path": "{}".format(path)} + if op == "add": + gcu_json["value"] = value + + gcu_json_input.append(gcu_json) + gcu_patch = jsonpatch.JsonPatch(gcu_json_input) + return gcu_patch + + def validated_delete_table(self, table): + gcu_patch = self.create_gcu_patch("remove", table) + format = ConfigFormat.CONFIGDB.name + config_format = ConfigFormat[format.upper()] + try: + GenericUpdater().apply_patch(patch=gcu_patch, config_format=config_format, verbose=False, dry_run=False, ignore_non_yang_tables=False, ignore_paths=None) + except ValueError as e: + logger = genericUpdaterLogging.get_logger(title="Patch Applier", print_all_to_console=True) + logger.log_notice("Unable to remove entry, as doing so will result in invalid config. Error: {}".format(e)) + + def validated_set_entry(self, table, key, value): + if value is not None: + op = "add" + else: + op = "remove" + + gcu_patch = self.create_gcu_patch(op, table, key, value) + format = ConfigFormat.CONFIGDB.name + config_format = ConfigFormat[format.upper()] + + try: + GenericUpdater().apply_patch(patch=gcu_patch, config_format=config_format, verbose=False, dry_run=False, ignore_non_yang_tables=False, ignore_paths=None) + except EmptyTableError: + self.validated_delete_table(table) diff --git a/doc/Command-Reference.md b/doc/Command-Reference.md index da91570e259..02a3f55bb20 100644 --- a/doc/Command-Reference.md +++ b/doc/Command-Reference.md @@ -10611,6 +10611,39 @@ This command removes all unused images from the device, leaving only the current No image(s) to remove ``` +**sonic-installer get-fips** + +This command is used to get the fips status. + +- Usage: + ``` + sonic-installer get-fips [] + ``` +If the image is not specified, the next boot image will be used. + +- Example: + ``` + admin@sonic:~$ sudo sonic-installer get-fips + FIPS is enabled + ``` + +**sonic-installer set-fips** + +The command is used to enable or disable the fips. + +- Usage: + ``` + sonic-installer set-fips [--enable-fips|--disable-fips] [] + ``` +If the option --enable-fips or --disable-fips is not specified, the default behavior is to enable fips. + +- Example: + ``` + admin@sonic:~$ sudo sonic-installer set-fips --enable-fips + Done + Set FIPS for the image successfully + ``` + Go Back To [Beginning of the document](#) or [Beginning of this section](#software-installation-and-management) diff --git a/scripts/fabricstat b/scripts/fabricstat new file mode 100755 index 00000000000..18200785ff4 --- /dev/null +++ b/scripts/fabricstat @@ -0,0 +1,217 @@ +#!/usr/bin/env python3 + +import argparse +from collections import OrderedDict, namedtuple +import os +import sys + +from utilities_common import constants +from natsort import natsorted +from tabulate import tabulate +from sonic_py_common import multi_asic +from swsscommon.swsscommon import APP_FABRIC_PORT_TABLE_NAME, COUNTERS_TABLE, COUNTERS_FABRIC_PORT_NAME_MAP, COUNTERS_FABRIC_QUEUE_NAME_MAP +import utilities_common.multi_asic as multi_asic_util + +# 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, "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 + +PORT_NAME_PREFIX = 'PORT' +COUNTER_TABLE_PREFIX = COUNTERS_TABLE+":" +FABRIC_PORT_STATUS_TABLE_PREFIX = APP_FABRIC_PORT_TABLE_NAME+"|" +FABRIC_PORT_STATUS_FIELD = "STATUS" +STATUS_NA = 'N/A' + +class FabricStat(object): + def __init__(self, namespace): + self.db = None + self.namespace = namespace + self.multi_asic = multi_asic_util.MultiAsic(constants.DISPLAY_ALL, namespace) + + def get_cnstat_dict(self): + self.cnstat_dict = OrderedDict() + self.collect_stat() + return self.cnstat_dict + + @multi_asic_util.run_on_multi_asic + def collect_stat(self): + """ + Collect the statisitics from all the asics present on the + device and store in a dict + """ + self.cnstat_dict.update(self.get_cnstat()) + + def get_port_state(self, port_name): + """ + Get the port state + """ + full_table_id = FABRIC_PORT_STATUS_TABLE_PREFIX + port_name + oper_state = self.db.get(self.db.STATE_DB, full_table_id, FABRIC_PORT_STATUS_FIELD) + if oper_state is not None: + return oper_state + return STATUS_NA + + def get_counters(self, counter_bucket_dict, table_id): + fields = ["0"] * len(counter_bucket_dict) + for pos, counter_name in counter_bucket_dict.items(): + full_table_id = COUNTER_TABLE_PREFIX + table_id + counter_data = self.db.get(self.db.COUNTERS_DB, full_table_id, counter_name) + if counter_data is None: + fields[pos] = STATUS_NA + elif fields[pos] != STATUS_NA: + fields[pos] = str(int(fields[pos]) + int(counter_data)) + return fields + + def get_cnstat(self): + """ + Get the counters info from database. + """ + assert False, 'Need to override this method' + + def cnstat_print(self, cnstat_dict, errors_only=False): + """ + Print the counter stat. + """ + assert False, 'Need to override this method' + +PortStat = namedtuple("PortStat", "in_cell, in_octet, out_cell, out_octet,\ + crc, fec_correctable, fec_uncorrectable, symbol_err") +port_counter_bucket_list = [ + 'SAI_PORT_STAT_IF_IN_FABRIC_DATA_UNITS', + 'SAI_PORT_STAT_IF_IN_OCTETS', + 'SAI_PORT_STAT_IF_OUT_FABRIC_DATA_UNITS', + 'SAI_PORT_STAT_IF_OUT_OCTETS', + 'SAI_PORT_STAT_IF_IN_ERRORS', + 'SAI_PORT_STAT_IF_IN_FEC_CORRECTABLE_FRAMES', + 'SAI_PORT_STAT_IF_IN_FEC_NOT_CORRECTABLE_FRAMES', + 'SAI_PORT_STAT_IF_IN_FEC_SYMBOL_ERRORS', + ] +port_counter_bucket_dict = {k : v for k, v in enumerate(port_counter_bucket_list)} + +portstat_header_all = ['ASIC', 'PORT', 'STATE', + 'IN_CELL', 'IN_OCTET', 'OUT_CELL', 'OUT_OCTET', + 'CRC', 'FEC_CORRECTABLE', 'FEC_UNCORRECTABLE', 'SYMBOL_ERR'] +portstat_header_errors_only = ['ASIC', 'PORT', 'STATE', + 'CRC', 'FEC_CORRECTABLE', 'FEC_UNCORRECTABLE', 'SYMBOL_ERR'] + +class FabricPortStat(FabricStat): + def get_cnstat(self): + counter_port_name_map = self.db.get_all(self.db.COUNTERS_DB, COUNTERS_FABRIC_PORT_NAME_MAP) + cnstat_dict = OrderedDict() + if counter_port_name_map is None: + return cnstat_dict + for port_name in natsorted(counter_port_name_map): + cntr = self.get_counters(port_counter_bucket_dict, counter_port_name_map[port_name]) + cnstat_dict[port_name] = PortStat._make(cntr) + return cnstat_dict + + def cnstat_print(self, cnstat_dict, errors_only=False): + if len(cnstat_dict) == 0: + print("Counters %s empty" % self.namespace) + return + + table = [] + header = None + asic = multi_asic.get_asic_id_from_name(self.namespace) + for key, data in cnstat_dict.items(): + port_id = key[len(PORT_NAME_PREFIX):] + if errors_only: + header = portstat_header_errors_only + table.append((asic, port_id, self.get_port_state(key), + data.crc, data.fec_correctable, data.fec_uncorrectable, + data.symbol_err)) + else: + header = portstat_header_all + table.append((asic, port_id, self.get_port_state(key), + data.in_cell, data.in_octet, data.out_cell, data.out_octet, + data.crc, data.fec_correctable, data.fec_uncorrectable, + data.symbol_err)) + + print(tabulate(table, header, tablefmt='simple', stralign='right')) + print() + +QueueStat = namedtuple("QueueStat", "curlevel, watermarklevel, curbyte") + +queue_counter_bucket_list = [ + 'SAI_QUEUE_STAT_CURR_OCCUPANCY_LEVEL', + 'SAI_QUEUE_STAT_WATERMARK_LEVEL', + 'SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES', +] +queue_counter_bucket_dict = {k : v for k, v in enumerate(queue_counter_bucket_list)} + +queuestat_header = ['ASIC', 'PORT', 'STATE', 'QUEUE_ID', 'CURRENT_BYTE', 'CURRENT_LEVEL', 'WATERMARK_LEVEL'] + +class FabricQueueStat(FabricStat): + def get_cnstat(self): + counter_queue_name_map = self.db.get_all(self.db.COUNTERS_DB, COUNTERS_FABRIC_QUEUE_NAME_MAP) + cnstat_dict = OrderedDict() + if counter_queue_name_map is None: + return cnstat_dict + for port_queue_name in natsorted(counter_queue_name_map): + cntr = self.get_counters(queue_counter_bucket_dict, counter_queue_name_map[port_queue_name]) + cnstat_dict[port_queue_name] = QueueStat._make(cntr) + return cnstat_dict + + def cnstat_print(self, cnstat_dict, errors_only=False): + if len(cnstat_dict) == 0: + print("Counters %s empty" % self.namespace) + return + + table = [] + asic = multi_asic.get_asic_id_from_name(self.namespace) + for key, data in cnstat_dict.items(): + port_name, queue_id = key.split(':') + port_id = port_name[len(PORT_NAME_PREFIX):] + table.append((asic, port_id, self.get_port_state(port_name), queue_id, + data.curbyte, data.curlevel, data.watermarklevel)) + + print(tabulate(table, queuestat_header, tablefmt='simple', stralign='right')) + print() + +def main(): + parser = argparse.ArgumentParser(description='Display the fabric port state and counters', + formatter_class=argparse.RawTextHelpFormatter, + epilog=""" +Examples: + fabricstat + fabricstat --namespace asic0 + fabricstat -p -n asic0 -e + fabricstat -q + fabricstat -q -n asic0 +""") + + parser.add_argument('-q','--queue', action='store_true', help='Display fabric queue stat, otherwise port stat') + parser.add_argument('-n','--namespace', default=None, help='Display fabric ports counters for specific namespace') + parser.add_argument('-e', '--errors', action='store_true', help='Display errors') + + args = parser.parse_args() + queue = args.queue + namespace = args.namespace + errors_only = args.errors + + def nsStat(ns, errors_only): + stat = FabricQueueStat(ns) if queue else FabricPortStat(ns) + cnstat_dict = stat.get_cnstat_dict() + stat.cnstat_print(cnstat_dict, errors_only) + + if namespace is None: + # All asics or all fabric asics + multi_asic = multi_asic_util.MultiAsic() + for ns in multi_asic.get_ns_list_based_on_options(): + nsStat(ns, errors_only) + else: + # Asic with namespace + nsStat(namespace, errors_only) + +if __name__ == "__main__": + main() diff --git a/scripts/watermarkstat b/scripts/watermarkstat index 745a82d6746..229f9cebf5d 100755 --- a/scripts/watermarkstat +++ b/scripts/watermarkstat @@ -21,8 +21,16 @@ try: tests_path = os.path.join(modules_path, "tests") sys.path.insert(0, modules_path) sys.path.insert(0, tests_path) - import mock_tables.dbconnector + from mock_tables import dbconnector + if os.environ["WATERMARKSTAT_UNIT_TESTING"] == "1": + input_path = os.path.join(tests_path, "wm_input") + mock_db_path = os.path.join(input_path, "mock_db") + + for mock_db in os.listdir(mock_db_path): + name, ext = os.path.splitext(mock_db) + if ext == ".json": + dbconnector.dedicated_dbs[name.upper()] = os.path.join(mock_db_path, name) except KeyError: pass @@ -201,7 +209,7 @@ class Watermarkstat(object): return pg_index - def build_header(self, wm_type): + def build_header(self, wm_type, counter_type): if wm_type is None: print("Header info is not available!", file=sys.stderr) sys.exit(1) @@ -220,8 +228,12 @@ class Watermarkstat(object): min_idx = element_idx if min_idx == sys.maxsize: - print("Object map is empty!", file=sys.stderr) - sys.exit(1) + if counter_type != 'q_shared_multi': + print("Object map is empty!", file=sys.stderr) + sys.exit(1) + else: + print("Object map from the COUNTERS_DB is empty because the multicast queues are not configured in the CONFIG_DB!") + sys.exit(0) self.min_idx = min_idx self.header_list += ["{}{}".format(wm_type["header_prefix"], idx) for idx in range(self.min_idx, max_idx + 1)] @@ -264,7 +276,7 @@ class Watermarkstat(object): data = STATUS_NA table.append((buf_pool, data)) else: - self.build_header(type) + self.build_header(type, key) # Get stat for each port for port in natsorted(self.counter_port_name_map): row_data = list() diff --git a/setup.py b/setup.py index 7f617905da5..c8f7ceff7cb 100644 --- a/setup.py +++ b/setup.py @@ -97,6 +97,7 @@ 'scripts/dropstat', 'scripts/dump_nat_entries.py', 'scripts/ecnconfig', + 'scripts/fabricstat', 'scripts/fanshow', 'scripts/fast-reboot', 'scripts/fast-reboot-dump.py', diff --git a/show/fabric.py b/show/fabric.py new file mode 100644 index 00000000000..8dfbc50f7a4 --- /dev/null +++ b/show/fabric.py @@ -0,0 +1,35 @@ +import click + +import utilities_common.multi_asic as multi_asic_util +import utilities_common.cli as clicommon + +@click.group(cls=clicommon.AliasedGroup) +def fabric(): + """Show fabric information""" + pass + +@fabric.group(invoke_without_command=True) +def counters(): + """Show fabric port counters""" + pass + +@counters.command() +@multi_asic_util.multi_asic_click_option_namespace +@click.option('-e', '--errors', is_flag=True) +def port(namespace, errors): + """Show fabric port stat""" + cmd = "fabricstat" + if namespace is not None: + cmd += " -n {}".format(namespace) + if errors: + cmd += " -e" + clicommon.run_command(cmd) + +@counters.command() +@multi_asic_util.multi_asic_click_option_namespace +def queue(namespace): + """Show fabric queue stat""" + cmd = "fabricstat -q" + if namespace is not None: + cmd += " -n {}".format(namespace) + clicommon.run_command(cmd) diff --git a/show/main.py b/show/main.py index 0fce8037eaf..5e4bcf30f0d 100755 --- a/show/main.py +++ b/show/main.py @@ -41,6 +41,7 @@ from . import bgp_common from . import chassis_modules from . import dropcounters +from . import fabric from . import feature from . import fgnhg from . import flow_counters @@ -263,6 +264,7 @@ def cli(ctx): cli.add_command(acl.acl) cli.add_command(chassis_modules.chassis) cli.add_command(dropcounters.dropcounters) +cli.add_command(fabric.fabric) cli.add_command(feature.feature) cli.add_command(fgnhg.fgnhg) cli.add_command(flow_counters.flowcnt_route) diff --git a/sonic_package_manager/service_creator/feature.py b/sonic_package_manager/service_creator/feature.py index f9ec6065329..7e4d8da8edd 100644 --- a/sonic_package_manager/service_creator/feature.py +++ b/sonic_package_manager/service_creator/feature.py @@ -19,10 +19,10 @@ AUTO_TS_GLOBAL = "AUTO_TECHSUPPORT" AUTO_TS_FEATURE = "AUTO_TECHSUPPORT_FEATURE" CFG_STATE = "state" -# TODO: Enable available_mem_threshold once the mem_leak_auto_ts feature is available DEFAULT_AUTO_TS_FEATURE_CONFIG = { 'state': 'disabled', - 'rate_limit_interval': '600' + 'rate_limit_interval': '600', + 'available_mem_threshold': '10.0' } def is_enabled(cfg): diff --git a/tests/config_test.py b/tests/config_test.py index d2e7b270c0c..69febf2c78e 100644 --- a/tests/config_test.py +++ b/tests/config_test.py @@ -1638,7 +1638,7 @@ def setup_class(cls): importlib.reload(config.main) @patch("validated_config_db_connector.device_info.is_yang_config_validation_enabled", mock.Mock(return_value=True)) - @patch("config.validated_config_db_connector.validated_set_entry", mock.Mock(side_effect=ValueError)) + @patch("config.validated_config_db_connector.ValidatedConfigDBConnector.validated_set_entry", mock.Mock(side_effect=ValueError)) def test_add_loopback_with_invalid_name_yang_validation(self): config.ADHOC_VALIDATION = False runner = CliRunner() @@ -1687,7 +1687,7 @@ def test_del_nonexistent_loopback_adhoc_validation(self): assert result.exit_code != 0 assert "Loopbax1 is invalid, name should have prefix 'Loopback' and suffix '<0-999>'" in result.output - @patch("config.validated_config_db_connector.validated_set_entry", mock.Mock(return_value=True)) + @patch("config.validated_config_db_connector.ValidatedConfigDBConnector.validated_set_entry", mock.Mock(return_value=True)) @patch("validated_config_db_connector.device_info.is_yang_config_validation_enabled", mock.Mock(return_value=True)) def test_add_loopback_yang_validation(self): config.ADHOC_VALIDATION = False diff --git a/tests/fabricstat_test.py b/tests/fabricstat_test.py new file mode 100644 index 00000000000..23bb37d2ed5 --- /dev/null +++ b/tests/fabricstat_test.py @@ -0,0 +1,142 @@ +import os +import shutil + +from click.testing import CliRunner + +import clear.main as clear +import show.main as show +from .utils import get_result_and_return_code + +root_path = os.path.dirname(os.path.abspath(__file__)) +modules_path = os.path.dirname(root_path) +scripts_path = os.path.join(modules_path, "scripts") + +multi_asic_fabric_counters = """\ + ASIC PORT STATE IN_CELL IN_OCTET OUT_CELL OUT_OCTET CRC FEC_CORRECTABLE FEC_UNCORRECTABLE SYMBOL_ERR +------ ------ ------- --------- ---------- ---------- ----------- ----- ----------------- ------------------- ------------ + 0 0 up 6 1113 0 0 0 5 1759692040 5 + 0 1 down 0 0 0 0 0 0 58977677898 0 + 0 2 up 2 371 0 0 0 0 1769448760 0 + 0 3 down 0 0 0 0 0 0 58976477608 0 + 0 4 up 10 1855 0 0 0 73 1763293100 73 + 0 5 down 0 0 0 0 0 44196 58975150569 0 + 0 6 up 4 742 0 0 0 10 1763174090 0 + 0 7 up 10 1855 0 0 0 187 1768439529 1331 + + ASIC PORT STATE IN_CELL IN_OCTET OUT_CELL OUT_OCTET CRC FEC_CORRECTABLE FEC_UNCORRECTABLE SYMBOL_ERR +------ ------ ------- --------- ---------- ---------- ----------- ----- ----------------- ------------------- ------------ + 1 0 up 16 2968 0 0 0 0 1763890500 0 + 1 1 down 0 0 0 0 0 0 105269481425 0 + 1 2 down 0 0 0 0 0 0 105268895944 0 + 1 3 down 0 0 0 0 0 0 105268290607 0 + 1 4 up 14 2597 0 0 0 0 1762188940 0 + 1 5 down 0 0 0 0 0 968 105267020477 0 + 1 6 down 0 0 0 0 0 53192703023 1422986 41913682074 + 1 7 down 0 0 0 0 0 0 105264567398 0 + +""" +multi_asic_fabric_counters_asic0 = """\ + ASIC PORT STATE IN_CELL IN_OCTET OUT_CELL OUT_OCTET CRC FEC_CORRECTABLE FEC_UNCORRECTABLE SYMBOL_ERR +------ ------ ------- --------- ---------- ---------- ----------- ----- ----------------- ------------------- ------------ + 0 0 up 6 1113 0 0 0 5 1759692040 5 + 0 1 down 0 0 0 0 0 0 58977677898 0 + 0 2 up 2 371 0 0 0 0 1769448760 0 + 0 3 down 0 0 0 0 0 0 58976477608 0 + 0 4 up 10 1855 0 0 0 73 1763293100 73 + 0 5 down 0 0 0 0 0 44196 58975150569 0 + 0 6 up 4 742 0 0 0 10 1763174090 0 + 0 7 up 10 1855 0 0 0 187 1768439529 1331 + +""" + +fabric_invalid_asic_error = """ValueError: Unknown Namespace asic99""" + +multi_asic_fabric_counters_queue = """\ + ASIC PORT STATE QUEUE_ID CURRENT_BYTE CURRENT_LEVEL WATERMARK_LEVEL +------ ------ ------- ---------- -------------- --------------- ----------------- + 0 0 up 0 763 12 20 + 0 1 down 0 0 0 0 + 0 2 up 0 104 8 8 + 0 3 down 0 0 0 0 + 0 4 up 0 1147 14 22 + 0 5 down 0 0 0 0 + 0 6 up 0 527 8 10 + 0 7 up 0 1147 14 17 + + ASIC PORT STATE QUEUE_ID CURRENT_BYTE CURRENT_LEVEL WATERMARK_LEVEL +------ ------ ------- ---------- -------------- --------------- ----------------- + 1 0 up 0 1942 18 24 + 1 1 down 0 0 0 0 + 1 2 down 0 0 0 0 + 1 3 down 0 0 0 0 + 1 4 up 0 1362 15 24 + 1 5 down 0 0 0 0 + 1 6 down 0 0 0 0 + 1 7 down 0 0 0 0 + +""" + +multi_asic_fabric_counters_queue_asic0 = """\ + ASIC PORT STATE QUEUE_ID CURRENT_BYTE CURRENT_LEVEL WATERMARK_LEVEL +------ ------ ------- ---------- -------------- --------------- ----------------- + 0 0 up 0 763 12 20 + 0 1 down 0 0 0 0 + 0 2 up 0 104 8 8 + 0 3 down 0 0 0 0 + 0 4 up 0 1147 14 22 + 0 5 down 0 0 0 0 + 0 6 up 0 527 8 10 + 0 7 up 0 1147 14 17 + +""" + +class TestMultiAsicFabricStat(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" + + def test_multi_show_fabric_counters(self): + return_code, result = get_result_and_return_code('fabricstat') + print("return_code: {}".format(return_code)) + print("result = {}".format(result)) + assert return_code == 0 + assert result == multi_asic_fabric_counters + + def test_multi_show_fabric_counters_asic(self): + return_code, result = get_result_and_return_code('fabricstat -n asic0') + print("return_code: {}".format(return_code)) + print("result = {}".format(result)) + assert return_code == 0 + assert result == multi_asic_fabric_counters_asic0 + + def test_multi_asic_invalid_asic(self): + return_code, result = get_result_and_return_code('fabricstat -n asic99') + print("return_code: {}".format(return_code)) + print("result = {}".format(result)) + assert return_code == 1 + assert result == fabric_invalid_asic_error + + def test_multi_show_fabric_counters_queue(self): + return_code, result = get_result_and_return_code('fabricstat -q') + print("return_code: {}".format(return_code)) + print("result = {}".format(result)) + assert return_code == 0 + assert result == multi_asic_fabric_counters_queue + + def test_multi_show_fabric_counters_queue_asic(self): + return_code, result = get_result_and_return_code('fabricstat -q -n asic0') + print("return_code: {}".format(return_code)) + print("result = {}".format(result)) + assert return_code == 0 + assert result == multi_asic_fabric_counters_queue_asic0 + + @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"] = "" diff --git a/tests/mock_tables/asic0/counters_db.json b/tests/mock_tables/asic0/counters_db.json index 5c144393f2d..2e268109295 100644 --- a/tests/mock_tables/asic0/counters_db.json +++ b/tests/mock_tables/asic0/counters_db.json @@ -1693,6 +1693,146 @@ "Ethernet-BP4:14": "oid:0x1000000004014", "Ethernet-BP4:15": "oid:0x1000000004015" }, + "COUNTERS_FABRIC_PORT_NAME_MAP" : { + "PORT0": "oid:0x1000000000143", + "PORT1": "oid:0x1000000000144", + "PORT2": "oid:0x1000000000145", + "PORT3": "oid:0x1000000000146", + "PORT4": "oid:0x1000000000147", + "PORT5": "oid:0x1000000000148", + "PORT6": "oid:0x1000000000149", + "PORT7": "oid:0x100000000014a" + }, + "COUNTERS:oid:0x1000000000143": { + "SAI_PORT_STAT_IF_OUT_FABRIC_DATA_UNITS": "0", + "SAI_PORT_STAT_IF_OUT_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_OCTETS": "1113", + "SAI_PORT_STAT_IF_IN_ERRORS": "0", + "SAI_PORT_STAT_IF_IN_FABRIC_DATA_UNITS": "6", + "SAI_PORT_STAT_IF_IN_FEC_CORRECTABLE_FRAMES": "5", + "SAI_PORT_STAT_IF_IN_FEC_NOT_CORRECTABLE_FRAMES": "1759692040", + "SAI_PORT_STAT_IF_IN_FEC_SYMBOL_ERRORS": "5" + }, + "COUNTERS:oid:0x1000000000144": { + "SAI_PORT_STAT_IF_OUT_FABRIC_DATA_UNITS": "0", + "SAI_PORT_STAT_IF_OUT_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_ERRORS": "0", + "SAI_PORT_STAT_IF_IN_FABRIC_DATA_UNITS": "0", + "SAI_PORT_STAT_IF_IN_FEC_CORRECTABLE_FRAMES": "0", + "SAI_PORT_STAT_IF_IN_FEC_NOT_CORRECTABLE_FRAMES": "58977677898", + "SAI_PORT_STAT_IF_IN_FEC_SYMBOL_ERRORS": "0" + }, + "COUNTERS:oid:0x1000000000145": { + "SAI_PORT_STAT_IF_OUT_FABRIC_DATA_UNITS": "0", + "SAI_PORT_STAT_IF_OUT_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_OCTETS": "371", + "SAI_PORT_STAT_IF_IN_ERRORS": "0", + "SAI_PORT_STAT_IF_IN_FABRIC_DATA_UNITS": "2", + "SAI_PORT_STAT_IF_IN_FEC_CORRECTABLE_FRAMES": "0", + "SAI_PORT_STAT_IF_IN_FEC_NOT_CORRECTABLE_FRAMES": "1769448760", + "SAI_PORT_STAT_IF_IN_FEC_SYMBOL_ERRORS": "0" + }, + "COUNTERS:oid:0x1000000000146": { + "SAI_PORT_STAT_IF_OUT_FABRIC_DATA_UNITS": "0", + "SAI_PORT_STAT_IF_OUT_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_ERRORS": "0", + "SAI_PORT_STAT_IF_IN_FABRIC_DATA_UNITS": "0", + "SAI_PORT_STAT_IF_IN_FEC_CORRECTABLE_FRAMES": "0", + "SAI_PORT_STAT_IF_IN_FEC_NOT_CORRECTABLE_FRAMES": "58976477608", + "SAI_PORT_STAT_IF_IN_FEC_SYMBOL_ERRORS": "0" + }, + "COUNTERS:oid:0x1000000000147": { + "SAI_PORT_STAT_IF_OUT_FABRIC_DATA_UNITS": "0", + "SAI_PORT_STAT_IF_OUT_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_OCTETS": "1855", + "SAI_PORT_STAT_IF_IN_ERRORS": "0", + "SAI_PORT_STAT_IF_IN_FABRIC_DATA_UNITS": "10", + "SAI_PORT_STAT_IF_IN_FEC_CORRECTABLE_FRAMES": "73", + "SAI_PORT_STAT_IF_IN_FEC_NOT_CORRECTABLE_FRAMES": "1763293100", + "SAI_PORT_STAT_IF_IN_FEC_SYMBOL_ERRORS": "73" + }, + "COUNTERS:oid:0x1000000000148": { + "SAI_PORT_STAT_IF_OUT_FABRIC_DATA_UNITS": "0", + "SAI_PORT_STAT_IF_OUT_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_ERRORS": "0", + "SAI_PORT_STAT_IF_IN_FABRIC_DATA_UNITS": "0", + "SAI_PORT_STAT_IF_IN_FEC_CORRECTABLE_FRAMES": "44196", + "SAI_PORT_STAT_IF_IN_FEC_NOT_CORRECTABLE_FRAMES": "58975150569", + "SAI_PORT_STAT_IF_IN_FEC_SYMBOL_ERRORS": "0" + }, + "COUNTERS:oid:0x1000000000149": { + "SAI_PORT_STAT_IF_OUT_FABRIC_DATA_UNITS": "0", + "SAI_PORT_STAT_IF_OUT_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_OCTETS": "742", + "SAI_PORT_STAT_IF_IN_ERRORS": "0", + "SAI_PORT_STAT_IF_IN_FABRIC_DATA_UNITS": "4", + "SAI_PORT_STAT_IF_IN_FEC_CORRECTABLE_FRAMES": "10", + "SAI_PORT_STAT_IF_IN_FEC_NOT_CORRECTABLE_FRAMES": "1763174090", + "SAI_PORT_STAT_IF_IN_FEC_SYMBOL_ERRORS": "0" + }, + "COUNTERS:oid:0x100000000014a": { + "SAI_PORT_STAT_IF_OUT_FABRIC_DATA_UNITS": "0", + "SAI_PORT_STAT_IF_OUT_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_OCTETS": "1855", + "SAI_PORT_STAT_IF_IN_ERRORS": "0", + "SAI_PORT_STAT_IF_IN_FABRIC_DATA_UNITS": "10", + "SAI_PORT_STAT_IF_IN_FEC_CORRECTABLE_FRAMES": "187", + "SAI_PORT_STAT_IF_IN_FEC_NOT_CORRECTABLE_FRAMES": "1768439529", + "SAI_PORT_STAT_IF_IN_FEC_SYMBOL_ERRORS": "1331" + }, + "COUNTERS_FABRIC_QUEUE_NAME_MAP" : { + "PORT0:0": "oid:0x15000000000186", + "PORT1:0": "oid:0x15000000000187", + "PORT2:0": "oid:0x15000000000188", + "PORT3:0": "oid:0x15000000000189", + "PORT4:0": "oid:0x1500000000018a", + "PORT5:0": "oid:0x1500000000018b", + "PORT6:0": "oid:0x1500000000018c", + "PORT7:0": "oid:0x1500000000018d" + }, + "COUNTERS:oid:0x15000000000186": { + "SAI_QUEUE_STAT_WATERMARK_LEVEL": "20", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "763", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_LEVEL": "12" + }, + "COUNTERS:oid:0x15000000000187": { + "SAI_QUEUE_STAT_WATERMARK_LEVEL": "0", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "0", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_LEVEL": "0" + }, + "COUNTERS:oid:0x15000000000188": { + "SAI_QUEUE_STAT_WATERMARK_LEVEL": "8", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "104", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_LEVEL": "8" + }, + "COUNTERS:oid:0x15000000000189": { + "SAI_QUEUE_STAT_WATERMARK_LEVEL": "0", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "0", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_LEVEL": "0" + }, + "COUNTERS:oid:0x1500000000018a": { + "SAI_QUEUE_STAT_WATERMARK_LEVEL": "22", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "1147", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_LEVEL": "14" + }, + "COUNTERS:oid:0x1500000000018b": { + "SAI_QUEUE_STAT_WATERMARK_LEVEL": "0", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "0", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_LEVEL": "0" + }, + "COUNTERS:oid:0x1500000000018c": { + "SAI_QUEUE_STAT_WATERMARK_LEVEL": "10", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "527", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_LEVEL": "8" + }, + "COUNTERS:oid:0x1500000000018d": { + "SAI_QUEUE_STAT_WATERMARK_LEVEL": "17", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "1147", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_LEVEL": "14" + }, "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/tests/mock_tables/asic0/state_db.json b/tests/mock_tables/asic0/state_db.json index 97fbb3d33c7..8766f43d654 100644 --- a/tests/mock_tables/asic0/state_db.json +++ b/tests/mock_tables/asic0/state_db.json @@ -213,5 +213,39 @@ }, "MUX_CABLE_TABLE|Ethernet0": { "state": "active" + }, + "FABRIC_PORT_TABLE|PORT0" : { + "STATUS": "up", + "REMOTE_MOD": "0", + "REMOTE_PORT": "79" + }, + "FABRIC_PORT_TABLE|PORT1" : { + "STATUS": "down" + }, + "FABRIC_PORT_TABLE|PORT2" : { + "STATUS": "up", + "REMOTE_MOD": "0", + "REMOTE_PORT": "94" + }, + "FABRIC_PORT_TABLE|PORT3" : { + "STATUS": "down" + }, + "FABRIC_PORT_TABLE|PORT4" : { + "STATUS": "up", + "REMOTE_MOD": "0", + "REMOTE_PORT": "85" + }, + "FABRIC_PORT_TABLE|PORT5" : { + "STATUS": "down" + }, + "FABRIC_PORT_TABLE|PORT6" : { + "STATUS": "up", + "REMOTE_MOD": "0", + "REMOTE_PORT": "84" + }, + "FABRIC_PORT_TABLE|PORT7" : { + "STATUS": "up", + "REMOTE_MOD": "0", + "REMOTE_PORT": "93" } } diff --git a/tests/mock_tables/asic1/counters_db.json b/tests/mock_tables/asic1/counters_db.json index aed3b22b582..c364d8599ef 100644 --- a/tests/mock_tables/asic1/counters_db.json +++ b/tests/mock_tables/asic1/counters_db.json @@ -888,6 +888,146 @@ "PFC_WD_QUEUE_STATS_RX_PACKETS_LAST": "8343", "PFC_WD_QUEUE_STATS_RX_DROPPED_PACKETS_LAST": "72" }, + "COUNTERS_FABRIC_PORT_NAME_MAP" : { + "PORT0": "oid:0x1000000000143", + "PORT1": "oid:0x1000000000144", + "PORT2": "oid:0x1000000000145", + "PORT3": "oid:0x1000000000146", + "PORT4": "oid:0x1000000000147", + "PORT5": "oid:0x1000000000148", + "PORT6": "oid:0x1000000000149", + "PORT7": "oid:0x100000000014a" + }, + "COUNTERS:oid:0x1000000000143": { + "SAI_PORT_STAT_IF_OUT_FABRIC_DATA_UNITS": "0", + "SAI_PORT_STAT_IF_OUT_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_OCTETS": "2968", + "SAI_PORT_STAT_IF_IN_ERRORS": "0", + "SAI_PORT_STAT_IF_IN_FABRIC_DATA_UNITS": "16", + "SAI_PORT_STAT_IF_IN_FEC_CORRECTABLE_FRAMES": "0", + "SAI_PORT_STAT_IF_IN_FEC_NOT_CORRECTABLE_FRAMES": "1763890500", + "SAI_PORT_STAT_IF_IN_FEC_SYMBOL_ERRORS": "0" + }, + "COUNTERS:oid:0x1000000000144": { + "SAI_PORT_STAT_IF_OUT_FABRIC_DATA_UNITS": "0", + "SAI_PORT_STAT_IF_OUT_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_ERRORS": "0", + "SAI_PORT_STAT_IF_IN_FABRIC_DATA_UNITS": "0", + "SAI_PORT_STAT_IF_IN_FEC_CORRECTABLE_FRAMES": "0", + "SAI_PORT_STAT_IF_IN_FEC_NOT_CORRECTABLE_FRAMES": "105269481425", + "SAI_PORT_STAT_IF_IN_FEC_SYMBOL_ERRORS": "0" + }, + "COUNTERS:oid:0x1000000000145": { + "SAI_PORT_STAT_IF_OUT_FABRIC_DATA_UNITS": "0", + "SAI_PORT_STAT_IF_OUT_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_ERRORS": "0", + "SAI_PORT_STAT_IF_IN_FABRIC_DATA_UNITS": "0", + "SAI_PORT_STAT_IF_IN_FEC_CORRECTABLE_FRAMES": "0", + "SAI_PORT_STAT_IF_IN_FEC_NOT_CORRECTABLE_FRAMES": "105268895944", + "SAI_PORT_STAT_IF_IN_FEC_SYMBOL_ERRORS": "0" + }, + "COUNTERS:oid:0x1000000000146": { + "SAI_PORT_STAT_IF_OUT_FABRIC_DATA_UNITS": "0", + "SAI_PORT_STAT_IF_OUT_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_ERRORS": "0", + "SAI_PORT_STAT_IF_IN_FABRIC_DATA_UNITS": "0", + "SAI_PORT_STAT_IF_IN_FEC_CORRECTABLE_FRAMES": "0", + "SAI_PORT_STAT_IF_IN_FEC_NOT_CORRECTABLE_FRAMES": "105268290607", + "SAI_PORT_STAT_IF_IN_FEC_SYMBOL_ERRORS": "0" + }, + "COUNTERS:oid:0x1000000000147": { + "SAI_PORT_STAT_IF_OUT_FABRIC_DATA_UNITS": "0", + "SAI_PORT_STAT_IF_OUT_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_OCTETS": "2597", + "SAI_PORT_STAT_IF_IN_ERRORS": "0", + "SAI_PORT_STAT_IF_IN_FABRIC_DATA_UNITS": "14", + "SAI_PORT_STAT_IF_IN_FEC_CORRECTABLE_FRAMES": "0", + "SAI_PORT_STAT_IF_IN_FEC_NOT_CORRECTABLE_FRAMES": "1762188940", + "SAI_PORT_STAT_IF_IN_FEC_SYMBOL_ERRORS": "0" + }, + "COUNTERS:oid:0x1000000000148": { + "SAI_PORT_STAT_IF_OUT_FABRIC_DATA_UNITS": "0", + "SAI_PORT_STAT_IF_OUT_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_ERRORS": "0", + "SAI_PORT_STAT_IF_IN_FABRIC_DATA_UNITS": "0", + "SAI_PORT_STAT_IF_IN_FEC_CORRECTABLE_FRAMES": "968", + "SAI_PORT_STAT_IF_IN_FEC_NOT_CORRECTABLE_FRAMES": "105267020477", + "SAI_PORT_STAT_IF_IN_FEC_SYMBOL_ERRORS": "0" + }, + "COUNTERS:oid:0x1000000000149": { + "SAI_PORT_STAT_IF_OUT_FABRIC_DATA_UNITS": "0", + "SAI_PORT_STAT_IF_OUT_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_ERRORS": "0", + "SAI_PORT_STAT_IF_IN_FABRIC_DATA_UNITS": "0", + "SAI_PORT_STAT_IF_IN_FEC_CORRECTABLE_FRAMES": "53192703023", + "SAI_PORT_STAT_IF_IN_FEC_NOT_CORRECTABLE_FRAMES": "1422986", + "SAI_PORT_STAT_IF_IN_FEC_SYMBOL_ERRORS": "41913682074" + }, + "COUNTERS:oid:0x100000000014a": { + "SAI_PORT_STAT_IF_OUT_FABRIC_DATA_UNITS": "0", + "SAI_PORT_STAT_IF_OUT_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_OCTETS": "0", + "SAI_PORT_STAT_IF_IN_ERRORS": "0", + "SAI_PORT_STAT_IF_IN_FABRIC_DATA_UNITS": "0", + "SAI_PORT_STAT_IF_IN_FEC_CORRECTABLE_FRAMES": "0", + "SAI_PORT_STAT_IF_IN_FEC_NOT_CORRECTABLE_FRAMES": "105264567398", + "SAI_PORT_STAT_IF_IN_FEC_SYMBOL_ERRORS": "0" + }, + "COUNTERS_FABRIC_QUEUE_NAME_MAP" : { + "PORT0:0": "oid:0x15000000000186", + "PORT1:0": "oid:0x15000000000187", + "PORT2:0": "oid:0x15000000000188", + "PORT3:0": "oid:0x15000000000189", + "PORT4:0": "oid:0x1500000000018a", + "PORT5:0": "oid:0x1500000000018b", + "PORT6:0": "oid:0x1500000000018c", + "PORT7:0": "oid:0x1500000000018d" + }, + "COUNTERS:oid:0x15000000000186": { + "SAI_QUEUE_STAT_WATERMARK_LEVEL": "24", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "1942", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_LEVEL": "18" + }, + "COUNTERS:oid:0x15000000000187": { + "SAI_QUEUE_STAT_WATERMARK_LEVEL": "0", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "0", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_LEVEL": "0" + }, + "COUNTERS:oid:0x15000000000188": { + "SAI_QUEUE_STAT_WATERMARK_LEVEL": "0", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "0", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_LEVEL": "0" + }, + "COUNTERS:oid:0x15000000000189": { + "SAI_QUEUE_STAT_WATERMARK_LEVEL": "0", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "0", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_LEVEL": "0" + }, + "COUNTERS:oid:0x1500000000018a": { + "SAI_QUEUE_STAT_WATERMARK_LEVEL": "24", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "1362", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_LEVEL": "15" + }, + "COUNTERS:oid:0x1500000000018b": { + "SAI_QUEUE_STAT_WATERMARK_LEVEL": "0", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "0", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_LEVEL": "0" + }, + "COUNTERS:oid:0x1500000000018c": { + "SAI_QUEUE_STAT_WATERMARK_LEVEL": "0", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "0", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_LEVEL": "0" + }, + "COUNTERS:oid:0x1500000000018d": { + "SAI_QUEUE_STAT_WATERMARK_LEVEL": "0", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "0", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_LEVEL": "0" + }, "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/tests/mock_tables/asic1/state_db.json b/tests/mock_tables/asic1/state_db.json index 354f66f7085..f288bc1a6cc 100644 --- a/tests/mock_tables/asic1/state_db.json +++ b/tests/mock_tables/asic1/state_db.json @@ -213,5 +213,33 @@ }, "MUX_CABLE_TABLE|Ethernet0": { "state": "active" + }, + "FABRIC_PORT_TABLE|PORT0" : { + "STATUS": "up", + "REMOTE_MOD": "0", + "REMOTE_PORT": "69" + }, + "FABRIC_PORT_TABLE|PORT1" : { + "STATUS": "down" + }, + "FABRIC_PORT_TABLE|PORT2" : { + "STATUS": "down" + }, + "FABRIC_PORT_TABLE|PORT3" : { + "STATUS": "down" + }, + "FABRIC_PORT_TABLE|PORT4" : { + "STATUS": "up", + "REMOTE_MOD": "0", + "REMOTE_PORT": "75" + }, + "FABRIC_PORT_TABLE|PORT5" : { + "STATUS": "down" + }, + "FABRIC_PORT_TABLE|PORT6" : { + "STATUS": "down" + }, + "FABRIC_PORT_TABLE|PORT7" : { + "STATUS": "down" } } diff --git a/tests/portchannel_test.py b/tests/portchannel_test.py index b35b93d5526..4d6eb33ed05 100644 --- a/tests/portchannel_test.py +++ b/tests/portchannel_test.py @@ -19,7 +19,7 @@ def setup_class(cls): print("SETUP") @patch("config.main.is_portchannel_present_in_db", mock.Mock(return_value=False)) - @patch("config.validated_config_db_connector.validated_set_entry", mock.Mock(side_effect=ValueError)) + @patch("config.validated_config_db_connector.ValidatedConfigDBConnector.validated_set_entry", mock.Mock(side_effect=ValueError)) @patch("validated_config_db_connector.device_info.is_yang_config_validation_enabled", mock.Mock(return_value=True)) def test_add_portchannel_with_invalid_name_yang_validation(self): config.ADHOC_VALIDATION = False @@ -46,7 +46,7 @@ def test_add_portchannel_with_invalid_name_adhoc_validation(self): assert result.exit_code != 0 assert "Error: PortChan005 is invalid!, name should have prefix 'PortChannel' and suffix '<0-9999>'" in result.output - @patch("config.validated_config_db_connector.validated_set_entry", mock.Mock(side_effect=JsonPatchConflict)) + @patch("config.validated_config_db_connector.ValidatedConfigDBConnector.validated_set_entry", mock.Mock(side_effect=JsonPatchConflict)) @patch("validated_config_db_connector.device_info.is_yang_config_validation_enabled", mock.Mock(return_value=True)) def test_delete_nonexistent_portchannel_yang_validation(self): config.ADHOC_VALIDATION = False diff --git a/tests/sonic_package_manager/test_service_creator.py b/tests/sonic_package_manager/test_service_creator.py index f82e2e519f4..645a820f94f 100644 --- a/tests/sonic_package_manager/test_service_creator.py +++ b/tests/sonic_package_manager/test_service_creator.py @@ -313,7 +313,7 @@ def get_entry(cls, table, key): @classmethod def get_entry_running_cfg(cls, table, key): if table == "AUTO_TECHSUPPORT_FEATURE" and key == "test": - return {"state" : "disabled", "rate_limit_interval" : "1000"} + return {"state" : "disabled", "rate_limit_interval" : "1000", "available_mem_threshold": "20.0"} else: return {} @@ -328,7 +328,8 @@ def test_auto_ts_global_disabled(mock_sonic_db, manifest): feature_registry.register(manifest) mock_init_cfg.set_entry.assert_any_call("AUTO_TECHSUPPORT_FEATURE", "test", { "state" : "disabled", - "rate_limit_interval" : "600" + "rate_limit_interval" : "600", + "available_mem_threshold": "10.0" } ) @@ -343,7 +344,8 @@ def test_auto_ts_global_enabled(mock_sonic_db, manifest): feature_registry.register(manifest) mock_init_cfg.set_entry.assert_any_call("AUTO_TECHSUPPORT_FEATURE", "test", { "state" : "enabled", - "rate_limit_interval" : "600" + "rate_limit_interval" : "600", + "available_mem_threshold": "10.0" } ) @@ -382,7 +384,8 @@ def test_auto_ts_feature_update_flow(mock_sonic_db, manifest): call("AUTO_TECHSUPPORT_FEATURE", "test", None), call("AUTO_TECHSUPPORT_FEATURE", "test_new", { "state" : "enabled", - "rate_limit_interval" : "600" + "rate_limit_interval" : "600", + "available_mem_threshold": "10.0" }) ], any_order = True @@ -393,7 +396,8 @@ def test_auto_ts_feature_update_flow(mock_sonic_db, manifest): call("AUTO_TECHSUPPORT_FEATURE", "test", None), call("AUTO_TECHSUPPORT_FEATURE", "test_new", { "state" : "disabled", - "rate_limit_interval" : "1000" + "rate_limit_interval" : "1000", + "available_mem_threshold": "20.0" }) ], any_order = True diff --git a/tests/validated_config_db_connector_test.py b/tests/validated_config_db_connector_test.py index 48d559cd9ad..0e1b608366c 100644 --- a/tests/validated_config_db_connector_test.py +++ b/tests/validated_config_db_connector_test.py @@ -1,6 +1,7 @@ import imp import os import mock +import jsonpatch imp.load_source('validated_config_db_connector', \ os.path.join(os.path.dirname(__file__), '..', 'config', 'validated_config_db_connector.py')) @@ -9,6 +10,9 @@ from unittest import TestCase from mock import patch from generic_config_updater.gu_common import EmptyTableError +from validated_config_db_connector import ValidatedConfigDBConnector +from swsscommon.swsscommon import ConfigDBConnector + from utilities_common.db import Db SAMPLE_TABLE = 'VLAN' @@ -22,9 +26,21 @@ class TestValidatedConfigDBConnector(TestCase): Test Class for validated_config_db_connector.py ''' - def test_validated_config_db_connector_empty_table(self): + def test_validated_set_entry_empty_table(self): mock_generic_updater = mock.Mock() mock_generic_updater.apply_patch = mock.Mock(side_effect=EmptyTableError) with mock.patch('validated_config_db_connector.GenericUpdater', return_value=mock_generic_updater): - remove_entry_success = validated_config_db_connector.validated_set_entry(SAMPLE_TABLE, SAMPLE_KEY, SAMPLE_VALUE_EMPTY) + remove_entry_success = validated_config_db_connector.ValidatedConfigDBConnector.validated_set_entry(mock.Mock(), SAMPLE_TABLE, SAMPLE_KEY, SAMPLE_VALUE_EMPTY) assert not remove_entry_success + + def test_validated_delete_table_invalid_delete(self): + mock_generic_updater = mock.Mock() + mock_generic_updater.apply_patch = mock.Mock(side_effect=ValueError) + with mock.patch('validated_config_db_connector.GenericUpdater', return_value=mock_generic_updater): + delete_table_success = validated_config_db_connector.ValidatedConfigDBConnector.validated_delete_table(mock.Mock(), SAMPLE_TABLE) + assert not delete_table_success + + def test_create_gcu_patch(self): + expected_gcu_patch = jsonpatch.JsonPatch([{"op": "add", "path": "/PORTCHANNEL/PortChannel01", "value": "test"}]) + created_gcu_patch = validated_config_db_connector.ValidatedConfigDBConnector.create_gcu_patch(ValidatedConfigDBConnector(ConfigDBConnector()), "add", "PORTCHANNEL", "PortChannel01", "test") + assert expected_gcu_patch == created_gcu_patch diff --git a/tests/watermarkstat_test.py b/tests/watermarkstat_test.py index cd4eae00a36..dc419ae3b94 100644 --- a/tests/watermarkstat_test.py +++ b/tests/watermarkstat_test.py @@ -1,5 +1,6 @@ import os import sys +import pytest import show.main as show from click.testing import CliRunner @@ -13,6 +14,15 @@ sys.path.insert(0, modules_path) +@pytest.fixture(scope="function") +def q_multicast_wm_neg(): + print("Setup watermarkstat sample data: no queue multicast watermark counters") + os.environ['WATERMARKSTAT_UNIT_TESTING'] = "1" + yield + del os.environ['WATERMARKSTAT_UNIT_TESTING'] + print("Teardown watermarkstat sample data: no queue multicast watermark counters") + + class TestWatermarkstat(object): @classmethod def setup_class(cls): @@ -32,6 +42,9 @@ def test_show_queue_unicast_wm(self): def test_show_queue_multicast_wm(self): self.executor(testData['show_q_wm_multicast']) + def test_show_queue_multicast_wm_neg(self, q_multicast_wm_neg): + self.executor(testData['show_q_wm_multicast_neg']) + def test_show_queue_all_wm(self): self.executor(testData['show_q_wm_all']) diff --git a/tests/wm_input/mock_db/counters_db.json b/tests/wm_input/mock_db/counters_db.json new file mode 100644 index 00000000000..443b84bf7cf --- /dev/null +++ b/tests/wm_input/mock_db/counters_db.json @@ -0,0 +1,1246 @@ +{ + "COUNTERS:oid:0x1000000000012": { + "SAI_PORT_STAT_IF_IN_UCAST_PKTS": "8", + "SAI_PORT_STAT_IF_IN_NON_UCAST_PKTS": "0", + "SAI_PORT_STAT_IF_IN_OCTETS" : "800", + "SAI_PORT_STAT_IF_OUT_UCAST_PKTS": "10", + "SAI_PORT_STAT_IF_OUT_NON_UCAST_PKTS" : "0", + "SAI_PORT_STAT_IF_OUT_OCTETS" : "1000", + "SAI_PORT_STAT_IF_IN_ERRORS": "10", + "SAI_PORT_STAT_IF_IN_DISCARDS": "100", + "SAI_PORT_STAT_IN_DROP_REASON_RANGE_BASE": "80", + "SAI_PORT_STAT_OUT_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS": "20", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1200", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "201", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "202", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "203", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "204", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "205", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "206", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "207", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1210", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "211", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "212", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "213", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "214", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "215", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "216", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "217", + "SAI_PORT_STAT_IF_IN_BROADCAST_PKTS": "0", + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", + "SAI_PORT_STAT_IP_IN_RECEIVES": "0", + "SAI_PORT_STAT_IF_OUT_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_IF_OUT_BROADCAST_PKTS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_64_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_65_TO_127_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_256_TO_511_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_512_TO_1023_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_1024_TO_1518_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_1519_TO_2047_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_2048_TO_4095_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_4096_TO_9216_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_9217_TO_16383_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_64_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_65_TO_127_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_128_TO_255_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_256_TO_511_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_512_TO_1023_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_1024_TO_1518_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_1519_TO_2047_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_2048_TO_4095_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_4096_TO_9216_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_9217_TO_16383_OCTETS": "0", + "SAI_PORT_STAT_ETHER_STATS_FRAGMENTS": "0", + "SAI_PORT_STAT_ETHER_STATS_UNDERSIZE_PKTS": "0", + "SAI_PORT_STAT_ETHER_STATS_JABBERS": "0" + }, + "COUNTERS:oid:0x1000000000013": { + "SAI_PORT_STAT_IF_IN_UCAST_PKTS": "4", + "SAI_PORT_STAT_IF_IN_NON_UCAST_PKTS": "0", + "SAI_PORT_STAT_IF_IN_OCTETS" : "400", + "SAI_PORT_STAT_IF_OUT_UCAST_PKTS": "40", + "SAI_PORT_STAT_IF_OUT_NON_UCAST_PKTS" : "0", + "SAI_PORT_STAT_IF_OUT_OCTETS" : "4000", + "SAI_PORT_STAT_IF_IN_ERRORS": "0", + "SAI_PORT_STAT_IF_IN_DISCARDS": "1000", + "SAI_PORT_STAT_IN_DROP_REASON_RANGE_BASE": "800", + "SAI_PORT_STAT_OUT_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS": "100", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1400", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "401", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "402", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "403", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "404", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "405", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "406", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "407", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1410", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "411", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "412", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "413", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "414", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "415", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "416", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "417", + "SAI_PORT_STAT_IF_IN_BROADCAST_PKTS": "0", + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", + "SAI_PORT_STAT_IP_IN_RECEIVES": "0", + "SAI_PORT_STAT_IF_OUT_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_IF_OUT_BROADCAST_PKTS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_64_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_65_TO_127_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_256_TO_511_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_512_TO_1023_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_1024_TO_1518_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_1519_TO_2047_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_2048_TO_4095_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_4096_TO_9216_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_9217_TO_16383_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_64_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_65_TO_127_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_128_TO_255_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_256_TO_511_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_512_TO_1023_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_1024_TO_1518_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_1519_TO_2047_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_2048_TO_4095_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_4096_TO_9216_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_9217_TO_16383_OCTETS": "0", + "SAI_PORT_STAT_ETHER_STATS_FRAGMENTS": "0", + "SAI_PORT_STAT_ETHER_STATS_UNDERSIZE_PKTS": "0", + "SAI_PORT_STAT_ETHER_STATS_JABBERS": "0" + }, + "COUNTERS:oid:0x1000000000014": { + "SAI_PORT_STAT_IF_IN_UCAST_PKTS": "6", + "SAI_PORT_STAT_IF_IN_NON_UCAST_PKTS": "0", + "SAI_PORT_STAT_IF_IN_OCTETS" : "600", + "SAI_PORT_STAT_IF_OUT_UCAST_PKTS": "60", + "SAI_PORT_STAT_IF_OUT_NON_UCAST_PKTS" : "0", + "SAI_PORT_STAT_IF_OUT_OCTETS" : "6000", + "SAI_PORT_STAT_IF_IN_ERRORS": "100", + "SAI_PORT_STAT_IF_IN_DISCARDS": "10", + "SAI_PORT_STAT_IN_DROP_REASON_RANGE_BASE": "10", + "SAI_PORT_STAT_OUT_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1800", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "801", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "802", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "803", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "804", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "805", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "806", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "807", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1810", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "811", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "812", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "813", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "814", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "815", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "816", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "817", + "SAI_PORT_STAT_IF_IN_BROADCAST_PKTS": "0", + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", + "SAI_PORT_STAT_IP_IN_RECEIVES": "0", + "SAI_PORT_STAT_IF_OUT_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_IF_OUT_BROADCAST_PKTS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_64_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_65_TO_127_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_256_TO_511_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_512_TO_1023_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_1024_TO_1518_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_1519_TO_2047_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_2048_TO_4095_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_4096_TO_9216_OCTETS": "0", + "SAI_PORT_STAT_ETHER_IN_PKTS_9217_TO_16383_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_64_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_65_TO_127_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_128_TO_255_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_256_TO_511_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_512_TO_1023_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_1024_TO_1518_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_1519_TO_2047_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_2048_TO_4095_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_4096_TO_9216_OCTETS": "0", + "SAI_PORT_STAT_ETHER_OUT_PKTS_9217_TO_16383_OCTETS": "0", + "SAI_PORT_STAT_ETHER_STATS_FRAGMENTS": "0", + "SAI_PORT_STAT_ETHER_STATS_UNDERSIZE_PKTS": "0", + "SAI_PORT_STAT_ETHER_STATS_JABBERS": "0" + }, + "COUNTERS:oid:0x15000000000357": { + "SAI_QUEUE_STAT_BYTES": "30", + "SAI_QUEUE_STAT_DROPPED_BYTES": "74", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "56", + "SAI_QUEUE_STAT_PACKETS": "68", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "61" + }, + "COUNTERS:oid:0x15000000000358": { + "SAI_QUEUE_STAT_BYTES": "43", + "SAI_QUEUE_STAT_DROPPED_BYTES": "1", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "39", + "SAI_QUEUE_STAT_PACKETS": "60", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "88" + }, + "COUNTERS:oid:0x15000000000359": { + "SAI_QUEUE_STAT_BYTES": "7", + "SAI_QUEUE_STAT_DROPPED_BYTES": "21", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "39", + "SAI_QUEUE_STAT_PACKETS": "82", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "4" + }, + "COUNTERS:oid:0x1500000000035b": { + "SAI_QUEUE_STAT_BYTES": "59", + "SAI_QUEUE_STAT_DROPPED_BYTES": "94", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "12", + "SAI_QUEUE_STAT_PACKETS": "11", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "15" + }, + "COUNTERS:oid:0x1500000000035c": { + "SAI_QUEUE_STAT_BYTES": "62", + "SAI_QUEUE_STAT_DROPPED_BYTES": "40", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "35", + "SAI_QUEUE_STAT_PACKETS": "36", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "18" + }, + "COUNTERS:oid:0x1500000000035d": { + "SAI_QUEUE_STAT_BYTES": "91", + "SAI_QUEUE_STAT_DROPPED_BYTES": "88", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "2", + "SAI_QUEUE_STAT_PACKETS": "49", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "73" + }, + "COUNTERS:oid:0x1500000000035e": { + "SAI_QUEUE_STAT_BYTES": "17", + "SAI_QUEUE_STAT_DROPPED_BYTES": "74", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "94", + "SAI_QUEUE_STAT_PACKETS": "33", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "98" + }, + "COUNTERS:oid:0x1500000000035f": { + "SAI_QUEUE_STAT_BYTES": "71", + "SAI_QUEUE_STAT_DROPPED_BYTES": "33", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "95", + "SAI_QUEUE_STAT_PACKETS": "40", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "81" + }, + "COUNTERS:oid:0x15000000000360": { + "SAI_QUEUE_STAT_BYTES": "8", + "SAI_QUEUE_STAT_DROPPED_BYTES": "78", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "93", + "SAI_QUEUE_STAT_PACKETS": "54", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "59" + }, + "COUNTERS:oid:0x1500000000037f": { + "SAI_QUEUE_STAT_BYTES": "96", + "SAI_QUEUE_STAT_DROPPED_BYTES": "98", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "70", + "SAI_QUEUE_STAT_PACKETS": "41", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "46" + }, + "COUNTERS:oid:0x15000000000380": { + "SAI_QUEUE_STAT_BYTES": "49", + "SAI_QUEUE_STAT_DROPPED_BYTES": "36", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "63", + "SAI_QUEUE_STAT_PACKETS": "18", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "18" + }, + "COUNTERS:oid:0x15000000000381": { + "SAI_QUEUE_STAT_BYTES": "90", + "SAI_QUEUE_STAT_DROPPED_BYTES": "15", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_PACKETS": "99", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "15" + }, + "COUNTERS:oid:0x15000000000383": { + "SAI_QUEUE_STAT_BYTES": "84", + "SAI_QUEUE_STAT_DROPPED_BYTES": "94", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "82", + "SAI_QUEUE_STAT_PACKETS": "8", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "17" + }, + "COUNTERS:oid:0x15000000000384": { + "SAI_QUEUE_STAT_BYTES": "15", + "SAI_QUEUE_STAT_DROPPED_BYTES": "92", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "75", + "SAI_QUEUE_STAT_PACKETS": "83", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "42" + }, + "COUNTERS:oid:0x15000000000385": { + "SAI_QUEUE_STAT_BYTES": "26", + "SAI_QUEUE_STAT_DROPPED_BYTES": "71", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "50", + "SAI_QUEUE_STAT_PACKETS": "84", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "31" + }, + "COUNTERS:oid:0x15000000000386": { + "SAI_QUEUE_STAT_BYTES": "19", + "SAI_QUEUE_STAT_DROPPED_BYTES": "80", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "49", + "SAI_QUEUE_STAT_PACKETS": "27", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "4" + }, + "COUNTERS:oid:0x15000000000387": { + "SAI_QUEUE_STAT_BYTES": "89", + "SAI_QUEUE_STAT_DROPPED_BYTES": "33", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "13", + "SAI_QUEUE_STAT_PACKETS": "13", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "45" + }, + "COUNTERS:oid:0x15000000000388": { + "SAI_QUEUE_STAT_BYTES": "48", + "SAI_QUEUE_STAT_DROPPED_BYTES": "31", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "86", + "SAI_QUEUE_STAT_PACKETS": "43", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x150000000003a7": { + "SAI_QUEUE_STAT_BYTES": "5", + "SAI_QUEUE_STAT_DROPPED_BYTES": "56", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "36", + "SAI_QUEUE_STAT_PACKETS": "19", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "65" + }, + "COUNTERS:oid:0x150000000003a8": { + "SAI_QUEUE_STAT_BYTES": "17", + "SAI_QUEUE_STAT_DROPPED_BYTES": "91", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "68", + "SAI_QUEUE_STAT_PACKETS": "38", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "94" + }, + "COUNTERS:oid:0x150000000003a9": { + "SAI_QUEUE_STAT_BYTES": "65", + "SAI_QUEUE_STAT_DROPPED_BYTES": "51", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "79", + "SAI_QUEUE_STAT_PACKETS": "16", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "71" + }, + "COUNTERS:oid:0x150000000003aa": { + "SAI_QUEUE_STAT_BYTES": "97", + "SAI_QUEUE_STAT_DROPPED_BYTES": "72", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "63", + "SAI_QUEUE_STAT_PACKETS": "11", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "51" + }, + "COUNTERS:oid:0x150000000003ac": { + "SAI_QUEUE_STAT_BYTES": "84", + "SAI_QUEUE_STAT_DROPPED_BYTES": "59", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "30", + "SAI_QUEUE_STAT_PACKETS": "13", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "47" + }, + "COUNTERS:oid:0x150000000003ad": { + "SAI_QUEUE_STAT_BYTES": "67", + "SAI_QUEUE_STAT_DROPPED_BYTES": "85", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "99", + "SAI_QUEUE_STAT_PACKETS": "49", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "86" + }, + "COUNTERS:oid:0x150000000003ae": { + "SAI_QUEUE_STAT_BYTES": "63", + "SAI_QUEUE_STAT_DROPPED_BYTES": "88", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "38", + "SAI_QUEUE_STAT_PACKETS": "2", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "98" + }, + "COUNTERS:oid:0x150000000003af": { + "SAI_QUEUE_STAT_BYTES": "82", + "SAI_QUEUE_STAT_DROPPED_BYTES": "43", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "93", + "SAI_QUEUE_STAT_PACKETS": "0", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "50" + }, + "COUNTERS:oid:0x150000000003b0": { + "SAI_QUEUE_STAT_BYTES": "17", + "SAI_QUEUE_STAT_DROPPED_BYTES": "61", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "91", + "SAI_QUEUE_STAT_PACKETS": "80", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "91" + }, + "COUNTERS:oid:0x1a00000000034f": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_DROPPED_PACKETS" : "800" + }, + "COUNTERS:oid:0x1a000000000350" : { + "SAI_INGRESS_PRIORITY_GROUP_STAT_DROPPED_PACKETS" : "801" + }, + "COUNTERS:oid:0x1a000000000351" : { + "SAI_INGRESS_PRIORITY_GROUP_STAT_DROPPED_PACKETS" : "802" + }, + "COUNTERS:oid:0x1a000000000352" : { + "SAI_INGRESS_PRIORITY_GROUP_STAT_DROPPED_PACKETS" : "803" + }, + "COUNTERS:oid:0x1a000000000353" : { + "SAI_INGRESS_PRIORITY_GROUP_STAT_DROPPED_PACKETS" : "804" + }, + "COUNTERS:oid:0x1a000000000354" : { + "SAI_INGRESS_PRIORITY_GROUP_STAT_DROPPED_PACKETS" : "805" + }, + "COUNTERS:oid:0x1a000000000355" : { + "SAI_INGRESS_PRIORITY_GROUP_STAT_DROPPED_PACKETS" : "806" + }, + "COUNTERS:oid:0x1a000000000356" : { + "SAI_INGRESS_PRIORITY_GROUP_STAT_DROPPED_PACKETS" : "807" + }, + "COUNTERS:oid:0x1a000000000377" : { + "SAI_INGRESS_PRIORITY_GROUP_STAT_DROPPED_PACKETS" : "400" + }, + "COUNTERS:oid:0x1a000000000378" : { + "SAI_INGRESS_PRIORITY_GROUP_STAT_DROPPED_PACKETS" : "401" + }, + "COUNTERS:oid:0x1a000000000379" : { + "SAI_INGRESS_PRIORITY_GROUP_STAT_DROPPED_PACKETS" : "402" + }, + "COUNTERS:oid:0x1a00000000037a" : { + "SAI_INGRESS_PRIORITY_GROUP_STAT_DROPPED_PACKETS" : "403" + }, + "COUNTERS:oid:0x1a00000000037b" : { + "SAI_INGRESS_PRIORITY_GROUP_STAT_DROPPED_PACKETS" : "404" + }, + "COUNTERS:oid:0x1a00000000037c" : { + "SAI_INGRESS_PRIORITY_GROUP_STAT_DROPPED_PACKETS" : "405" + }, + "COUNTERS:oid:0x1a00000000037d" : { + "SAI_INGRESS_PRIORITY_GROUP_STAT_DROPPED_PACKETS" : "406" + }, + "COUNTERS:oid:0x1a00000000037e" : { + "SAI_INGRESS_PRIORITY_GROUP_STAT_DROPPED_PACKETS" : "407" + }, + "COUNTERS:oid:0x1a00000000039f" : { + "SAI_INGRESS_PRIORITY_GROUP_STAT_DROPPED_PACKETS" : "100" + }, + "COUNTERS:oid:0x1a0000000003a0" : { + "SAI_INGRESS_PRIORITY_GROUP_STAT_DROPPED_PACKETS" : "101" + }, + "COUNTERS:oid:0x1a0000000003a1" : { + "SAI_INGRESS_PRIORITY_GROUP_STAT_DROPPED_PACKETS" : "102" + }, + "COUNTERS:oid:0x1a0000000003a2" : { + "SAI_INGRESS_PRIORITY_GROUP_STAT_DROPPED_PACKETS" : "103" + }, + "COUNTERS:oid:0x1a0000000003a3" : { + "SAI_INGRESS_PRIORITY_GROUP_STAT_DROPPED_PACKETS" : "104" + }, + "COUNTERS:oid:0x1a0000000003a4" : { + "SAI_INGRESS_PRIORITY_GROUP_STAT_DROPPED_PACKETS" : "105" + }, + "COUNTERS:oid:0x1a0000000003a5" : { + "SAI_INGRESS_PRIORITY_GROUP_STAT_DROPPED_PACKETS" : "106" + }, + "COUNTERS:oid:0x1a0000000003a6" : { + "SAI_INGRESS_PRIORITY_GROUP_STAT_DROPPED_PACKETS" : "107" + }, + "COUNTERS_PORT_NAME_MAP": { + "Ethernet0": "oid:0x1000000000012", + "Ethernet4": "oid:0x1000000000013", + "Ethernet8": "oid:0x1000000000014" + }, + "COUNTERS_BUFFER_POOL_NAME_MAP": { + "egress_lossless_pool": "oid:0x18000000000b64", + "egress_lossy_pool": "oid:0x18000000000b65", + "ingress_lossless_pool": "oid:0x18000000000b66" + }, + "COUNTERS_PG_NAME_MAP": { + "Ethernet0:0": "oid:0x1a00000000034f", + "Ethernet0:1": "oid:0x1a000000000350", + "Ethernet0:2": "oid:0x1a000000000351", + "Ethernet0:3": "oid:0x1a000000000352", + "Ethernet0:4": "oid:0x1a000000000353", + "Ethernet0:5": "oid:0x1a000000000354", + "Ethernet0:6": "oid:0x1a000000000355", + "Ethernet0:7": "oid:0x1a000000000356", + "Ethernet4:0": "oid:0x1a000000000377", + "Ethernet4:1": "oid:0x1a000000000378", + "Ethernet4:2": "oid:0x1a000000000379", + "Ethernet4:3": "oid:0x1a00000000037a", + "Ethernet4:4": "oid:0x1a00000000037b", + "Ethernet4:5": "oid:0x1a00000000037c", + "Ethernet4:6": "oid:0x1a00000000037d", + "Ethernet4:7": "oid:0x1a00000000037e", + "Ethernet8:0": "oid:0x1a00000000039f", + "Ethernet8:1": "oid:0x1a0000000003a0", + "Ethernet8:2": "oid:0x1a0000000003a1", + "Ethernet8:3": "oid:0x1a0000000003a2", + "Ethernet8:4": "oid:0x1a0000000003a3", + "Ethernet8:5": "oid:0x1a0000000003a4", + "Ethernet8:6": "oid:0x1a0000000003a5", + "Ethernet8:7": "oid:0x1a0000000003a6" + }, + "COUNTERS_PG_PORT_MAP": { + "oid:0x1a00000000034f": "oid:0x1000000000012", + "oid:0x1a000000000350": "oid:0x1000000000012", + "oid:0x1a000000000351": "oid:0x1000000000012", + "oid:0x1a000000000352": "oid:0x1000000000012", + "oid:0x1a000000000353": "oid:0x1000000000012", + "oid:0x1a000000000354": "oid:0x1000000000012", + "oid:0x1a000000000355": "oid:0x1000000000012", + "oid:0x1a000000000356": "oid:0x1000000000012", + "oid:0x1a000000000377": "oid:0x1000000000013", + "oid:0x1a000000000378": "oid:0x1000000000013", + "oid:0x1a000000000379": "oid:0x1000000000013", + "oid:0x1a00000000037a": "oid:0x1000000000013", + "oid:0x1a00000000037b": "oid:0x1000000000013", + "oid:0x1a00000000037c": "oid:0x1000000000013", + "oid:0x1a00000000037d": "oid:0x1000000000013", + "oid:0x1a00000000037e": "oid:0x1000000000013", + "oid:0x1a00000000039f": "oid:0x1000000000014", + "oid:0x1a0000000003a0": "oid:0x1000000000014", + "oid:0x1a0000000003a1": "oid:0x1000000000014", + "oid:0x1a0000000003a2": "oid:0x1000000000014", + "oid:0x1a0000000003a3": "oid:0x1000000000014", + "oid:0x1a0000000003a4": "oid:0x1000000000014", + "oid:0x1a0000000003a5": "oid:0x1000000000014", + "oid:0x1a0000000003a6": "oid:0x1000000000014" + }, + "COUNTERS_QUEUE_NAME_MAP": { + "Ethernet0:0": "oid:0x15000000000357", + "Ethernet0:1": "oid:0x15000000000358", + "Ethernet0:2": "oid:0x15000000000359", + "Ethernet0:3": "oid:0x1500000000035a", + "Ethernet0:4": "oid:0x1500000000035b", + "Ethernet0:5": "oid:0x1500000000035c", + "Ethernet0:6": "oid:0x1500000000035d", + "Ethernet0:7": "oid:0x1500000000035e", + "Ethernet0:8": "oid:0x1500000000035f", + "Ethernet0:9": "oid:0x15000000000360", + "Ethernet0:20": "oid:0x1500000000036d", + "Ethernet0:21": "oid:0x1500000000036e", + "Ethernet0:22": "oid:0x1500000000036f", + "Ethernet0:23": "oid:0x15000000000370", + "Ethernet0:24": "oid:0x15000000000371", + "Ethernet0:25": "oid:0x15000000000372", + "Ethernet0:26": "oid:0x15000000000373", + "Ethernet0:27": "oid:0x15000000000374", + "Ethernet0:28": "oid:0x15000000000375", + "Ethernet0:29": "oid:0x15000000000376", + "Ethernet4:0": "oid:0x1500000000037f", + "Ethernet4:1": "oid:0x15000000000380", + "Ethernet4:2": "oid:0x15000000000381", + "Ethernet4:3": "oid:0x15000000000382", + "Ethernet4:4": "oid:0x15000000000383", + "Ethernet4:5": "oid:0x15000000000384", + "Ethernet4:6": "oid:0x15000000000385", + "Ethernet4:7": "oid:0x15000000000386", + "Ethernet4:8": "oid:0x15000000000387", + "Ethernet4:9": "oid:0x15000000000388", + "Ethernet4:20": "oid:0x15000000000395", + "Ethernet4:21": "oid:0x15000000000396", + "Ethernet4:22": "oid:0x15000000000397", + "Ethernet4:23": "oid:0x15000000000398", + "Ethernet4:24": "oid:0x15000000000399", + "Ethernet4:25": "oid:0x1500000000039a", + "Ethernet4:26": "oid:0x1500000000039b", + "Ethernet4:27": "oid:0x1500000000039c", + "Ethernet4:28": "oid:0x1500000000039d", + "Ethernet4:29": "oid:0x1500000000039e", + "Ethernet8:0": "oid:0x150000000003a7", + "Ethernet8:1": "oid:0x150000000003a8", + "Ethernet8:2": "oid:0x150000000003a9", + "Ethernet8:3": "oid:0x150000000003aa", + "Ethernet8:4": "oid:0x150000000003ab", + "Ethernet8:5": "oid:0x150000000003ac", + "Ethernet8:6": "oid:0x150000000003ad", + "Ethernet8:7": "oid:0x150000000003ae", + "Ethernet8:8": "oid:0x150000000003af", + "Ethernet8:9": "oid:0x150000000003b0", + "Ethernet8:20": "oid:0x150000000003bd", + "Ethernet8:21": "oid:0x150000000003be", + "Ethernet8:22": "oid:0x150000000003bf", + "Ethernet8:23": "oid:0x150000000003c0", + "Ethernet8:24": "oid:0x150000000003c1", + "Ethernet8:25": "oid:0x150000000003c2", + "Ethernet8:26": "oid:0x150000000003c3", + "Ethernet8:27": "oid:0x150000000003c4", + "Ethernet8:28": "oid:0x150000000003c5", + "Ethernet8:29": "oid:0x150000000003c6" + }, + "COUNTERS_QUEUE_PORT_MAP": { + "oid:0x15000000000357": "oid:0x1000000000012", + "oid:0x15000000000358": "oid:0x1000000000012", + "oid:0x15000000000359": "oid:0x1000000000012", + "oid:0x1500000000035a": "oid:0x1000000000012", + "oid:0x1500000000035b": "oid:0x1000000000012", + "oid:0x1500000000035c": "oid:0x1000000000012", + "oid:0x1500000000035d": "oid:0x1000000000012", + "oid:0x1500000000035e": "oid:0x1000000000012", + "oid:0x1500000000035f": "oid:0x1000000000012", + "oid:0x15000000000360": "oid:0x1000000000012", + "oid:0x1500000000036d": "oid:0x1000000000012", + "oid:0x1500000000036e": "oid:0x1000000000012", + "oid:0x1500000000036f": "oid:0x1000000000012", + "oid:0x15000000000370": "oid:0x1000000000012", + "oid:0x15000000000371": "oid:0x1000000000012", + "oid:0x15000000000372": "oid:0x1000000000012", + "oid:0x15000000000373": "oid:0x1000000000012", + "oid:0x15000000000374": "oid:0x1000000000012", + "oid:0x15000000000375": "oid:0x1000000000012", + "oid:0x15000000000376": "oid:0x1000000000012", + "oid:0x1500000000037f": "oid:0x1000000000013", + "oid:0x15000000000380": "oid:0x1000000000013", + "oid:0x15000000000381": "oid:0x1000000000013", + "oid:0x15000000000382": "oid:0x1000000000013", + "oid:0x15000000000383": "oid:0x1000000000013", + "oid:0x15000000000384": "oid:0x1000000000013", + "oid:0x15000000000385": "oid:0x1000000000013", + "oid:0x15000000000386": "oid:0x1000000000013", + "oid:0x15000000000387": "oid:0x1000000000013", + "oid:0x15000000000388": "oid:0x1000000000013", + "oid:0x15000000000395": "oid:0x1000000000013", + "oid:0x15000000000396": "oid:0x1000000000013", + "oid:0x15000000000397": "oid:0x1000000000013", + "oid:0x15000000000398": "oid:0x1000000000013", + "oid:0x15000000000399": "oid:0x1000000000013", + "oid:0x1500000000039a": "oid:0x1000000000013", + "oid:0x1500000000039b": "oid:0x1000000000013", + "oid:0x1500000000039c": "oid:0x1000000000013", + "oid:0x1500000000039d": "oid:0x1000000000013", + "oid:0x1500000000039e": "oid:0x1000000000013", + "oid:0x150000000003a7": "oid:0x1000000000014", + "oid:0x150000000003a8": "oid:0x1000000000014", + "oid:0x150000000003a9": "oid:0x1000000000014", + "oid:0x150000000003aa": "oid:0x1000000000014", + "oid:0x150000000003ab": "oid:0x1000000000014", + "oid:0x150000000003ac": "oid:0x1000000000014", + "oid:0x150000000003ad": "oid:0x1000000000014", + "oid:0x150000000003ae": "oid:0x1000000000014", + "oid:0x150000000003af": "oid:0x1000000000014", + "oid:0x150000000003b0": "oid:0x1000000000014", + "oid:0x150000000003bd": "oid:0x1000000000014", + "oid:0x150000000003be": "oid:0x1000000000014", + "oid:0x150000000003bf": "oid:0x1000000000014", + "oid:0x150000000003c0": "oid:0x1000000000014", + "oid:0x150000000003c1": "oid:0x1000000000014", + "oid:0x150000000003c2": "oid:0x1000000000014", + "oid:0x150000000003c3": "oid:0x1000000000014", + "oid:0x150000000003c4": "oid:0x1000000000014", + "oid:0x150000000003c5": "oid:0x1000000000014", + "oid:0x150000000003c6": "oid:0x1000000000014" + }, + "COUNTERS_QUEUE_INDEX_MAP": { + "oid:0x15000000000357": "0", + "oid:0x15000000000358": "1", + "oid:0x15000000000359": "2", + "oid:0x1500000000035a": "3", + "oid:0x1500000000035b": "4", + "oid:0x1500000000035c": "5", + "oid:0x1500000000035d": "6", + "oid:0x1500000000035e": "7", + "oid:0x1500000000035f": "8", + "oid:0x15000000000360": "9", + "oid:0x1500000000036d": "20", + "oid:0x1500000000036e": "21", + "oid:0x1500000000036f": "22", + "oid:0x15000000000370": "23", + "oid:0x15000000000371": "24", + "oid:0x15000000000372": "25", + "oid:0x15000000000373": "26", + "oid:0x15000000000374": "27", + "oid:0x15000000000375": "28", + "oid:0x15000000000376": "29", + "oid:0x1500000000037f": "0", + "oid:0x15000000000380": "1", + "oid:0x15000000000381": "2", + "oid:0x15000000000382": "3", + "oid:0x15000000000383": "4", + "oid:0x15000000000384": "5", + "oid:0x15000000000385": "6", + "oid:0x15000000000386": "7", + "oid:0x15000000000387": "8", + "oid:0x15000000000388": "9", + "oid:0x15000000000395": "20", + "oid:0x15000000000396": "21", + "oid:0x15000000000397": "22", + "oid:0x15000000000398": "23", + "oid:0x15000000000399": "24", + "oid:0x1500000000039a": "25", + "oid:0x1500000000039b": "26", + "oid:0x1500000000039c": "27", + "oid:0x1500000000039d": "28", + "oid:0x1500000000039e": "29", + "oid:0x150000000003a7": "0", + "oid:0x150000000003a8": "1", + "oid:0x150000000003a9": "2", + "oid:0x150000000003aa": "3", + "oid:0x150000000003ab": "4", + "oid:0x150000000003ac": "5", + "oid:0x150000000003ad": "6", + "oid:0x150000000003ae": "7", + "oid:0x150000000003af": "8", + "oid:0x150000000003b0": "9", + "oid:0x150000000003bd": "20", + "oid:0x150000000003be": "21", + "oid:0x150000000003bf": "22", + "oid:0x150000000003c0": "23", + "oid:0x150000000003c1": "24", + "oid:0x150000000003c2": "25", + "oid:0x150000000003c3": "26", + "oid:0x150000000003c4": "27", + "oid:0x150000000003c5": "28", + "oid:0x150000000003c6": "29" + }, + "COUNTERS_QUEUE_TYPE_MAP": { + "oid:0x15000000000357": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000358": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000359": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x1500000000035a": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x1500000000035b": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x1500000000035c": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x1500000000035d": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x1500000000035e": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x1500000000035f": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000360": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x1500000000036d": "SAI_QUEUE_TYPE_ALL", + "oid:0x1500000000036e": "SAI_QUEUE_TYPE_ALL", + "oid:0x1500000000036f": "SAI_QUEUE_TYPE_ALL", + "oid:0x15000000000370": "SAI_QUEUE_TYPE_ALL", + "oid:0x15000000000371": "SAI_QUEUE_TYPE_ALL", + "oid:0x15000000000372": "SAI_QUEUE_TYPE_ALL", + "oid:0x15000000000373": "SAI_QUEUE_TYPE_ALL", + "oid:0x15000000000374": "SAI_QUEUE_TYPE_ALL", + "oid:0x15000000000375": "SAI_QUEUE_TYPE_ALL", + "oid:0x15000000000376": "SAI_QUEUE_TYPE_ALL", + "oid:0x1500000000037f": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000380": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000381": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000382": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000383": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000384": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000385": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000386": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000387": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000388": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000395": "SAI_QUEUE_TYPE_ALL", + "oid:0x15000000000396": "SAI_QUEUE_TYPE_ALL", + "oid:0x15000000000397": "SAI_QUEUE_TYPE_ALL", + "oid:0x15000000000398": "SAI_QUEUE_TYPE_ALL", + "oid:0x15000000000399": "SAI_QUEUE_TYPE_ALL", + "oid:0x1500000000039a": "SAI_QUEUE_TYPE_ALL", + "oid:0x1500000000039b": "SAI_QUEUE_TYPE_ALL", + "oid:0x1500000000039c": "SAI_QUEUE_TYPE_ALL", + "oid:0x1500000000039d": "SAI_QUEUE_TYPE_ALL", + "oid:0x1500000000039e": "SAI_QUEUE_TYPE_ALL", + "oid:0x150000000003a7": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x150000000003a8": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x150000000003a9": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x150000000003aa": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x150000000003ab": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x150000000003ac": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x150000000003ad": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x150000000003ae": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x150000000003af": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x150000000003b0": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x150000000003bd": "SAI_QUEUE_TYPE_ALL", + "oid:0x150000000003be": "SAI_QUEUE_TYPE_ALL", + "oid:0x150000000003bf": "SAI_QUEUE_TYPE_ALL", + "oid:0x150000000003c0": "SAI_QUEUE_TYPE_ALL", + "oid:0x150000000003c1": "SAI_QUEUE_TYPE_ALL", + "oid:0x150000000003c2": "SAI_QUEUE_TYPE_ALL", + "oid:0x150000000003c3": "SAI_QUEUE_TYPE_ALL", + "oid:0x150000000003c4": "SAI_QUEUE_TYPE_ALL", + "oid:0x150000000003c5": "SAI_QUEUE_TYPE_ALL", + "oid:0x150000000003c6": "SAI_QUEUE_TYPE_ALL" + }, + "USER_WATERMARKS:oid:0x1a00000000034f": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "100", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "100" + }, + "USER_WATERMARKS:oid:0x1a000000000350": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "101", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "101" + }, + "USER_WATERMARKS:oid:0x1a000000000351": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "102", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "102" + }, + "USER_WATERMARKS:oid:0x1a000000000352": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "103", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "103" + }, + "USER_WATERMARKS:oid:0x1a000000000353": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "104", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "104" + }, + "USER_WATERMARKS:oid:0x1a000000000354": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "105", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "105" + }, + "USER_WATERMARKS:oid:0x1a000000000355": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "106", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "106" + }, + "USER_WATERMARKS:oid:0x1a000000000356": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "107", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "107" + }, + "USER_WATERMARKS:oid:0x1a000000000377": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "400", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "400" + }, + "USER_WATERMARKS:oid:0x1a000000000378": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "401", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "401" + }, + "USER_WATERMARKS:oid:0x1a000000000379": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "402", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "402" + }, + "USER_WATERMARKS:oid:0x1a00000000037a": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "403", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "403" + }, + "USER_WATERMARKS:oid:0x1a00000000037b": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "404", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "404" + }, + "USER_WATERMARKS:oid:0x1a00000000037c": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "405", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "405" + }, + "USER_WATERMARKS:oid:0x1a00000000037d": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "406", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "406" + }, + "USER_WATERMARKS:oid:0x1a00000000037e": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "407", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "407" + }, + "USER_WATERMARKS:oid:0x1a00000000039f": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "800", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "800" + }, + "USER_WATERMARKS:oid:0x1a0000000003a0": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "801", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "801" + }, + "USER_WATERMARKS:oid:0x1a0000000003a1": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "802", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "802" + }, + "USER_WATERMARKS:oid:0x1a0000000003a2": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "803", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "803" + }, + "USER_WATERMARKS:oid:0x1a0000000003a3": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "804", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "804" + }, + "USER_WATERMARKS:oid:0x1a0000000003a4": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "805", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "805" + }, + "USER_WATERMARKS:oid:0x1a0000000003a5": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "806", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "806" + }, + "USER_WATERMARKS:oid:0x1a0000000003a6": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "807", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "807" + }, + "PERSISTENT_WATERMARKS:oid:0x1a00000000034f": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "200", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "200" + }, + "PERSISTENT_WATERMARKS:oid:0x1a000000000350": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "201", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "201" + }, + "PERSISTENT_WATERMARKS:oid:0x1a000000000351": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "202", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "202" + }, + "PERSISTENT_WATERMARKS:oid:0x1a000000000352": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "203", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "203" + }, + "PERSISTENT_WATERMARKS:oid:0x1a000000000353": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "204", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "204" + }, + "PERSISTENT_WATERMARKS:oid:0x1a000000000354": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "205", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "205" + }, + "PERSISTENT_WATERMARKS:oid:0x1a000000000355": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "206", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "206" + }, + "PERSISTENT_WATERMARKS:oid:0x1a000000000356": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "207", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "207" + }, + "PERSISTENT_WATERMARKS:oid:0x1a000000000377": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "500", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "500" + }, + "PERSISTENT_WATERMARKS:oid:0x1a000000000378": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "501", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "501" + }, + "PERSISTENT_WATERMARKS:oid:0x1a000000000379": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "502", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "502" + }, + "PERSISTENT_WATERMARKS:oid:0x1a00000000037a": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "503", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "503" + }, + "PERSISTENT_WATERMARKS:oid:0x1a00000000037b": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "504", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "504" + }, + "PERSISTENT_WATERMARKS:oid:0x1a00000000037c": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "505", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "505" + }, + "PERSISTENT_WATERMARKS:oid:0x1a00000000037d": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "506", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "506" + }, + "PERSISTENT_WATERMARKS:oid:0x1a00000000037e": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "507", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "507" + }, + "PERSISTENT_WATERMARKS:oid:0x1a00000000039f": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "900", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "900" + }, + "PERSISTENT_WATERMARKS:oid:0x1a0000000003a0": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "901", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "901" + }, + "PERSISTENT_WATERMARKS:oid:0x1a0000000003a1": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "902", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "902" + }, + "PERSISTENT_WATERMARKS:oid:0x1a0000000003a2": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "903", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "903" + }, + "PERSISTENT_WATERMARKS:oid:0x1a0000000003a3": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "904", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "904" + }, + "PERSISTENT_WATERMARKS:oid:0x1a0000000003a4": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "905", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "905" + }, + "PERSISTENT_WATERMARKS:oid:0x1a0000000003a5": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "906", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "906" + }, + "PERSISTENT_WATERMARKS:oid:0x1a0000000003a6": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "907", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "907" + }, + "USER_WATERMARKS:oid:0x15000000000357": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "2057328" + }, + "USER_WATERMARKS:oid:0x15000000000358": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "2056704" + }, + "USER_WATERMARKS:oid:0x15000000000359": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x1500000000035a": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x1500000000035b": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x1500000000035c": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x1500000000035d": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x1500000000035e": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "2704" + }, + "USER_WATERMARKS:oid:0x1500000000035f": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "416" + }, + "USER_WATERMARKS:oid:0x15000000000360": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "20" + }, + "USER_WATERMARKS:oid:0x1500000000036d": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "1234567" + }, + "USER_WATERMARKS:oid:0x1500000000036e": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "7654321" + }, + "USER_WATERMARKS:oid:0x1500000000036f": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x15000000000370": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x15000000000371": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x15000000000372": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "20" + }, + "USER_WATERMARKS:oid:0x15000000000373": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "500" + }, + "USER_WATERMARKS:oid:0x15000000000374": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "200" + }, + "USER_WATERMARKS:oid:0x15000000000375": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x15000000000376": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "10" + }, + "USER_WATERMARKS:oid:0x1500000000037f": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x15000000000380": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x15000000000381": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x15000000000382": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "1986" + }, + "USER_WATERMARKS:oid:0x15000000000383": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "2567" + }, + "USER_WATERMARKS:oid:0x15000000000384": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x15000000000385": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x15000000000386": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x15000000000387": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x15000000000388": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x15000000000395": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x15000000000396": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x15000000000397": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x15000000000398": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "1986" + }, + "USER_WATERMARKS:oid:0x15000000000399": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "2567" + }, + "USER_WATERMARKS:oid:0x1500000000039a": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x1500000000039b": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x1500000000039c": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x1500000000039d": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x1500000000039e": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x150000000003a7": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x150000000003a8": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x150000000003a9": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "1040" + }, + "USER_WATERMARKS:oid:0x150000000003aa": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x150000000003ab": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x150000000003ac": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x150000000003ad": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x150000000003ae": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x150000000003af": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "8528" + }, + "USER_WATERMARKS:oid:0x150000000003b0": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "7696" + }, + "USER_WATERMARKS:oid:0x150000000003bd": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "20" + }, + "USER_WATERMARKS:oid:0x150000000003be": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "5" + }, + "USER_WATERMARKS:oid:0x150000000003bf": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "1998" + }, + "USER_WATERMARKS:oid:0x150000000003c0": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x150000000003c1": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x150000000003c2": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x150000000003c3": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x150000000003c4": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "USER_WATERMARKS:oid:0x150000000003c5": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "8528" + }, + "USER_WATERMARKS:oid:0x150000000003c6": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "7696" + }, + "PERSISTENT_WATERMARKS:oid:0x15000000000357": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "3057328" + }, + "PERSISTENT_WATERMARKS:oid:0x15000000000358": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "3056704" + }, + "PERSISTENT_WATERMARKS:oid:0x15000000000359": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "PERSISTENT_WATERMARKS:oid:0x1500000000035a": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "PERSISTENT_WATERMARKS:oid:0x1500000000035b": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "PERSISTENT_WATERMARKS:oid:0x1500000000035c": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "PERSISTENT_WATERMARKS:oid:0x1500000000035d": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "PERSISTENT_WATERMARKS:oid:0x1500000000035e": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "3704" + }, + "PERSISTENT_WATERMARKS:oid:0x1500000000035f": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "516" + }, + "PERSISTENT_WATERMARKS:oid:0x15000000000360": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "30" + }, + "PERSISTENT_WATERMARKS:oid:0x1500000000037f": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "PERSISTENT_WATERMARKS:oid:0x15000000000380": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "PERSISTENT_WATERMARKS:oid:0x15000000000381": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "PERSISTENT_WATERMARKS:oid:0x15000000000382": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "2986" + }, + "PERSISTENT_WATERMARKS:oid:0x15000000000383": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "3567" + }, + "PERSISTENT_WATERMARKS:oid:0x15000000000384": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "PERSISTENT_WATERMARKS:oid:0x15000000000385": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "PERSISTENT_WATERMARKS:oid:0x15000000000386": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "PERSISTENT_WATERMARKS:oid:0x15000000000387": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "PERSISTENT_WATERMARKS:oid:0x15000000000388": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "PERSISTENT_WATERMARKS:oid:0x150000000003a7": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "PERSISTENT_WATERMARKS:oid:0x150000000003a8": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "PERSISTENT_WATERMARKS:oid:0x150000000003a9": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "2040" + }, + "PERSISTENT_WATERMARKS:oid:0x150000000003aa": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "PERSISTENT_WATERMARKS:oid:0x150000000003ab": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "PERSISTENT_WATERMARKS:oid:0x150000000003ac": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "PERSISTENT_WATERMARKS:oid:0x150000000003ad": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "PERSISTENT_WATERMARKS:oid:0x150000000003ae": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "0" + }, + "PERSISTENT_WATERMARKS:oid:0x150000000003af": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "9528" + }, + "PERSISTENT_WATERMARKS:oid:0x150000000003b0": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "8696" + }, + "USER_WATERMARKS:oid:0x18000000000b64": { + "SAI_BUFFER_POOL_STAT_WATERMARK_BYTES": "1000" + }, + "USER_WATERMARKS:oid:0x18000000000b65": { + "SAI_BUFFER_POOL_STAT_WATERMARK_BYTES": "2000" + }, + "USER_WATERMARKS:oid:0x18000000000b66": { + "SAI_BUFFER_POOL_STAT_WATERMARK_BYTES": "3000", + "SAI_BUFFER_POOL_STAT_XOFF_ROOM_WATERMARK_BYTES": "432640" + }, + "PERSISTENT_WATERMARKS:oid:0x18000000000b64": { + "SAI_BUFFER_POOL_STAT_WATERMARK_BYTES": "2000" + }, + "PERSISTENT_WATERMARKS:oid:0x18000000000b65": { + "SAI_BUFFER_POOL_STAT_WATERMARK_BYTES": "3000" + }, + "PERSISTENT_WATERMARKS:oid:0x18000000000b66": { + "SAI_BUFFER_POOL_STAT_WATERMARK_BYTES": "4000", + "SAI_BUFFER_POOL_STAT_XOFF_ROOM_WATERMARK_BYTES": "863616" + }, + "COUNTERS:oid:0x1500000000034e":{ + "SAI_COUNTER_STAT_PACKETS": 100, + "SAI_COUNTER_STAT_BYTES": 2000 + }, + "COUNTERS:oid:0x1600000000034e":{ + "SAI_COUNTER_STAT_PACKETS": 100, + "SAI_COUNTER_STAT_BYTES": 2000 + }, + "COUNTERS:oid:0x1600000000034f":{ + "SAI_COUNTER_STAT_PACKETS": 1000, + "SAI_COUNTER_STAT_BYTES": 2000 + }, + "COUNTERS:oid:0x1600000000035e":{ + "SAI_COUNTER_STAT_PACKETS": 50, + "SAI_COUNTER_STAT_BYTES": 1000 + }, + "COUNTERS:oid:0x1600000000035f":{ + "SAI_COUNTER_STAT_PACKETS": 1000, + "SAI_COUNTER_STAT_BYTES": 25000 + } +} diff --git a/tests/wm_input/wm_test_vectors.py b/tests/wm_input/wm_test_vectors.py index 336afdc42af..93d9faa4cbb 100644 --- a/tests/wm_input/wm_test_vectors.py +++ b/tests/wm_input/wm_test_vectors.py @@ -61,6 +61,10 @@ Ethernet8 N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A """ +show_queue_wm_multicast_neg_output="""\ +Object map from the COUNTERS_DB is empty because the multicast queues are not configured in the CONFIG_DB! +""" + show_queue_wm_all_output="""\ Egress shared pool occupancy per all queues: Port ALL20 ALL21 ALL22 ALL23 ALL24 ALL25 ALL26 ALL27 ALL28 ALL29 @@ -140,6 +144,10 @@ 'rc_output': show_queue_wm_multicast_output } ], + 'show_q_wm_multicast_neg' : [ { 'cmd' : ['queue', 'watermark', 'multicast'], + 'rc_output': show_queue_wm_multicast_neg_output + } + ], 'show_q_pwm_multicast' : [ {'cmd' : ['queue', 'persistent-watermark', 'multicast'], 'rc_output': show_queue_wm_multicast_output } diff --git a/utilities_common/multi_asic.py b/utilities_common/multi_asic.py index 7e704befe7d..9e213f67f16 100644 --- a/utilities_common/multi_asic.py +++ b/utilities_common/multi_asic.py @@ -96,19 +96,21 @@ def multi_asic_display_default_option(): return constants.DISPLAY_EXTERNAL +_multi_asic_click_option_display = click.option('--display', + '-d', 'display', + default=multi_asic_display_default_option(), + show_default=True, + type=click.Choice(multi_asic_display_choices()), + help='Show internal interfaces') +_multi_asic_click_option_namespace = click.option('--namespace', + '-n', 'namespace', + default=None, + type=click.Choice(multi_asic_ns_choices()), + show_default=True, + help='Namespace name or all') _multi_asic_click_options = [ - click.option('--display', - '-d', 'display', - default=multi_asic_display_default_option(), - show_default=True, - type=click.Choice(multi_asic_display_choices()), - help='Show internal interfaces'), - click.option('--namespace', - '-n', 'namespace', - default=None, - type=click.Choice(multi_asic_ns_choices()), - show_default=True, - help='Namespace name or all'), + _multi_asic_click_option_display, + _multi_asic_click_option_namespace, ] def multi_asic_namespace_validation_callback(ctx, param, value): @@ -122,6 +124,9 @@ def multi_asic_click_options(func): func = option(func) return func +def multi_asic_click_option_namespace(func): + func = _multi_asic_click_option_namespace(func) + return func def run_on_multi_asic(func): '''