Skip to content

Commit a311702

Browse files
kcudnikPterosaur
authored andcommitted
[syncd] Check whether stat_st and tam_telemetry is defined (#1590)
Check if sai_query_stats_st_capability sai_tam_telemetry_get_data is defined whilie configure to make sure if vendor is not implementing those new APIs then it will still link syncd for VendorSai.cpp
1 parent 701a114 commit a311702

File tree

4 files changed

+59
-13
lines changed

4 files changed

+59
-13
lines changed

configure.ac

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -267,11 +267,20 @@ AC_MSG_ERROR("SAI headers API version and library version mismatch")])],
267267
CXXFLAGS="$SAVED_FLAGS"
268268
])])
269269

270-
AM_COND_IF([SYNCD], [
271-
SAVED_FLAGS="$CXXFLAGS"
272-
CXXFLAGS="-Xlinker --no-as-needed -lsai -I$srcdir/SAI/inc -I$srcdir/SAI/experimental -I$srcdir/SAI/meta"
273-
AC_CHECK_FUNCS(sai_bulk_object_clear_stats sai_bulk_object_get_stats)
274-
CXXFLAGS="$SAVED_FLAGS"
270+
AM_COND_IF([SAIVS],
271+
[
272+
AC_DEFINE([HAVE_SAI_BULK_OBJECT_CLEAR_STATS], [1], [])
273+
AC_DEFINE([HAVE_SAI_BULK_OBJECT_GET_STATS], [1], [])
274+
AC_DEFINE([HAVE_SAI_QUERY_STATS_ST_CAPABILITY], [1], [])
275+
AC_DEFINE([HAVE_SAI_TAM_TELEMETRY_GET_DATA], [1], [])
276+
],
277+
[
278+
AM_COND_IF([SYNCD], [
279+
SAVED_FLAGS="$CXXFLAGS"
280+
CXXFLAGS="-Xlinker --no-as-needed -lsai -I$srcdir/SAI/inc -I$srcdir/SAI/experimental -I$srcdir/SAI/meta"
281+
AC_CHECK_FUNCS(sai_bulk_object_clear_stats sai_bulk_object_get_stats sai_query_stats_st_capability sai_tam_telemetry_get_data)
282+
CXXFLAGS="$SAVED_FLAGS"
283+
])
275284
])
276285

277286
AC_DEFINE([SAIREDIS_GIT_REVISION],

syncd/VendorSai.cpp

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,17 @@ VendorSai::VendorSai()
5353
.query_attribute_enum_values_capability = &sai_query_attribute_enum_values_capability,
5454
.query_object_stage = nullptr,
5555
.query_stats_capability = &sai_query_stats_capability,
56+
#ifdef HAVE_SAI_QUERY_STATS_ST_CAPABILITY
5657
.query_stats_st_capability = &sai_query_stats_st_capability,
58+
#else
59+
.query_stats_st_capability = nullptr,
60+
#endif
5761
.switch_id_query = &sai_switch_id_query,
62+
#ifdef HAVE_SAI_TAM_TELEMETRY_GET_DATA
5863
.tam_telemetry_get_data = &sai_tam_telemetry_get_data,
64+
#else
65+
.tam_telemetry_get_data = nullptr,
66+
#endif
5967
};
6068

6169
m_globalApis = ga;
@@ -353,10 +361,12 @@ sai_status_t VendorSai::queryStatsStCapability(
353361
SWSS_LOG_ENTER();
354362
VENDOR_CHECK_API_INITIALIZED();
355363

356-
return m_globalApis.query_stats_st_capability(
357-
switchId,
358-
objectType,
359-
stats_capability);
364+
return (m_globalApis.query_stats_st_capability == nullptr)
365+
? SAI_STATUS_NOT_IMPLEMENTED
366+
: m_globalApis.query_stats_st_capability(
367+
switchId,
368+
objectType,
369+
stats_capability);
360370
}
361371

362372
sai_status_t VendorSai::getStatsExt(

tests/TestClient.cpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,8 @@ void TestClient::test_query_api()
374374
m_switch_id,
375375
SAI_OBJECT_TYPE_QUEUE,
376376
&queue_stats_capability);
377-
ASSERT_TRUE(rc == SAI_STATUS_BUFFER_OVERFLOW);
377+
ASSERT_TRUE(rc == SAI_STATUS_BUFFER_OVERFLOW ||
378+
rc == SAI_STATUS_NOT_IMPLEMENTED);
378379

379380
sai_stat_capability_t stat_initializer;
380381
stat_initializer.stat_enum = 0;
@@ -401,7 +402,11 @@ void TestClient::test_query_api()
401402
m_switch_id,
402403
SAI_OBJECT_TYPE_QUEUE,
403404
&queue_stats_st_capability);
404-
ASSERT_TRUE(rc == SAI_STATUS_BUFFER_OVERFLOW);
405+
406+
printf("rc: %s\n", sai_serialize_status(rc).c_str());
407+
408+
ASSERT_TRUE(rc == SAI_STATUS_BUFFER_OVERFLOW ||
409+
rc == SAI_STATUS_NOT_IMPLEMENTED);
405410

406411
sai_stat_st_capability_t stat_st_initializer;
407412
stat_st_initializer.capability.stat_enum = 0;
@@ -411,10 +416,13 @@ void TestClient::test_query_api()
411416

412417
SWSS_LOG_NOTICE(" * sai_query_stats_st_capability");
413418

414-
ASSERT_SUCCESS(sai_query_stats_st_capability(
419+
rc = sai_query_stats_st_capability(
415420
m_switch_id,
416421
SAI_OBJECT_TYPE_QUEUE,
417-
&queue_stats_st_capability));
422+
&queue_stats_st_capability);
423+
424+
ASSERT_TRUE(rc == SAI_STATUS_SUCCESS ||
425+
rc == SAI_STATUS_NOT_IMPLEMENTED);
418426

419427
teardown();
420428
}

unittest/syncd/TestVendorSai.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1637,3 +1637,22 @@ TEST_F(VendorSaiTest, bulk_eni_trusted_vni_entry)
16371637
EXPECT_EQ(SAI_STATUS_NOT_SUPPORTED,
16381638
m_vsai->bulkSet(0, e, nullptr, SAI_BULK_OP_ERROR_MODE_STOP_ON_ERROR, nullptr));
16391639
}
1640+
1641+
TEST(VendorSai, queryStatsStCapability)
1642+
{
1643+
sai_stat_st_capability_list_t st;
1644+
1645+
sai_stat_st_capability_t item;
1646+
1647+
st.count = 1;
1648+
st.list = &item;
1649+
1650+
sai_status_t status = sai.queryStatsStCapability(
1651+
SAI_NULL_OBJECT_ID, // switch id
1652+
SAI_OBJECT_TYPE_QUEUE,
1653+
&st);
1654+
1655+
// success expected, since always compiled against virtual switch
1656+
1657+
EXPECT_EQ(SAI_STATUS_INVALID_PARAMETER, status); // switch is null
1658+
}

0 commit comments

Comments
 (0)