Skip to content

Commit a718226

Browse files
authored
[Counters] Query Counters Stats Capabilities (sonic-net#952)
1 parent 433c8df commit a718226

26 files changed

+631
-14
lines changed

lib/ClientSai.cpp

+10
Original file line numberDiff line numberDiff line change
@@ -886,6 +886,16 @@ sai_status_t ClientSai::getStats(
886886
return waitForGetStatsResponse(number_of_counters, counters);
887887
}
888888

889+
sai_status_t ClientSai::queryStatsCapability(
890+
_In_ sai_object_id_t switchId,
891+
_In_ sai_object_type_t objectType,
892+
_Inout_ sai_stat_capability_list_t *stats_capability)
893+
{
894+
SWSS_LOG_ENTER();
895+
896+
return SAI_STATUS_NOT_IMPLEMENTED;
897+
}
898+
889899
sai_status_t ClientSai::waitForGetStatsResponse(
890900
_In_ uint32_t number_of_counters,
891901
_Out_ uint64_t *counters)

lib/ClientSai.h

+5
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,11 @@ namespace sairedis
9797
_In_ const sai_stat_id_t *counter_ids,
9898
_Out_ uint64_t *counters) override;
9999

100+
virtual sai_status_t queryStatsCapability(
101+
_In_ sai_object_id_t switch_id,
102+
_In_ sai_object_type_t object_type,
103+
_Inout_ sai_stat_capability_list_t *stats_capability) override;
104+
100105
virtual sai_status_t getStatsExt(
101106
_In_ sai_object_type_t object_type,
102107
_In_ sai_object_id_t object_id,

lib/ClientServerSai.cpp

+12
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,18 @@ sai_status_t ClientServerSai::getStats(
247247
counters);
248248
}
249249

250+
sai_status_t ClientServerSai::queryStatsCapability(
251+
_In_ sai_object_id_t switchId,
252+
_In_ sai_object_type_t objectType,
253+
_Inout_ sai_stat_capability_list_t *stats_capability)
254+
{
255+
MUTEX();
256+
SWSS_LOG_ENTER();
257+
REDIS_CHECK_API_INITIALIZED();
258+
259+
return SAI_STATUS_NOT_IMPLEMENTED;
260+
}
261+
250262
sai_status_t ClientServerSai::getStatsExt(
251263
_In_ sai_object_type_t object_type,
252264
_In_ sai_object_id_t object_id,

lib/ClientServerSai.h

+5
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,11 @@ namespace sairedis
8989
_In_ const sai_stat_id_t *counter_ids,
9090
_Out_ uint64_t *counters) override;
9191

92+
virtual sai_status_t queryStatsCapability(
93+
_In_ sai_object_id_t switch_id,
94+
_In_ sai_object_type_t object_type,
95+
_Inout_ sai_stat_capability_list_t *stats_capability) override;
96+
9297
virtual sai_status_t getStatsExt(
9398
_In_ sai_object_type_t object_type,
9499
_In_ sai_object_id_t object_id,

lib/RedisRemoteSaiInterface.cpp

+10
Original file line numberDiff line numberDiff line change
@@ -1125,6 +1125,16 @@ sai_status_t RedisRemoteSaiInterface::getStats(
11251125
return waitForGetStatsResponse(number_of_counters, counters);
11261126
}
11271127

1128+
sai_status_t RedisRemoteSaiInterface::queryStatsCapability(
1129+
_In_ sai_object_id_t switchId,
1130+
_In_ sai_object_type_t objectType,
1131+
_Inout_ sai_stat_capability_list_t *stats_capability)
1132+
{
1133+
SWSS_LOG_ENTER();
1134+
1135+
return SAI_STATUS_NOT_IMPLEMENTED;
1136+
}
1137+
11281138
sai_status_t RedisRemoteSaiInterface::waitForGetStatsResponse(
11291139
_In_ uint32_t number_of_counters,
11301140
_Out_ uint64_t *counters)

lib/RedisRemoteSaiInterface.h

+5
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,11 @@ namespace sairedis
108108
_In_ const sai_stat_id_t *counter_ids,
109109
_Out_ uint64_t *counters) override;
110110

