Skip to content

Commit b4c2045

Browse files
Switch Capability support (sonic-net#728)
Adds SAI_SWITCH_ATTR_SUPPORTED_OBJECT_TYPE_LIST to switch attributes. Signed-off-by: Prabhu Sreenivasan <[email protected]>
1 parent e167754 commit b4c2045

File tree

2 files changed

+53
-0
lines changed

2 files changed

+53
-0
lines changed

vslib/src/SwitchStateBase.cpp

+21
Original file line numberDiff line numberDiff line change
@@ -864,6 +864,24 @@ sai_status_t SwitchStateBase::set_switch_default_attributes()
864864
attr.id = SAI_SWITCH_ATTR_WARM_RECOVER;
865865
attr.value.booldata = false;
866866

867+
CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr));
868+
869+
// Fill this with supported SAI_OBJECT_TYPEs
870+
sai_object_type_t supported_obj_list[] = {
871+
SAI_OBJECT_TYPE_PORT,
872+
SAI_OBJECT_TYPE_LAG,
873+
SAI_OBJECT_TYPE_TAM,
874+
SAI_OBJECT_TYPE_TAM_COLLECTOR,
875+
SAI_OBJECT_TYPE_TAM_REPORT,
876+
SAI_OBJECT_TYPE_TAM_TRANSPORT,
877+
SAI_OBJECT_TYPE_TAM_TELEMETRY,
878+
SAI_OBJECT_TYPE_TAM_EVENT_THRESHOLD
879+
};
880+
881+
attr.id = SAI_SWITCH_ATTR_SUPPORTED_OBJECT_TYPE_LIST;
882+
attr.value.s32list.count = sizeof(supported_obj_list)/sizeof(sai_object_type_t);
883+
attr.value.s32list.list = (int32_t *) supported_obj_list;
884+
867885
return set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr);
868886
}
869887

@@ -1793,6 +1811,9 @@ sai_status_t SwitchStateBase::refresh_read_only(
17931811
case SAI_SWITCH_ATTR_NUMBER_OF_SYSTEM_PORTS:
17941812
case SAI_SWITCH_ATTR_SYSTEM_PORT_LIST:
17951813
return refresh_system_port_list(meta);
1814+
1815+
case SAI_SWITCH_ATTR_SUPPORTED_OBJECT_TYPE_LIST:
1816+
return SAI_STATUS_SUCCESS;
17961817
}
17971818
}
17981819

vslib/src/tests.cpp

+32
Original file line numberDiff line numberDiff line change
@@ -779,6 +779,36 @@ void test_get_stats()
779779
ASSERT_TRUE(values[1] == 77);
780780
}
781781

782+
void test_supported_obj_types()
783+
{
784+
SWSS_LOG_ENTER();
785+
786+
sai_reinit();
787+
788+
uint32_t expected_num_attrs = 8;
789+
790+
sai_attribute_t attr;
791+
792+
sai_object_id_t switch_id;
793+
794+
attr.id = SAI_SWITCH_ATTR_INIT_SWITCH;
795+
attr.value.booldata = true;
796+
797+
SUCCESS(sai_metadata_sai_switch_api->create_switch(&switch_id, 1, &attr));
798+
799+
std::vector<sai_object_type_t> supported_obj_list;
800+
supported_obj_list.resize(expected_num_attrs);
801+
802+
attr.id = SAI_SWITCH_ATTR_SUPPORTED_OBJECT_TYPE_LIST;
803+
attr.value.s32list.count = expected_num_attrs;
804+
attr.value.s32list.list = (int32_t *) supported_obj_list.data();
805+
806+
SUCCESS(sai_metadata_sai_switch_api->get_switch_attribute(switch_id, 1, &attr));
807+
808+
ASSERT_TRUE(attr.value.objlist.count == expected_num_attrs);
809+
810+
}
811+
782812
int main()
783813
{
784814
swss::Logger::getInstance().setMinPrio(swss::Logger::SWSS_DEBUG);
@@ -803,6 +833,8 @@ int main()
803833

804834
test_get_stats();
805835

836+
test_supported_obj_types();
837+
806838
test_set_stats_via_redis();
807839

808840
// make proper uninitialize to close unittest thread

0 commit comments

Comments
 (0)