Skip to content

Commit 6f59d29

Browse files
Fix SNMP dropping some of the queue counter when create_only_config_db_buffers is set to true (#303) (#309)
This happened because the MIB assumed that half the queues configured are for mcast. When create_only_config_db_buffers is set to true this is not the case **- What I did** The ciscoSwitchQosMIB MIB assumed that all the counter are configured and that half of the configured queues are for mcast. This is no longer true, the feature "polling only configured ports buffer queue" make it possible for port to not have MC counters. This wrong assumption caused issue sonic-net/sonic-buildimage#17448 To fix this, I instead used the BUFFER_MAX_PARAM_TABLE to find the max possible queues **- How I did it** **- How to verify it** Inside the SNMP docker run snmp walk: $ snmpwalk -v2c -c msft 10.64.247.240 1.3.6.1.4.1.9.9.580.1.5.5.1.4.1 Check that the results is not missing counters from any queue Co-authored-by: DavidZagury <32644413+DavidZagury@users.noreply.github.com>
1 parent 2efaf2e commit 6f59d29

15 files changed

+632
-19
lines changed

src/sonic_ax_impl/mibs/__init__.py

+12-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313

1414
COUNTERS_PORT_NAME_MAP = 'COUNTERS_PORT_NAME_MAP'
1515
COUNTERS_QUEUE_NAME_MAP = 'COUNTERS_QUEUE_NAME_MAP'
16+
BUFFER_MAX_PARAM_TABLE = 'BUFFER_MAX_PARAM_TABLE'
17+
1618
LAG_TABLE = 'LAG_TABLE'
1719
LAG_MEMBER_TABLE = 'LAG_MEMBER_TABLE'
1820
LOC_CHASSIS_TABLE = 'LLDP_LOC_CHASSIS'
@@ -60,6 +62,16 @@ def chassis_info_table(chassis_name):
6062

6163
return "CHASSIS_INFO" + TABLE_NAME_SEPARATOR_VBAR + chassis_name
6264

65+
66+
def buffer_max_parm_table(port_name):
67+
"""
68+
:param: port_name: port name
69+
:return: max buffer parametes info for this port
70+
"""
71+
72+
return "BUFFER_MAX_PARAM_TABLE" + TABLE_NAME_SEPARATOR_VBAR + port_name
73+
74+
6375
def fan_info_table(fan_name):
6476
"""
6577
:param: fan_name: fan name
@@ -439,7 +451,6 @@ def init_sync_d_queue_tables(db_conn):
439451
port_index = get_index_from_str(port_name)
440452
key = queue_key(port_index, queue_index)
441453
port_queues_map[key] = sai_id
442-
443454
queue_stat_name = queue_table(sai_id)
444455
queue_stat = db_conn.get_all(COUNTERS_DB, queue_stat_name, blocking=False)
445456
if queue_stat is not None:

src/sonic_ax_impl/mibs/vendor/cisco/ciscoSwitchQosMIB.py

+7-2
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ def __init__(self):
4646
"""
4747
super().__init__()
4848
self.db_conn = Namespace.init_namespace_dbs()
49+
# establish connection to state database.
50+
Namespace.connect_all_dbs(self.db_conn, mibs.STATE_DB)
51+
4952
self.lag_name_if_name_map = {}
5053
self.if_name_lag_name_map = {}
5154
self.oid_lag_name_map = {}
@@ -129,8 +132,10 @@ def update_stats(self):
129132
namespace = self.port_index_namespace[if_index]
130133

131134
# The first half of queue id is for ucast, and second half is for mcast
132-
# To simulate vendor OID, we wrap queues by half distance
133-
pq_count = math.ceil((max(if_queues) + 1) / 2)
135+
# To simulate vendor OID, we wrap queues by max priority groups
136+
port_max_queues = Namespace.dbs_get_all(self.db_conn, mibs.STATE_DB,
137+
mibs.buffer_max_parm_table(self.oid_name_map[if_index]))['max_queues']
138+
pq_count = math.ceil(int(port_max_queues) / 2)
134139

135140
for queue in if_queues:
136141
# Get queue type and statistics

tests/mock_tables/asic0/appl_db.json

+4
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@
4646
"alias": "etp2",
4747
"speed": 100000
4848
},
49+
"PORT_TABLE:Ethernet24": {
50+
"alias": "etp17",
51+
"speed": 100000
52+
},
4953
"PORT_TABLE:Ethernet-BP0": {
5054
"description": "snowflake",
5155
"alias": "etp3",

tests/mock_tables/asic0/counters_db.json

+66-4
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,8 @@
311311
"Ethernet-BP0": "oid:0x1000000000005",
312312
"Ethernet-BP4": "oid:0x1000000000006",
313313
"Ethernet-IB0": "oid:0x1000000000080",
314-
"Ethernet-Rec0": "oid:0x1000000000081"
314+
"Ethernet-Rec0": "oid:0x1000000000081",
315+
"Ethernet24": "oid:0x1000000000014"
315316
},
316317
"COUNTERS_LAG_NAME_MAP": {
317318
"PortChannel01": "oid:0x1000000000007"
@@ -592,7 +593,13 @@
592593
"Ethernet4:12": "oid:0x15000000010244",
593594
"Ethernet4:13": "oid:0x15000000010245",
594595
"Ethernet4:14": "oid:0x15000000010246",
595-
"Ethernet4:15": "oid:0x15000000010247"
596+
"Ethernet4:15": "oid:0x15000000010247",
597+
"Ethernet24:0": "oid:0x15000000000260",
598+
"Ethernet24:1": "oid:0x15000000000261",
599+
"Ethernet24:2": "oid:0x15000000000262",
600+
"Ethernet24:3": "oid:0x15000000000263",
601+
"Ethernet24:4": "oid:0x15000000000264",
602+
"Ethernet24:6": "oid:0x15000000000266"
596603
},
597604
"COUNTERS_QUEUE_TYPE_MAP": {
598605
"oid:0x15000000000230": "SAI_QUEUE_TYPE_UNICAST",
@@ -626,7 +633,13 @@
626633
"oid:0x15000000010244": "SAI_QUEUE_TYPE_MULTICAST",
627634
"oid:0x15000000010245": "SAI_QUEUE_TYPE_MULTICAST",
628635
"oid:0x15000000010246": "SAI_QUEUE_TYPE_MULTICAST",
629-
"oid:0x15000000010247": "SAI_QUEUE_TYPE_MULTICAST"
636+
"oid:0x15000000010247": "SAI_QUEUE_TYPE_MULTICAST",
637+
"oid:0x15000000000260": "SAI_QUEUE_TYPE_UNICAST",
638+
"oid:0x15000000000261": "SAI_QUEUE_TYPE_UNICAST",
639+
"oid:0x15000000000262": "SAI_QUEUE_TYPE_UNICAST",
640+
"oid:0x15000000000263": "SAI_QUEUE_TYPE_UNICAST",
641+
"oid:0x15000000000264": "SAI_QUEUE_TYPE_UNICAST",
642+
"oid:0x15000000000266": "SAI_QUEUE_TYPE_UNICAST"
630643
},
631644
"COUNTERS:oid:0x15000000000230": {
632645
"SAI_QUEUE_STAT_PACKETS": "1",
@@ -883,4 +896,53 @@
883896
"SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4",
884897
"SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5",
885898
"SAI_QUEUE_STAT_WATERMARK_BYTES": "6"
886-
}}
899+
},
900+
"COUNTERS:oid:0x15000000000260": {
901+
"SAI_QUEUE_STAT_PACKETS": "1",
902+
"SAI_QUEUE_STAT_BYTES": "23492723984237432",
903+
"SAI_QUEUE_STAT_DROPPED_PACKETS": "3",
904+
"SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4",
905+
"SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5",
906+
"SAI_QUEUE_STAT_WATERMARK_BYTES": "6"
907+
},
908+
"COUNTERS:oid:0x15000000000261": {
909+
"SAI_QUEUE_STAT_PACKETS": "1",
910+
"SAI_QUEUE_STAT_BYTES": "2",
911+
"SAI_QUEUE_STAT_DROPPED_PACKETS": "3",
912+
"SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4",
913+
"SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5",
914+
"SAI_QUEUE_STAT_WATERMARK_BYTES": "6"
915+
},
916+
"COUNTERS:oid:0x15000000000262": {
917+
"SAI_QUEUE_STAT_PACKETS": "1",
918+
"SAI_QUEUE_STAT_BYTES": "2",
919+
"SAI_QUEUE_STAT_DROPPED_PACKETS": "3",
920+
"SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4",
921+
"SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5",
922+
"SAI_QUEUE_STAT_WATERMARK_BYTES": "6"
923+
},
924+
"COUNTERS:oid:0x15000000000263": {
925+
"SAI_QUEUE_STAT_PACKETS": "1",
926+
"SAI_QUEUE_STAT_BYTES": "2",
927+
"SAI_QUEUE_STAT_DROPPED_PACKETS": "3",
928+
"SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4",
929+
"SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5",
930+
"SAI_QUEUE_STAT_WATERMARK_BYTES": "6"
931+
},
932+
"COUNTERS:oid:0x15000000000264": {
933+
"SAI_QUEUE_STAT_PACKETS": "1",
934+
"SAI_QUEUE_STAT_BYTES": "2",
935+
"SAI_QUEUE_STAT_DROPPED_PACKETS": "3",
936+
"SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4",
937+
"SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5",
938+
"SAI_QUEUE_STAT_WATERMARK_BYTES": "6"
939+
},
940+
"COUNTERS:oid:0x15000000000266": {
941+
"SAI_QUEUE_STAT_PACKETS": "1",
942+
"SAI_QUEUE_STAT_BYTES": "2",
943+
"SAI_QUEUE_STAT_DROPPED_PACKETS": "3",
944+
"SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4",
945+
"SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5",
946+
"SAI_QUEUE_STAT_WATERMARK_BYTES": "6"
947+
}
948+
}

