Skip to content

Commit 9e855c2

Browse files
authored
[FEC] Adding support for vs testing for SAI_PORT_ATTR_AUTO_NEG_FEC_MODE_OVERRIDE (#1271)
Adding support to test SAI_PORT_ATTR_AUTO_NEG_FEC_MODE_OVERRIDE. We need to test two flows one with attribute supported and one without. Added logic where MLNX2700 has support for the attribute wheile BCM56850 doesn't have support Added UT to verify.
1 parent 4dbdb21 commit 9e855c2

7 files changed

+124
-11
lines changed

unittest/vslib/TestSwitchBCM56850.cpp

+35
Original file line numberDiff line numberDiff line change
@@ -479,3 +479,38 @@ TEST(SwitchBCM56850, test_nexthop_group_type_enum_values_capability)
479479

480480
EXPECT_EQ(nexthop_group_types_found, 5);
481481
}
482+
483+
TEST(SwitchBCM56850, test_port_autoneg_fec_override_support)
484+
{
485+
auto sc = std::make_shared<SwitchConfig>(0, "");
486+
auto signal = std::make_shared<Signal>();
487+
auto eventQueue = std::make_shared<EventQueue>(signal);
488+
489+
sc->m_saiSwitchType = SAI_SWITCH_TYPE_NPU;
490+
sc->m_switchType = SAI_VS_SWITCH_TYPE_BCM56850;
491+
sc->m_bootType = SAI_VS_BOOT_TYPE_COLD;
492+
sc->m_useTapDevice = false;
493+
sc->m_laneMap = LaneMap::getDefaultLaneMap(0);
494+
sc->m_eventQueue = eventQueue;
495+
496+
auto scc = std::make_shared<SwitchConfigContainer>();
497+
498+
scc->insert(sc);
499+
500+
SwitchBCM56850 sw(
501+
0x2100000000,
502+
std::make_shared<RealObjectIdManager>(0, scc),
503+
sc);
504+
505+
sai_attr_capability_t attr_capability;
506+
507+
EXPECT_EQ(sw.queryAttributeCapability(0x2100000000,
508+
SAI_OBJECT_TYPE_PORT,
509+
SAI_PORT_ATTR_AUTO_NEG_FEC_MODE_OVERRIDE,
510+
&attr_capability),
511+
SAI_STATUS_SUCCESS);
512+
513+
EXPECT_EQ(attr_capability.create_implemented, false);
514+
EXPECT_EQ(attr_capability.set_implemented, false);
515+
EXPECT_EQ(attr_capability.get_implemented, false);
516+
}

unittest/vslib/TestSwitchMLNX2700.cpp

+35
Original file line numberDiff line numberDiff line change
@@ -542,3 +542,38 @@ TEST(SwitchMLNX2700, test_vlan_flood_capability)
542542

543543
EXPECT_EQ(flood_types_found, 4);
544544
}
545+
546+
TEST(SwitchMLNX2700, test_port_autoneg_fec_override_support)
547+
{
548+
auto sc = std::make_shared<SwitchConfig>(0, "");
549+
auto signal = std::make_shared<Signal>();
550+
auto eventQueue = std::make_shared<EventQueue>(signal);
551+
552+
sc->m_saiSwitchType = SAI_SWITCH_TYPE_NPU;
553+
sc->m_switchType = SAI_VS_SWITCH_TYPE_MLNX2700;
554+
sc->m_bootType = SAI_VS_BOOT_TYPE_COLD;
555+
sc->m_useTapDevice = false;
556+
sc->m_laneMap = LaneMap::getDefaultLaneMap(0);
557+
sc->m_eventQueue = eventQueue;
558+
559+
auto scc = std::make_shared<SwitchConfigContainer>();
560+
561+
scc->insert(sc);
562+
563+
SwitchMLNX2700 sw(
564+
0x2100000000,
565+
std::make_shared<RealObjectIdManager>(0, scc),
566+
sc);
567+
568+
sai_attr_capability_t attr_capability;
569+
570+
EXPECT_EQ(sw.queryAttributeCapability(0x2100000000,
571+
SAI_OBJECT_TYPE_PORT,
572+
SAI_PORT_ATTR_AUTO_NEG_FEC_MODE_OVERRIDE,
573+
&attr_capability),
574+
SAI_STATUS_SUCCESS);
575+
576+
EXPECT_EQ(attr_capability.create_implemented, true);
577+
EXPECT_EQ(attr_capability.set_implemented, true);
578+
EXPECT_EQ(attr_capability.get_implemented, true);
579+
}

vslib/SwitchMLNX2700.cpp

+11
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,17 @@ sai_status_t SwitchMLNX2700::queryTunnelPeerModeCapability(
459459
return SAI_STATUS_SUCCESS;
460460
}
461461

