From b37ee34b8c7885520a2dc212de22642fc78c6c58 Mon Sep 17 00:00:00 2001 From: Mahdi Ramezani Date: Thu, 5 Mar 2026 22:01:18 +0000 Subject: [PATCH 1/2] Added support for queue and PG watermarks. Signed-off-by: Mahdi Ramezani --- doc/grpc_telemetry.md | 141 +++++- gnmi_server/server_test.go | 357 ++++++++++++-- sonic_data_client/db_client.go | 7 +- sonic_data_client/virtual_db.go | 155 ++++++- testdata/COUNTERS:Ethernet68:Queues.txt | 8 +- testdata/COUNTERS:Ethernet68:Queues_alias.txt | 8 +- testdata/COUNTERS:Ethernet7:Queues.txt | 28 ++ testdata/COUNTERS:Ethernet7:Queues_alias.txt | 28 ++ .../COUNTERS:Ethernet_wildcard_Queues.txt | 16 +- ...OUNTERS:Ethernet_wildcard_Queues_alias.txt | 16 +- testdata/COUNTERS:oid:0x150000000001d0.txt | 7 + testdata/COUNTERS:oid:0x1500000000091c.txt | 3 +- testdata/COUNTERS_PG_NAME_MAP.txt | 434 +++++++++++++++++ ...C_WATERMARKS:Ethernet16:PriorityGroups.txt | 13 + ...RMARKS:Ethernet16:PriorityGroups_alias.txt | 13 + ...Ethernet_wildcard:PriorityGroups_alias.txt | 437 ++++++++++++++++++ ...RIODIC_WATERMARKS:oid:0x1500000000091c.txt | 3 + ...RIODIC_WATERMARKS:oid:0x1a0000000002d2.txt | 4 + 18 files changed, 1606 insertions(+), 72 deletions(-) create mode 100644 testdata/COUNTERS:Ethernet7:Queues.txt create mode 100644 testdata/COUNTERS:Ethernet7:Queues_alias.txt create mode 100644 testdata/COUNTERS:oid:0x150000000001d0.txt create mode 100644 testdata/COUNTERS_PG_NAME_MAP.txt create mode 100644 testdata/PERIODIC_WATERMARKS:Ethernet16:PriorityGroups.txt create mode 100644 testdata/PERIODIC_WATERMARKS:Ethernet16:PriorityGroups_alias.txt create mode 100644 testdata/PERIODIC_WATERMARKS:Ethernet_wildcard:PriorityGroups_alias.txt create mode 100644 testdata/PERIODIC_WATERMARKS:oid:0x1500000000091c.txt create mode 100644 testdata/PERIODIC_WATERMARKS:oid:0x1a0000000002d2.txt diff --git a/doc/grpc_telemetry.md b/doc/grpc_telemetry.md index 718b94f84..e2cd16e89 100644 --- a/doc/grpc_telemetry.md +++ b/doc/grpc_telemetry.md @@ -386,6 +386,8 @@ Some of the SONiC database tables contain aggregated data. Ex. COUNTERS in COUNT |COUNTERS_DB | "COUNTERS/Ethernet``/``"| One counter on one Ethernet port |COUNTERS_DB | "COUNTERS/Ethernet*/Queues"| Queues stats on all Ethernet ports |COUNTERS_DB | "COUNTERS/Ethernet``/Queues"| Queue stats on one Ethernet ports +|COUNTERS_DB | "PERIODIC_WATERMARKS/Ethernet*/PriorityGroups"| Periodic watermarks for priority groups on all Ethernet ports +|COUNTERS_DB | "PERIODIC_WATERMARKS/Ethernet<``port number``>/PriorityGroups"| Periodic watermarks for priority groups on one Ethernet port Virtual path supports Get, Subscribe Poll and stream operations. @@ -473,7 +475,7 @@ notification: < ``` ``` -jipan@sonicvm1:~/work/go/src/github.com/jipanyang/gnxi/gnmi_get$ go run gnmi_get.go -xpath_target COUNTERS_DB -xpath COUNTERS/Ethernet68/Queues -target_addr 30.57.185.38:8080 -alsologtostderr -insecure true +gnmi_get -target_addr localhost:50051 -xpath "COUNTERS/Ethernet68/Queues" -xpath_target COUNTERS_DB -insecure == getRequest: prefix: < target: "COUNTERS_DB" @@ -493,7 +495,7 @@ encoding: JSON_IETF == getResponse: notification: < - timestamp: 1520493393388263053 + timestamp: 1748556404127308274 prefix: < target: "COUNTERS_DB" > @@ -510,12 +512,145 @@ notification: < > > val: < - json_ietf_val: "{\"Ethernet68:0\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\"},\"Ethernet68:1\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\"},\"Ethernet68:10\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\"},\"Ethernet68:11\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\"},\"Ethernet68:12\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\"},\"Ethernet68:13\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\"},\"Ethernet68:14\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\"},\"Ethernet68:15\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\"},\"Ethernet68:16\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\"},\"Ethernet68:17\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\"},\"Ethernet68:18\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\"},\"Ethernet68:19\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\"},\"Ethernet68:2\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\"},\"Ethernet68:3\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\"},\"Ethernet68:4\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\"},\"Ethernet68:5\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\"},\"Ethernet68:6\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\"},\"Ethernet68:7\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\"},\"Ethernet68:8\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\"},\"Ethernet68:9\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\"}}" + json_ietf_val: "{\"Ethernet68:0\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"Ethernet68:0:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"Ethernet68:1\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"Ethernet68:10\":{},\"Ethernet68:10:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"Ethernet68:11\":{},\"Ethernet68:11:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"Ethernet68:12\":{},\"Ethernet68:12:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"Ethernet68:13\":{},\"Ethernet68:13:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"Ethernet68:14\":{},\"Ethernet68:14:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"Ethernet68:15\":{},\"Ethernet68:15:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"Ethernet68:1:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"Ethernet68:2\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"Ethernet68:2:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"Ethernet68:3\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"Ethernet68:3:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"Ethernet68:4\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"Ethernet68:4:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"Ethernet68:5\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"Ethernet68:5:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"Ethernet68:6\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"Ethernet68:6:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"Ethernet68:7\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"Ethernet68:7:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"Ethernet68:8\":{},\"Ethernet68:8:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"Ethernet68:9\":{},\"Ethernet68:9:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"}}" > > > ``` +``` +gnmi_get -target_addr localhost:50051 -xpath "COUNTERS/Ethernet*/Queues" -xpath_target COUNTERS_DB -insecure +== getRequest: +prefix: < + target: "COUNTERS_DB" +> +path: < + elem: < + name: "COUNTERS" + > + elem: < + name: "Ethernet*" + > + elem: < + name: "Queues" + > +> +encoding: JSON_IETF + +== getResponse: +notification: < + timestamp: 1748556657384573964 + prefix: < + target: "COUNTERS_DB" + > + update: < + path: < + elem: < + name: "COUNTERS" + > + elem: < + name: "Ethernet*" + > + elem: < + name: "Queues" + > + > + val: < + json_ietf_val: "{\"etp10:0\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp10:0:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp10:1\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp10:10\":{},\"etp10:10:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp10:11\":{},\"etp10:11:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp10:12\":{},\"etp10:12:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp10:13\":{},\"etp10:13:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp10:14\":{},\"etp10:14:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp10:15\":{},\"etp10:15:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp10:1:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp10:2\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp10:2:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp10:3\":{\"PFC_WD_ACTION\":\"drop\",\"PFC_WD_DETECTION_TIME\":\"400000\",\"PFC_WD_DETECTION_TIME_LEFT\":\"400000\",\"PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED\":\"0\",\"PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED\":\"0\",\"PFC_WD_RESTORATION_TIME\":\"400000\",\"PFC_WD_STATUS\":\"operational\",\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS_last\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp10:3:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp10:4\":{\"PFC_WD_ACTION\":\"drop\",\"PFC_WD_DETECTION_TIME\":\"400000\",\"PFC_WD_DETECTION_TIME_LEFT\":\"400000\",\"PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED\":\"0\",\"PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED\":\"0\",\"PFC_WD_RESTORATION_TIME\":\"400000\",\"PFC_WD_STATUS\":\"operational\",\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS_last\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp10:4:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp10:5\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp10:5:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp10:6\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp10:6:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp10:7\":{\"SAI_QUEUE_STAT_BYTES\":\"656106\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"527\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp10:7:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp10:8\":{},\"etp10:8:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp10:9\":{},\"etp10:9:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp11a:0\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp11a:0:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp11a:1\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp11a:10\":{},\"etp11a:10:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp11a:11\":{},\"etp11a:11:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp11a:12\":{},\"etp11a:12:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp11a:13\":{},\"etp11a:13:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp11a:14\":{},\"etp11a:14:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp11a:15\":{},\"etp11a:15:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp11a:1:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp11a:2\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp11a:2:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp11a:3\":{\"PFC_WD_ACTION\":\"drop\",\"PFC_WD_DETECTION_TIME\":\"400000\",\"PFC_WD_DETECTION_TIME_LEFT\":\"400000\",\"PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED\":\"0\",\"PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED\":\"0\",\"PFC_WD_RESTORATION_TIME\":\"400000\",\"PFC_WD_STATUS\":\"operational\",\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS_last\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp11a:3:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp11a:4\":{\"PFC_WD_ACTION\":\"drop\",\"PFC_WD_DETECTION_TIME\":\"400000\",\"PFC_WD_DETECTION_TIME_LEFT\":\"400000\",\"PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED\":\"0\",\"PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED\":\"0\",\"PFC_WD_RESTORATION_TIME\":\"400000\",\"PFC_WD_STATUS\":\"operational\",\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS_last\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp11a:4:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp11a:5\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp11a:5:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp11a:6\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp11a:6:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp11a:7\":{\"SAI_QUEUE_STAT_BYTES\":\"50750\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"190\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp11a:7:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp11a:8\":{},\"etp11a:8:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp11a:9\":{},\"etp11a:9:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"}, + ..., + \"etp9:0\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp9:0:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp9:1\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp9:10\":{},\"etp9:10:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp9:11\":{},\"etp9:11:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp9:12\":{},\"etp9:12:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp9:13\":{},\"etp9:13:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp9:14\":{},\"etp9:14:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp9:15\":{},\"etp9:15:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp9:1:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp9:2\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp9:2:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp9:3\":{\"PFC_WD_ACTION\":\"drop\",\"PFC_WD_DETECTION_TIME\":\"400000\",\"PFC_WD_DETECTION_TIME_LEFT\":\"400000\",\"PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED\":\"0\",\"PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED\":\"0\",\"PFC_WD_RESTORATION_TIME\":\"400000\",\"PFC_WD_STATUS\":\"operational\",\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS_last\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp9:3:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp9:4\":{\"PFC_WD_ACTION\":\"drop\",\"PFC_WD_DETECTION_TIME\":\"400000\",\"PFC_WD_DETECTION_TIME_LEFT\":\"400000\",\"PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED\":\"0\",\"PFC_WD_QUEUE_STATS_DEADLOCK_RESTORED\":\"0\",\"PFC_WD_RESTORATION_TIME\":\"400000\",\"PFC_WD_STATUS\":\"operational\",\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS_last\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp9:4:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp9:5\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp9:5:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp9:6\":{\"SAI_QUEUE_STAT_BYTES\":\"0\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"0\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp9:6:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp9:7\":{\"SAI_QUEUE_STAT_BYTES\":\"652260\",\"SAI_QUEUE_STAT_DROPPED_PACKETS\":\"0\",\"SAI_QUEUE_STAT_PACKETS\":\"535\",\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp9:7:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp9:8\":{},\"etp9:8:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"},\"etp9:9\":{},\"etp9:9:periodic\":{\"SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES\":\"0\"}}" + > + > +> +``` + +``` +gnmi_get -target_addr 127.0.0.1:50051 -xpath "PERIODIC_WATERMARKS/Ethernet16/PriorityGroups" -xpath_target COUNTERS_DB -insecure +== getRequest: +prefix: < + target: "COUNTERS_DB" +> +path: < + elem: < + name: "PERIODIC_WATERMARKS" + > + elem: < + name: "Ethernet16" + > + elem: < + name: "PriorityGroups" + > +> +encoding: JSON_IETF + +== getResponse: +notification: < + timestamp: 1749598624296471376 + prefix: < + target: "COUNTERS_DB" + > + update: < + path: < + elem: < + name: "PERIODIC_WATERMARKS" + > + elem: < + name: "Ethernet16" + > + elem: < + name: "PriorityGroups" + > + > + val: < + json_ietf_val: "{\"Ethernet16:0\":{\"SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES\":\"192\",\"SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES\":\"0\"}}" + > + > +> +``` + +``` +gnmi_get -target_addr 127.0.0.1:50051 -xpath "PERIODIC_WATERMARKS/Ethernet*/PriorityGroups" -xpath_target COUNTERS_DB -insecure +== getRequest: +prefix: < + target: "COUNTERS_DB" +> +path: < + elem: < + name: "PERIODIC_WATERMARKS" + > + elem: < + name: "Ethernet*" + > + elem: < + name: "PriorityGroups" + > +> +encoding: JSON_IETF + +== getResponse: +notification: < + timestamp: 1749598585172470836 + prefix: < + target: "COUNTERS_DB" + > + update: < + path: < + elem: < + name: "PERIODIC_WATERMARKS" + > + elem: < + name: "Ethernet*" + > + elem: < + name: "PriorityGroups" + > + > + val: < + json_ietf_val: "{\"etp10a:0\":{\"SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES\":\"192\",\"SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES\":\"0\"},\"etp11a:0\":{\"SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES\":\"192\",\"SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES\":\"0\"},\"etp12a:0\":{\"SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES\":\"192\",\"SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES\":\"0\"},\"etp13a:0\":{\"SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES\":\"192\",\"SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES\":\"0\"},\"etp13b:0\":{\"SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES\":\"0\",\"SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES\":\"0\"},\"etp15a:0\":{\"SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES\":\"192\",\"SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES\":\"0\"},\"etp16a:0\":{\"SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES\":\"192\",\"SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES\":\"0\"},\"etp19a:0\":{\"SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES\":\"192\",\"SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES\":\"0\"},\"etp1a:0\":{\"SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES\":\"192\",\"SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES\":\"0\"},...,\"etp61a:0\":{\"SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES\":\"192\",\"SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES\":\"0\"},\"etp62a:0\":{\"SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES\":\"192\",\"SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES\":\"0\"},\"etp63a:0\":{\"SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES\":\"192\",\"SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES\":\"0\"},\"etp64a:0\":{\"SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES\":\"192\",\"SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES\":\"0\"},\"etp6a:0\":{\"SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES\":\"192\",\"SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES\":\"0\"},\"etp7a:0\":{\"SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES\":\"192\",\"SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES\":\"0\"},\"etp8a:0\":{\"SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES\":\"192\",\"SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES\":\"0\"},\"etp9a:0\":{\"SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES\":\"192\",\"SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES\":\"0\"}}" + > + > +> +``` # Authentication To be implemented, may support integration with SONiC TACACS. User will be authenticated on per RPC basis. diff --git a/gnmi_server/server_test.go b/gnmi_server/server_test.go index b3f432baf..c5d8b6288 100644 --- a/gnmi_server/server_test.go +++ b/gnmi_server/server_test.go @@ -621,6 +621,14 @@ func initFullCountersDb(t *testing.T, namespace string) { mpi_qname_map := loadConfig(t, "COUNTERS_QUEUE_NAME_MAP", countersQueueNameMapByte) loadDB(t, rclient, mpi_qname_map) + fileName = "../testdata/COUNTERS_PG_NAME_MAP.txt" + countersPGNameMapByte, err := ioutil.ReadFile(fileName) + if err != nil { + t.Fatalf("read file %v err: %v", fileName, err) + } + mpi_pgname_map := loadConfig(t, "COUNTERS_PG_NAME_MAP", countersPGNameMapByte) + loadDB(t, rclient, mpi_pgname_map) + fileName = "../testdata/COUNTERS:Ethernet68.txt" countersEthernet68Byte, err := ioutil.ReadFile(fileName) if err != nil { @@ -657,6 +665,34 @@ func initFullCountersDb(t *testing.T, namespace string) { mpi_counter = loadConfig(t, "COUNTERS:oid:0x1500000000091c", countersEeth68_1Byte) loadDB(t, rclient, mpi_counter) + // "Ethernet68:1": "oid:0x1500000000091c" : periodic queue watermark, for COUNTERS/Ethernet68/Queue vpath test + fileName = "../testdata/PERIODIC_WATERMARKS:oid:0x1500000000091c.txt" + periodicWMEth68_1Byte, err := ioutil.ReadFile(fileName) + if err != nil { + t.Fatalf("read file %v err: %v", fileName, err) + } + mpi_counter = loadConfig(t, "PERIODIC_WATERMARKS:oid:0x1500000000091c", periodicWMEth68_1Byte) + loadDB(t, rclient, mpi_counter) + + // "Ethernet7:5": "oid:0x150000000001d0" : queue counter, for COUNTERS/Ethernet7/Queues vpath test + fileName = "../testdata/COUNTERS:oid:0x150000000001d0.txt" + countersEth7_5Byte, err := ioutil.ReadFile(fileName) + if err != nil { + t.Fatalf("read file %v err: %v", fileName, err) + } + mpi_counter = loadConfig(t, "COUNTERS:oid:0x150000000001d0", countersEth7_5Byte) + loadDB(t, rclient, mpi_counter) + + // "Ethernet16:5": "oid:0x1a0000000002d2" + // PG periodic watermark, for PERIODIC_WATERMARKS/Ethernet16/PriorityGroups vpath test + fileName = "../testdata/PERIODIC_WATERMARKS:oid:0x1a0000000002d2.txt" + pgWatermarksEth16_5Byte, err := ioutil.ReadFile(fileName) + if err != nil { + t.Fatalf("read file %v err: %v", fileName, err) + } + mpi_counter = loadConfig(t, "PERIODIC_WATERMARKS:oid:0x1a0000000002d2", pgWatermarksEth16_5Byte) + loadDB(t, rclient, mpi_counter) + // "Ethernet68:3": "oid:0x1500000000091e" : lossless queue counter, for COUNTERS/Ethernet68/Pfcwd vpath test fileName = "../testdata/COUNTERS:oid:0x1500000000091e.txt" countersEeth68_3Byte, err := ioutil.ReadFile(fileName) @@ -776,6 +812,14 @@ func prepareDb(t *testing.T, namespace string) { mpi_qname_map := loadConfig(t, "COUNTERS_QUEUE_NAME_MAP", countersQueueNameMapByte) loadDB(t, rclient, mpi_qname_map) + fileName = "../testdata/COUNTERS_PG_NAME_MAP.txt" + countersPGNameMapByte, err := ioutil.ReadFile(fileName) + if err != nil { + t.Fatalf("read file %v err: %v", fileName, err) + } + mpi_pgname_map := loadConfig(t, "COUNTERS_PG_NAME_MAP", countersPGNameMapByte) + loadDB(t, rclient, mpi_pgname_map) + fileName = "../testdata/COUNTERS_FABRIC_PORT_NAME_MAP.txt" countersFabricPortNameMapByte, err := ioutil.ReadFile(fileName) if err != nil { @@ -811,7 +855,7 @@ func prepareDb(t *testing.T, namespace string) { mpi_counter = loadConfig(t, "COUNTERS:oid:0x1500000000092a", counters92aByte) loadDB(t, rclient, mpi_counter) - // "Ethernet68:1": "oid:0x1500000000091c" : queue counter, for COUNTERS/Ethernet68/Queue vpath test + // "Ethernet68:1": "oid:0x1500000000091c" : queue counter, for COUNTERS/Ethernet68/Queues vpath test fileName = "../testdata/COUNTERS:oid:0x1500000000091c.txt" countersEeth68_1Byte, err := ioutil.ReadFile(fileName) if err != nil { @@ -820,6 +864,34 @@ func prepareDb(t *testing.T, namespace string) { mpi_counter = loadConfig(t, "COUNTERS:oid:0x1500000000091c", countersEeth68_1Byte) loadDB(t, rclient, mpi_counter) + // "Ethernet68:1": "oid:0x1500000000091c" : periodic queue watermark, for COUNTERS/Ethernet68/Queues vpath test + fileName = "../testdata/PERIODIC_WATERMARKS:oid:0x1500000000091c.txt" + periodicWMEth68_1Byte, err := ioutil.ReadFile(fileName) + if err != nil { + t.Fatalf("read file %v err: %v", fileName, err) + } + mpi_counter = loadConfig(t, "PERIODIC_WATERMARKS:oid:0x1500000000091c", periodicWMEth68_1Byte) + loadDB(t, rclient, mpi_counter) + + // "Ethernet7:5": "oid:0x150000000001d0" : queue counter, for COUNTERS/Ethernet7/Queues vpath test + fileName = "../testdata/COUNTERS:oid:0x150000000001d0.txt" + countersEth7_5Byte, err := ioutil.ReadFile(fileName) + if err != nil { + t.Fatalf("read file %v err: %v", fileName, err) + } + mpi_counter = loadConfig(t, "COUNTERS:oid:0x150000000001d0", countersEth7_5Byte) + loadDB(t, rclient, mpi_counter) + + // "Ethernet16:5": "oid:0x1a0000000002d2" + // PG periodic watermark, for PERIODIC_WATERMARKS/Ethernet16/PriorityGroups vpath test + fileName = "../testdata/PERIODIC_WATERMARKS:oid:0x1a0000000002d2.txt" + pgWatermarksEth16_5Byte, err := ioutil.ReadFile(fileName) + if err != nil { + t.Fatalf("read file %v err: %v", fileName, err) + } + mpi_counter = loadConfig(t, "PERIODIC_WATERMARKS:oid:0x1a0000000002d2", pgWatermarksEth16_5Byte) + loadDB(t, rclient, mpi_counter) + // "Ethernet68:3": "oid:0x1500000000091e" : lossless queue counter, for COUNTERS/Ethernet68/Pfcwd vpath test fileName = "../testdata/COUNTERS:oid:0x1500000000091e.txt" countersEeth68_3Byte, err := ioutil.ReadFile(fileName) @@ -1054,6 +1126,18 @@ func createCountersTableDeleteUpdate(tableKey string, fieldName string) tablePat } } +// createPeriodicWatermarksTableSetUpdate creates a HSET request on the PERIODIC_WATERMARKS table. +func createPeriodicWatermarksTableSetUpdate(tableKey string, fieldName string, fieldValue string) tablePathValue { + return tablePathValue{ + dbName: "COUNTERS_DB", + tableName: "PERIODIC_WATERMARKS", + tableKey: tableKey, + delimitor: ":", + field: fieldName, + value: fieldValue, + } +} + // createIntervalTickerUpdate creates a request for triggering the interval clock. func createIntervalTickerUpdate() tablePathValue { return tablePathValue{ @@ -1890,6 +1974,64 @@ type tablePathValue struct { op string } +func createQueueCountersJsonObjects(ethNum int, queueNum int, updatedCounters map[string]interface{}) ( + queueCountersJson interface{}, + queueCountersJsonAfterUpdate map[string]interface{}, + queueAliasCountersJson interface{}, + queueAliasCountersJsonAfterUpdate map[string]interface{}, + err error) { + + ethName := fmt.Sprintf("Ethernet%d", ethNum) + queueName := fmt.Sprintf("%s:%d", ethName, queueNum) + queueFile := fmt.Sprintf("../testdata/COUNTERS:%s:Queues.txt", ethName) + queueCountersByte, err := ioutil.ReadFile(queueFile) + if err != nil { + err = fmt.Errorf("read file %v err: %v", queueFile, err) + return + } + json.Unmarshal(queueCountersByte, &queueCountersJson) + + queueCountersJsonAfterUpdate = make(map[string]interface{}) + json.Unmarshal(queueCountersByte, &queueCountersJsonAfterUpdate) + queueCountersJsonAfterUpdate[queueName] = updatedCounters + + // Alias translation + queueAliasName := fmt.Sprintf("%s/1:%d", ethName, queueNum) + queueAliasFile := fmt.Sprintf("../testdata/COUNTERS:%s:Queues_alias.txt", ethName) + queueAliasCountersByte, err := ioutil.ReadFile(queueAliasFile) + if err != nil { + err = fmt.Errorf("read file %v err: %v", queueAliasFile, err) + return + } + json.Unmarshal(queueAliasCountersByte, &queueAliasCountersJson) + + queueAliasCountersJsonAfterUpdate = make(map[string]interface{}) + json.Unmarshal(queueAliasCountersByte, &queueAliasCountersJsonAfterUpdate) + queueAliasCountersJsonAfterUpdate[queueAliasName] = updatedCounters + return +} + +func createQueueCountersJsonObjectsWithPeriodicWatermark( + ethNum int, queueNum int, updatedCounters map[string]interface{}, + updatedPeriodicWatermarks map[string]interface{}, +) ( + queueCountersJson interface{}, + queueCountersJsonAfterUpdate map[string]interface{}, + queueAliasCountersJson interface{}, + queueAliasCountersJsonAfterUpdate map[string]interface{}, + err error) { + + queueCountersJson, queueCountersJsonAfterUpdate, queueAliasCountersJson, queueAliasCountersJsonAfterUpdate, err = + createQueueCountersJsonObjects(ethNum, queueNum, updatedCounters) + + queuePeriodicKeyName := fmt.Sprintf("Ethernet%d:%d:periodic", ethNum, queueNum) + queueCountersJsonAfterUpdate[queuePeriodicKeyName] = updatedPeriodicWatermarks + + queueAliasPeriodicKeyName := fmt.Sprintf("Ethernet%d/1:%d:periodic", ethNum, queueNum) + queueAliasCountersJsonAfterUpdate[queueAliasPeriodicKeyName] = updatedPeriodicWatermarks + return +} + // runTestSubscribe subscribe DB path in stream mode or poll mode. // The return code and response value are compared with expected code and value. func runTestSubscribe(t *testing.T, namespace string) { @@ -2039,6 +2181,8 @@ func runTestSubscribe(t *testing.T, namespace string) { tmp6.(map[string]interface{})["Ethernet68/1:3"].(map[string]interface{})["PFC_WD_QUEUE_STATS_DEADLOCK_DETECTED"] = "1" countersEthernetWildPfcwdUpdate := tmp6 + /////////////////////////////////////////////////////////////////////////////////////////////// + fileName = "../testdata/COUNTERS:Ethernet_wildcard_Queues_alias.txt" countersEthernetWildQueuesByte, err := ioutil.ReadFile(fileName) if err != nil { @@ -2047,36 +2191,76 @@ func runTestSubscribe(t *testing.T, namespace string) { var countersEthernetWildQueuesJson interface{} json.Unmarshal(countersEthernetWildQueuesByte, &countersEthernetWildQueuesJson) - fileName = "../testdata/COUNTERS:Ethernet68:Queues.txt" - countersEthernet68QueuesByte, err := ioutil.ReadFile(fileName) + eth68_1 := map[string]interface{}{ + "SAI_QUEUE_STAT_BYTES": "0", + "SAI_QUEUE_STAT_DROPPED_BYTES": "0", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "4", // Changed from 0 to 4 + "SAI_QUEUE_STAT_PACKETS": "0", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "128", // Changed from 64 to 128 + } + eth68_1_periodic := map[string]interface{}{ + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "32", // Changed from 192 to 32 + } + countersEthernet68QueuesJson, countersEthernet68QueuesJsonUpdate, countersEthernet68QueuesAliasJson, + countersEthernet68QueuesAliasJsonUpdate, + err := createQueueCountersJsonObjectsWithPeriodicWatermark(68, 1, eth68_1, eth68_1_periodic) + if err != nil { + t.Fatalf("%v", err) + } + + eth7_5 := map[string]interface{}{ + "SAI_QUEUE_STAT_BYTES": "0", + "SAI_QUEUE_STAT_DROPPED_BYTES": "0", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "10", // Changed from 0 to 10 + "SAI_QUEUE_STAT_PACKETS": "0", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "198", // Changed from 100 to 198 + } + countersEthernet7QueuesJson, countersEthernet7QueuesJsonUpdate, countersEthernet7QueuesAliasJson, + countersEthernet7QueuesAliasJsonUpdate, err := createQueueCountersJsonObjects(7, 5, eth7_5) + if err != nil { + t.Fatalf("%v", err) + } + + /////////////////////////////////////////////////////////////////////////////////////////////// + + fileName = "../testdata/PERIODIC_WATERMARKS:Ethernet_wildcard:PriorityGroups_alias.txt" + pgWatermarksEthernetWildByte, err := ioutil.ReadFile(fileName) if err != nil { t.Fatalf("read file %v err: %v", fileName, err) } - var countersEthernet68QueuesJson interface{} - json.Unmarshal(countersEthernet68QueuesByte, &countersEthernet68QueuesJson) + var pgWatermarksEthernetWildJson interface{} + json.Unmarshal(pgWatermarksEthernetWildByte, &pgWatermarksEthernetWildJson) - countersEthernet68QueuesJsonUpdate := make(map[string]interface{}) - json.Unmarshal(countersEthernet68QueuesByte, &countersEthernet68QueuesJsonUpdate) - eth68_1 := map[string]interface{}{ - "SAI_QUEUE_STAT_BYTES": "0", - "SAI_QUEUE_STAT_DROPPED_BYTES": "0", - "SAI_QUEUE_STAT_DROPPED_PACKETS": "4", - "SAI_QUEUE_STAT_PACKETS": "0", + fileName = "../testdata/PERIODIC_WATERMARKS:Ethernet16:PriorityGroups.txt" + pgWatermarksEthernet16Byte, err := ioutil.ReadFile(fileName) + if err != nil { + t.Fatalf("read file %v err: %v", fileName, err) + } + var pgWatermarksEthernet16Json interface{} + json.Unmarshal(pgWatermarksEthernet16Byte, &pgWatermarksEthernet16Json) + + pgWatermarksEthernet16JsonUpdate := make(map[string]interface{}) + json.Unmarshal(pgWatermarksEthernet16Byte, &pgWatermarksEthernet16JsonUpdate) + eth16_5 := map[string]interface{}{ + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "200", // Changed from 0 to 200 + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "10", // Changed from 0 to 10 } - countersEthernet68QueuesJsonUpdate["Ethernet68:1"] = eth68_1 + pgWatermarksEthernet16JsonUpdate["Ethernet16:5"] = eth16_5 - // Alias translation for query Ethernet68/1:Queues - fileName = "../testdata/COUNTERS:Ethernet68:Queues_alias.txt" - countersEthernet68QueuesAliasByte, err := ioutil.ReadFile(fileName) + // Alias translation for query PERIODIC_WATERMARKS:Ethernet16/1:PriorityGroups + fileName = "../testdata/PERIODIC_WATERMARKS:Ethernet16:PriorityGroups_alias.txt" + pgWatermarksEthernet16AliasByte, err := ioutil.ReadFile(fileName) if err != nil { t.Fatalf("read file %v err: %v", fileName, err) } - var countersEthernet68QueuesAliasJson interface{} - json.Unmarshal(countersEthernet68QueuesAliasByte, &countersEthernet68QueuesAliasJson) + var pgWatermarksEthernet16AliasJson interface{} + json.Unmarshal(pgWatermarksEthernet16AliasByte, &pgWatermarksEthernet16AliasJson) - countersEthernet68QueuesAliasJsonUpdate := make(map[string]interface{}) - json.Unmarshal(countersEthernet68QueuesAliasByte, &countersEthernet68QueuesAliasJsonUpdate) - countersEthernet68QueuesAliasJsonUpdate["Ethernet68/1:1"] = eth68_1 + pgWatermarksEthernet16AliasJsonUpdate := make(map[string]interface{}) + json.Unmarshal(pgWatermarksEthernet16AliasByte, &pgWatermarksEthernet16AliasJsonUpdate) + pgWatermarksEthernet16AliasJsonUpdate["Ethernet16/1:5"] = eth16_5 + + /////////////////////////////////////////////////////////////////////////////////////////////// type TestExec struct { desc string @@ -2802,14 +2986,9 @@ func runTestSubscribe(t *testing.T, namespace string) { TLS: &tls.Config{InsecureSkipVerify: true}, }, updates: []tablePathValue{ - { - dbName: "COUNTERS_DB", - tableName: "COUNTERS", - tableKey: "oid:0x1500000000091c", // "Ethernet68:1": "oid:0x1500000000091c", - delimitor: ":", - field: "SAI_QUEUE_STAT_DROPPED_PACKETS", - value: "4", // being changed to 0 from 4 - }, + createCountersTableSetUpdate("oid:0x1500000000091c", "SAI_QUEUE_STAT_DROPPED_PACKETS", "4"), // being changed from 0 to 4 + createCountersTableSetUpdate("oid:0x1500000000091c", "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES", "128"), // being changed from 64 to 128 + createPeriodicWatermarksTableSetUpdate("oid:0x1500000000091c", "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES", "32"), // being changed from 192 to 32 }, wantNoti: []client.Notification{ client.Connected{}, @@ -2833,14 +3012,9 @@ func runTestSubscribe(t *testing.T, namespace string) { TLS: &tls.Config{InsecureSkipVerify: true}, }, updates: []tablePathValue{ - { - dbName: "COUNTERS_DB", - tableName: "COUNTERS", - tableKey: "oid:0x1500000000091c", // "Ethernet68:1": "oid:0x1500000000091c", - delimitor: ":", - field: "SAI_QUEUE_STAT_DROPPED_PACKETS", - value: "4", // being changed to 0 from 4 - }, + createCountersTableSetUpdate("oid:0x1500000000091c", "SAI_QUEUE_STAT_DROPPED_PACKETS", "4"), // being changed from 0 to 4 + createCountersTableSetUpdate("oid:0x1500000000091c", "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES", "128"), // being changed from 64 to 128 + createPeriodicWatermarksTableSetUpdate("oid:0x1500000000091c", "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES", "32"), // being changed from 192 to 32 }, wantNoti: []client.Notification{ client.Connected{}, @@ -2854,6 +3028,115 @@ func runTestSubscribe(t *testing.T, namespace string) { client.Sync{}, }, }, + { + desc: "poll query for COUNTERS/Ethernet7/Queues with field value change (no PERIODIC_WATERMARKS table)", + poll: 1, + q: client.Query{ + Target: "COUNTERS_DB", + Type: client.Poll, + Queries: []client.Path{{"COUNTERS", "Ethernet7", "Queues"}}, + TLS: &tls.Config{InsecureSkipVerify: true}, + }, + updates: []tablePathValue{ + createCountersTableSetUpdate("oid:0x150000000001d0", "SAI_QUEUE_STAT_DROPPED_PACKETS", "10"), // being changed from 0 to 10 + createCountersTableSetUpdate("oid:0x150000000001d0", "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES", "198"), // being changed from 100 to 198 + }, + wantNoti: []client.Notification{ + client.Connected{}, + client.Update{Path: []string{"COUNTERS_DB", "COUNTERS", "Ethernet7", "Queues"}, TS: time.Unix(0, 200), Val: countersEthernet7QueuesJson}, + client.Sync{}, + client.Update{Path: []string{"COUNTERS_DB", "COUNTERS", "Ethernet7", "Queues"}, TS: time.Unix(0, 200), Val: countersEthernet7QueuesJsonUpdate}, + client.Sync{}, + }, + }, + { + desc: "(use vendor alias) poll query for COUNTERS/Ethernet7/Queues with field value change (no PERIODIC_WATERMARKS table)", + poll: 1, + q: client.Query{ + Target: "COUNTERS_DB", + Type: client.Poll, + Queries: []client.Path{{"COUNTERS", "Ethernet7/1", "Queues"}}, + TLS: &tls.Config{InsecureSkipVerify: true}, + }, + updates: []tablePathValue{ + createCountersTableSetUpdate("oid:0x150000000001d0", "SAI_QUEUE_STAT_DROPPED_PACKETS", "10"), // being changed from 0 to 10 + createCountersTableSetUpdate("oid:0x150000000001d0", "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES", "198"), // being changed from 100 to 198 + }, + wantNoti: []client.Notification{ + client.Connected{}, + client.Update{Path: []string{"COUNTERS_DB", "COUNTERS", "Ethernet7/1", "Queues"}, TS: time.Unix(0, 200), Val: countersEthernet7QueuesAliasJson}, + client.Sync{}, + client.Update{Path: []string{"COUNTERS_DB", "COUNTERS", "Ethernet7/1", "Queues"}, TS: time.Unix(0, 200), Val: countersEthernet7QueuesAliasJsonUpdate}, + client.Sync{}, + }, + }, + { + desc: "poll query for PERIODIC_WATERMARKS/Ethernet*/PriorityGroups", + poll: 1, + q: client.Query{ + Target: "COUNTERS_DB", + Type: client.Poll, + Queries: []client.Path{{"PERIODIC_WATERMARKS", "Ethernet*", "PriorityGroups"}}, + TLS: &tls.Config{InsecureSkipVerify: true}, + }, + wantNoti: []client.Notification{ + client.Connected{}, + client.Update{Path: []string{"COUNTERS_DB", "PERIODIC_WATERMARKS", "Ethernet*", "PriorityGroups"}, TS: time.Unix(0, 200), Val: pgWatermarksEthernetWildJson}, + client.Sync{}, + client.Update{Path: []string{"COUNTERS_DB", "PERIODIC_WATERMARKS", "Ethernet*", "PriorityGroups"}, TS: time.Unix(0, 200), Val: pgWatermarksEthernetWildJson}, + client.Sync{}, + }, + }, + { + desc: "poll query for PERIODIC_WATERMARKS/Ethernet16/PriorityGroups with field value change", + poll: 3, + q: client.Query{ + Target: "COUNTERS_DB", + Type: client.Poll, + Queries: []client.Path{{"PERIODIC_WATERMARKS", "Ethernet16", "PriorityGroups"}}, + TLS: &tls.Config{InsecureSkipVerify: true}, + }, + updates: []tablePathValue{ + createPeriodicWatermarksTableSetUpdate("oid:0x1a0000000002d2", "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES", "200"), // being changed from 0 to 200 + createPeriodicWatermarksTableSetUpdate("oid:0x1a0000000002d2", "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES", "10"), // being changed from 0 to 10 + }, + wantNoti: []client.Notification{ + client.Connected{}, + client.Update{Path: []string{"COUNTERS_DB", "PERIODIC_WATERMARKS", "Ethernet16", "PriorityGroups"}, TS: time.Unix(0, 200), Val: pgWatermarksEthernet16Json}, + client.Sync{}, + client.Update{Path: []string{"COUNTERS_DB", "PERIODIC_WATERMARKS", "Ethernet16", "PriorityGroups"}, TS: time.Unix(0, 200), Val: pgWatermarksEthernet16JsonUpdate}, + client.Sync{}, + client.Update{Path: []string{"COUNTERS_DB", "PERIODIC_WATERMARKS", "Ethernet16", "PriorityGroups"}, TS: time.Unix(0, 200), Val: pgWatermarksEthernet16JsonUpdate}, + client.Sync{}, + client.Update{Path: []string{"COUNTERS_DB", "PERIODIC_WATERMARKS", "Ethernet16", "PriorityGroups"}, TS: time.Unix(0, 200), Val: pgWatermarksEthernet16JsonUpdate}, + client.Sync{}, + }, + }, + { + desc: "(use vendor alias) poll query for PERIODIC_WATERMARKS/Ethernet16/PriorityGroups with field value change", + poll: 3, + q: client.Query{ + Target: "COUNTERS_DB", + Type: client.Poll, + Queries: []client.Path{{"PERIODIC_WATERMARKS", "Ethernet16/1", "PriorityGroups"}}, + TLS: &tls.Config{InsecureSkipVerify: true}, + }, + updates: []tablePathValue{ + createPeriodicWatermarksTableSetUpdate("oid:0x1a0000000002d2", "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES", "200"), // being changed from 0 to 200 + createPeriodicWatermarksTableSetUpdate("oid:0x1a0000000002d2", "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES", "10"), // being changed from 0 to 10 + }, + wantNoti: []client.Notification{ + client.Connected{}, + client.Update{Path: []string{"COUNTERS_DB", "PERIODIC_WATERMARKS", "Ethernet16/1", "PriorityGroups"}, TS: time.Unix(0, 200), Val: pgWatermarksEthernet16AliasJson}, + client.Sync{}, + client.Update{Path: []string{"COUNTERS_DB", "PERIODIC_WATERMARKS", "Ethernet16/1", "PriorityGroups"}, TS: time.Unix(0, 200), Val: pgWatermarksEthernet16AliasJsonUpdate}, + client.Sync{}, + client.Update{Path: []string{"COUNTERS_DB", "PERIODIC_WATERMARKS", "Ethernet16/1", "PriorityGroups"}, TS: time.Unix(0, 200), Val: pgWatermarksEthernet16AliasJsonUpdate}, + client.Sync{}, + client.Update{Path: []string{"COUNTERS_DB", "PERIODIC_WATERMARKS", "Ethernet16/1", "PriorityGroups"}, TS: time.Unix(0, 200), Val: pgWatermarksEthernet16AliasJsonUpdate}, + client.Sync{}, + }, + }, { desc: "use invalid sample interval", q: createCountersDbQuerySampleMode(t, 10*time.Millisecond, false, "COUNTERS", "Ethernet1"), diff --git a/sonic_data_client/db_client.go b/sonic_data_client/db_client.go index 88cc6d5e6..c3c17b27a 100644 --- a/sonic_data_client/db_client.go +++ b/sonic_data_client/db_client.go @@ -5,7 +5,6 @@ import ( "bytes" "encoding/json" "fmt" - log "github.com/golang/glog" "net" "reflect" "strconv" @@ -13,6 +12,8 @@ import ( "sync" "time" + log "github.com/golang/glog" + "github.com/Workiva/go-datastructures/queue" "github.com/go-redis/redis" gnmipb "github.com/openconfig/gnmi/proto/gnmi" @@ -659,6 +660,10 @@ func populateDbtablePath(prefix, path *gnmipb.Path, pathG2S *map[*gnmipb.Path][] if err != nil { return err } + err = initCountersPGNameMap() + if err != nil { + return err + } err = initAliasMap() if err != nil { return err diff --git a/sonic_data_client/virtual_db.go b/sonic_data_client/virtual_db.go index 23a022ba0..f480038a1 100644 --- a/sonic_data_client/virtual_db.go +++ b/sonic_data_client/virtual_db.go @@ -2,9 +2,10 @@ package client import ( "fmt" - log "github.com/golang/glog" "os" "strings" + + log "github.com/golang/glog" ) // virtual db is to Handle @@ -35,6 +36,9 @@ var ( // Queue name to oid map in COUNTERS table of COUNTERS_DB countersQueueNameMap = make(map[string]string) + // SONiC interface name to priority group indices and then to oid (from COUNTERS table of COUNTERS_DB) + countersPGNameMap = make(map[string]map[string]string) + // Alias translation: from vendor port name to sonic interface name alias2nameMap = make(map[string]string) // Alias translation: from sonic interface name to vendor port name @@ -66,6 +70,9 @@ var ( }, { // stats for one or all Fabric ports path: []string{"COUNTERS_DB", "COUNTERS", "PORT*"}, transFunc: v2rTranslate(v2rFabricPortStats), + }, { // Periodic PG watermarks for one or all Ethernet ports + path: []string{"COUNTERS_DB", "PERIODIC_WATERMARKS", "Ethernet*", "PriorityGroups"}, + transFunc: v2rTranslate(v2rEthPortPGPeriodicWMs), }, { // COUNTER_DB RATES Ethernet* path: []string{"COUNTERS_DB", "RATES", "Ethernet*"}, transFunc: v2rTranslate(v2rEthPortStats), @@ -99,6 +106,27 @@ func initCountersQueueNameMap() error { return nil } +func initCountersPGNameMap() error { + if len(countersPGNameMap) == 0 { + pgOidMap, err := getCountersMap("COUNTERS_PG_NAME_MAP") + if err != nil { + return err + } + for pg, oid := range pgOidMap { + // pg is in format of "Ethernet64:7" + pg_parts := strings.Split(pg, ":") + if len(pg_parts) != 2 { + return fmt.Errorf("invalid pg name %v", pg) + } + if _, ok := countersPGNameMap[pg_parts[0]]; !ok { + countersPGNameMap[pg_parts[0]] = make(map[string]string) + } + countersPGNameMap[pg_parts[0]][pg_parts[1]] = oid + } + } + return nil +} + func initCountersPortNameMap() error { var err error if len(countersPortNameMap) == 0 { @@ -600,14 +628,29 @@ func v2rEthPortPfcwdStats(paths []string) ([]tablePath, error) { return tblPaths, nil } +func buildTablePath(namespace, dbName, tableName, tableKey, separator, field, jsonTableName, jsonTableKey, jsonField string) tablePath { + return tablePath{ + dbNamespace: namespace, + dbName: dbName, + tableName: tableName, + tableKey: tableKey, + delimitor: separator, + field: field, + jsonTableName: jsonTableName, + jsonTableKey: jsonTableKey, + jsonField: jsonField, + } +} + // Populate real data paths from paths like -// [COUNTER_DB COUNTERS Ethernet* Queues] or [COUNTER_DB COUNTERS Ethernet68 Queues] +// [COUNTERS_DB COUNTERS Ethernet* Queues] or [COUNTERS_DB COUNTERS Ethernet68 Queues] func v2rEthPortQueStats(paths []string) ([]tablePath, error) { + // paths[DbIdx] = "COUNTERS_DB" separator, _ := GetTableKeySeparator(paths[DbIdx], "") + field := "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES" var tblPaths []tablePath if strings.HasSuffix(paths[KeyIdx], "*") { // queues on all Ethernet ports for que, oid := range countersQueueNameMap { - // que is in format of "Internal_Ethernet:12" names := strings.Split(que, separator) var oname string if alias, ok := name2aliasMap[names[0]]; ok { @@ -621,14 +664,17 @@ func v2rEthPortQueStats(paths []string) ([]tablePath, error) { return nil, fmt.Errorf("%v does not have namespace associated", names[0]) } que = strings.Join([]string{oname, names[1]}, separator) - tblPath := tablePath{ - dbNamespace: namespace, - dbName: paths[DbIdx], - tableName: paths[TblIdx], - tableKey: oid, - delimitor: separator, - jsonTableKey: que, - } + // que is in format of "Internal_Ethernet:12" + tblPath := buildTablePath(namespace, paths[DbIdx], paths[TblIdx], oid, separator, "", "", que, "") + tblPaths = append(tblPaths, tblPath) + /* + * Adding the field "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES" from the PERIODIC_WATERMARKS table + * to the virtual path. + */ + periodic_que := strings.Join([]string{que, "periodic"}, separator) + // periodic_que is in format of "Internal_Ethernet:12:periodic" + tblPath = buildTablePath(namespace, paths[DbIdx], "PERIODIC_WATERMARKS", oid, separator, + field, paths[TblIdx], periodic_que, field) tblPaths = append(tblPaths, tblPath) } } else { //queues on single port @@ -642,20 +688,22 @@ func v2rEthPortQueStats(paths []string) ([]tablePath, error) { return nil, fmt.Errorf("%v does not have namespace associated", name) } for que, oid := range countersQueueNameMap { - //que is in format of "Ethernet64:12" names := strings.Split(que, separator) if name != names[0] { continue } que = strings.Join([]string{alias, names[1]}, separator) - tblPath := tablePath{ - dbNamespace: namespace, - dbName: paths[DbIdx], - tableName: paths[TblIdx], - tableKey: oid, - delimitor: separator, - jsonTableKey: que, - } + //que is in format of "Ethernet64:12" + tblPath := buildTablePath(namespace, paths[DbIdx], paths[TblIdx], oid, separator, "", "", que, "") + tblPaths = append(tblPaths, tblPath) + /* + * Adding the field "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES" from the PERIODIC_WATERMARKS table + * to the virtual path. + */ + periodic_que := strings.Join([]string{que, "periodic"}, separator) + //periodic_que is in format of "Ethernet64:12:periodic" + tblPath = buildTablePath(namespace, paths[DbIdx], "PERIODIC_WATERMARKS", oid, separator, + field, paths[TblIdx], periodic_que, field) tblPaths = append(tblPaths, tblPath) } } @@ -663,6 +711,73 @@ func v2rEthPortQueStats(paths []string) ([]tablePath, error) { return tblPaths, nil } +func getVendorPortName(port string) string { + // Get vendor port name from name2aliasMap + if alias, ok := name2aliasMap[port]; ok { + return alias + } + log.V(2).Infof(" %v does not have a vendor alias", port) + return port +} + +func getSonicPortName(port string) string { + // Get sonic port name from alias2nameMap + if sonic_name, ok := alias2nameMap[port]; ok { + return sonic_name + } + return port +} + +func getPortNamespace(port string) (string, error) { + // Get namespace from port2namespaceMap + namespace, ok := port2namespaceMap[port] + if !ok { + return "", fmt.Errorf("%v does not have an associated namespace", port) + } + return namespace, nil +} + +// Populate real data paths from paths like +// [COUNTERS_DB PERIODIC_WATERMARKS Ethernet* PriorityGroups] or +// [COUNTERS_DB PERIODIC_WATERMARKS Ethernet64 PriorityGroups] +func v2rEthPortPGPeriodicWMs(paths []string) ([]tablePath, error) { + // paths[DbIdx] = "COUNTERS_DB" + separator, _ := GetTableKeySeparator(paths[DbIdx], "") + var tblPaths []tablePath + if strings.HasSuffix(paths[KeyIdx], "*") { // priority groups on all Ethernet ports + for port, pg_index_to_oid := range countersPGNameMap { + vendor_port := getVendorPortName(port) + namespace, err := getPortNamespace(port) + if err != nil { + return nil, err + } + for pg_index, oid := range pg_index_to_oid { + pg := strings.Join([]string{vendor_port, pg_index}, separator) + // pg is in format of "Internal_Ethernet:7" + tblPath := buildTablePath(namespace, paths[DbIdx], paths[TblIdx], oid, separator, "", "", pg, "") + tblPaths = append(tblPaths, tblPath) + } + } + } else { // priority groups on a single port + port := getSonicPortName(paths[KeyIdx]) + namespace, err := getPortNamespace(port) + if err != nil { + return nil, err + } + if _, ok := countersPGNameMap[port]; !ok { + return nil, fmt.Errorf("No priority groups associated with %v", port) + } + for pg_index, oid := range countersPGNameMap[port] { + pg := strings.Join([]string{paths[KeyIdx], pg_index}, separator) + // pg is in format of "Ethernet64:7" or "Ethernet64/1:7" + tblPath := buildTablePath(namespace, paths[DbIdx], paths[TblIdx], oid, separator, "", "", pg, "") + tblPaths = append(tblPaths, tblPath) + } + } + log.V(6).Infof("v2rEthPortPGPeriodicWMs: %v", tblPaths) + return tblPaths, nil +} + func lookupV2R(paths []string) ([]tablePath, error) { n, ok := v2rTrie.Find(paths) if ok { diff --git a/testdata/COUNTERS:Ethernet68:Queues.txt b/testdata/COUNTERS:Ethernet68:Queues.txt index 23bda1894..d225dcfc3 100644 --- a/testdata/COUNTERS:Ethernet68:Queues.txt +++ b/testdata/COUNTERS:Ethernet68:Queues.txt @@ -4,7 +4,8 @@ "SAI_QUEUE_STAT_BYTES": "0", "SAI_QUEUE_STAT_DROPPED_BYTES": "0", "SAI_QUEUE_STAT_DROPPED_PACKETS": "0", - "SAI_QUEUE_STAT_PACKETS": "0" + "SAI_QUEUE_STAT_PACKETS": "0", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "64" }, "Ethernet68:10": {}, "Ethernet68:11": {}, @@ -55,5 +56,8 @@ "Ethernet68:6": {}, "Ethernet68:7": {}, "Ethernet68:8": {}, - "Ethernet68:9": {} + "Ethernet68:9": {}, + "Ethernet68:1:periodic": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "192" + } } \ No newline at end of file diff --git a/testdata/COUNTERS:Ethernet68:Queues_alias.txt b/testdata/COUNTERS:Ethernet68:Queues_alias.txt index 279f07992..75123ac0a 100644 --- a/testdata/COUNTERS:Ethernet68:Queues_alias.txt +++ b/testdata/COUNTERS:Ethernet68:Queues_alias.txt @@ -4,7 +4,8 @@ "SAI_QUEUE_STAT_BYTES": "0", "SAI_QUEUE_STAT_DROPPED_BYTES": "0", "SAI_QUEUE_STAT_DROPPED_PACKETS": "0", - "SAI_QUEUE_STAT_PACKETS": "0" + "SAI_QUEUE_STAT_PACKETS": "0", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "64" }, "Ethernet68/1:10": {}, "Ethernet68/1:11": {}, @@ -55,5 +56,8 @@ "Ethernet68/1:6": {}, "Ethernet68/1:7": {}, "Ethernet68/1:8": {}, - "Ethernet68/1:9": {} + "Ethernet68/1:9": {}, + "Ethernet68/1:1:periodic": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "192" + } } \ No newline at end of file diff --git a/testdata/COUNTERS:Ethernet7:Queues.txt b/testdata/COUNTERS:Ethernet7:Queues.txt new file mode 100644 index 000000000..f9fa60e3b --- /dev/null +++ b/testdata/COUNTERS:Ethernet7:Queues.txt @@ -0,0 +1,28 @@ +{ + "Ethernet7:0": {}, + "Ethernet7:1": {}, + "Ethernet7:10": {}, + "Ethernet7:11": {}, + "Ethernet7:12": {}, + "Ethernet7:13": {}, + "Ethernet7:14": {}, + "Ethernet7:15": {}, + "Ethernet7:16": {}, + "Ethernet7:17": {}, + "Ethernet7:18": {}, + "Ethernet7:19": {}, + "Ethernet7:2": {}, + "Ethernet7:3": {}, + "Ethernet7:4": {}, + "Ethernet7:5": { + "SAI_QUEUE_STAT_BYTES": "0", + "SAI_QUEUE_STAT_DROPPED_BYTES": "0", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "0", + "SAI_QUEUE_STAT_PACKETS": "0", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "100" + }, + "Ethernet7:6": {}, + "Ethernet7:7": {}, + "Ethernet7:8": {}, + "Ethernet7:9": {} +} diff --git a/testdata/COUNTERS:Ethernet7:Queues_alias.txt b/testdata/COUNTERS:Ethernet7:Queues_alias.txt new file mode 100644 index 000000000..f108727a3 --- /dev/null +++ b/testdata/COUNTERS:Ethernet7:Queues_alias.txt @@ -0,0 +1,28 @@ +{ + "Ethernet7/1:0": {}, + "Ethernet7/1:1": {}, + "Ethernet7/1:10": {}, + "Ethernet7/1:11": {}, + "Ethernet7/1:12": {}, + "Ethernet7/1:13": {}, + "Ethernet7/1:14": {}, + "Ethernet7/1:15": {}, + "Ethernet7/1:16": {}, + "Ethernet7/1:17": {}, + "Ethernet7/1:18": {}, + "Ethernet7/1:19": {}, + "Ethernet7/1:2": {}, + "Ethernet7/1:3": {}, + "Ethernet7/1:4": {}, + "Ethernet7/1:5": { + "SAI_QUEUE_STAT_BYTES": "0", + "SAI_QUEUE_STAT_DROPPED_BYTES": "0", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "0", + "SAI_QUEUE_STAT_PACKETS": "0", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "100" + }, + "Ethernet7/1:6": {}, + "Ethernet7/1:7": {}, + "Ethernet7/1:8": {}, + "Ethernet7/1:9": {} +} diff --git a/testdata/COUNTERS:Ethernet_wildcard_Queues.txt b/testdata/COUNTERS:Ethernet_wildcard_Queues.txt index acd5d1564..41a370550 100644 --- a/testdata/COUNTERS:Ethernet_wildcard_Queues.txt +++ b/testdata/COUNTERS:Ethernet_wildcard_Queues.txt @@ -984,7 +984,8 @@ "SAI_QUEUE_STAT_BYTES": "0", "SAI_QUEUE_STAT_DROPPED_BYTES": "0", "SAI_QUEUE_STAT_DROPPED_PACKETS": "0", - "SAI_QUEUE_STAT_PACKETS": "0" + "SAI_QUEUE_STAT_PACKETS": "0", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "64" }, "Ethernet68:10": {}, "Ethernet68:11": {}, @@ -1039,7 +1040,13 @@ "Ethernet7:2": {}, "Ethernet7:3": {}, "Ethernet7:4": {}, - "Ethernet7:5": {}, + "Ethernet7:5": { + "SAI_QUEUE_STAT_BYTES": "0", + "SAI_QUEUE_STAT_DROPPED_BYTES": "0", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "0", + "SAI_QUEUE_STAT_PACKETS": "0", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "100" + }, "Ethernet7:6": {}, "Ethernet7:7": {}, "Ethernet7:8": {}, @@ -1083,6 +1090,9 @@ "Ethernet9:6": {}, "Ethernet9:7": {}, "Ethernet9:8": {}, - "Ethernet9:9": {} + "Ethernet9:9": {}, + "Ethernet68:1:periodic": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "192" + } } diff --git a/testdata/COUNTERS:Ethernet_wildcard_Queues_alias.txt b/testdata/COUNTERS:Ethernet_wildcard_Queues_alias.txt index 42f6428fd..19b438f49 100644 --- a/testdata/COUNTERS:Ethernet_wildcard_Queues_alias.txt +++ b/testdata/COUNTERS:Ethernet_wildcard_Queues_alias.txt @@ -1004,7 +1004,8 @@ "SAI_QUEUE_STAT_BYTES": "0", "SAI_QUEUE_STAT_DROPPED_BYTES": "0", "SAI_QUEUE_STAT_DROPPED_PACKETS": "0", - "SAI_QUEUE_STAT_PACKETS": "0" + "SAI_QUEUE_STAT_PACKETS": "0", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "64" }, "Ethernet68/1:10": {}, "Ethernet68/1:11": {}, @@ -1071,7 +1072,13 @@ "Ethernet7/1:2": {}, "Ethernet7/1:3": {}, "Ethernet7/1:4": {}, - "Ethernet7/1:5": {}, + "Ethernet7/1:5": { + "SAI_QUEUE_STAT_BYTES": "0", + "SAI_QUEUE_STAT_DROPPED_BYTES": "0", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "0", + "SAI_QUEUE_STAT_PACKETS": "0", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "100" + }, "Ethernet7/1:6": {}, "Ethernet7/1:7": {}, "Ethernet7/1:8": {}, @@ -1115,5 +1122,8 @@ "Ethernet9/1:6": {}, "Ethernet9/1:7": {}, "Ethernet9/1:8": {}, - "Ethernet9/1:9": {} + "Ethernet9/1:9": {}, + "Ethernet68/1:1:periodic": { + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "192" + } } \ No newline at end of file diff --git a/testdata/COUNTERS:oid:0x150000000001d0.txt b/testdata/COUNTERS:oid:0x150000000001d0.txt new file mode 100644 index 000000000..e6759c62b --- /dev/null +++ b/testdata/COUNTERS:oid:0x150000000001d0.txt @@ -0,0 +1,7 @@ +{ + "SAI_QUEUE_STAT_BYTES": "0", + "SAI_QUEUE_STAT_DROPPED_BYTES": "0", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "0", + "SAI_QUEUE_STAT_PACKETS": "0", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "100" +} diff --git a/testdata/COUNTERS:oid:0x1500000000091c.txt b/testdata/COUNTERS:oid:0x1500000000091c.txt index d8b944a0b..f17811d13 100644 --- a/testdata/COUNTERS:oid:0x1500000000091c.txt +++ b/testdata/COUNTERS:oid:0x1500000000091c.txt @@ -2,5 +2,6 @@ "SAI_QUEUE_STAT_BYTES": "0", "SAI_QUEUE_STAT_DROPPED_BYTES": "0", "SAI_QUEUE_STAT_DROPPED_PACKETS": "0", - "SAI_QUEUE_STAT_PACKETS": "0" + "SAI_QUEUE_STAT_PACKETS": "0", + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "64" } diff --git a/testdata/COUNTERS_PG_NAME_MAP.txt b/testdata/COUNTERS_PG_NAME_MAP.txt new file mode 100644 index 000000000..ba30f6cb2 --- /dev/null +++ b/testdata/COUNTERS_PG_NAME_MAP.txt @@ -0,0 +1,434 @@ +{ + "Ethernet0:0": "oid:0x1a00000000002d", + "Ethernet0:1": "oid:0x1a00000000002e", + "Ethernet0:2": "oid:0x1a00000000002f", + "Ethernet0:3": "oid:0x1a000000000030", + "Ethernet0:4": "oid:0x1a000000000031", + "Ethernet0:5": "oid:0x1a000000000032", + "Ethernet0:6": "oid:0x1a000000000033", + "Ethernet0:7": "oid:0x1a000000000034", + "Ethernet1:0": "oid:0x1a000000000057", + "Ethernet1:1": "oid:0x1a000000000058", + "Ethernet1:2": "oid:0x1a000000000059", + "Ethernet1:3": "oid:0x1a00000000005a", + "Ethernet1:4": "oid:0x1a00000000005b", + "Ethernet1:5": "oid:0x1a00000000005c", + "Ethernet1:6": "oid:0x1a00000000005d", + "Ethernet1:7": "oid:0x1a00000000005e", + "Ethernet10:0": "oid:0x1a0000000001d1", + "Ethernet10:1": "oid:0x1a0000000001d2", + "Ethernet10:2": "oid:0x1a0000000001d3", + "Ethernet10:3": "oid:0x1a0000000001d4", + "Ethernet10:4": "oid:0x1a0000000001d5", + "Ethernet10:5": "oid:0x1a0000000001d6", + "Ethernet10:6": "oid:0x1a0000000001d7", + "Ethernet10:7": "oid:0x1a0000000001d8", + "Ethernet11:0": "oid:0x1a0000000001fb", + "Ethernet11:1": "oid:0x1a0000000001fc", + "Ethernet11:2": "oid:0x1a0000000001fd", + "Ethernet11:3": "oid:0x1a0000000001fe", + "Ethernet11:4": "oid:0x1a0000000001ff", + "Ethernet11:5": "oid:0x1a000000000200", + "Ethernet11:6": "oid:0x1a000000000201", + "Ethernet11:7": "oid:0x1a000000000202", + "Ethernet12:0": "oid:0x1a000000000225", + "Ethernet12:1": "oid:0x1a000000000226", + "Ethernet12:2": "oid:0x1a000000000227", + "Ethernet12:3": "oid:0x1a000000000228", + "Ethernet12:4": "oid:0x1a000000000229", + "Ethernet12:5": "oid:0x1a00000000022a", + "Ethernet12:6": "oid:0x1a00000000022b", + "Ethernet12:7": "oid:0x1a00000000022c", + "Ethernet13:0": "oid:0x1a00000000024f", + "Ethernet13:1": "oid:0x1a000000000250", + "Ethernet13:2": "oid:0x1a000000000251", + "Ethernet13:3": "oid:0x1a000000000252", + "Ethernet13:4": "oid:0x1a000000000253", + "Ethernet13:5": "oid:0x1a000000000254", + "Ethernet13:6": "oid:0x1a000000000255", + "Ethernet13:7": "oid:0x1a000000000256", + "Ethernet14:0": "oid:0x1a000000000279", + "Ethernet14:1": "oid:0x1a00000000027a", + "Ethernet14:2": "oid:0x1a00000000027b", + "Ethernet14:3": "oid:0x1a00000000027c", + "Ethernet14:4": "oid:0x1a00000000027d", + "Ethernet14:5": "oid:0x1a00000000027e", + "Ethernet14:6": "oid:0x1a00000000027f", + "Ethernet14:7": "oid:0x1a000000000280", + "Ethernet15:0": "oid:0x1a0000000002a3", + "Ethernet15:1": "oid:0x1a0000000002a4", + "Ethernet15:2": "oid:0x1a0000000002a5", + "Ethernet15:3": "oid:0x1a0000000002a6", + "Ethernet15:4": "oid:0x1a0000000002a7", + "Ethernet15:5": "oid:0x1a0000000002a8", + "Ethernet15:6": "oid:0x1a0000000002a9", + "Ethernet15:7": "oid:0x1a0000000002aa", + "Ethernet16:0": "oid:0x1a0000000002cd", + "Ethernet16:1": "oid:0x1a0000000002ce", + "Ethernet16:2": "oid:0x1a0000000002cf", + "Ethernet16:3": "oid:0x1a0000000002d0", + "Ethernet16:4": "oid:0x1a0000000002d1", + "Ethernet16:5": "oid:0x1a0000000002d2", + "Ethernet16:6": "oid:0x1a0000000002d3", + "Ethernet16:7": "oid:0x1a0000000002d4", + "Ethernet17:0": "oid:0x1a0000000002f7", + "Ethernet17:1": "oid:0x1a0000000002f8", + "Ethernet17:2": "oid:0x1a0000000002f9", + "Ethernet17:3": "oid:0x1a0000000002fa", + "Ethernet17:4": "oid:0x1a0000000002fb", + "Ethernet17:5": "oid:0x1a0000000002fc", + "Ethernet17:6": "oid:0x1a0000000002fd", + "Ethernet17:7": "oid:0x1a0000000002fe", + "Ethernet18:0": "oid:0x1a000000000321", + "Ethernet18:1": "oid:0x1a000000000322", + "Ethernet18:2": "oid:0x1a000000000323", + "Ethernet18:3": "oid:0x1a000000000324", + "Ethernet18:4": "oid:0x1a000000000325", + "Ethernet18:5": "oid:0x1a000000000326", + "Ethernet18:6": "oid:0x1a000000000327", + "Ethernet18:7": "oid:0x1a000000000328", + "Ethernet19:0": "oid:0x1a00000000034b", + "Ethernet19:1": "oid:0x1a00000000034c", + "Ethernet19:2": "oid:0x1a00000000034d", + "Ethernet19:3": "oid:0x1a00000000034e", + "Ethernet19:4": "oid:0x1a00000000034f", + "Ethernet19:5": "oid:0x1a000000000350", + "Ethernet19:6": "oid:0x1a000000000351", + "Ethernet19:7": "oid:0x1a000000000352", + "Ethernet2:0": "oid:0x1a000000000081", + "Ethernet2:1": "oid:0x1a000000000082", + "Ethernet2:2": "oid:0x1a000000000083", + "Ethernet2:3": "oid:0x1a000000000084", + "Ethernet2:4": "oid:0x1a000000000085", + "Ethernet2:5": "oid:0x1a000000000086", + "Ethernet2:6": "oid:0x1a000000000087", + "Ethernet2:7": "oid:0x1a000000000088", + "Ethernet20:0": "oid:0x1a000000000375", + "Ethernet20:1": "oid:0x1a000000000376", + "Ethernet20:2": "oid:0x1a000000000377", + "Ethernet20:3": "oid:0x1a000000000378", + "Ethernet20:4": "oid:0x1a000000000379", + "Ethernet20:5": "oid:0x1a00000000037a", + "Ethernet20:6": "oid:0x1a00000000037b", + "Ethernet20:7": "oid:0x1a00000000037c", + "Ethernet21:0": "oid:0x1a00000000039f", + "Ethernet21:1": "oid:0x1a0000000003a0", + "Ethernet21:2": "oid:0x1a0000000003a1", + "Ethernet21:3": "oid:0x1a0000000003a2", + "Ethernet21:4": "oid:0x1a0000000003a3", + "Ethernet21:5": "oid:0x1a0000000003a4", + "Ethernet21:6": "oid:0x1a0000000003a5", + "Ethernet21:7": "oid:0x1a0000000003a6", + "Ethernet22:0": "oid:0x1a0000000003c9", + "Ethernet22:1": "oid:0x1a0000000003ca", + "Ethernet22:2": "oid:0x1a0000000003cb", + "Ethernet22:3": "oid:0x1a0000000003cc", + "Ethernet22:4": "oid:0x1a0000000003cd", + "Ethernet22:5": "oid:0x1a0000000003ce", + "Ethernet22:6": "oid:0x1a0000000003cf", + "Ethernet22:7": "oid:0x1a0000000003d0", + "Ethernet23:0": "oid:0x1a0000000003f3", + "Ethernet23:1": "oid:0x1a0000000003f4", + "Ethernet23:2": "oid:0x1a0000000003f5", + "Ethernet23:3": "oid:0x1a0000000003f6", + "Ethernet23:4": "oid:0x1a0000000003f7", + "Ethernet23:5": "oid:0x1a0000000003f8", + "Ethernet23:6": "oid:0x1a0000000003f9", + "Ethernet23:7": "oid:0x1a0000000003fa", + "Ethernet24:0": "oid:0x1a00000000041d", + "Ethernet24:1": "oid:0x1a00000000041e", + "Ethernet24:2": "oid:0x1a00000000041f", + "Ethernet24:3": "oid:0x1a000000000420", + "Ethernet24:4": "oid:0x1a000000000421", + "Ethernet24:5": "oid:0x1a000000000422", + "Ethernet24:6": "oid:0x1a000000000423", + "Ethernet24:7": "oid:0x1a000000000424", + "Ethernet25:0": "oid:0x1a000000000447", + "Ethernet25:1": "oid:0x1a000000000448", + "Ethernet25:2": "oid:0x1a000000000449", + "Ethernet25:3": "oid:0x1a00000000044a", + "Ethernet25:4": "oid:0x1a00000000044b", + "Ethernet25:5": "oid:0x1a00000000044c", + "Ethernet25:6": "oid:0x1a00000000044d", + "Ethernet25:7": "oid:0x1a00000000044e", + "Ethernet26:0": "oid:0x1a000000000471", + "Ethernet26:1": "oid:0x1a000000000472", + "Ethernet26:2": "oid:0x1a000000000473", + "Ethernet26:3": "oid:0x1a000000000474", + "Ethernet26:4": "oid:0x1a000000000475", + "Ethernet26:5": "oid:0x1a000000000476", + "Ethernet26:6": "oid:0x1a000000000477", + "Ethernet26:7": "oid:0x1a000000000478", + "Ethernet27:0": "oid:0x1a00000000049b", + "Ethernet27:1": "oid:0x1a00000000049c", + "Ethernet27:2": "oid:0x1a00000000049d", + "Ethernet27:3": "oid:0x1a00000000049e", + "Ethernet27:4": "oid:0x1a00000000049f", + "Ethernet27:5": "oid:0x1a0000000004a0", + "Ethernet27:6": "oid:0x1a0000000004a1", + "Ethernet27:7": "oid:0x1a0000000004a2", + "Ethernet28:0": "oid:0x1a0000000004c5", + "Ethernet28:1": "oid:0x1a0000000004c6", + "Ethernet28:2": "oid:0x1a0000000004c7", + "Ethernet28:3": "oid:0x1a0000000004c8", + "Ethernet28:4": "oid:0x1a0000000004c9", + "Ethernet28:5": "oid:0x1a0000000004ca", + "Ethernet28:6": "oid:0x1a0000000004cb", + "Ethernet28:7": "oid:0x1a0000000004cc", + "Ethernet29:0": "oid:0x1a0000000004ef", + "Ethernet29:1": "oid:0x1a0000000004f0", + "Ethernet29:2": "oid:0x1a0000000004f1", + "Ethernet29:3": "oid:0x1a0000000004f2", + "Ethernet29:4": "oid:0x1a0000000004f3", + "Ethernet29:5": "oid:0x1a0000000004f4", + "Ethernet29:6": "oid:0x1a0000000004f5", + "Ethernet29:7": "oid:0x1a0000000004f6", + "Ethernet3:0": "oid:0x1a0000000000ab", + "Ethernet3:1": "oid:0x1a0000000000ac", + "Ethernet3:2": "oid:0x1a0000000000ad", + "Ethernet3:3": "oid:0x1a0000000000ae", + "Ethernet3:4": "oid:0x1a0000000000af", + "Ethernet3:5": "oid:0x1a0000000000b0", + "Ethernet3:6": "oid:0x1a0000000000b1", + "Ethernet3:7": "oid:0x1a0000000000b2", + "Ethernet30:0": "oid:0x1a000000000519", + "Ethernet30:1": "oid:0x1a00000000051a", + "Ethernet30:2": "oid:0x1a00000000051b", + "Ethernet30:3": "oid:0x1a00000000051c", + "Ethernet30:4": "oid:0x1a00000000051d", + "Ethernet30:5": "oid:0x1a00000000051e", + "Ethernet30:6": "oid:0x1a00000000051f", + "Ethernet30:7": "oid:0x1a000000000520", + "Ethernet31:0": "oid:0x1a000000000543", + "Ethernet31:1": "oid:0x1a000000000544", + "Ethernet31:2": "oid:0x1a000000000545", + "Ethernet31:3": "oid:0x1a000000000546", + "Ethernet31:4": "oid:0x1a000000000547", + "Ethernet31:5": "oid:0x1a000000000548", + "Ethernet31:6": "oid:0x1a000000000549", + "Ethernet31:7": "oid:0x1a00000000054a", + "Ethernet32:0": "oid:0x1a00000000056d", + "Ethernet32:1": "oid:0x1a00000000056e", + "Ethernet32:2": "oid:0x1a00000000056f", + "Ethernet32:3": "oid:0x1a000000000570", + "Ethernet32:4": "oid:0x1a000000000571", + "Ethernet32:5": "oid:0x1a000000000572", + "Ethernet32:6": "oid:0x1a000000000573", + "Ethernet32:7": "oid:0x1a000000000574", + "Ethernet33:0": "oid:0x1a000000000597", + "Ethernet33:1": "oid:0x1a000000000598", + "Ethernet33:2": "oid:0x1a000000000599", + "Ethernet33:3": "oid:0x1a00000000059a", + "Ethernet33:4": "oid:0x1a00000000059b", + "Ethernet33:5": "oid:0x1a00000000059c", + "Ethernet33:6": "oid:0x1a00000000059d", + "Ethernet33:7": "oid:0x1a00000000059e", + "Ethernet34:0": "oid:0x1a0000000005c1", + "Ethernet34:1": "oid:0x1a0000000005c2", + "Ethernet34:2": "oid:0x1a0000000005c3", + "Ethernet34:3": "oid:0x1a0000000005c4", + "Ethernet34:4": "oid:0x1a0000000005c5", + "Ethernet34:5": "oid:0x1a0000000005c6", + "Ethernet34:6": "oid:0x1a0000000005c7", + "Ethernet34:7": "oid:0x1a0000000005c8", + "Ethernet35:0": "oid:0x1a0000000005eb", + "Ethernet35:1": "oid:0x1a0000000005ec", + "Ethernet35:2": "oid:0x1a0000000005ed", + "Ethernet35:3": "oid:0x1a0000000005ee", + "Ethernet35:4": "oid:0x1a0000000005ef", + "Ethernet35:5": "oid:0x1a0000000005f0", + "Ethernet35:6": "oid:0x1a0000000005f1", + "Ethernet35:7": "oid:0x1a0000000005f2", + "Ethernet36:0": "oid:0x1a000000000615", + "Ethernet36:1": "oid:0x1a000000000616", + "Ethernet36:2": "oid:0x1a000000000617", + "Ethernet36:3": "oid:0x1a000000000618", + "Ethernet36:4": "oid:0x1a000000000619", + "Ethernet36:5": "oid:0x1a00000000061a", + "Ethernet36:6": "oid:0x1a00000000061b", + "Ethernet36:7": "oid:0x1a00000000061c", + "Ethernet37:0": "oid:0x1a00000000063f", + "Ethernet37:1": "oid:0x1a000000000640", + "Ethernet37:2": "oid:0x1a000000000641", + "Ethernet37:3": "oid:0x1a000000000642", + "Ethernet37:4": "oid:0x1a000000000643", + "Ethernet37:5": "oid:0x1a000000000644", + "Ethernet37:6": "oid:0x1a000000000645", + "Ethernet37:7": "oid:0x1a000000000646", + "Ethernet38:0": "oid:0x1a000000000669", + "Ethernet38:1": "oid:0x1a00000000066a", + "Ethernet38:2": "oid:0x1a00000000066b", + "Ethernet38:3": "oid:0x1a00000000066c", + "Ethernet38:4": "oid:0x1a00000000066d", + "Ethernet38:5": "oid:0x1a00000000066e", + "Ethernet38:6": "oid:0x1a00000000066f", + "Ethernet38:7": "oid:0x1a000000000670", + "Ethernet39:0": "oid:0x1a000000000693", + "Ethernet39:1": "oid:0x1a000000000694", + "Ethernet39:2": "oid:0x1a000000000695", + "Ethernet39:3": "oid:0x1a000000000696", + "Ethernet39:4": "oid:0x1a000000000697", + "Ethernet39:5": "oid:0x1a000000000698", + "Ethernet39:6": "oid:0x1a000000000699", + "Ethernet39:7": "oid:0x1a00000000069a", + "Ethernet4:0": "oid:0x1a0000000000d5", + "Ethernet4:1": "oid:0x1a0000000000d6", + "Ethernet4:2": "oid:0x1a0000000000d7", + "Ethernet4:3": "oid:0x1a0000000000d8", + "Ethernet4:4": "oid:0x1a0000000000d9", + "Ethernet4:5": "oid:0x1a0000000000da", + "Ethernet4:6": "oid:0x1a0000000000db", + "Ethernet4:7": "oid:0x1a0000000000dc", + "Ethernet40:0": "oid:0x1a0000000006bd", + "Ethernet40:1": "oid:0x1a0000000006be", + "Ethernet40:2": "oid:0x1a0000000006bf", + "Ethernet40:3": "oid:0x1a0000000006c0", + "Ethernet40:4": "oid:0x1a0000000006c1", + "Ethernet40:5": "oid:0x1a0000000006c2", + "Ethernet40:6": "oid:0x1a0000000006c3", + "Ethernet40:7": "oid:0x1a0000000006c4", + "Ethernet41:0": "oid:0x1a0000000006e7", + "Ethernet41:1": "oid:0x1a0000000006e8", + "Ethernet41:2": "oid:0x1a0000000006e9", + "Ethernet41:3": "oid:0x1a0000000006ea", + "Ethernet41:4": "oid:0x1a0000000006eb", + "Ethernet41:5": "oid:0x1a0000000006ec", + "Ethernet41:6": "oid:0x1a0000000006ed", + "Ethernet41:7": "oid:0x1a0000000006ee", + "Ethernet42:0": "oid:0x1a000000000711", + "Ethernet42:1": "oid:0x1a000000000712", + "Ethernet42:2": "oid:0x1a000000000713", + "Ethernet42:3": "oid:0x1a000000000714", + "Ethernet42:4": "oid:0x1a000000000715", + "Ethernet42:5": "oid:0x1a000000000716", + "Ethernet42:6": "oid:0x1a000000000717", + "Ethernet42:7": "oid:0x1a000000000718", + "Ethernet43:0": "oid:0x1a00000000073b", + "Ethernet43:1": "oid:0x1a00000000073c", + "Ethernet43:2": "oid:0x1a00000000073d", + "Ethernet43:3": "oid:0x1a00000000073e", + "Ethernet43:4": "oid:0x1a00000000073f", + "Ethernet43:5": "oid:0x1a000000000740", + "Ethernet43:6": "oid:0x1a000000000741", + "Ethernet43:7": "oid:0x1a000000000742", + "Ethernet44:0": "oid:0x1a000000000765", + "Ethernet44:1": "oid:0x1a000000000766", + "Ethernet44:2": "oid:0x1a000000000767", + "Ethernet44:3": "oid:0x1a000000000768", + "Ethernet44:4": "oid:0x1a000000000769", + "Ethernet44:5": "oid:0x1a00000000076a", + "Ethernet44:6": "oid:0x1a00000000076b", + "Ethernet44:7": "oid:0x1a00000000076c", + "Ethernet45:0": "oid:0x1a00000000078f", + "Ethernet45:1": "oid:0x1a000000000790", + "Ethernet45:2": "oid:0x1a000000000791", + "Ethernet45:3": "oid:0x1a000000000792", + "Ethernet45:4": "oid:0x1a000000000793", + "Ethernet45:5": "oid:0x1a000000000794", + "Ethernet45:6": "oid:0x1a000000000795", + "Ethernet45:7": "oid:0x1a000000000796", + "Ethernet46:0": "oid:0x1a0000000007b9", + "Ethernet46:1": "oid:0x1a0000000007ba", + "Ethernet46:2": "oid:0x1a0000000007bb", + "Ethernet46:3": "oid:0x1a0000000007bc", + "Ethernet46:4": "oid:0x1a0000000007bd", + "Ethernet46:5": "oid:0x1a0000000007be", + "Ethernet46:6": "oid:0x1a0000000007bf", + "Ethernet46:7": "oid:0x1a0000000007c0", + "Ethernet47:0": "oid:0x1a0000000007e3", + "Ethernet47:1": "oid:0x1a0000000007e4", + "Ethernet47:2": "oid:0x1a0000000007e5", + "Ethernet47:3": "oid:0x1a0000000007e6", + "Ethernet47:4": "oid:0x1a0000000007e7", + "Ethernet47:5": "oid:0x1a0000000007e8", + "Ethernet47:6": "oid:0x1a0000000007e9", + "Ethernet47:7": "oid:0x1a0000000007ea", + "Ethernet48:0": "oid:0x1a00000000080d", + "Ethernet48:1": "oid:0x1a00000000080e", + "Ethernet48:2": "oid:0x1a00000000080f", + "Ethernet48:3": "oid:0x1a000000000810", + "Ethernet48:4": "oid:0x1a000000000811", + "Ethernet48:5": "oid:0x1a000000000812", + "Ethernet48:6": "oid:0x1a000000000813", + "Ethernet48:7": "oid:0x1a000000000814", + "Ethernet5:0": "oid:0x1a0000000000ff", + "Ethernet5:1": "oid:0x1a000000000100", + "Ethernet5:2": "oid:0x1a000000000101", + "Ethernet5:3": "oid:0x1a000000000102", + "Ethernet5:4": "oid:0x1a000000000103", + "Ethernet5:5": "oid:0x1a000000000104", + "Ethernet5:6": "oid:0x1a000000000105", + "Ethernet5:7": "oid:0x1a000000000106", + "Ethernet52:0": "oid:0x1a000000000837", + "Ethernet52:1": "oid:0x1a000000000838", + "Ethernet52:2": "oid:0x1a000000000839", + "Ethernet52:3": "oid:0x1a00000000083a", + "Ethernet52:4": "oid:0x1a00000000083b", + "Ethernet52:5": "oid:0x1a00000000083c", + "Ethernet52:6": "oid:0x1a00000000083d", + "Ethernet52:7": "oid:0x1a00000000083e", + "Ethernet56:0": "oid:0x1a000000000861", + "Ethernet56:1": "oid:0x1a000000000862", + "Ethernet56:2": "oid:0x1a000000000863", + "Ethernet56:3": "oid:0x1a000000000864", + "Ethernet56:4": "oid:0x1a000000000865", + "Ethernet56:5": "oid:0x1a000000000866", + "Ethernet56:6": "oid:0x1a000000000867", + "Ethernet56:7": "oid:0x1a000000000868", + "Ethernet6:0": "oid:0x1a000000000129", + "Ethernet6:1": "oid:0x1a00000000012a", + "Ethernet6:2": "oid:0x1a00000000012b", + "Ethernet6:3": "oid:0x1a00000000012c", + "Ethernet6:4": "oid:0x1a00000000012d", + "Ethernet6:5": "oid:0x1a00000000012e", + "Ethernet6:6": "oid:0x1a00000000012f", + "Ethernet6:7": "oid:0x1a000000000130", + "Ethernet60:0": "oid:0x1a00000000088b", + "Ethernet60:1": "oid:0x1a00000000088c", + "Ethernet60:2": "oid:0x1a00000000088d", + "Ethernet60:3": "oid:0x1a00000000088e", + "Ethernet60:4": "oid:0x1a00000000088f", + "Ethernet60:5": "oid:0x1a000000000890", + "Ethernet60:6": "oid:0x1a000000000891", + "Ethernet60:7": "oid:0x1a000000000892", + "Ethernet64:0": "oid:0x1a0000000008b5", + "Ethernet64:1": "oid:0x1a0000000008b6", + "Ethernet64:2": "oid:0x1a0000000008b7", + "Ethernet64:3": "oid:0x1a0000000008b8", + "Ethernet64:4": "oid:0x1a0000000008b9", + "Ethernet64:5": "oid:0x1a0000000008ba", + "Ethernet64:6": "oid:0x1a0000000008bb", + "Ethernet64:7": "oid:0x1a0000000008bc", + "Ethernet68:0": "oid:0x1a0000000008df", + "Ethernet68:1": "oid:0x1a0000000008e0", + "Ethernet68:2": "oid:0x1a0000000008e1", + "Ethernet68:3": "oid:0x1a0000000008e2", + "Ethernet68:4": "oid:0x1a0000000008e3", + "Ethernet68:5": "oid:0x1a0000000008e4", + "Ethernet68:6": "oid:0x1a0000000008e5", + "Ethernet68:7": "oid:0x1a0000000008e6", + "Ethernet7:0": "oid:0x1a000000000153", + "Ethernet7:1": "oid:0x1a000000000154", + "Ethernet7:2": "oid:0x1a000000000155", + "Ethernet7:3": "oid:0x1a000000000156", + "Ethernet7:4": "oid:0x1a000000000157", + "Ethernet7:5": "oid:0x1a000000000158", + "Ethernet7:6": "oid:0x1a000000000159", + "Ethernet7:7": "oid:0x1a00000000015a", + "Ethernet8:0": "oid:0x1a00000000017d", + "Ethernet8:1": "oid:0x1a00000000017e", + "Ethernet8:2": "oid:0x1a00000000017f", + "Ethernet8:3": "oid:0x1a000000000180", + "Ethernet8:4": "oid:0x1a000000000181", + "Ethernet8:5": "oid:0x1a000000000182", + "Ethernet8:6": "oid:0x1a000000000183", + "Ethernet8:7": "oid:0x1a000000000184", + "Ethernet9:0": "oid:0x1a0000000001a7", + "Ethernet9:1": "oid:0x1a0000000001a8", + "Ethernet9:2": "oid:0x1a0000000001a9", + "Ethernet9:3": "oid:0x1a0000000001aa", + "Ethernet9:4": "oid:0x1a0000000001ab", + "Ethernet9:5": "oid:0x1a0000000001ac", + "Ethernet9:6": "oid:0x1a0000000001ad", + "Ethernet9:7": "oid:0x1a0000000001ae" +} diff --git a/testdata/PERIODIC_WATERMARKS:Ethernet16:PriorityGroups.txt b/testdata/PERIODIC_WATERMARKS:Ethernet16:PriorityGroups.txt new file mode 100644 index 000000000..ba2bec5c6 --- /dev/null +++ b/testdata/PERIODIC_WATERMARKS:Ethernet16:PriorityGroups.txt @@ -0,0 +1,13 @@ +{ + "Ethernet16:0": {}, + "Ethernet16:1": {}, + "Ethernet16:2": {}, + "Ethernet16:3": {}, + "Ethernet16:4": {}, + "Ethernet16:5": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "0", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "0" + }, + "Ethernet16:6": {}, + "Ethernet16:7": {} +} diff --git a/testdata/PERIODIC_WATERMARKS:Ethernet16:PriorityGroups_alias.txt b/testdata/PERIODIC_WATERMARKS:Ethernet16:PriorityGroups_alias.txt new file mode 100644 index 000000000..2b9ede019 --- /dev/null +++ b/testdata/PERIODIC_WATERMARKS:Ethernet16:PriorityGroups_alias.txt @@ -0,0 +1,13 @@ +{ + "Ethernet16/1:0": {}, + "Ethernet16/1:1": {}, + "Ethernet16/1:2": {}, + "Ethernet16/1:3": {}, + "Ethernet16/1:4": {}, + "Ethernet16/1:5": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "0", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "0" + }, + "Ethernet16/1:6": {}, + "Ethernet16/1:7": {} +} diff --git a/testdata/PERIODIC_WATERMARKS:Ethernet_wildcard:PriorityGroups_alias.txt b/testdata/PERIODIC_WATERMARKS:Ethernet_wildcard:PriorityGroups_alias.txt new file mode 100644 index 000000000..d0a39e228 --- /dev/null +++ b/testdata/PERIODIC_WATERMARKS:Ethernet_wildcard:PriorityGroups_alias.txt @@ -0,0 +1,437 @@ +{ + "Ethernet0/1:0": {}, + "Ethernet0/1:1": {}, + "Ethernet0/1:2": {}, + "Ethernet0/1:3": {}, + "Ethernet0/1:4": {}, + "Ethernet0/1:5": {}, + "Ethernet0/1:6": {}, + "Ethernet0/1:7": {}, + "Ethernet1/1:0": {}, + "Ethernet1/1:1": {}, + "Ethernet1/1:2": {}, + "Ethernet1/1:3": {}, + "Ethernet1/1:4": {}, + "Ethernet1/1:5": {}, + "Ethernet1/1:6": {}, + "Ethernet1/1:7": {}, + "Ethernet10/1:0": {}, + "Ethernet10/1:1": {}, + "Ethernet10/1:2": {}, + "Ethernet10/1:3": {}, + "Ethernet10/1:4": {}, + "Ethernet10/1:5": {}, + "Ethernet10/1:6": {}, + "Ethernet10/1:7": {}, + "Ethernet11/1:0": {}, + "Ethernet11/1:1": {}, + "Ethernet11/1:2": {}, + "Ethernet11/1:3": {}, + "Ethernet11/1:4": {}, + "Ethernet11/1:5": {}, + "Ethernet11/1:6": {}, + "Ethernet11/1:7": {}, + "Ethernet12/1:0": {}, + "Ethernet12/1:1": {}, + "Ethernet12/1:2": {}, + "Ethernet12/1:3": {}, + "Ethernet12/1:4": {}, + "Ethernet12/1:5": {}, + "Ethernet12/1:6": {}, + "Ethernet12/1:7": {}, + "Ethernet13/1:0": {}, + "Ethernet13/1:1": {}, + "Ethernet13/1:2": {}, + "Ethernet13/1:3": {}, + "Ethernet13/1:4": {}, + "Ethernet13/1:5": {}, + "Ethernet13/1:6": {}, + "Ethernet13/1:7": {}, + "Ethernet14/1:0": {}, + "Ethernet14/1:1": {}, + "Ethernet14/1:2": {}, + "Ethernet14/1:3": {}, + "Ethernet14/1:4": {}, + "Ethernet14/1:5": {}, + "Ethernet14/1:6": {}, + "Ethernet14/1:7": {}, + "Ethernet15/1:0": {}, + "Ethernet15/1:1": {}, + "Ethernet15/1:2": {}, + "Ethernet15/1:3": {}, + "Ethernet15/1:4": {}, + "Ethernet15/1:5": {}, + "Ethernet15/1:6": {}, + "Ethernet15/1:7": {}, + "Ethernet16/1:0": {}, + "Ethernet16/1:1": {}, + "Ethernet16/1:2": {}, + "Ethernet16/1:3": {}, + "Ethernet16/1:4": {}, + "Ethernet16/1:5": { + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "0", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "0" + }, + "Ethernet16/1:6": {}, + "Ethernet16/1:7": {}, + "Ethernet17/1:0": {}, + "Ethernet17/1:1": {}, + "Ethernet17/1:2": {}, + "Ethernet17/1:3": {}, + "Ethernet17/1:4": {}, + "Ethernet17/1:5": {}, + "Ethernet17/1:6": {}, + "Ethernet17/1:7": {}, + "Ethernet18/1:0": {}, + "Ethernet18/1:1": {}, + "Ethernet18/1:2": {}, + "Ethernet18/1:3": {}, + "Ethernet18/1:4": {}, + "Ethernet18/1:5": {}, + "Ethernet18/1:6": {}, + "Ethernet18/1:7": {}, + "Ethernet19/1:0": {}, + "Ethernet19/1:1": {}, + "Ethernet19/1:2": {}, + "Ethernet19/1:3": {}, + "Ethernet19/1:4": {}, + "Ethernet19/1:5": {}, + "Ethernet19/1:6": {}, + "Ethernet19/1:7": {}, + "Ethernet2/1:0": {}, + "Ethernet2/1:1": {}, + "Ethernet2/1:2": {}, + "Ethernet2/1:3": {}, + "Ethernet2/1:4": {}, + "Ethernet2/1:5": {}, + "Ethernet2/1:6": {}, + "Ethernet2/1:7": {}, + "Ethernet20/1:0": {}, + "Ethernet20/1:1": {}, + "Ethernet20/1:2": {}, + "Ethernet20/1:3": {}, + "Ethernet20/1:4": {}, + "Ethernet20/1:5": {}, + "Ethernet20/1:6": {}, + "Ethernet20/1:7": {}, + "Ethernet21/1:0": {}, + "Ethernet21/1:1": {}, + "Ethernet21/1:2": {}, + "Ethernet21/1:3": {}, + "Ethernet21/1:4": {}, + "Ethernet21/1:5": {}, + "Ethernet21/1:6": {}, + "Ethernet21/1:7": {}, + "Ethernet22/1:0": {}, + "Ethernet22/1:1": {}, + "Ethernet22/1:2": {}, + "Ethernet22/1:3": {}, + "Ethernet22/1:4": {}, + "Ethernet22/1:5": {}, + "Ethernet22/1:6": {}, + "Ethernet22/1:7": {}, + "Ethernet23/1:0": {}, + "Ethernet23/1:1": {}, + "Ethernet23/1:2": {}, + "Ethernet23/1:3": {}, + "Ethernet23/1:4": {}, + "Ethernet23/1:5": {}, + "Ethernet23/1:6": {}, + "Ethernet23/1:7": {}, + "Ethernet24/1:0": {}, + "Ethernet24/1:1": {}, + "Ethernet24/1:2": {}, + "Ethernet24/1:3": {}, + "Ethernet24/1:4": {}, + "Ethernet24/1:5": {}, + "Ethernet24/1:6": {}, + "Ethernet24/1:7": {}, + "Ethernet25/1:0": {}, + "Ethernet25/1:1": {}, + "Ethernet25/1:2": {}, + "Ethernet25/1:3": {}, + "Ethernet25/1:4": {}, + "Ethernet25/1:5": {}, + "Ethernet25/1:6": {}, + "Ethernet25/1:7": {}, + "Ethernet26/1:0": {}, + "Ethernet26/1:1": {}, + "Ethernet26/1:2": {}, + "Ethernet26/1:3": {}, + "Ethernet26/1:4": {}, + "Ethernet26/1:5": {}, + "Ethernet26/1:6": {}, + "Ethernet26/1:7": {}, + "Ethernet27/1:0": {}, + "Ethernet27/1:1": {}, + "Ethernet27/1:2": {}, + "Ethernet27/1:3": {}, + "Ethernet27/1:4": {}, + "Ethernet27/1:5": {}, + "Ethernet27/1:6": {}, + "Ethernet27/1:7": {}, + "Ethernet28/1:0": {}, + "Ethernet28/1:1": {}, + "Ethernet28/1:2": {}, + "Ethernet28/1:3": {}, + "Ethernet28/1:4": {}, + "Ethernet28/1:5": {}, + "Ethernet28/1:6": {}, + "Ethernet28/1:7": {}, + "Ethernet29/1:0": {}, + "Ethernet29/1:1": {}, + "Ethernet29/1:2": {}, + "Ethernet29/1:3": {}, + "Ethernet29/1:4": {}, + "Ethernet29/1:5": {}, + "Ethernet29/1:6": {}, + "Ethernet29/1:7": {}, + "Ethernet3/1:0": {}, + "Ethernet3/1:1": {}, + "Ethernet3/1:2": {}, + "Ethernet3/1:3": {}, + "Ethernet3/1:4": {}, + "Ethernet3/1:5": {}, + "Ethernet3/1:6": {}, + "Ethernet3/1:7": {}, + "Ethernet30/1:0": {}, + "Ethernet30/1:1": {}, + "Ethernet30/1:2": {}, + "Ethernet30/1:3": {}, + "Ethernet30/1:4": {}, + "Ethernet30/1:5": {}, + "Ethernet30/1:6": {}, + "Ethernet30/1:7": {}, + "Ethernet31/1:0": {}, + "Ethernet31/1:1": {}, + "Ethernet31/1:2": {}, + "Ethernet31/1:3": {}, + "Ethernet31/1:4": {}, + "Ethernet31/1:5": {}, + "Ethernet31/1:6": {}, + "Ethernet31/1:7": {}, + "Ethernet32/1:0": {}, + "Ethernet32/1:1": {}, + "Ethernet32/1:2": {}, + "Ethernet32/1:3": {}, + "Ethernet32/1:4": {}, + "Ethernet32/1:5": {}, + "Ethernet32/1:6": {}, + "Ethernet32/1:7": {}, + "Ethernet33/1:0": {}, + "Ethernet33/1:1": {}, + "Ethernet33/1:2": {}, + "Ethernet33/1:3": {}, + "Ethernet33/1:4": {}, + "Ethernet33/1:5": {}, + "Ethernet33/1:6": {}, + "Ethernet33/1:7": {}, + "Ethernet34/1:0": {}, + "Ethernet34/1:1": {}, + "Ethernet34/1:2": {}, + "Ethernet34/1:3": {}, + "Ethernet34/1:4": {}, + "Ethernet34/1:5": {}, + "Ethernet34/1:6": {}, + "Ethernet34/1:7": {}, + "Ethernet35/1:0": {}, + "Ethernet35/1:1": {}, + "Ethernet35/1:2": {}, + "Ethernet35/1:3": {}, + "Ethernet35/1:4": {}, + "Ethernet35/1:5": {}, + "Ethernet35/1:6": {}, + "Ethernet35/1:7": {}, + "Ethernet36/1:0": {}, + "Ethernet36/1:1": {}, + "Ethernet36/1:2": {}, + "Ethernet36/1:3": {}, + "Ethernet36/1:4": {}, + "Ethernet36/1:5": {}, + "Ethernet36/1:6": {}, + "Ethernet36/1:7": {}, + "Ethernet37/1:0": {}, + "Ethernet37/1:1": {}, + "Ethernet37/1:2": {}, + "Ethernet37/1:3": {}, + "Ethernet37/1:4": {}, + "Ethernet37/1:5": {}, + "Ethernet37/1:6": {}, + "Ethernet37/1:7": {}, + "Ethernet38/1:0": {}, + "Ethernet38/1:1": {}, + "Ethernet38/1:2": {}, + "Ethernet38/1:3": {}, + "Ethernet38/1:4": {}, + "Ethernet38/1:5": {}, + "Ethernet38/1:6": {}, + "Ethernet38/1:7": {}, + "Ethernet39/1:0": {}, + "Ethernet39/1:1": {}, + "Ethernet39/1:2": {}, + "Ethernet39/1:3": {}, + "Ethernet39/1:4": {}, + "Ethernet39/1:5": {}, + "Ethernet39/1:6": {}, + "Ethernet39/1:7": {}, + "Ethernet4/1:0": {}, + "Ethernet4/1:1": {}, + "Ethernet4/1:2": {}, + "Ethernet4/1:3": {}, + "Ethernet4/1:4": {}, + "Ethernet4/1:5": {}, + "Ethernet4/1:6": {}, + "Ethernet4/1:7": {}, + "Ethernet40/1:0": {}, + "Ethernet40/1:1": {}, + "Ethernet40/1:2": {}, + "Ethernet40/1:3": {}, + "Ethernet40/1:4": {}, + "Ethernet40/1:5": {}, + "Ethernet40/1:6": {}, + "Ethernet40/1:7": {}, + "Ethernet41/1:0": {}, + "Ethernet41/1:1": {}, + "Ethernet41/1:2": {}, + "Ethernet41/1:3": {}, + "Ethernet41/1:4": {}, + "Ethernet41/1:5": {}, + "Ethernet41/1:6": {}, + "Ethernet41/1:7": {}, + "Ethernet42/1:0": {}, + "Ethernet42/1:1": {}, + "Ethernet42/1:2": {}, + "Ethernet42/1:3": {}, + "Ethernet42/1:4": {}, + "Ethernet42/1:5": {}, + "Ethernet42/1:6": {}, + "Ethernet42/1:7": {}, + "Ethernet43/1:0": {}, + "Ethernet43/1:1": {}, + "Ethernet43/1:2": {}, + "Ethernet43/1:3": {}, + "Ethernet43/1:4": {}, + "Ethernet43/1:5": {}, + "Ethernet43/1:6": {}, + "Ethernet43/1:7": {}, + "Ethernet44/1:0": {}, + "Ethernet44/1:1": {}, + "Ethernet44/1:2": {}, + "Ethernet44/1:3": {}, + "Ethernet44/1:4": {}, + "Ethernet44/1:5": {}, + "Ethernet44/1:6": {}, + "Ethernet44/1:7": {}, + "Ethernet45/1:0": {}, + "Ethernet45/1:1": {}, + "Ethernet45/1:2": {}, + "Ethernet45/1:3": {}, + "Ethernet45/1:4": {}, + "Ethernet45/1:5": {}, + "Ethernet45/1:6": {}, + "Ethernet45/1:7": {}, + "Ethernet46/1:0": {}, + "Ethernet46/1:1": {}, + "Ethernet46/1:2": {}, + "Ethernet46/1:3": {}, + "Ethernet46/1:4": {}, + "Ethernet46/1:5": {}, + "Ethernet46/1:6": {}, + "Ethernet46/1:7": {}, + "Ethernet47/1:0": {}, + "Ethernet47/1:1": {}, + "Ethernet47/1:2": {}, + "Ethernet47/1:3": {}, + "Ethernet47/1:4": {}, + "Ethernet47/1:5": {}, + "Ethernet47/1:6": {}, + "Ethernet47/1:7": {}, + "Ethernet48/1:0": {}, + "Ethernet48/1:1": {}, + "Ethernet48/1:2": {}, + "Ethernet48/1:3": {}, + "Ethernet48/1:4": {}, + "Ethernet48/1:5": {}, + "Ethernet48/1:6": {}, + "Ethernet48/1:7": {}, + "Ethernet5/1:0": {}, + "Ethernet5/1:1": {}, + "Ethernet5/1:2": {}, + "Ethernet5/1:3": {}, + "Ethernet5/1:4": {}, + "Ethernet5/1:5": {}, + "Ethernet5/1:6": {}, + "Ethernet5/1:7": {}, + "Ethernet52/1:0": {}, + "Ethernet52/1:1": {}, + "Ethernet52/1:2": {}, + "Ethernet52/1:3": {}, + "Ethernet52/1:4": {}, + "Ethernet52/1:5": {}, + "Ethernet52/1:6": {}, + "Ethernet52/1:7": {}, + "Ethernet56/1:0": {}, + "Ethernet56/1:1": {}, + "Ethernet56/1:2": {}, + "Ethernet56/1:3": {}, + "Ethernet56/1:4": {}, + "Ethernet56/1:5": {}, + "Ethernet56/1:6": {}, + "Ethernet56/1:7": {}, + "Ethernet6/1:0": {}, + "Ethernet6/1:1": {}, + "Ethernet6/1:2": {}, + "Ethernet6/1:3": {}, + "Ethernet6/1:4": {}, + "Ethernet6/1:5": {}, + "Ethernet6/1:6": {}, + "Ethernet6/1:7": {}, + "Ethernet60/1:0": {}, + "Ethernet60/1:1": {}, + "Ethernet60/1:2": {}, + "Ethernet60/1:3": {}, + "Ethernet60/1:4": {}, + "Ethernet60/1:5": {}, + "Ethernet60/1:6": {}, + "Ethernet60/1:7": {}, + "Ethernet64/1:0": {}, + "Ethernet64/1:1": {}, + "Ethernet64/1:2": {}, + "Ethernet64/1:3": {}, + "Ethernet64/1:4": {}, + "Ethernet64/1:5": {}, + "Ethernet64/1:6": {}, + "Ethernet64/1:7": {}, + "Ethernet68/1:0": {}, + "Ethernet68/1:1": {}, + "Ethernet68/1:2": {}, + "Ethernet68/1:3": {}, + "Ethernet68/1:4": {}, + "Ethernet68/1:5": {}, + "Ethernet68/1:6": {}, + "Ethernet68/1:7": {}, + "Ethernet7/1:0": {}, + "Ethernet7/1:1": {}, + "Ethernet7/1:2": {}, + "Ethernet7/1:3": {}, + "Ethernet7/1:4": {}, + "Ethernet7/1:5": {}, + "Ethernet7/1:6": {}, + "Ethernet7/1:7": {}, + "Ethernet8/1:0": {}, + "Ethernet8/1:1": {}, + "Ethernet8/1:2": {}, + "Ethernet8/1:3": {}, + "Ethernet8/1:4": {}, + "Ethernet8/1:5": {}, + "Ethernet8/1:6": {}, + "Ethernet8/1:7": {}, + "Ethernet9/1:0": {}, + "Ethernet9/1:1": {}, + "Ethernet9/1:2": {}, + "Ethernet9/1:3": {}, + "Ethernet9/1:4": {}, + "Ethernet9/1:5": {}, + "Ethernet9/1:6": {}, + "Ethernet9/1:7": {} +} \ No newline at end of file diff --git a/testdata/PERIODIC_WATERMARKS:oid:0x1500000000091c.txt b/testdata/PERIODIC_WATERMARKS:oid:0x1500000000091c.txt new file mode 100644 index 000000000..c5805d9e8 --- /dev/null +++ b/testdata/PERIODIC_WATERMARKS:oid:0x1500000000091c.txt @@ -0,0 +1,3 @@ +{ + "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES": "192" +} diff --git a/testdata/PERIODIC_WATERMARKS:oid:0x1a0000000002d2.txt b/testdata/PERIODIC_WATERMARKS:oid:0x1a0000000002d2.txt new file mode 100644 index 000000000..88a7704a4 --- /dev/null +++ b/testdata/PERIODIC_WATERMARKS:oid:0x1a0000000002d2.txt @@ -0,0 +1,4 @@ +{ + "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES": "0", + "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES": "0" +} From 0480d3e32ed5e63d513350f7fb6ea1db15a7e198 Mon Sep 17 00:00:00 2001 From: Mahdi Ramezani Date: Thu, 2 Apr 2026 17:30:17 +0000 Subject: [PATCH 2/2] Fixed build issue. Signed-off-by: Mahdi Ramezani --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 57a53791a..d7e68a5a7 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -55,7 +55,7 @@ stages: DIFF_COVER_WORKING_DIRECTORY: $(System.DefaultWorkingDirectory)/sonic-gnmi container: - image: sonicdev-microsoft.azurecr.io:443/sonic-slave-bookworm:latest + image: sonicdev-microsoft.azurecr.io:443/sonic-slave-bookworm:202505 steps: - checkout: self