111+
virtual sai_status_t queryStatsCapability(
112+
_In_ sai_object_id_t switch_id,
113+
_In_ sai_object_type_t object_type,
114+
_Inout_ sai_stat_capability_list_t *stats_capability) override;
115+
111116
virtual sai_status_t getStatsExt(
112117
_In_ sai_object_type_t object_type,
113118
_In_ sai_object_id_t object_id,

lib/Sai.cpp

+10
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,16 @@ sai_status_t Sai::getStats(
351351
counters);
352352
}
353353

354+
sai_status_t Sai::queryStatsCapability(
355+
_In_ sai_object_id_t switchId,
356+
_In_ sai_object_type_t objectType,
357+
_Inout_ sai_stat_capability_list_t *stats_capability)
358+
{
359+
SWSS_LOG_ENTER();
360+
361+
return SAI_STATUS_NOT_IMPLEMENTED;
362+
}
363+
354364
sai_status_t Sai::getStatsExt(
355365
_In_ sai_object_type_t object_type,
356366
_In_ sai_object_id_t object_id,

lib/Sai.h

+5
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,11 @@ namespace sairedis
9898
_In_ const sai_stat_id_t *counter_ids,
9999
_Out_ uint64_t *counters) override;
100100

101+
virtual sai_status_t queryStatsCapability(
102+
_In_ sai_object_id_t switch_id,
103+
_In_ sai_object_type_t object_type,
104+
_Inout_ sai_stat_capability_list_t *stats_capability) override;
105+
101106
virtual sai_status_t getStatsExt(
102107
_In_ sai_object_type_t object_type,
103108
_In_ sai_object_id_t object_id,

lib/ServerSai.cpp

+10
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,16 @@ sai_status_t ServerSai::getStats(
269269
counters);
270270
}
271271

272+
sai_status_t ServerSai::queryStatsCapability(
273+
_In_ sai_object_id_t switchId,
274+
_In_ sai_object_type_t objectType,
275+
_Inout_ sai_stat_capability_list_t *stats_capability)
276+
{
277+
SWSS_LOG_ENTER();
278+
279+
return SAI_STATUS_NOT_IMPLEMENTED;
280+
}
281+
272282
sai_status_t ServerSai::getStatsExt(
273283
_In_ sai_object_type_t object_type,
274284
_In_ sai_object_id_t object_id,

lib/ServerSai.h

+5
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,11 @@ namespace sairedis
9494
_In_ const sai_stat_id_t *counter_ids,
9595
_Out_ uint64_t *counters) override;
9696