tests/mock_tables/asic0/state_db.json

+9
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,14 @@
3333
},
3434
"NEIGH_STATE_TABLE|fec0::ffff:afa:07": {
3535
"state": "Active"
36+
},
37+
"BUFFER_MAX_PARAM_TABLE|Ethernet0": {
38+
"max_queues": "16"
39+
},
40+
"BUFFER_MAX_PARAM_TABLE|Ethernet4": {
41+
"max_queues": "16"
42+
},
43+
"BUFFER_MAX_PARAM_TABLE|Ethernet24": {
44+
"max_queues": "16"
3645
}
3746
}

tests/mock_tables/asic1/appl_db.json

+4
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@
4949
"speed": 1000,
5050
"alias": "etp16"
5151
},
52+
"PORT_TABLE:Ethernet32": {
53+
"speed": 1000,
54+
"alias": "etp18"
55+
},
5256
"PORT_TABLE:Ethernet-BP8": {
5357
"alias": "etp7"
5458
},

tests/mock_tables/asic1/counters_db.json

+66-4
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,8 @@
310310
"Ethernet12": "oid:0x1000000000004",
311311
"Ethernet-BP8": "oid:0x1000000000005",
312312
"Ethernet-BP12": "oid:0x1000000000006",
313-
"Ethernet16": "oid:0x1000000000010"
313+
"Ethernet16": "oid:0x1000000000010",
314+
"Ethernet32": "oid:0x1000000000011"
314315
},
315316
"COUNTERS_LAG_NAME_MAP": {
316317
"PortChannel02": "oid:0x1000000000007"
@@ -697,7 +698,13 @@
697698
"Ethernet12:12": "oid:0x15000000010244",
698699
"Ethernet12:13": "oid:0x15000000010245",
699700
"Ethernet12:14": "oid:0x15000000010246",
700-
"Ethernet12:15": "oid:0x15000000010247"
701+
"Ethernet12:15": "oid:0x15000000010247",
702+
"Ethernet32:8": "oid:0x15000000010270",
703+
"Ethernet32:10": "oid:0x15000000010272",
704+
"Ethernet32:11": "oid:0x15000000010273",
705+
"Ethernet32:13": "oid:0x15000000010275",
706+
"Ethernet32:14": "oid:0x15000000010276",
707+
"Ethernet32:15": "oid:0x15000000010277"
701708
},
702709
"COUNTERS_QUEUE_TYPE_MAP": {
703710
"oid:0x15000000000230": "SAI_QUEUE_TYPE_UNICAST",
@@ -731,7 +738,13 @@
731738
"oid:0x15000000010244": "SAI_QUEUE_TYPE_MULTICAST",
732739
"oid:0x15000000010245": "SAI_QUEUE_TYPE_MULTICAST",
733740
"oid:0x15000000010246": "SAI_QUEUE_TYPE_MULTICAST",
734-
"oid:0x15000000010247": "SAI_QUEUE_TYPE_MULTICAST"
741+
"oid:0x15000000010247": "SAI_QUEUE_TYPE_MULTICAST",
742+
"oid:0x15000000010270": "SAI_QUEUE_TYPE_MULTICAST",
743+
"oid:0x15000000010272": "SAI_QUEUE_TYPE_MULTICAST",
744+
"oid:0x15000000010273": "SAI_QUEUE_TYPE_MULTICAST",
745+
"oid:0x15000000010275": "SAI_QUEUE_TYPE_MULTICAST",
746+
"oid:0x15000000010276": "SAI_QUEUE_TYPE_MULTICAST",
747+
"oid:0x15000000010277": "SAI_QUEUE_TYPE_MULTICAST"
735748
},
736749
"COUNTERS:oid:0x15000000000230": {
737750
"SAI_QUEUE_STAT_PACKETS": "1",
@@ -988,4 +1001,53 @@
9881001
"SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4",
9891002
"SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5",
9901003
"SAI_QUEUE_STAT_WATERMARK_BYTES": "6"
991-
}}
1004+
},
1005+
"COUNTERS:oid:0x15000000010270": {
1006+
"SAI_QUEUE_STAT_PACKETS": "1",
1007+
"SAI_QUEUE_STAT_BYTES": "2",
1008+
"SAI_QUEUE_STAT_DROPPED_PACKETS": "3",
1009+
"SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4",
1010+
"SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5",
1011+
"SAI_QUEUE_STAT_WATERMARK_BYTES": "6"
1012+
},
1013+
"COUNTERS:oid:0x15000000010272": {
1014+
"SAI_QUEUE_STAT_PACKETS": "1",
1015+
"SAI_QUEUE_STAT_BYTES": "2",
1016+
"SAI_QUEUE_STAT_DROPPED_PACKETS": "3",
1017+
"SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4",
1018+
"SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5",
1019+
"SAI_QUEUE_STAT_WATERMARK_BYTES": "6"
1020+
},
1021+
"COUNTERS:oid:0x15000000010273": {
1022+
"SAI_QUEUE_STAT_PACKETS": "1",
1023+
"SAI_QUEUE_STAT_BYTES": "2",
1024+
"SAI_QUEUE_STAT_DROPPED_PACKETS": "3",
1025+
"SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4",
1026+
"SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5",
1027+
"SAI_QUEUE_STAT_WATERMARK_BYTES": "6"
1028+
},
1029+
"COUNTERS:oid:0x15000000010275": {
1030+
"SAI_QUEUE_STAT_PACKETS": "1",
1031+
"SAI_QUEUE_STAT_BYTES": "2",
1032+
"SAI_QUEUE_STAT_DROPPED_PACKETS": "3",
1033+
"SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4",
1034+
"SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5",
1035+
"SAI_QUEUE_STAT_WATERMARK_BYTES": "6"
1036+
},
1037+
"COUNTERS:oid:0x15000000010276": {
1038+
"SAI_QUEUE_STAT_PACKETS": "1",
1039+
"SAI_QUEUE_STAT_BYTES": "2",
1040+
"SAI_QUEUE_STAT_DROPPED_PACKETS": "3",
1041+
"SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4",
1042+
"SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5",
1043+
"SAI_QUEUE_STAT_WATERMARK_BYTES": "6"
1044+
},
1045+
"COUNTERS:oid:0x15000000010277": {
1046+
"SAI_QUEUE_STAT_PACKETS": "1",
1047+
"SAI_QUEUE_STAT_BYTES": "2",
1048+
"SAI_QUEUE_STAT_DROPPED_PACKETS": "3",
1049+
"SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4",
1050+
"SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5",
1051+
"SAI_QUEUE_STAT_WATERMARK_BYTES": "6"
1052+
}
1053+
}

tests/mock_tables/asic1/state_db.json

+9
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,14 @@
3030
},
3131
"NEIGH_STATE_TABLE|10.10.0.4": {
3232
"state": "Established"
33+
},
34+
"BUFFER_MAX_PARAM_TABLE|Ethernet8": {
35+
"max_queues": "16"
36+
},
37+
"BUFFER_MAX_PARAM_TABLE|Ethernet12": {
38+
"max_queues": "16"
39+
},
40+
"BUFFER_MAX_PARAM_TABLE|Ethernet32": {
41+
"max_queues": "16"
3342
}
3443
}

tests/mock_tables/asic2/appl_db.json

+5
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@
4747
"alias": "etp12",
4848
"speed": 100000
4949
},
50+
"PORT_TABLE:Ethernet40": {
51+
"description": "snowflake",
52+
"alias": "etp19",
53+
"speed": 100000
54+
},
5055
"ROUTE_TABLE:10.1.0.32": {
5156
"nexthop": "",
5257
"ifname": "lo"

0 commit comments

Comments
 (0)