Skip to content

Commit 58d624e

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

File tree

8 files changed

+191
-59
lines changed

8 files changed

+191
-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

lib/VirtualObjectIdManager.cpp

Lines changed: 72 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,19 @@ static_assert(sizeof(sai_object_id_t) == sizeof(uint64_t), "SAI object ID size s
2929
#define SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_MAX ( (1ULL << SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE) - 1 )
3030
#define SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_MASK (SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_MAX)
3131

32-
#define SAI_REDIS_OBJECT_INDEX_BITS_SIZE ( 39 )
32+
#define SAI_REDIS_OBJECT_TYPE_CUSTOM_FLAG_BITS_SIZE ( 1 )
33+
#define SAI_REDIS_OBJECT_TYPE_CUSTOM_FLAG_MAX ( (1ULL << SAI_REDIS_OBJECT_TYPE_CUSTOM_FLAG_BITS_SIZE) - 1 )
34+
#define SAI_REDIS_OBJECT_TYPE_CUSTOM_FLAG_MASK (SAI_REDIS_OBJECT_TYPE_CUSTOM_FLAG_MAX)
35+
36+
#define SAI_REDIS_OBJECT_INDEX_BITS_SIZE ( 38 )
3337
#define SAI_REDIS_OBJECT_INDEX_MAX ( (1ULL << SAI_REDIS_OBJECT_INDEX_BITS_SIZE) - 1 )
3438
#define SAI_REDIS_OBJECT_INDEX_MASK (SAI_REDIS_OBJECT_INDEX_MAX)
3539

3640
#define SAI_REDIS_OBJECT_ID_BITS_SIZE ( \
3741
SAI_REDIS_SWITCH_INDEX_BITS_SIZE + \
3842
SAI_REDIS_GLOBAL_CONTEXT_BITS_SIZE + \
3943
SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_BITS_SIZE + \
44+
SAI_REDIS_OBJECT_TYPE_CUSTOM_FLAG_BITS_SIZE + \
4045
SAI_REDIS_OBJECT_TYPE_BITS_SIZE + \
4146
SAI_REDIS_OBJECT_INDEX_BITS_SIZE )
4247

