diff --git a/src/sonic_ax_impl/main.py b/src/sonic_ax_impl/main.py index 7aec24bcd1..0275900465 100644 --- a/src/sonic_ax_impl/main.py +++ b/src/sonic_ax_impl/main.py @@ -33,6 +33,9 @@ class SonicMIB( dell.force10.SSeriesMIB, cisco.mgmt.CiscoSystemExtMIB, cisco.bgp4.CiscoBgp4MIB, + cisco.ciscoPfcExtMIB.cpfcIfTable, + cisco.ciscoPfcExtMIB.cpfcIfPriorityTable, + cisco.ciscoSwitchQosMIB.csqIfQosGroupStatsTable, cisco.ciscoEntityFruControlMIB.cefcFruPowerStatusTable, ): """ diff --git a/src/sonic_ax_impl/mibs/__init__.py b/src/sonic_ax_impl/mibs/__init__.py index edac80c87f..38aa6f1037 100644 --- a/src/sonic_ax_impl/mibs/__init__.py +++ b/src/sonic_ax_impl/mibs/__init__.py @@ -7,6 +7,7 @@ from sonic_ax_impl import logger, _if_alias_map COUNTERS_PORT_NAME_MAP = b'COUNTERS_PORT_NAME_MAP' +COUNTERS_QUEUE_NAME_MAP = b'COUNTERS_QUEUE_NAME_MAP' LAG_TABLE = b'LAG_TABLE' LAG_MEMBER_TABLE = b'LAG_MEMBER_TABLE' APPL_DB = 'APPL_DB' @@ -22,6 +23,16 @@ def counter_table(sai_id): """ return b'COUNTERS:oid:0x' + sai_id +def queue_table(sai_id): + """ + :param sai_id: given sai_id to cast. + :return: COUNTERS table key. + """ + return b'COUNTERS:' + sai_id + +def queue_key(port_index, queue_index): + return str(port_index) + ':' + str(queue_index) + def lldp_entry_table(if_name): """ @@ -158,3 +169,58 @@ def member_name_str(val, lag_name): oid_lag_name_map[idx] = if_name return lag_name_if_name_map, if_name_lag_name_map, oid_lag_name_map + +def init_sync_d_queue_tables(db_conn): + """ + Initializes queue maps for SyncD-connected MIB(s). + :return: tuple(port_queues_map, queue_stat_map) + """ + + # Make sure we're connected to COUNTERS_DB + db_conn.connect(COUNTERS_DB) + + # { Port index : Queue index (SONiC) -> sai_id } + # ex: { "1:2" : "1000000000023" } + queue_name_map = db_conn.get_all(COUNTERS_DB, COUNTERS_QUEUE_NAME_MAP, blocking=True) + logger.debug("Queue name map:\n" + pprint.pformat(queue_name_map, indent=2)) + + # Parse the queue_name_map and create the following maps: + # port_queues_map -> {"if_index : queue_index" : sai_oid} + # queue_stat_map -> {queue stat table name : {counter name : value}} + # port_queue_list_map -> {if_index: [sorted queue list]} + port_queues_map = {} + queue_stat_map = {} + port_queue_list_map = {} + + for queue_name, sai_id in queue_name_map.items(): + port_name, queue_index = queue_name.decode().split(':') + queue_index = ''.join(i for i in queue_index if i.isdigit()) + port_index = get_index_from_str(port_name) + key = queue_key(port_index, queue_index) + port_queues_map[key] = sai_id + + queue_stat_name = queue_table(sai_id) + queue_stat = db_conn.get_all(COUNTERS_DB, queue_stat_name, blocking=False) + if queue_stat is not None: + queue_stat_map[queue_stat_name] = queue_stat + + if not port_queue_list_map.get(int(port_index)): + port_queue_list_map[int(port_index)] = [int(queue_index)] + else: + port_queue_list_map[int(port_index)].append(int(queue_index)) + + # SyncD consistency checks. + if not port_queues_map: + # In the event no queue exists that follows the SONiC pattern, no OIDs are able to be registered. + # A RuntimeError here will prevent the 'main' module from loading. (This is desirable.) + logger.error("No queues found in the Counter DB. SyncD database is incoherent.") + raise RuntimeError('The port_queues_map is not defined') + elif not queue_stat_map: + logger.error("No queue stat counters found in the Counter DB. SyncD database is incoherent.") + raise RuntimeError('The queue_stat_map is not defined') + + for queues in port_queue_list_map.values(): + queues.sort() + + return port_queues_map, queue_stat_map, port_queue_list_map + diff --git a/src/sonic_ax_impl/mibs/vendor/cisco/__init__.py b/src/sonic_ax_impl/mibs/vendor/cisco/__init__.py index 04a4015d5a..e295a873b0 100644 --- a/src/sonic_ax_impl/mibs/vendor/cisco/__init__.py +++ b/src/sonic_ax_impl/mibs/vendor/cisco/__init__.py @@ -1,2 +1,4 @@ from . import mgmt, bgp4 +from . import ciscoPfcExtMIB +from . import ciscoSwitchQosMIB from . import ciscoEntityFruControlMIB diff --git a/src/sonic_ax_impl/mibs/vendor/cisco/ciscoPfcExtMIB.py b/src/sonic_ax_impl/mibs/vendor/cisco/ciscoPfcExtMIB.py new file mode 100644 index 0000000000..7fa8d94f97 --- /dev/null +++ b/src/sonic_ax_impl/mibs/vendor/cisco/ciscoPfcExtMIB.py @@ -0,0 +1,275 @@ +from enum import unique, Enum +from bisect import bisect_right + +from sonic_ax_impl import mibs +from ax_interface import MIBMeta, ValueType, MIBUpdater, MIBEntry, SubtreeMIBEntry +from ax_interface.encodings import ObjectIdentifier + +class PfcUpdater(MIBUpdater): + """ + Class to update the info from Counter DB and to handle the SNMP request + """ + def __init__(self): + super().__init__() + self.db_conn = mibs.init_db() + + self.if_name_map = {} + self.if_alias_map = {} + self.if_id_map = {} + self.oid_sai_map = {} + self.oid_name_map = {} + + self.lag_name_if_name_map = {} + self.if_name_lag_name_map = {} + self.oid_lag_name_map = {} + + # cache of interface counters + self.if_counters = {} + self.if_range = [] + + def reinit_data(self): + """ + Subclass update interface information + """ + self.if_name_map, \ + self.if_alias_map, \ + self.if_id_map, \ + self.oid_sai_map, \ + self.oid_name_map = mibs.init_sync_d_interface_tables(self.db_conn) + + self.update_data() + + def update_data(self): + """ + Update redis (caches config) + Pulls the table references for each interface. + """ + self.if_counters = \ + {sai_id: self.db_conn.get_all(mibs.COUNTERS_DB, mibs.counter_table(sai_id), blocking=True) + for sai_id in self.if_id_map} + + self.lag_name_if_name_map, \ + self.if_name_lag_name_map, \ + self.oid_lag_name_map = mibs.init_sync_d_lag_tables(self.db_conn) + + self.if_range = sorted(list(self.oid_sai_map.keys()) + list(self.oid_lag_name_map.keys())) + self.if_range = [(i,) for i in self.if_range] + + def get_next(self, sub_id): + """ + :param sub_id: The 1-based sub-identifier query. + :return: the next sub id. + """ + try: + if not sub_id: + return self.if_range[0] + + right = bisect_right(self.if_range, sub_id) + if right >= len(self.if_range): + return None + return self.if_range[right] + except (IndexError, KeyError) as e: + mibs.logger.error("failed to get next oid with error = {}".format(str(e))) + + def get_oid(self, sub_id): + """ + :param sub_id: The 1-based sub-identifier query. + :return: the interface OID. + """ + if sub_id is None or sub_id not in self.if_range: + return None + + return sub_id[0] + + def _get_counter(self, oid, counter_name): + """ + :param sub_id: The interface OID. + :param counter_name: the redis table (either IntEnum or string literal) to query. + :return: the counter for the respective sub_id/table. + """ + sai_id = self.oid_sai_map[oid] + + # Enum.name or counter_name = 'name_of_the_table' + _counter_name = bytes(getattr(counter_name, 'name', counter_name), 'utf-8') + + try: + counter_value = self.if_counters[sai_id][_counter_name] + counter_value = int(counter_value) + # done! + return counter_value + except KeyError as e: + mibs.logger.warning("SyncD 'COUNTERS_DB' missing attribute '{}'.".format(e)) + return None + + def cpfc_if_requests(self, sub_id): + """ + :param sub_id: The 1-based sub-identifier query. + :return: the counter for the respective sub_id/table. + """ + oid = self.get_oid(sub_id) + if oid is None: + return None + + counter_name = 'SAI_PORT_STAT_PFC_3_RX_PKTS' + + if oid in self.oid_lag_name_map: + counter_value = 0 + for lag_member in self.lag_name_if_name_map[self.oid_lag_name_map[oid]]: + counter_value += self._get_counter(mibs.get_index(lag_member), counter_name) + + return counter_value + else: + return self._get_counter(oid, counter_name) + + + def cpfc_if_indications(self, sub_id): + """ + :param sub_id: The 1-based sub-identifier query. + :return: the counter for the respective sub_id/table. + """ + oid = self.get_oid(sub_id) + if oid is None: + return None + + counter_name = 'SAI_PORT_STAT_PFC_3_TX_PKTS' + + if oid in self.oid_lag_name_map: + counter_value = 0 + for lag_member in self.lag_name_if_name_map[self.oid_lag_name_map[oid]]: + counter_value += self._get_counter(mibs.get_index(lag_member), counter_name) + + return counter_value + else: + return self._get_counter(oid, counter_name) + + +class PfcPrioUpdater(PfcUpdater): + def __init__(self): + super().__init__() + self.min_prio = 1 + self.max_prio = 8 + + def queue_index(self, sub_id): + """ + :param sub_id: The 1-based sub-identifier query. + :return: the 0-based interface ID. + """ + if len(sub_id) >= 2: + return sub_id[1] - 1 + return None + + def get_next(self, sub_id): + """ + :param sub_id: The 1-based sub-identifier query. + :return: the next sub id. + """ + try: + if not sub_id: + return self.if_range[0][0], self.min_prio + + if len(sub_id) < 2: + return sub_id[0], self.min_prio + + if sub_id[1] >= self.max_prio: + idx = self.if_range.index((sub_id[0],)) + return self.if_range[idx + 1][0], self.min_prio + + right = sub_id[1] + 1 + + return sub_id[0], right + except IndexError: + # Reached the last element. Return None to notify caller + return None + except Exception as e: + mibs.logger.error("failed to get next oid with error = {}".format(str(e))) + return None + + def requests_per_priority(self, sub_id): + """ + :param sub_id: The 1-based sub-identifier query. + :return: the counter for the respective sub_id/table. + """ + port_oid = '' + queue_index = '' + try: + if not sub_id: + return None + + port_oid = self.get_oid((sub_id[0],)) + queue_index = self.queue_index(sub_id) + if port_oid is None or queue_index is None: + return None + except Exception as e: + mibs.logger.warning("requestsPerPriority: incorrect sub_id = {} error: {}".format(str(sub_id), e)) + return None + + counter_name = 'SAI_PORT_STAT_PFC_' + str(queue_index) + '_RX_PKTS' + + if port_oid in self.oid_lag_name_map: + counter_value = 0 + for lag_member in self.lag_name_if_name_map[self.oid_lag_name_map[port_oid]]: + counter_value += self._get_counter(mibs.get_index(lag_member), counter_name) + + return counter_value + else: + return self._get_counter(port_oid, counter_name) + + def indications_per_priority(self, sub_id): + """ + :param sub_id: The 1-based sub-identifier query. + :return: the counter for the respective sub_id/table. + """ + port_oid = '' + queue_index = '' + try: + if not sub_id: + return None + + port_oid = self.get_oid((sub_id[0],)) + queue_index = self.queue_index(sub_id) + if port_oid is None or queue_index is None: + return None + except IndexError: + mibs.logger.warning("indicationsPerPriority: incorrect sub_id = {}".format(str(sub_id))) + return None + + counter_name = 'SAI_PORT_STAT_PFC_' + str(queue_index) + '_TX_PKTS' + + if port_oid in self.oid_lag_name_map: + counter_value = 0 + for lag_member in self.lag_name_if_name_map[self.oid_lag_name_map[port_oid]]: + counter_value += self._get_counter(mibs.get_index(lag_member), counter_name) + + return counter_value + else: + return self._get_counter(port_oid, counter_name) + + +# cpfcIfTable = '1.1' +# cpfcIfEntry = '1.1.1.x' +class cpfcIfTable(metaclass=MIBMeta, prefix='.1.3.6.1.4.1.9.9.813.1.1'): + """ + 'ciscoPfcExtMIB' http://oidref.com/1.3.6.1.4.1.9.9.813.1.1 + """ + pfc_updater = PfcUpdater() + + ifRequests = \ + SubtreeMIBEntry('1.1', pfc_updater, ValueType.INTEGER, pfc_updater.cpfc_if_requests) + + ifIndications = \ + SubtreeMIBEntry('1.2', pfc_updater, ValueType.INTEGER, pfc_updater.cpfc_if_indications) + + +# cpfcIfPriorityTable = '1.2' +# cpfcIfPriorityEntry = '1.2.x' +class cpfcIfPriorityTable(metaclass=MIBMeta, prefix='.1.3.6.1.4.1.9.9.813.1.2'): + """ + 'ciscoPfcExtMIB' http://oidref.com/1.3.6.1.4.1.9.9.813 + """ + pfc_updater = PfcPrioUpdater() + + prioRequests = \ + SubtreeMIBEntry('1.2', pfc_updater, ValueType.INTEGER, pfc_updater.requests_per_priority) + + prioIndications = \ + SubtreeMIBEntry('1.3', pfc_updater, ValueType.INTEGER, pfc_updater.indications_per_priority) diff --git a/src/sonic_ax_impl/mibs/vendor/cisco/ciscoSwitchQosMIB.py b/src/sonic_ax_impl/mibs/vendor/cisco/ciscoSwitchQosMIB.py new file mode 100644 index 0000000000..bf1f13b015 --- /dev/null +++ b/src/sonic_ax_impl/mibs/vendor/cisco/ciscoSwitchQosMIB.py @@ -0,0 +1,213 @@ +from enum import unique, Enum +from bisect import bisect_right + +from sonic_ax_impl import mibs +from ax_interface import MIBMeta, ValueType, MIBUpdater, MIBEntry, SubtreeMIBEntry +from ax_interface.encodings import ObjectIdentifier + +# Maps SNMP queue stat counters to SAI counters and type +CounterMap = { + # Unicast send packets + (b'SAI_QUEUE_STAT_PACKETS', b'SAI_QUEUE_TYPE_UNICAST'): 1, + # Unicast send bytes + (b'SAI_QUEUE_STAT_BYTES', b'SAI_QUEUE_TYPE_UNICAST'): 2, + # Multicast send packets + (b'SAI_QUEUE_STAT_PACKETS',b'SAI_QUEUE_TYPE_MULTICAST'): 3, + # Multicast send bytes + (b'SAI_QUEUE_STAT_BYTES',b'SAI_QUEUE_TYPE_MULTICAST'): 4, + # Unicast dropped packets + (b'SAI_QUEUE_STAT_DROPPED_PACKETS',b'SAI_QUEUE_TYPE_UNICAST'): 5, + # Unicast dropped bytes + (b'SAI_QUEUE_STAT_DROPPED_BYTES',b'SAI_QUEUE_TYPE_UNICAST'): 6, + # Multicast dropped packets + (b'SAI_QUEUE_STAT_DROPPED_PACKETS',b'SAI_QUEUE_TYPE_MULTICAST'): 7, + # Multicast dropped bytes + (b'SAI_QUEUE_STAT_DROPPED_BYTES', b'SAI_QUEUE_TYPE_MULTICAST'): 8 +} + + +class DirectionTypes(int, Enum): + """ + Queue direction types + """ + INGRESS = 1 + EGRESS = 2 + + +class QueueStatUpdater(MIBUpdater): + """ + Class to update the info from Counter DB and to handle the SNMP request + """ + def __init__(self): + """ + init the updater + """ + super().__init__() + self.db_conn = mibs.init_db() + self.lag_name_if_name_map = {} + self.if_name_lag_name_map = {} + self.oid_lag_name_map = {} + self.queue_type_map = {} + + self.if_name_map = {} + self.if_alias_map = {} + self.if_id_map = {} + self.oid_sai_map = {} + self.oid_name_map = {} + + self.port_queues_map = {} + self.queue_stat_map = {} + self.port_queue_list_map = {} + + self.mib_oid_to_queue_map = {} + self.mib_oid_list = [] + + self.queue_type_map = {} + + def reinit_data(self): + """ + Subclass update interface information + """ + self.if_name_map, \ + self.if_alias_map, \ + self.if_id_map, \ + self.oid_sai_map, \ + self.oid_name_map = mibs.init_sync_d_interface_tables(self.db_conn) + + self.port_queues_map, self.queue_stat_map, self.port_queue_list_map = \ + mibs.init_sync_d_queue_tables(self.db_conn) + + self.queue_type_map = self.db_conn.get_all(mibs.COUNTERS_DB, "COUNTERS_QUEUE_TYPE_MAP", blocking=False) + + self.update_data() + + def update_data(self): + """ + Update redis (caches config) + Pulls the table references for each queue. + """ + for queue_key, sai_id in self.port_queues_map.items(): + queue_stat_name = mibs.queue_table(sai_id) + queue_stat = self.db_conn.get_all(mibs.COUNTERS_DB, queue_stat_name, blocking=False) + if queue_stat is not None: + self.queue_stat_map[queue_stat_name] = queue_stat + + self.lag_name_if_name_map, \ + self.if_name_lag_name_map, \ + self.oid_lag_name_map = mibs.init_sync_d_lag_tables(self.db_conn) + + self.update_stats() + + def update_stats(self): + """ + Update statistics. + 1. Get and sort port list to keep the order in MIB + 2. Prepare OID and get a statistic for each queue of each port + 3. Get and sort LAG ports list to keep the order in MIB + 4. Prepare OID for LAG and prepare a statistic for each queue of each LAG port + """ + # Clear previous data + self.mib_oid_to_queue_map = {} + self.mib_oid_list = [] + + # Sort the ports to keep the OID order in the MIB + if_range = sorted(list(self.oid_sai_map.keys())) + # Update queue counters for port + for if_index in if_range: + if if_index not in self.port_queue_list_map: + # Port does not has a queues, continue.. + continue + if_queues = self.port_queue_list_map[if_index] + + for queue in if_queues: + # Get queue type and statistics + queue_sai_oid = self.port_queues_map[mibs.queue_key(if_index, queue)] + queue_stat_table_name = mibs.queue_table(queue_sai_oid) + queue_type = self.queue_type_map.get(queue_sai_oid) + queue_stat = self.queue_stat_map.get(queue_stat_table_name, {}) + + # Add supported counters to MIBs list and store counters values + for (counter, counter_type), counter_mib_id in CounterMap.items(): + # Only egress queues are supported + mib_oid = (if_index, int(DirectionTypes.EGRESS), queue + 1, counter_mib_id) + + counter_value = 0 + if queue_type == counter_type: + counter_value = int(queue_stat.get(counter, 0)) + + self.mib_oid_list.append(mib_oid) + self.mib_oid_to_queue_map[mib_oid] = counter_value + + # Sort the LAG ports to keep the OID order in the MIB + lag_range = sorted(list(self.oid_lag_name_map.keys())) + # Update queue counters for LAG + for lag_index in lag_range: + lag_oid_list = [] + lag_oid_to_queue_map = {} + # Get counters for each LAG member + for lag_member in self.lag_name_if_name_map[self.oid_lag_name_map[lag_index]]: + lag_member_queues = [] + if mibs.get_index(lag_member) not in self.port_queue_list_map: + # LAG member does not has a queues, continue.. + continue + lag_member_queues = self.port_queue_list_map[mibs.get_index(lag_member)] + + for queue in lag_member_queues: + # Get queue type and statistics + queue_sai_oid = self.port_queues_map[mibs.queue_key(mibs.get_index(lag_member), queue)] + queue_stat_table_name = mibs.queue_table(queue_sai_oid) + queue_type = self.queue_type_map.get(queue_sai_oid) + queue_stat = self.queue_stat_map.get(queue_stat_table_name, {}) + + # Add supported counters to MIBs list and store counters values + for (counter, counter_type), counter_mib_id in CounterMap.items(): + # Only egress queues are supported + mib_oid = (lag_index, int(DirectionTypes.EGRESS), queue + 1, counter_mib_id) + + counter_value = 0 + if queue_type == counter_type: + counter_value = int(queue_stat.get(counter, 0)) + + if mib_oid not in lag_oid_list: + lag_oid_list.append(mib_oid) + lag_oid_to_queue_map[mib_oid] = counter_value + else: + lag_oid_to_queue_map[mib_oid] += counter_value + + # Append the LAG port counters to the MIB with keeping the OID order + self.mib_oid_list += lag_oid_list + self.mib_oid_to_queue_map.update(lag_oid_to_queue_map) + + def get_next(self, sub_id): + """ + :param sub_id: The 1-based sub-identifier query. + :return: the next sub id. + """ + + right = bisect_right(self.mib_oid_list, sub_id) + if right >= len(self.mib_oid_list): + return None + + return self.mib_oid_list[right] + + def handle_stat_request(self, sub_id): + """ + :param sub_id: The 1-based sub-identifier query. + :return: the counter for the respective sub_id/table. + """ + # if_index, if_direction, queue_index and counter id should be passed + + return self.mib_oid_to_queue_map.get(sub_id) + +class csqIfQosGroupStatsTable(metaclass=MIBMeta, prefix='.1.3.6.1.4.1.9.9.580.1.5.5'): + """ + 'csqIfQosGroupStatsTable' http://oidref.com/1.3.6.1.4.1.9.9.580.1.5.5 + """ + + queue_updater = QueueStatUpdater() + + # csqIfQosGroupStatsTable = '1.3.6.1.4.1.9.9.580.1.5.5' + # csqIfQosGroupStatsEntry = '1.3.6.1.4.1.9.9.580.1.5.5.1.4' + + queue_stat_request = \ + SubtreeMIBEntry('1.4', queue_updater, ValueType.INTEGER, queue_updater.handle_stat_request) diff --git a/tests/mock_tables/counters_db.json b/tests/mock_tables/counters_db.json index f9efd46107..936e24438d 100644 --- a/tests/mock_tables/counters_db.json +++ b/tests/mock_tables/counters_db.json @@ -81,7 +81,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x100000000000a": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -165,7 +183,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x1000000000020": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -249,7 +285,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x1000000000021": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -333,7 +387,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x1000000000022": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -417,7 +489,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x100000000000f": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -501,7 +591,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x1000000000010": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -585,7 +693,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x100000000001f": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -669,7 +795,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x1000000000006": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -753,7 +897,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x100000000001b": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -837,7 +999,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x1000000000018": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -921,7 +1101,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x100000000000b": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -1005,7 +1203,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x100000000000c": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -1089,7 +1305,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x100000000001c": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -1173,7 +1407,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x1000000000005": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -1257,7 +1509,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x100000000001e": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -1341,7 +1611,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x100000000001d": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -1425,7 +1713,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x100000000000d": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -1509,7 +1815,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x100000000000e": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -1593,7 +1917,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x1000000000019": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -1677,7 +2019,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x100000000001a": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -1761,7 +2121,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS_PORT_NAME_MAP": { "Ethernet8": "oid:0x1000000000017", @@ -1879,7 +2257,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x1000000000004": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -1963,7 +2359,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x1000000000008": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -2047,7 +2461,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x1000000000011": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -2131,7 +2563,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x1000000000003": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -2215,7 +2665,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x1000000000013": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -2299,7 +2767,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x1000000000012": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -2383,7 +2869,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x1000000000015": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -2467,7 +2971,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x1000000000014": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -2551,7 +3073,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x1000000000017": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -2635,7 +3175,25 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" }, "COUNTERS:oid:0x1000000000016": { "SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS": "0", @@ -2719,6 +3277,268 @@ "SAI_PORT_STAT_IP_IN_UCAST_PKTS": "0", "SAI_PORT_STAT_ETHER_STATS_MULTICAST_PKTS": "0", "SAI_PORT_STAT_ETHER_IN_PKTS_128_TO_255_OCTETS": "0", - "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0" + "SAI_PORT_STAT_IF_IN_MULTICAST_PKTS": "0", + "SAI_PORT_STAT_PAUSE_RX_PKTS": "0", + "SAI_PORT_STAT_PAUSE_TX_PKTS": "0", + "SAI_PORT_STAT_PFC_0_RX_PKTS": "1", + "SAI_PORT_STAT_PFC_0_TX_PKTS": "1", + "SAI_PORT_STAT_PFC_1_RX_PKTS": "2", + "SAI_PORT_STAT_PFC_1_TX_PKTS": "2", + "SAI_PORT_STAT_PFC_2_RX_PKTS": "3", + "SAI_PORT_STAT_PFC_2_TX_PKTS": "3", + "SAI_PORT_STAT_PFC_3_RX_PKTS": "4", + "SAI_PORT_STAT_PFC_3_TX_PKTS": "4", + "SAI_PORT_STAT_PFC_4_RX_PKTS": "5", + "SAI_PORT_STAT_PFC_4_TX_PKTS": "5", + "SAI_PORT_STAT_PFC_5_RX_PKTS": "6", + "SAI_PORT_STAT_PFC_5_TX_PKTS": "6", + "SAI_PORT_STAT_PFC_6_RX_PKTS": "7", + "SAI_PORT_STAT_PFC_6_TX_PKTS": "7", + "SAI_PORT_STAT_PFC_7_RX_PKTS": "8", + "SAI_PORT_STAT_PFC_7_TX_PKTS": "8" + }, + "COUNTERS_QUEUE_NAME_MAP": { + "Ethernet0:0": "oid:0x15000000000230", + "Ethernet0:1": "oid:0x15000000000231", + "Ethernet0:2": "oid:0x15000000000232", + "Ethernet0:3": "oid:0x15000000000233", + "Ethernet0:4": "oid:0x15000000000234", + "Ethernet0:5": "oid:0x15000000000235", + "Ethernet0:6": "oid:0x15000000000236", + "Ethernet0:7": "oid:0x15000000000237", + "Ethernet4:0": "oid:0x15000000000240", + "Ethernet4:1": "oid:0x15000000000241", + "Ethernet4:2": "oid:0x15000000000242", + "Ethernet4:3": "oid:0x15000000000243", + "Ethernet4:4": "oid:0x15000000000244", + "Ethernet4:5": "oid:0x15000000000245", + "Ethernet4:6": "oid:0x15000000000246", + "Ethernet4:7": "oid:0x15000000000247", + "Ethernet8:0": "oid:0x15000000000250", + "Ethernet8:1": "oid:0x15000000000251", + "Ethernet8:2": "oid:0x15000000000252", + "Ethernet8:3": "oid:0x15000000000253", + "Ethernet8:4": "oid:0x15000000000254", + "Ethernet8:5": "oid:0x15000000000255", + "Ethernet8:6": "oid:0x15000000000256", + "Ethernet8:7": "oid:0x15000000000257" + }, + "COUNTERS_QUEUE_TYPE_MAP": { + "oid:0x15000000000230": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000231": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000232": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000233": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000234": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000235": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000236": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000237": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000240": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000241": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000242": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000243": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000244": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000245": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000246": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000247": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000250": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000251": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000252": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000253": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000254": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000255": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000256": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000257": "SAI_QUEUE_TYPE_UNICAST" + }, + "COUNTERS:oid:0x15000000000230": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000231": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000232": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000233": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000234": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000235": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000236": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000237": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000240": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000241": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000242": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000243": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000244": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000245": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000246": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000247": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000250": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000251": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000252": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000253": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000254": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000255": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000256": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000257": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" } } diff --git a/tests/test_pfc.py b/tests/test_pfc.py new file mode 100644 index 0000000000..f3c4537b9b --- /dev/null +++ b/tests/test_pfc.py @@ -0,0 +1,205 @@ +import os +import sys + +# noinspection PyUnresolvedReferences +import tests.mock_tables.dbconnector + +modules_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +sys.path.insert(0, os.path.join(modules_path, 'src')) + +from unittest import TestCase + +from ax_interface import ValueType +from ax_interface.pdu_implementations import GetPDU, GetNextPDU +from ax_interface.encodings import ObjectIdentifier +from ax_interface.constants import PduTypes +from ax_interface.pdu import PDU, PDUHeader +from ax_interface.mib import MIBTable +from sonic_ax_impl.mibs.vendor.cisco import ciscoPfcExtMIB + +class TestPfcPortCounters(TestCase): + @classmethod + def setUpClass(cls): + cls.lut_port = MIBTable(ciscoPfcExtMIB.cpfcIfTable) + cls.lut_prio = MIBTable(ciscoPfcExtMIB.cpfcIfPriorityTable) + + # Update MIBs + for updater in cls.lut_port.updater_instances: + updater.reinit_data() + updater.update_data() + for updater in cls.lut_prio.updater_instances: + updater.reinit_data() + updater.update_data() + + def test_getPduRequestForPort(self): + oid = ObjectIdentifier(32, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 813, 1, 1, 1, 1, 1)) + get_pdu = GetPDU( + header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0), + oids=[oid] + ) + + encoded = get_pdu.encode() + response = get_pdu.make_response(self.lut_port) + print(response) + + value0 = response.values[0] + self.assertEqual(value0.type_, ValueType.INTEGER) + self.assertEqual(str(value0.name), str(oid)) + self.assertEqual(value0.data, 4) + + def test_getNextPduRequestForPort(self): + oid = ObjectIdentifier(32, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 813, 1, 1, 1, 1, 1)) + expected_oid = ObjectIdentifier(32, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 813, 1, 1, 1, 1, 5)) + get_pdu = GetNextPDU( + header=PDUHeader(1, PduTypes.GET_NEXT, 16, 0, 42, 0, 0, 0), + oids=[oid] + ) + + encoded = get_pdu.encode() + response = get_pdu.make_response(self.lut_port) + print(response) + + n = len(response.values) + print('values = ' + str(n)) + value0 = response.values[0] + self.assertEqual(value0.type_, ValueType.INTEGER) + self.assertEqual(str(value0.name), str(expected_oid)) + self.assertEqual(value0.data, 4) + + def test_getPduIndicationForPort(self): + oid = ObjectIdentifier(32, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 813, 1, 1, 1, 2, 1)) + get_pdu = GetPDU( + header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0), + oids=[oid] + ) + + encoded = get_pdu.encode() + response = get_pdu.make_response(self.lut_port) + print(response) + + value0 = response.values[0] + self.assertEqual(value0.type_, ValueType.INTEGER) + self.assertEqual(str(value0.name), str(oid)) + self.assertEqual(value0.data, 4) + + def test_getNextPduindicationForPort(self): + oid = ObjectIdentifier(32, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 813, 1, 1, 1, 2, 1)) + expected_oid = ObjectIdentifier(32, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 813, 1, 1, 1, 2, 5)) + get_pdu = GetNextPDU( + header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0), + oids=[oid] + ) + + encoded = get_pdu.encode() + response = get_pdu.make_response(self.lut_port) + print(response) + + n = len(response.values) + print('values = ' + str(n)) + value0 = response.values[0] + self.assertEqual(value0.type_, ValueType.INTEGER) + self.assertEqual(str(value0.name), str(expected_oid)) + self.assertEqual(value0.data, 4) + + def test_getPduRequestForPriority(self): + oid = ObjectIdentifier(8, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 813, 1, 2, 1, 2, 1, 1)) + get_pdu = GetPDU( + header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0), + oids=[oid] + ) + + encoded = get_pdu.encode() + response = get_pdu.make_response(self.lut_prio) + print(response) + + value0 = response.values[0] + self.assertEqual(value0.type_, ValueType.INTEGER) + self.assertEqual(str(value0.name), str(oid)) + self.assertEqual(value0.data, 1) + + def test_getNextPduRequestForPriority(self): + oid = ObjectIdentifier(8, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 813, 1, 2, 1, 2, 1, 2)) + expected_oid = ObjectIdentifier(8, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 813, 1, 2, 1, 2, 1, 3)) + get_pdu = GetNextPDU( + header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0), + oids=[oid] + ) + + encoded = get_pdu.encode() + response = get_pdu.make_response(self.lut_prio) + print(response) + + n = len(response.values) + print('values = ' + str(n)) + value0 = response.values[0] + self.assertEqual(value0.type_, ValueType.INTEGER) + self.assertEqual(str(value0.name), str(expected_oid)) + self.assertEqual(value0.data, 3) + + def test_getPduIndicationForPriority(self): + oid = ObjectIdentifier(8, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 813, 1, 2, 1, 3, 5, 1)) + get_pdu = GetPDU( + header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0), + oids=[oid] + ) + + encoded = get_pdu.encode() + response = get_pdu.make_response(self.lut_prio) + print(response) + + value0 = response.values[0] + self.assertEqual(value0.type_, ValueType.INTEGER) + self.assertEqual(str(value0.name), str(oid)) + self.assertEqual(value0.data, 1) + + def test_getNextPduindicationForPriority(self): + oid = ObjectIdentifier(8, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 813, 1, 2, 1, 3, 1, 1)) + expected_oid = ObjectIdentifier(8, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 813, 1, 2, 1, 3, 1, 2)) + get_pdu = GetNextPDU( + header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0), + oids=[oid] + ) + + encoded = get_pdu.encode() + response = get_pdu.make_response(self.lut_prio) + print(response) + + n = len(response.values) + print('values = ' + str(n)) + value0 = response.values[0] + self.assertEqual(value0.type_, ValueType.INTEGER) + self.assertEqual(str(value0.name), str(expected_oid)) + self.assertEqual(value0.data, 2) + + def test_getPfcSubtree(self): + # Subtree for port + oid = ObjectIdentifier(32, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 813, 1, 1)) + expected_oid = ObjectIdentifier(32, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 813, 1, 1, 1, 1, 1)) + get_pdu = GetNextPDU( + header=PDUHeader(1, PduTypes.GET_NEXT, 16, 0, 42, 0, 0, 0), + oids=[oid] + ) + + encoded = get_pdu.encode() + response = get_pdu.make_response(self.lut_port) + + value0 = response.values[0] + self.assertEqual(value0.type_, ValueType.INTEGER) + self.assertEqual(str(value0.name), str(expected_oid)) + self.assertEqual(value0.data, 4) + + # Subtree for Priority + oid = ObjectIdentifier(33, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 813, 1, 2)) + expected_oid = ObjectIdentifier(33, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 813, 1, 2, 1, 2, 1, 1)) + get_pdu = GetNextPDU( + header=PDUHeader(1, PduTypes.GET_NEXT, 16, 0, 42, 0, 0, 0), + oids=[oid] + ) + + encoded = get_pdu.encode() + response = get_pdu.make_response(self.lut_prio) + + value0 = response.values[0] + self.assertEqual(value0.type_, ValueType.INTEGER) + self.assertEqual(str(value0.name), str(expected_oid)) + self.assertEqual(value0.data, 1) diff --git a/tests/test_queues_stat.py b/tests/test_queues_stat.py new file mode 100644 index 0000000000..37c7fbb244 --- /dev/null +++ b/tests/test_queues_stat.py @@ -0,0 +1,110 @@ +import os +import sys + +# noinspection PyUnresolvedReferences +import tests.mock_tables.dbconnector + +modules_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +sys.path.insert(0, os.path.join(modules_path, 'src')) + +from unittest import TestCase + +from ax_interface import ValueType +from ax_interface.pdu_implementations import GetPDU, GetNextPDU +from ax_interface.encodings import ObjectIdentifier +from ax_interface.constants import PduTypes +from ax_interface.pdu import PDU, PDUHeader +from ax_interface.mib import MIBTable +from sonic_ax_impl.mibs.vendor.cisco import ciscoSwitchQosMIB + +class TestQueueCounters(TestCase): + @classmethod + def setUpClass(cls): + cls.lut = MIBTable(ciscoSwitchQosMIB.csqIfQosGroupStatsTable) + + # Update MIBs + for updater in cls.lut.updater_instances: + updater.reinit_data() + updater.update_data() + + def test_getQueueCounters(self): + for counter_id in range(1, 8): + oid = ObjectIdentifier(8, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 580, 1, 5, 5, 1, 4, 1, 2, 1, 1)) + get_pdu = GetPDU( + header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0), + oids=[oid] + ) + + encoded = get_pdu.encode() + response = get_pdu.make_response(self.lut) + print(response) + + value0 = response.values[0] + self.assertEqual(value0.type_, ValueType.INTEGER) + self.assertEqual(str(value0.name), str(oid)) + self.assertEqual(value0.data, 1) + + def test_getNextPduForQueueCounter(self): + oid = ObjectIdentifier(8, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 580, 1, 5, 5, 1, 4, 1, 2, 1, 1)) + expected_oid = ObjectIdentifier(8, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 580, 1, 5, 5, 1, 4, 1, 2, 1, 2)) + get_pdu = GetNextPDU( + header=PDUHeader(1, PduTypes.GET_NEXT, 16, 0, 42, 0, 0, 0), + oids=[oid] + ) + + encoded = get_pdu.encode() + response = get_pdu.make_response(self.lut) + print(response) + + value0 = response.values[0] + self.assertEqual(value0.type_, ValueType.INTEGER) + self.assertEqual(str(value0.name), str(expected_oid)) + self.assertEqual(value0.data, 2) + + def test_getIngressQueueCounters(self): + oid = ObjectIdentifier(8, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 580, 1, 5, 5, 1, 4, 1, 1, 1, 1)) + get_pdu = GetPDU( + header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0), + oids=[oid] + ) + + encoded = get_pdu.encode() + response = get_pdu.make_response(self.lut) + print(response) + + value0 = response.values[0] + self.assertEqual(value0.type_, ValueType.NO_SUCH_INSTANCE) + self.assertEqual(str(value0.name), str(oid)) + self.assertEqual(value0.data, None) + + def test_getMulticastQueueCounters(self): + oid = ObjectIdentifier(8, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 580, 1, 5, 5, 1, 4, 1, 2, 1, 3)) + get_pdu = GetPDU( + header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0), + oids=[oid] + ) + + encoded = get_pdu.encode() + response = get_pdu.make_response(self.lut) + print(response) + + value0 = response.values[0] + self.assertEqual(value0.type_, ValueType.NO_SUCH_INSTANCE) + self.assertEqual(str(value0.name), str(oid)) + self.assertEqual(value0.data, None) + + def test_getSubtreeForQueueCounters(self): + oid = ObjectIdentifier(8, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 580, 1, 5, 5)) + expected_oid = ObjectIdentifier(8, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 580, 1, 5, 5, 1, 4, 1, 2, 1, 1)) + get_pdu = GetNextPDU( + header=PDUHeader(1, PduTypes.GET_NEXT, 16, 0, 42, 0, 0, 0), + oids=[oid] + ) + + encoded = get_pdu.encode() + response = get_pdu.make_response(self.lut) + + value0 = response.values[0] + self.assertEqual(value0.type_, ValueType.INTEGER) + self.assertEqual(str(value0.name), str(expected_oid)) + self.assertEqual(value0.data, 1)