462+
sai_status_t SwitchMLNX2700::queryPortAutonegFecOverrideSupportCapability(
463+
_Out_ sai_attr_capability_t *capability)
464+
{
465+
SWSS_LOG_ENTER();
466+
467+
capability->create_implemented = true;
468+
capability->set_implemented = true;
469+
capability->get_implemented = true;
470+
return SAI_STATUS_SUCCESS;
471+
}
472+
462473
sai_status_t SwitchMLNX2700::create_port_serdes()
463474
{
464475
SWSS_LOG_ENTER();

vslib/SwitchMLNX2700.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ namespace saivs
5454
_Inout_ sai_s32_list_t *enum_values_capability) override;
5555
virtual sai_status_t queryVlanfloodTypeCapability(
5656
_Inout_ sai_s32_list_t *enum_values_capability) override;
57-
57+
virtual sai_status_t queryPortAutonegFecOverrideSupportCapability(
58+
_Out_ sai_attr_capability_t *attr_capability) override;
5859
};
5960
}

vslib/SwitchStateBase.cpp

+30
Original file line numberDiff line numberDiff line change
@@ -3641,6 +3641,17 @@ sai_status_t SwitchStateBase::queryTunnelPeerModeCapability(
36413641
return SAI_STATUS_SUCCESS;
36423642
}
36433643

3644+
sai_status_t SwitchStateBase::queryPortAutonegFecOverrideSupportCapability(
3645+
_Out_ sai_attr_capability_t *capability)
3646+
{
3647+
SWSS_LOG_ENTER();
3648+
3649+
capability->create_implemented = false;
3650+
capability->set_implemented = false;
3651+
capability->get_implemented = false;
3652+
return SAI_STATUS_SUCCESS;
3653+
}
3654+
36443655
sai_status_t SwitchStateBase::queryVlanfloodTypeCapability(
36453656
_Inout_ sai_s32_list_t *enum_values_capability)
36463657
{
@@ -3742,3 +3753,22 @@ sai_status_t SwitchStateBase::queryAttrEnumValuesCapability(
37423753

37433754
return SAI_STATUS_NOT_SUPPORTED;
37443755
}
3756+
3757+
sai_status_t SwitchStateBase::queryAttributeCapability(
3758+
_In_ sai_object_id_t switch_id,
3759+
_In_ sai_object_type_t object_type,
3760+
_In_ sai_attr_id_t attr_id,
3761+
_Out_ sai_attr_capability_t *capability)
3762+
{
3763+
SWSS_LOG_ENTER();
3764+
3765+
if (object_type == SAI_OBJECT_TYPE_PORT && attr_id == SAI_PORT_ATTR_AUTO_NEG_FEC_MODE_OVERRIDE)
3766+
{
3767+
return queryPortAutonegFecOverrideSupportCapability(capability);
3768+
}
3769+
capability->create_implemented = true;
3770+
capability->set_implemented = true;
3771+
capability->get_implemented = true;
3772+
3773+
return SAI_STATUS_SUCCESS;
3774+
}

vslib/SwitchStateBase.h

+9
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,12 @@ namespace saivs
295295
_In_ sai_attr_id_t attr_id,
296296
_Inout_ sai_s32_list_t *enum_values_capability);
297297

298+
virtual sai_status_t queryAttributeCapability(
299+
_In_ sai_object_id_t switch_id,
300+
_In_ sai_object_type_t object_type,
301+
_In_ sai_attr_id_t attr_id,
302+
_Out_ sai_attr_capability_t *attr_capability);
303+
298304
protected:
299305

300306
virtual sai_status_t remove_internal(
@@ -689,6 +695,9 @@ namespace saivs
689695
virtual sai_status_t queryHashNativeHashFieldListCapability(
690696
_Inout_ sai_s32_list_t *enum_values_capability);
691697

698+
virtual sai_status_t queryPortAutonegFecOverrideSupportCapability(
699+
_Out_ sai_attr_capability_t *attr_capability);
700+
692701
public: // TODO private
693702

694703
std::set<FdbInfo> m_fdb_info_set;

vslib/VirtualSwitchSaiInterface.cpp

+2-10
Original file line numberDiff line numberDiff line change
@@ -859,16 +859,8 @@ sai_status_t VirtualSwitchSaiInterface::queryAttributeCapability(
859859
{
860860
SWSS_LOG_ENTER();
861861

862-
// TODO: We should generate this metadata for the virtual switch rather
863-
// than hard-coding it here.
864-
865-
// in virtual switch by default all apis are implemented for all objects. SUCCESS for all attributes
866-
867-
capability->create_implemented = true;
868-
capability->set_implemented = true;
869-
capability->get_implemented = true;
870-
871-
return SAI_STATUS_SUCCESS;
862+
auto ss = m_switchStateMap.at(switch_id);
863+
return ss->queryAttributeCapability(switch_id, object_type, attr_id, capability);
872864
}
873865

874866
sai_status_t VirtualSwitchSaiInterface::queryAattributeEnumValuesCapability(

0 commit comments

Comments
 (0)