97+
virtual sai_status_t queryStatsCapability(
98+
_In_ sai_object_id_t switch_id,
99+
_In_ sai_object_type_t object_type,
100+
_Inout_ sai_stat_capability_list_t *stats_capability) override;
101+
97102
virtual sai_status_t getStatsExt(
98103
_In_ sai_object_type_t object_type,
99104
_In_ sai_object_id_t object_id,

meta/DummySaiInterface.cpp

+10
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,16 @@ sai_status_t DummySaiInterface::getStats(
179179
return m_status;
180180
}
181181

182+
sai_status_t DummySaiInterface::queryStatsCapability(
183+
_In_ sai_object_id_t switchId,
184+
_In_ sai_object_type_t objectType,
185+
_Inout_ sai_stat_capability_list_t *stats_capability)
186+
{
187+
SWSS_LOG_ENTER();
188+
189+
return SAI_STATUS_NOT_IMPLEMENTED;
190+
}
191+
182192
sai_status_t DummySaiInterface::getStatsExt(
183193
_In_ sai_object_type_t object_type,
184194
_In_ sai_object_id_t object_id,

meta/DummySaiInterface.h

+5
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,11 @@ namespace saimeta
9898
_In_ const sai_stat_id_t *counter_ids,
9999
_Out_ uint64_t *counters) override;
100100

101+
virtual sai_status_t queryStatsCapability(
102+
_In_ sai_object_id_t switch_id,
103+
_In_ sai_object_type_t object_type,
104+
_Inout_ sai_stat_capability_list_t *stats_capability) override;
105+
101106
virtual sai_status_t getStatsExt(
102107
_In_ sai_object_type_t object_type,
103108
_In_ sai_object_id_t object_id,

meta/Meta.cpp

+49
Original file line numberDiff line numberDiff line change
@@ -1740,6 +1740,37 @@ sai_status_t Meta::meta_validate_stats(
17401740
return SAI_STATUS_SUCCESS;
17411741
}
17421742

1743+
sai_status_t Meta::meta_validate_query_stats_capability(
1744+
_In_ sai_object_type_t object_type,
1745+
_In_ sai_object_id_t object_id)
1746+
{
1747+
SWSS_LOG_ENTER();
1748+
1749+
PARAMETER_CHECK_OBJECT_TYPE_VALID(object_type);
1750+
PARAMETER_CHECK_OID_OBJECT_TYPE(object_id, object_type);
1751+
PARAMETER_CHECK_OID_EXISTS(object_id, object_type);
1752+
1753+
sai_object_id_t switch_id = switchIdQuery(object_id);
1754+
1755+
// checks also if object type is OID
1756+
sai_status_t status = meta_sai_validate_oid(object_type, &object_id, switch_id, false);
1757+
1758+
CHECK_STATUS_SUCCESS(status);
1759+
1760+
auto info = sai_metadata_get_object_type_info(object_type);
1761+
1762+
PARAMETER_CHECK_IF_NOT_NULL(info);
1763+
1764+
if (info->statenum == nullptr)
1765+
{
1766+
SWSS_LOG_ERROR("%s does not support stats", info->objecttypename);
1767+
1768+
return SAI_STATUS_INVALID_PARAMETER;
1769+
}
1770+
1771+
return SAI_STATUS_SUCCESS;
1772+
}
1773+
17431774
sai_status_t Meta::getStats(
17441775
_In_ sai_object_type_t object_type,
17451776
_In_ sai_object_id_t object_id,
@@ -1760,6 +1791,24 @@ sai_status_t Meta::getStats(
17601791
return status;
17611792
}
17621793

1794+
sai_status_t Meta::queryStatsCapability(
1795+
_In_ sai_object_id_t switchId,
1796+
_In_ sai_object_type_t objectType,
1797+
_Inout_ sai_stat_capability_list_t *stats_capability)
1798+
{
1799+
SWSS_LOG_ENTER();
1800+
1801+
auto status = meta_validate_query_stats_capability(objectType, switchId);
1802+
1803+
CHECK_STATUS_SUCCESS(status);
1804+
1805+
status = m_implementation->queryStatsCapability(switchId, objectType, stats_capability);
1806+
1807+
// no post validation required
1808+
1809+
return status;
1810+
}
1811+
17631812
sai_status_t Meta::getStatsExt(
17641813
_In_ sai_object_type_t object_type,
17651814
_In_ sai_object_id_t object_id,

meta/Meta.h

+9
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,11 @@ namespace saimeta
105105
_In_ const sai_stat_id_t *counter_ids,
106106
_Out_ uint64_t *counters) override;
107107

108+
virtual sai_status_t queryStatsCapability(
109+
_In_ sai_object_id_t switch_id,
110+
_In_ sai_object_type_t object_type,
111+
_Inout_ sai_stat_capability_list_t *stats_capability) override;
112+
108113
virtual sai_status_t getStatsExt(
109114
_In_ sai_object_type_t object_type,
110115
_In_ sai_object_id_t object_id,
@@ -394,6 +399,10 @@ namespace saimeta
394399
_Out_ uint64_t *counters,
395400
_In_ sai_stats_mode_t mode);
396401

402+
sai_status_t meta_validate_query_stats_capability(
403+
_In_ sai_object_type_t object_type,
404+
_In_ sai_object_id_t object_id);
405+
397406
private: // validate OID
398407

399408
sai_status_t meta_sai_validate_oid(

meta/SaiInterface.h

+5
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,11 @@ namespace sairedis
196196
_In_ const sai_stat_id_t *counter_ids,
197197
_Out_ uint64_t *counters) = 0;
198198

199+
virtual sai_status_t queryStatsCapability(
200+
_In_ sai_object_id_t switch_id,
201+
_In_ sai_object_type_t object_type,
202+
_Inout_ sai_stat_capability_list_t *stats_capability) = 0;
203+
199204
virtual sai_status_t getStatsExt(
200205
_In_ sai_object_type_t object_type,
201206
_In_ sai_object_id_t object_id,

0 commit comments

Comments
 (0)