@@ -49,6 +54,8 @@ static_assert(SAI_REDIS_OBJECT_ID_BITS_SIZE == SAI_OBJECT_ID_BITS_SIZE, "redis o
4954
static_assert(SAI_OBJECT_TYPE_MAX < 256, "object type must be possible to encode on 1 byte");
5055
static_assert((SAI_OBJECT_TYPE_EXTENSIONS_RANGE_END - SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START) < 256,
5156
"extensions object type must be possible to encode on 1 byte");
57+
static_assert((SAI_OBJECT_TYPE_CUSTOM_RANGE_END - SAI_OBJECT_TYPE_CUSTOM_RANGE_START) < 256,
58+
"custom object type must be possible to encode on 1 byte");
5259

5360
/*
5461
* Current OBJECT ID format:
@@ -57,7 +64,8 @@ static_assert((SAI_OBJECT_TYPE_EXTENSIONS_RANGE_END - SAI_OBJECT_TYPE_EXTENSIONS
5764
* bits 55..48 - SAI object type
5865
* bits 47..40 - global context
5966
* bits 39..39 - object type extensions flag
60-
* bits 38..0 - object index
67+
* bits 38..38 - object type custom flag
68+
* bits 37..0 - object index
6169
*
6270
* So large number of bits is required, otherwise we would need to have map of
6371
* OID to some struct that will have all those values. But having all this
@@ -66,33 +74,41 @@ static_assert((SAI_OBJECT_TYPE_EXTENSIONS_RANGE_END - SAI_OBJECT_TYPE_EXTENSIONS
6674
* To be backward compatible with previous sairedis, we will still encode base
6775
* object type on bit's 55..48, and extensions which will now start from range
6876
* 0x20000000, will be encoded from 0x0, but extensions flag will be set to 1.
77+
* Custom types starting from SAI_OBJECT_TYPE_CUSTOM_RANGE_BASE will be encoded
78+
* from 0x0, but custom flag will be set to 1.
6979
*
7080
* 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.
81+
* SAI_OBJECT_TYPE_DASH_ACL_GROUP oid will be encoded as 0x0003008000000001,
82+
* SAI_OBJECT_TYPE_CUSTOM_RANGE_BASE + n oid will be encoded as 0x0003004000000001.
7283
*/
7384

7485
#define SAI_REDIS_GET_OBJECT_INDEX(oid) \
7586
( ((uint64_t)oid) & ( SAI_REDIS_OBJECT_INDEX_MASK ) )
7687

88+
#define SAI_REDIS_GET_OBJECT_TYPE_CUSTOM_FLAG(oid) \
89+
( (((uint64_t)oid) >> (SAI_REDIS_OBJECT_INDEX_BITS_SIZE) ) & ( SAI_REDIS_OBJECT_TYPE_CUSTOM_FLAG_MAX ) )
90+
7791
#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 ) )
92+
( (((uint64_t)oid) >> (SAI_REDIS_OBJECT_TYPE_CUSTOM_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_INDEX_BITS_SIZE) ) & ( SAI_REDIS_OBJECT_TYPE_EXTENSIONS_FLAG_MAX ) )
7993

8094
#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 ) )
95+
( (((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 ) )
8296

8397
#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 ) )
98+
( (((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 ) )
8599

86100
#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 ) )
101+
( (((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 ) )
88102

89103
#define SAI_REDIS_TEST_OID (0x012345e789abcdef)
90104

91105
static_assert(SAI_REDIS_GET_SWITCH_INDEX(SAI_REDIS_TEST_OID) == 0x01, "test switch index");
92106
static_assert(SAI_REDIS_GET_OBJECT_TYPE(SAI_REDIS_TEST_OID) == 0x23, "test object type");
93107
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");
108+
static_assert(SAI_REDIS_GET_OBJECT_TYPE_CUSTOM_FLAG(SAI_REDIS_TEST_OID) == 0x01, "test custom flag");
109+
static_assert(SAI_REDIS_GET_OBJECT_TYPE_EXTENSIONS_FLAG(SAI_REDIS_TEST_OID) == 0x01, "test extensions flag");
110+
static_assert(SAI_REDIS_GET_OBJECT_INDEX(SAI_REDIS_TEST_OID) == 0x2789abcdef, "test object index");
111+
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");
96112

97113
using namespace sairedis;
98114

@@ -162,9 +178,22 @@ sai_object_type_t VirtualObjectIdManager::saiObjectTypeQuery(
162178
return SAI_OBJECT_TYPE_NULL;
163179
}
164180

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));
181+
uint64_t extensionsFlag = SAI_REDIS_GET_OBJECT_TYPE_EXTENSIONS_FLAG(objectId);
182+
uint64_t customFlag = SAI_REDIS_GET_OBJECT_TYPE_CUSTOM_FLAG(objectId);
183+
184+
sai_object_type_t objectType;
185+
if (customFlag)
186+
{
187+
objectType = (sai_object_type_t)(SAI_REDIS_GET_OBJECT_TYPE(objectId) + SAI_OBJECT_TYPE_CUSTOM_RANGE_START);
188+
}
189+
else if (extensionsFlag)
190+
{
191+
objectType = (sai_object_type_t)(SAI_REDIS_GET_OBJECT_TYPE(objectId) + SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START);
192+
}
193+
else
194+
{
195+
objectType = (sai_object_type_t)(SAI_REDIS_GET_OBJECT_TYPE(objectId));
196+
}
168197

169198
if (sai_metadata_is_object_type_valid(objectType) == false)
170199
{
@@ -379,18 +408,25 @@ sai_object_id_t VirtualObjectIdManager::constructObjectId(
379408
SWSS_LOG_THROW("FATAL: invalid object type (0x%x), logic error, this is a bug!", objectType);
380409
}
381410

411+
uint64_t customFlag = (uint64_t)objectType >= SAI_OBJECT_TYPE_CUSTOM_RANGE_START && (uint64_t)objectType < SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START;
382412
uint64_t extensionsFlag = (uint64_t)objectType >= SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START;
383413

384-
objectType = extensionsFlag
385-
? (sai_object_type_t)(objectType - SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START)
386-
: objectType;
414+
if (customFlag)
415+
{
416+
objectType = (sai_object_type_t)(objectType - SAI_OBJECT_TYPE_CUSTOM_RANGE_START);
417+
}
418+
else if (extensionsFlag)
419+
{
420+
objectType = (sai_object_type_t)(objectType - SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START);
421+
}
387422

388423
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);
424+
((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)) |
425+
((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)) |
426+
((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)) |
427+
((uint64_t)extensionsFlag << (SAI_REDIS_OBJECT_TYPE_CUSTOM_FLAG_BITS_SIZE + SAI_REDIS_OBJECT_INDEX_BITS_SIZE)) |
428+
((uint64_t)customFlag << (SAI_REDIS_OBJECT_INDEX_BITS_SIZE)) |
429+
objectIndex);
394430
}
395431

396432
sai_object_id_t VirtualObjectIdManager::switchIdQuery(
@@ -434,9 +470,22 @@ sai_object_type_t VirtualObjectIdManager::objectTypeQuery(
434470
return SAI_OBJECT_TYPE_NULL;
435471
}
436472

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));
473+
uint64_t extensionsFlag = SAI_REDIS_GET_OBJECT_TYPE_EXTENSIONS_FLAG(objectId);
474+
uint64_t customFlag = SAI_REDIS_GET_OBJECT_TYPE_CUSTOM_FLAG(objectId);
475+
476+
sai_object_type_t objectType;
477+
if (customFlag)
478+
{
479+
objectType = (sai_object_type_t)(SAI_REDIS_GET_OBJECT_TYPE(objectId) + SAI_OBJECT_TYPE_CUSTOM_RANGE_START);
480+
}
481+
else if (extensionsFlag)
482+
{
483+
objectType = (sai_object_type_t)(SAI_REDIS_GET_OBJECT_TYPE(objectId) + SAI_OBJECT_TYPE_EXTENSIONS_RANGE_START);
484+
}
485+
else
486+
{
487+
objectType = (sai_object_type_t)(SAI_REDIS_GET_OBJECT_TYPE(objectId));
488+
}
440489

441490
if (!sai_metadata_is_object_type_valid(objectType))
442491
{

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)