Skip to content

Commit c032b90

Browse files
Fix issues to support custom SAI header
1 parent ebdf9e9 commit c032b90

File tree

9 files changed

+215
-59
lines changed

9 files changed

+215
-59
lines changed

configure.ac

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -228,12 +228,12 @@ AC_ARG_WITH(extra-libsai-ldflags,
228228
extra libsai.so flags for vendor library],
229229
[AC_SUBST(EXTRA_LIBSAI_LDFLAGS, "${withval}")])
230230

231-
AC_SUBST(SAIINC, "-I\$(top_srcdir)/SAI/inc -I\$(top_srcdir)/SAI/experimental -I\$(top_srcdir)/SAI/meta")
231+
AC_SUBST(SAIINC, "-I\$(top_srcdir)/SAI/inc -I\$(top_srcdir)/SAI/experimental -I\$(top_srcdir)/SAI/meta -I\$(top_srcdir)/SAI/custom")
232232

233233
AM_COND_IF([SYNCD], [
234234
AM_COND_IF([SAIVS], [], [
235235
SAVED_FLAGS="$CXXFLAGS"
236-
CXXFLAGS="-Xlinker --no-as-needed -lsai -I$srcdir/SAI/inc -I$srcdir/SAI/experimental -I$srcdir/SAI/meta $EXTRA_LIBSAI_LDFLAGS"
236+
CXXFLAGS="-Xlinker --no-as-needed -lsai -I$srcdir/SAI/inc -I$srcdir/SAI/experimental -I$srcdir/SAI/meta -I$srcdir/SAI/custom $EXTRA_LIBSAI_LDFLAGS"
237237
AC_CHECK_FUNCS(sai_query_api_version, [
238238
AC_MSG_CHECKING([SAI headers API version and library version check])
239239
AC_TRY_RUN([
@@ -283,7 +283,7 @@ AM_COND_IF([SAIVS],
283283
[
284284
AM_COND_IF([SYNCD], [
285285
SAVED_FLAGS="$CXXFLAGS"
286-
CXXFLAGS="-Xlinker --no-as-needed -lsai -I$srcdir/SAI/inc -I$srcdir/SAI/experimental -I$srcdir/SAI/meta"
286+
CXXFLAGS="-Xlinker --no-as-needed -lsai -I$srcdir/SAI/inc -I$srcdir/SAI/experimental -I$srcdir/SAI/meta -I$srcdir/SAI/custom"
287287
AC_CHECK_FUNCS(sai_bulk_object_clear_stats sai_bulk_object_get_stats sai_tam_telemetry_get_data)
288288
AH_TEMPLATE([HAVE_SAI_QUERY_STATS_ST_CAPABILITY], [Force it disabled for SAIs without implementation - REMOVE WHEN NOT NEEDED])
289289
CXXFLAGS="$SAVED_FLAGS"

debian/libsaivs-dev.install

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
SAI/inc/sai*.h usr/include/sai/
22
SAI/experimental/sai*.h usr/include/sai/
3+
SAI/custom/sai*.h usr/include/sai/
34
vslib/saivs.h

debian/rules

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ override_dh_auto_configure:
5858
dh_auto_configure -- ${SWSS_COMMON_CONFIG} $(configure_opts) $(DEB_CONFIGURE_EXTRA_FLAGS)
5959

6060
override_dh_install:
61+
# Conditionally comment out SAI/custom/*.h if no files exist
62+
if ! ls SAI/custom/sai*.h 1> /dev/null 2>&1; then \
63+
sed -i.bak 's|^\(SAI/custom/sai\*\.h.*\)|#\1|' debian/libsaivs-dev.install; \
64+
fi
6165
ifneq ($(filter rpc,$(DEB_BUILD_PROFILES)),)
6266
dh_install -N syncd-rpc
6367
# This is to build a RPC-enabled version, and package that version into syncd-rpc
@@ -72,6 +76,10 @@ endif
7276
ifneq ($(filter rpc,$(DEB_BUILD_PROFILES)),)
7377
sed -i 's|ENABLE_SAITHRIFT=0|ENABLE_SAITHRIFT=1 # Add a comment to fix https://github.com/Azure/sonic-buildimage/issues/2694 |' debian/syncd-rpc/usr/bin/syncd_init_common.sh
7478
endif
79+
# Restore original .install file if backup exists
80+
if [ -f debian/libsaivs-dev.install.bak ]; then \
81+
mv debian/libsaivs-dev.install.bak debian/libsaivs-dev.install; \
82+
fi
7583

7684
override_dh_installinit:
7785
dh_installinit --init-script=syncd

lib/VirtualObjectIdManager.cpp

Lines changed: 80 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,14 @@ extern "C" {
88
#include "saimetadata.h"
99
}
1010

11+
#ifndef SAI_OBJECT_TYPE_CUSTOM_RANGE_START
12+
#define SAI_OBJECT_TYPE_CUSTOM_RANGE_START SAI_OBJECT_TYPE_CUSTOM_RANGE_BASE
13+
#endif
14+
15+
#ifndef SAI_OBJECT_TYPE_CUSTOM_RANGE_END
16+
#define SAI_OBJECT_TYPE_CUSTOM_RANGE_END SAI_OBJECT_TYPE_CUSTOM_RANGE_BASE
17+
#endif
18+
1119
#define SAI_OBJECT_ID_BITS_SIZE (8 * sizeof(sai_object_id_t))
1220

1321
static_assert(SAI_OBJECT_ID_BITS_SIZE == 64, "sai_object_id_t must have 64 bits");
@@ -29,14 +37,19 @@ static_assert(sizeof(sai_object_id_t) == sizeof(uint64_t), "SAI object ID size s
2937
#define SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_MAX ( (1ULL << SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE) - 1 )
3038
#define SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_MASK (SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_MAX)
3139

32-
#define SAI_REDIS_OBJECT_INDEX_BITS_SIZE ( 39 )
40+
#define SAI_REDIS_OBJECT_TYPE_CUSTOM_FLAG_BITS_SIZE ( 1 )
41+
#define SAI_REDIS_OBJECT_TYPE_CUSTOM_FLAG_MAX ( (1ULL << SAI_REDIS_OBJECT_TYPE_CUSTOM_FLAG_BITS_SIZE) - 1 )
42+
#define SAI_REDIS_OBJECT_TYPE_CUSTOM_FLAG_MASK (SAI_REDIS_OBJECT_TYPE_CUSTOM_FLAG_MAX)
43+
44+
#define SAI_REDIS_OBJECT_INDEX_BITS_SIZE ( 38 )
3345
#define SAI_REDIS_OBJECT_INDEX_MAX ( (1ULL << SAI_REDIS_OBJECT_INDEX_BITS_SIZE) - 1 )
3446
#define SAI_REDIS_OBJECT_INDEX_MASK (SAI_REDIS_OBJECT_INDEX_MAX)
3547

3648
#define SAI_REDIS_OBJECT_ID_BITS_SIZE ( \
3749
SAI_REDIS_SWITCH_INDEX_BITS_SIZE + \
3850
SAI_REDIS_GLOBAL_CONTEXT_BITS_SIZE + \
3951
SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + \
52+
SAI_REDIS_OBJECT_TYPE_CUSTOM_FLAG_BITS_SIZE + \
4053
SAI_REDIS_OBJECT_TYPE_BITS_SIZE + \
4154
SAI_REDIS_OBJECT_INDEX_BITS_SIZE )
4255

@@ -49,6 +62,8 @@ static_assert(SAI_REDIS_OBJECT_ID_BITS_SIZE == SAI_OBJECT_ID_BITS_SIZE, "redis o
4962
static_assert(SAI_OBJECT_TYPE_MAX < 256, "object type must be possible to encode on 1 byte");
5063
static_assert((SAI_OBJECT_TYPE_EXTENSIONS_RANGE_END - SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START) < 256,
5164
"extensions object type must be possible to encode on 1 byte");
65+
static_assert((SAI_OBJECT_TYPE_CUSTOM_RANGE_END - SAI_OBJECT_TYPE_CUSTOM_RANGE_START) < 256,
66+
"custom object type must be possible to encode on 1 byte");
5267

5368
/*
5469
* Current OBJECT ID format:
@@ -57,7 +72,8 @@ static_assert((SAI_OBJECT_TYPE_EXTENSIONS_RANGE_END - SAI_OBJECT_TYPE_EXTENSIONS
5772
* bits 55..48 - SAI object type
5873
* bits 47..40 - global context
5974
* bits 39..39 - object type extensions flag
60-
* bits 38..0 - object index
75+
* bits 38..38 - object type custom flag
76+
* bits 37..0 - object index
6177
*
6278
* So large number of bits is required, otherwise we would need to have map of
6379
* OID to some struct that will have all those values. But having all this
@@ -66,33 +82,41 @@ static_assert((SAI_OBJECT_TYPE_EXTENSIONS_RANGE_END - SAI_OBJECT_TYPE_EXTENSIONS
6682
* To be backward compatible with previous sairedis, we will still encode base
6783
* object type on bit's 55..48, and extensions which will now start from range
6884
* 0x20000000, will be encoded from 0x0, but extensions flag will be set to 1.
85+
* Custom types starting from SAI_OBJECT_TYPE_CUSTOM_RANGE_BASE will be encoded
86+
* from 0x0, but custom flag will be set to 1.
6987
*
7088
* For example SAI_OBJECT_TYPE_VIRTUAL_ROUTER oid will be encoded as 0x0003000000000001,
71-
* SAI_OBJECT_TYPE_DASH_ACL_GROUP oid will be encoded as 0x0003008000000001.
89+
* SAI_OBJECT_TYPE_DASH_ACL_GROUP oid will be encoded as 0x0003008000000001,
90+
* SAI_OBJECT_TYPE_CUSTOM_RANGE_BASE + n oid will be encoded as 0x0003004000000001.
7291
*/
7392

7493
#define SAI_REDIS_GET_OBJECT_INDEX(oid) \
7594
( ((uint64_t)oid) & ( SAI_REDIS_OBJECT_INDEX_MASK ) )
7695

96+
#define SAI_REDIS_GET_OBJECT_TYPE_CUSTOM_FLAG(oid) \
97+
( (((uint64_t)oid) >> (SAI_REDIS_OBJECT_INDEX_BITS_SIZE) ) & ( SAI_REDIS_OBJECT_TYPE_CUSTOM_FLAG_MAX ) )
98+
7799
#define SAI_REDIS_GET_OBJECT_TYPE_EXTENSIONS_FLAG(oid) \
78-
( (((uint64_t)oid) >> (SAI_REDIS_OBJECT_INDEX_BITS_SIZE) ) & ( SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_MAX ) )
100+
( (((uint64_t)oid) >> (SAI_REDIS_OBJECT_TYPE_CUSTOM_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_INDEX_BITS_SIZE) ) & ( SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_MAX ) )
79101

80102
#define SAI_REDIS_GET_GLOBAL_CONTEXT(oid) \
81-
( (((uint64_t)oid) >> (SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_INDEX_BITS_SIZE) ) & ( SAI_REDIS_GLOBAL_CONTEXT_MASK ) )
103+
( (((uint64_t)oid) >> (SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_TYPE_CUSTOM_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_INDEX_BITS_SIZE) ) & ( SAI_REDIS_GLOBAL_CONTEXT_MASK ) )
82104

83105
#define SAI_REDIS_GET_OBJECT_TYPE(oid) \
84-
( (((uint64_t)oid) >> ( SAI_REDIS_GLOBAL_CONTEXT_BITS_SIZE + SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_INDEX_BITS_SIZE) ) & ( SAI_REDIS_OBJECT_TYPE_MASK ) )
106+
( (((uint64_t)oid) >> ( SAI_REDIS_GLOBAL_CONTEXT_BITS_SIZE + SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_TYPE_CUSTOM_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_INDEX_BITS_SIZE) ) & ( SAI_REDIS_OBJECT_TYPE_MASK ) )
85107

86108
#define SAI_REDIS_GET_SWITCH_INDEX(oid) \
87-
( (((uint64_t)oid) >> ( SAI_REDIS_OBJECT_TYPE_BITS_SIZE + SAI_REDIS_GLOBAL_CONTEXT_BITS_SIZE + SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_INDEX_BITS_SIZE) ) & ( SAI_REDIS_SWITCH_INDEX_MASK ) )
109+
( (((uint64_t)oid) >> ( SAI_REDIS_OBJECT_TYPE_BITS_SIZE + SAI_REDIS_GLOBAL_CONTEXT_BITS_SIZE + SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_TYPE_CUSTOM_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_INDEX_BITS_SIZE) ) & ( SAI_REDIS_SWITCH_INDEX_MASK ) )
88110

89111
#define SAI_REDIS_TEST_OID (0x012345e789abcdef)
90112

91113
static_assert(SAI_REDIS_GET_SWITCH_INDEX(SAI_REDIS_TEST_OID) == 0x01, "test switch index");
92114
static_assert(SAI_REDIS_GET_OBJECT_TYPE(SAI_REDIS_TEST_OID) == 0x23, "test object type");
93115
static_assert(SAI_REDIS_GET_GLOBAL_CONTEXT(SAI_REDIS_TEST_OID) == 0x45, "test global context");
94-
static_assert(SAI_REDIS_GET_OBJECT_TYPE_EXTENSIONS_FLAG(SAI_REDIS_TEST_OID) == 0x1, "test object type extensions flag");
95-
static_assert(SAI_REDIS_GET_OBJECT_INDEX(SAI_REDIS_TEST_OID) == 0x6789abcdef, "test object index");
116+
static_assert(SAI_REDIS_GET_OBJECT_TYPE_CUSTOM_FLAG(SAI_REDIS_TEST_OID) == 0x01, "test custom flag");
117+
static_assert(SAI_REDIS_GET_OBJECT_TYPE_EXTENSIONS_FLAG(SAI_REDIS_TEST_OID) == 0x01, "test extensions flag");
118+
static_assert(SAI_REDIS_GET_OBJECT_INDEX(SAI_REDIS_TEST_OID) == 0x2789abcdef, "test object index");
119+
static_assert((SAI_REDIS_SWITCH_INDEX_BITS_SIZE + SAI_REDIS_OBJECT_TYPE_BITS_SIZE + SAI_REDIS_GLOBAL_CONTEXT_BITS_SIZE + SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_TYPE_CUSTOM_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_INDEX_BITS_SIZE) == 64, "Total bits must sum to 64");
96120

97121
using namespace sairedis;
98122

@@ -162,9 +186,22 @@ sai_object_type_t VirtualObjectIdManager::saiObjectTypeQuery(
162186
return SAI_OBJECT_TYPE_NULL;
163187
}
164188

165-
sai_object_type_t objectType = SAI_REDIS_GET_OBJECT_TYPE_EXTENSIONS_FLAG(objectId)
166-
? (sai_object_type_t)(SAI_REDIS_GET_OBJECT_TYPE(objectId) + SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START)
167-
: (sai_object_type_t)(SAI_REDIS_GET_OBJECT_TYPE(objectId));
189+
uint64_t extensionsFlag = SAI_REDIS_GET_OBJECT_TYPE_EXTENSIONS_FLAG(objectId);
190+
uint64_t customFlag = SAI_REDIS_GET_OBJECT_TYPE_CUSTOM_FLAG(objectId);
191+
192+
sai_object_type_t objectType;
193+
if (customFlag)
194+
{
195+
objectType = (sai_object_type_t)(SAI_REDIS_GET_OBJECT_TYPE(objectId) + SAI_OBJECT_TYPE_CUSTOM_RANGE_START);
196+
}
197+
else if (extensionsFlag)
198+
{
199+
objectType = (sai_object_type_t)(SAI_REDIS_GET_OBJECT_TYPE(objectId) + SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START);
200+
}
201+
else
202+
{
203+
objectType = (sai_object_type_t)(SAI_REDIS_GET_OBJECT_TYPE(objectId));
204+
}
168205

169206
if (sai_metadata_is_object_type_valid(objectType) == false)
170207
{
@@ -379,18 +416,25 @@ sai_object_id_t VirtualObjectIdManager::constructObjectId(
379416
SWSS_LOG_THROW("FATAL: invalid object type (0x%x), logic error, this is a bug!", objectType);
380417
}
381418

419+
uint64_t customFlag = (uint64_t)objectType >= SAI_OBJECT_TYPE_CUSTOM_RANGE_START && (uint64_t)objectType < SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START;
382420
uint64_t extensionsFlag = (uint64_t)objectType >= SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START;
383421

384-
objectType = extensionsFlag
385-
? (sai_object_type_t)(objectType - SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START)
386-
: objectType;
422+
if (customFlag)
423+
{
424+
objectType = (sai_object_type_t)(objectType - SAI_OBJECT_TYPE_CUSTOM_RANGE_START);
425+
}
426+
else if (extensionsFlag)
427+
{
428+
objectType = (sai_object_type_t)(objectType - SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START);
429+
}
387430

388431
return (sai_object_id_t)(
389-
((uint64_t)switchIndex << (SAI_REDIS_OBJECT_TYPE_BITS_SIZE + SAI_REDIS_GLOBAL_CONTEXT_BITS_SIZE + SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_INDEX_BITS_SIZE)) |
390-
((uint64_t)objectType << (SAI_REDIS_GLOBAL_CONTEXT_BITS_SIZE + SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_INDEX_BITS_SIZE)) |
391-
((uint64_t)globalContext << (SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_INDEX_BITS_SIZE)) |
392-
((uint64_t)extensionsFlag << (SAI_REDIS_OBJECT_INDEX_BITS_SIZE)) |
393-
objectIndex);
432+
((uint64_t)switchIndex << (SAI_REDIS_OBJECT_TYPE_BITS_SIZE + SAI_REDIS_GLOBAL_CONTEXT_BITS_SIZE + SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_TYPE_CUSTOM_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_INDEX_BITS_SIZE)) |
433+
((uint64_t)objectType << (SAI_REDIS_GLOBAL_CONTEXT_BITS_SIZE + SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_TYPE_CUSTOM_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_INDEX_BITS_SIZE)) |
434+
((uint64_t)globalContext << (SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_TYPE_CUSTOM_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_INDEX_BITS_SIZE)) |
435+
((uint64_t)extensionsFlag << (SAI_REDIS_OBJECT_TYPE_CUSTOM_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_INDEX_BITS_SIZE)) |
436+
((uint64_t)customFlag << (SAI_REDIS_OBJECT_INDEX_BITS_SIZE)) |
437+
objectIndex);
394438
}
395439

396440
sai_object_id_t VirtualObjectIdManager::switchIdQuery(
@@ -434,9 +478,22 @@ sai_object_type_t VirtualObjectIdManager::objectTypeQuery(
434478
return SAI_OBJECT_TYPE_NULL;
435479
}
436480

437-
sai_object_type_t objectType = SAI_REDIS_GET_OBJECT_TYPE_EXTENSIONS_FLAG(objectId)
438-
? (sai_object_type_t)(SAI_REDIS_GET_OBJECT_TYPE(objectId) + SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START)
439-
: (sai_object_type_t)(SAI_REDIS_GET_OBJECT_TYPE(objectId));
481+
uint64_t extensionsFlag = SAI_REDIS_GET_OBJECT_TYPE_EXTENSIONS_FLAG(objectId);
482+
uint64_t customFlag = SAI_REDIS_GET_OBJECT_TYPE_CUSTOM_FLAG(objectId);
483+
484+
sai_object_type_t objectType;
485+
if (customFlag)
486+
{
487+
objectType = (sai_object_type_t)(SAI_REDIS_GET_OBJECT_TYPE(objectId) + SAI_OBJECT_TYPE_CUSTOM_RANGE_START);
488+
}
489+
else if (extensionsFlag)
490+
{
491+
objectType = (sai_object_type_t)(SAI_REDIS_GET_OBJECT_TYPE(objectId) + SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START);
492+
}
493+
else
494+
{
495+
objectType = (sai_object_type_t)(SAI_REDIS_GET_OBJECT_TYPE(objectId));
496+
}
440497

441498
if (!sai_metadata_is_object_type_valid(objectType))
442499
{

meta/SaiSerialize.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -223,9 +223,9 @@ sai_status_t transfer_attribute(
223223
RETURN_ON_ERROR(transfer_list(src_attr.value.s8list, dst_attr.value.s8list, countOnly));
224224
break;
225225

226-
// case SAI_ATTR_VALUE_TYPE_UINT16_LIST:
227-
// RETURN_ON_ERROR(transfer_list(src_attr.value.u16list, dst_attr.value.u16list, countOnly));
228-
// break;
226+
case SAI_ATTR_VALUE_TYPE_UINT16_LIST:
227+
RETURN_ON_ERROR(transfer_list(src_attr.value.u16list, dst_attr.value.u16list, countOnly));
228+
break;
229229
//
230230
// case SAI_ATTR_VALUE_TYPE_INT16_LIST:
231231
// RETURN_ON_ERROR(transfer_list(src_attr.value.s16list, dst_attr.value.s16list, countOnly));
@@ -2148,8 +2148,8 @@ std::string sai_serialize_attr_value(
21482148
case SAI_ATTR_VALUE_TYPE_PORT_LANE_LATCH_STATUS_LIST:
21492149
return sai_serialize_port_lane_latch_status_list(attr.value.portlanelatchstatuslist, countOnly);
21502150

2151-
// case SAI_ATTR_VALUE_TYPE_UINT16_LIST:
2152-
// return sai_serialize_number_list(attr.value.u16list, countOnly);
2151+
case SAI_ATTR_VALUE_TYPE_UINT16_LIST:
2152+
return sai_serialize_number_list(attr.value.u16list, countOnly);
21532153
//
21542154
// case SAI_ATTR_VALUE_TYPE_INT16_LIST:
21552155
// return sai_serialize_number_list(attr.value.s16list, countOnly);
@@ -4433,8 +4433,8 @@ void sai_deserialize_attr_value(
44334433
case SAI_ATTR_VALUE_TYPE_PORT_LANE_LATCH_STATUS_LIST:
44344434
return sai_deserialize_port_lane_latch_status_list(s, attr.value.portlanelatchstatuslist, countOnly);
44354435

4436-
// case SAI_ATTR_VALUE_TYPE_UINT16_LIST:
4437-
// return sai_deserialize_number_list(s, attr.value.u16list, countOnly);
4436+
case SAI_ATTR_VALUE_TYPE_UINT16_LIST:
4437+
return sai_deserialize_number_list(s, attr.value.u16list, countOnly);
44384438
//
44394439
// case SAI_ATTR_VALUE_TYPE_INT16_LIST:
44404440
// return sai_deserialize_number_list(s, attr.value.s16list, countOnly);
@@ -5762,9 +5762,9 @@ void sai_deserialize_free_attribute_value(
57625762
sai_free_list(attr.value.s8list);
57635763
break;
57645764

5765-
// case SAI_ATTR_VALUE_TYPE_UINT16_LIST:
5766-
// sai_free_list(attr.value.u16list);
5767-
// break;
5765+
case SAI_ATTR_VALUE_TYPE_UINT16_LIST:
5766+
sai_free_list(attr.value.u16list);
5767+
break;
57685768
//
57695769
// case SAI_ATTR_VALUE_TYPE_INT16_LIST:
57705770
// sai_free_list(attr.value.s16list);

stub.pl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ sub GetFunctionCamelCaseName
9999

100100
sub GetData
101101
{
102-
$DATA = `cat $optionSaiDir/inc/sai*.h $optionSaiDir/experimental/sai*.h`;
102+
$DATA = `cat $optionSaiDir/inc/sai*.h $optionSaiDir/experimental/sai*.h $optionSaiDir/custom/sai*.h`;
103103
}
104104

105105
sub SanitizeData

unittest/lib/TestVirtualObjectIdManager.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,3 +112,16 @@ TEST(VirtualObjectIdManager, extensions)
112112

113113
EXPECT_EQ(m->objectTypeQuery(0x0003008000000001), SAI_OBJECT_TYPE_DASH_ACL_GROUP);
114114
}
115+
116+
TEST(VirtualObjectIdManager, customTypes)
117+
{
118+
auto m = createVirtualObjectIdManager();
119+
120+
auto sid = m->allocateNewSwitchObjectId("");
121+
122+
auto customType = (sai_object_type_t)(SAI_OBJECT_TYPE_CUSTOM_RANGE_BASE + 1);
123+
auto oid = m->allocateNewObjectId(customType, sid);
124+
125+
EXPECT_NE(oid, SAI_NULL_OBJECT_ID);
126+
EXPECT_EQ(m->objectTypeQuery(oid), customType);
127+
}

unittest/vslib/TestRealObjectIdManager.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,3 +108,25 @@ TEST(RealObjectIdManager, extensions)
108108

109109
EXPECT_EQ(mgr.objectTypeQuery(0x0380000000), SAI_OBJECT_TYPE_DASH_ACL_GROUP);
110110
}
111+
112+
TEST(RealObjectIdManager, customTypes)
113+
{
114+
auto sc = std::make_shared<SwitchConfig>(0,"");
115+
116+
auto scc = std::make_shared<SwitchConfigContainer>();
117+
118+
scc->insert(sc);
119+
120+
RealObjectIdManager mgr(0, scc);
121+
122+
auto sid = mgr.allocateNewSwitchObjectId("");
123+
124+
EXPECT_NE(sid, SAI_NULL_OBJECT_ID);
125+
126+
auto customType = (sai_object_type_t)(SAI_OBJECT_TYPE_CUSTOM_RANGE_BASE + 1);
127+
auto oid = mgr.allocateNewObjectId(customType, sid);
128+
129+
EXPECT_NE(oid, SAI_NULL_OBJECT_ID);
130+
131+
EXPECT_EQ(mgr.objectTypeQuery(oid), customType);
132+
}

0 commit comments

Comments
 (0)