Skip to content

Commit f36f7ce

Browse files
authored
Added Support for enum query capability of Nexthop Group Type. (sonic-net#989)
What/Why I did: Added Support for enum query capability of Nexthop Group Type. This is needed for DVS testing of Ordered ECMP Feature. Design Doc: sonic-net/SONiC#896
1 parent 323b89b commit f36f7ce

File tree

3 files changed

+91
-0
lines changed

3 files changed

+91
-0
lines changed

unittest/vslib/TestSwitchBCM56850.cpp

+61
Original file line numberDiff line numberDiff line change
@@ -418,3 +418,64 @@ TEST(SwitchBCM56850, test_vlan_flood_capability)
418418

419419
EXPECT_EQ(flood_types_found, 3);
420420
}
421+
422+
TEST(SwitchBCM56850, test_nexthop_group_type_enum_values_capability)
423+
{
424+
auto sc = std::make_shared<SwitchConfig>(0, "");
425+
auto signal = std::make_shared<Signal>();
426+
auto eventQueue = std::make_shared<EventQueue>(signal);
427+
428+
sc->m_saiSwitchType = SAI_SWITCH_TYPE_NPU;
429+
sc->m_switchType = SAI_VS_SWITCH_TYPE_BCM56850;
430+
sc->m_bootType = SAI_VS_BOOT_TYPE_COLD;
431+
sc->m_useTapDevice = false;
432+
sc->m_laneMap = LaneMap::getDefaultLaneMap(0);
433+
sc->m_eventQueue = eventQueue;
434+
435+
auto scc = std::make_shared<SwitchConfigContainer>();
436+
437+
scc->insert(sc);
438+
439+
SwitchBCM56850 sw(
440+
0x2100000000,
441+
std::make_shared<RealObjectIdManager>(0, scc),
442+
sc);
443+
444+
sai_s32_list_t enum_val_cap;
445+
int32_t list[5];
446+
memset(list, 0, sizeof(list));
447+
448+
enum_val_cap.count = 4;
449+
enum_val_cap.list = list;
450+
451+
EXPECT_EQ(sw.queryAttrEnumValuesCapability(0x2100000000,
452+
SAI_OBJECT_TYPE_NEXT_HOP_GROUP,
453+
SAI_NEXT_HOP_GROUP_ATTR_TYPE,
454+
&enum_val_cap),
455+
SAI_STATUS_BUFFER_OVERFLOW);
456+
enum_val_cap.count = 5;
457+
EXPECT_EQ(sw.queryAttrEnumValuesCapability(0x2100000000,
458+
SAI_OBJECT_TYPE_NEXT_HOP_GROUP,
459+
SAI_NEXT_HOP_GROUP_ATTR_TYPE,
460+
&enum_val_cap),
461+
SAI_STATUS_SUCCESS);
462+
463+
464+
EXPECT_EQ(enum_val_cap.count, 5);
465+
466+
int nexthop_group_types_found = 0;
467+
468+
for (uint32_t i = 0; i < enum_val_cap.count; i++)
469+
{
470+
if (enum_val_cap.list[i] == SAI_NEXT_HOP_GROUP_TYPE_DYNAMIC_UNORDERED_ECMP ||
471+
enum_val_cap.list[i] == SAI_NEXT_HOP_GROUP_TYPE_DYNAMIC_ORDERED_ECMP ||
472+
enum_val_cap.list[i] == SAI_NEXT_HOP_GROUP_TYPE_FINE_GRAIN_ECMP ||
473+
enum_val_cap.list[i] == SAI_NEXT_HOP_GROUP_TYPE_PROTECTION ||
474+
enum_val_cap.list[i] == SAI_NEXT_HOP_GROUP_TYPE_CLASS_BASED)
475+
{
476+
nexthop_group_types_found++;
477+
}
478+
}
479+
480+
EXPECT_EQ(nexthop_group_types_found, 5);
481+
}

vslib/SwitchStateBase.cpp

+25
Original file line numberDiff line numberDiff line change
@@ -3384,6 +3384,27 @@ sai_status_t SwitchStateBase::queryVlanfloodTypeCapability(
33843384
return SAI_STATUS_SUCCESS;
33853385
}
33863386

3387+
sai_status_t SwitchStateBase::queryNextHopGroupTypeCapability(
3388+
_Inout_ sai_s32_list_t *enum_values_capability)
3389+
{
3390+
SWSS_LOG_ENTER();
3391+
3392+
if (enum_values_capability->count < 5)
3393+
{
3394+
return SAI_STATUS_BUFFER_OVERFLOW;
3395+
}
3396+
3397+
enum_values_capability->count = 5;
3398+
enum_values_capability->list[0] = SAI_NEXT_HOP_GROUP_TYPE_DYNAMIC_UNORDERED_ECMP;
3399+
enum_values_capability->list[1] = SAI_NEXT_HOP_GROUP_TYPE_DYNAMIC_ORDERED_ECMP;
3400+
enum_values_capability->list[2] = SAI_NEXT_HOP_GROUP_TYPE_FINE_GRAIN_ECMP;
3401+
enum_values_capability->list[3] = SAI_NEXT_HOP_GROUP_TYPE_PROTECTION;
3402+
enum_values_capability->list[4] = SAI_NEXT_HOP_GROUP_TYPE_CLASS_BASED;
3403+
3404+
return SAI_STATUS_SUCCESS;
3405+
}
3406+
3407+
33873408
sai_status_t SwitchStateBase::queryAttrEnumValuesCapability(
33883409
_In_ sai_object_id_t switch_id,
33893410
_In_ sai_object_type_t object_type,
@@ -3402,5 +3423,9 @@ sai_status_t SwitchStateBase::queryAttrEnumValuesCapability(
34023423
{
34033424
return queryVlanfloodTypeCapability(enum_values_capability);
34043425
}
3426+
else if (object_type == SAI_OBJECT_TYPE_NEXT_HOP_GROUP && attr_id == SAI_NEXT_HOP_GROUP_ATTR_TYPE)
3427+
{
3428+
return queryNextHopGroupTypeCapability(enum_values_capability);
3429+
}
34053430
return SAI_STATUS_NOT_SUPPORTED;
34063431
}

vslib/SwitchStateBase.h

+5
Original file line numberDiff line numberDiff line change
@@ -650,6 +650,11 @@ namespace saivs
650650
virtual sai_status_t queryVlanfloodTypeCapability(
651651
_Inout_ sai_s32_list_t *enum_values_capability);
652652

653+
virtual sai_status_t queryNextHopGroupTypeCapability(
654+
_Inout_ sai_s32_list_t *enum_values_capability);
655+
656+
657+
653658
public: // TODO private
654659

655660
std::set<FdbInfo> m_fdb_info_set;

0 commit comments

Comments
 (0)