diff --git a/tests/aspell.en.pws b/tests/aspell.en.pws index 1d55f30a..59a1b350 100644 --- a/tests/aspell.en.pws +++ b/tests/aspell.en.pws @@ -430,6 +430,7 @@ TXSC typedef uint uncomment +unicast uninitialize unistd unittest diff --git a/unittest/vslib/Makefile.am b/unittest/vslib/Makefile.am index ed1052a0..3276e5fe 100644 --- a/unittest/vslib/Makefile.am +++ b/unittest/vslib/Makefile.am @@ -40,6 +40,7 @@ tests_SOURCES = main.cpp \ TestSwitch.cpp \ TestSwitchMLNX2700.cpp \ TestSwitchNvdaMBF2H536C.cpp \ + TestSwitchBCM56971B0.cpp \ TestSwitchBCM56850.cpp \ TestSwitchBCM81724.cpp \ TestSwitchStateBaseMACsec.cpp \ diff --git a/unittest/vslib/TestSwitchBCM56850.cpp b/unittest/vslib/TestSwitchBCM56850.cpp index d2260f82..fba0e905 100644 --- a/unittest/vslib/TestSwitchBCM56850.cpp +++ b/unittest/vslib/TestSwitchBCM56850.cpp @@ -212,6 +212,53 @@ static bool getWarmBootState( return true; } +TEST(SwitchBCM56850, test_queue_number_get) +{ + auto sc = std::make_shared(0, ""); + auto signal = std::make_shared(); + auto eventQueue = std::make_shared(signal); + + sc->m_saiSwitchType = SAI_SWITCH_TYPE_NPU; + sc->m_switchType = SAI_VS_SWITCH_TYPE_BCM56850; + sc->m_bootType = SAI_VS_BOOT_TYPE_COLD; + sc->m_useTapDevice = false; + sc->m_laneMap = LaneMap::getDefaultLaneMap(0); + sc->m_eventQueue = eventQueue; + + auto scc = std::make_shared(); + + scc->insert(sc); + + SwitchBCM56850 sw( + 0x2100000000, + std::make_shared(0, scc), + sc); + + // Initialize switch state + ASSERT_EQ(sw.initialize_default_objects(0, nullptr), SAI_STATUS_SUCCESS); + + const sai_uint32_t uqNum = 10; + const sai_uint32_t mqNum = 10; + const sai_uint32_t qNum = uqNum + mqNum; + + sai_attribute_t attr; + + // Verify unicast queue number + attr.id = SAI_SWITCH_ATTR_NUMBER_OF_UNICAST_QUEUES; + ASSERT_EQ(sw.get(SAI_OBJECT_TYPE_SWITCH, 0x2100000000, 1, &attr), SAI_STATUS_SUCCESS); + ASSERT_EQ(attr.value.u32, uqNum); + + // Verify multicast queue number + attr.id = SAI_SWITCH_ATTR_NUMBER_OF_MULTICAST_QUEUES; + ASSERT_EQ(sw.get(SAI_OBJECT_TYPE_SWITCH, 0x2100000000, 1, &attr), SAI_STATUS_SUCCESS); + ASSERT_EQ(attr.value.u32, mqNum); + + // Verify total queue number + attr.id = SAI_SWITCH_ATTR_NUMBER_OF_QUEUES; + ASSERT_EQ(sw.get(SAI_OBJECT_TYPE_SWITCH, 0x2100000000, 1, &attr), SAI_STATUS_SUCCESS); + ASSERT_EQ(attr.value.u32, qNum); +} + TEST(SwitchBCM56850, warm_update_queues) { auto sc = std::make_shared(0, ""); diff --git a/unittest/vslib/TestSwitchBCM56971B0.cpp b/unittest/vslib/TestSwitchBCM56971B0.cpp new file mode 100644 index 00000000..a0d25f60 --- /dev/null +++ b/unittest/vslib/TestSwitchBCM56971B0.cpp @@ -0,0 +1,52 @@ +#include + +#include "SwitchBCM56971B0.h" + +using namespace saivs; + +TEST(SwitchBCM56971B0, test_queue_number_get) +{ + auto sc = std::make_shared(0, ""); + auto signal = std::make_shared(); + auto eventQueue = std::make_shared(signal); + + sc->m_saiSwitchType = SAI_SWITCH_TYPE_NPU; + sc->m_switchType = SAI_VS_SWITCH_TYPE_BCM56971B0; + sc->m_bootType = SAI_VS_BOOT_TYPE_COLD; + sc->m_useTapDevice = false; + sc->m_laneMap = LaneMap::getDefaultLaneMap(0); + sc->m_eventQueue = eventQueue; + + auto scc = std::make_shared(); + + scc->insert(sc); + + SwitchBCM56971B0 sw( + 0x2100000000, + std::make_shared(0, scc), + sc); + + // Initialize switch state + ASSERT_EQ(sw.initialize_default_objects(0, nullptr), SAI_STATUS_SUCCESS); + + const sai_uint32_t uqNum = 10; + const sai_uint32_t mqNum = 10; + const sai_uint32_t qNum = uqNum + mqNum; + + sai_attribute_t attr; + + // Verify unicast queue number + attr.id = SAI_SWITCH_ATTR_NUMBER_OF_UNICAST_QUEUES; + ASSERT_EQ(sw.get(SAI_OBJECT_TYPE_SWITCH, 0x2100000000, 1, &attr), SAI_STATUS_SUCCESS); + ASSERT_EQ(attr.value.u32, uqNum); + + // Verify multicast queue number + attr.id = SAI_SWITCH_ATTR_NUMBER_OF_MULTICAST_QUEUES; + ASSERT_EQ(sw.get(SAI_OBJECT_TYPE_SWITCH, 0x2100000000, 1, &attr), SAI_STATUS_SUCCESS); + ASSERT_EQ(attr.value.u32, mqNum); + + // Verify total queue number + attr.id = SAI_SWITCH_ATTR_NUMBER_OF_QUEUES; + ASSERT_EQ(sw.get(SAI_OBJECT_TYPE_SWITCH, 0x2100000000, 1, &attr), SAI_STATUS_SUCCESS); + ASSERT_EQ(attr.value.u32, qNum); +} diff --git a/unittest/vslib/TestSwitchMLNX2700.cpp b/unittest/vslib/TestSwitchMLNX2700.cpp index 8f9b3c0d..5e1cd23a 100644 --- a/unittest/vslib/TestSwitchMLNX2700.cpp +++ b/unittest/vslib/TestSwitchMLNX2700.cpp @@ -139,6 +139,33 @@ TEST_F(SwitchMLNX2700Test, portBulkAddRemove) } } +TEST_F(SwitchMLNX2700Test, switchQueueNumberGet) +{ + // Initialize switch state + ASSERT_EQ(m_ss->initialize_default_objects(0, nullptr), SAI_STATUS_SUCCESS); + + const sai_uint32_t uqNum = 8; + const sai_uint32_t mqNum = 8; + const sai_uint32_t qNum = uqNum + mqNum; + + sai_attribute_t attr; + + // Verify unicast queue number + attr.id = SAI_SWITCH_ATTR_NUMBER_OF_UNICAST_QUEUES; + ASSERT_EQ(m_ss->get(SAI_OBJECT_TYPE_SWITCH, m_swid, 1, &attr), SAI_STATUS_SUCCESS); + ASSERT_EQ(attr.value.u32, uqNum); + + // Verify multicast queue number + attr.id = SAI_SWITCH_ATTR_NUMBER_OF_MULTICAST_QUEUES; + ASSERT_EQ(m_ss->get(SAI_OBJECT_TYPE_SWITCH, m_swid, 1, &attr), SAI_STATUS_SUCCESS); + ASSERT_EQ(attr.value.u32, mqNum); + + // Verify total queue number + attr.id = SAI_SWITCH_ATTR_NUMBER_OF_QUEUES; + ASSERT_EQ(m_ss->get(SAI_OBJECT_TYPE_SWITCH, m_swid, 1, &attr), SAI_STATUS_SUCCESS); + ASSERT_EQ(attr.value.u32, qNum); +} + TEST(SwitchMLNX2700, ctr) { auto sc = std::make_shared(0, ""); diff --git a/unittest/vslib/TestSwitchStateBase.cpp b/unittest/vslib/TestSwitchStateBase.cpp index fee5b09e..771e79f5 100644 --- a/unittest/vslib/TestSwitchStateBase.cpp +++ b/unittest/vslib/TestSwitchStateBase.cpp @@ -174,6 +174,37 @@ TEST_F(SwitchStateBaseTest, switchHashAlgorithmCapabilitiesGet) ASSERT_EQ(haSet1, haSet2); } +TEST_F(SwitchStateBaseTest, switchPacketTrimmingDscpModeCapabilitiesGet) +{ + sai_s32_list_t data = { .count = 0, .list = nullptr }; + + auto status = m_ss->queryAttrEnumValuesCapability( + m_swid, SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_PACKET_TRIM_DSCP_RESOLUTION_MODE, &data + ); + ASSERT_EQ(status, SAI_STATUS_BUFFER_OVERFLOW); + + std::vector qmList(data.count); + data.list = qmList.data(); + + status = m_ss->queryAttrEnumValuesCapability( + m_swid, SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_PACKET_TRIM_DSCP_RESOLUTION_MODE, &data + ); + ASSERT_EQ(status, SAI_STATUS_SUCCESS); + + const std::set qmSet1 = { + SAI_PACKET_TRIM_DSCP_RESOLUTION_MODE_DSCP_VALUE, + SAI_PACKET_TRIM_DSCP_RESOLUTION_MODE_FROM_TC + }; + + std::set qmSet2; + + std::transform( + qmList.cbegin(), qmList.cend(), std::inserter(qmSet2, qmSet2.begin()), + [](sai_int32_t value) { return static_cast(value); } + ); + ASSERT_EQ(qmSet1, qmSet2); +} + TEST_F(SwitchStateBaseTest, switchPacketTrimmingQueueModeCapabilitiesGet) { sai_s32_list_t data = { .count = 0, .list = nullptr }; @@ -236,6 +267,18 @@ TEST_F(SwitchStateBaseTest, bufferProfilePacketAdmissionFailActionCapabilitiesGe ASSERT_EQ(paSet1, paSet2); } +TEST_F(SwitchStateBaseTest, switchQoSMaxNumOfTrafficClasses) +{ + ASSERT_EQ(m_ss->set_maximum_number_of_traffic_classes(), SAI_STATUS_SUCCESS); + + sai_attribute_t attr; + attr.id = SAI_SWITCH_ATTR_QOS_MAX_NUMBER_OF_TRAFFIC_CLASSES; + ASSERT_EQ(m_ss->get(SAI_OBJECT_TYPE_SWITCH, sai_serialize_object_id(m_swid), 1, &attr), SAI_STATUS_SUCCESS); + + const sai_uint8_t maxTcNum = 16; + ASSERT_EQ(attr.value.u8, maxTcNum); +} + //Test the following function: //sai_status_t initialize_voq_switch_objects( // _In_ uint32_t attr_count, diff --git a/vslib/SwitchBCM56850.cpp b/vslib/SwitchBCM56850.cpp index 3ff0d520..38f949d3 100644 --- a/vslib/SwitchBCM56850.cpp +++ b/vslib/SwitchBCM56850.cpp @@ -36,7 +36,7 @@ sai_status_t SwitchBCM56850::create_qos_queues_per_port( sai_attribute_t attr; // 10 in and 10 out queues per port - const uint32_t port_qos_queues_count = 20; + const uint32_t port_qos_queues_count = m_unicastQueueNumber + m_multicastQueueNumber; std::vector queues; @@ -146,6 +146,36 @@ sai_status_t SwitchBCM56850::create_qos_queues() return SAI_STATUS_SUCCESS; } +sai_status_t SwitchBCM56850::set_number_of_queues() +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_INFO("set number of unicast queues"); + + sai_attribute_t attr; + + attr.id = SAI_SWITCH_ATTR_NUMBER_OF_UNICAST_QUEUES; + attr.value.u32 = m_unicastQueueNumber; + + CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr)); + + SWSS_LOG_INFO("set number of multicast queues"); + + attr.id = SAI_SWITCH_ATTR_NUMBER_OF_MULTICAST_QUEUES; + attr.value.u32 = m_multicastQueueNumber; + + CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr)); + + SWSS_LOG_INFO("set number of queues"); + + attr.id = SAI_SWITCH_ATTR_NUMBER_OF_QUEUES; + attr.value.u32 = m_unicastQueueNumber + m_multicastQueueNumber; + + CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr)); + + return SAI_STATUS_SUCCESS; +} + sai_status_t SwitchBCM56850::create_port_serdes() { SWSS_LOG_ENTER(); diff --git a/vslib/SwitchBCM56850.h b/vslib/SwitchBCM56850.h index ce365142..20cc7239 100644 --- a/vslib/SwitchBCM56850.h +++ b/vslib/SwitchBCM56850.h @@ -32,6 +32,8 @@ namespace saivs virtual sai_status_t create_qos_queues() override; + virtual sai_status_t set_number_of_queues() override; + virtual sai_status_t create_scheduler_group_tree( _In_ const std::vector& sgs, _In_ sai_object_id_t port_id) override; @@ -51,5 +53,10 @@ namespace saivs virtual sai_status_t create_port_serdes_per_port( _In_ sai_object_id_t port_id) override; + + protected: + + constexpr static const uint32_t m_unicastQueueNumber = 10; + constexpr static const uint32_t m_multicastQueueNumber = 10; }; } diff --git a/vslib/SwitchBCM56971B0.cpp b/vslib/SwitchBCM56971B0.cpp index c9b33f1b..c5e2c40e 100644 --- a/vslib/SwitchBCM56971B0.cpp +++ b/vslib/SwitchBCM56971B0.cpp @@ -36,7 +36,7 @@ sai_status_t SwitchBCM56971B0::create_qos_queues_per_port( sai_attribute_t attr; // 10 in and 10 out queues per port - const uint32_t port_qos_queues_count = 20; + const uint32_t port_qos_queues_count = m_unicastQueueNumber + m_multicastQueueNumber; std::vector queues; @@ -146,6 +146,36 @@ sai_status_t SwitchBCM56971B0::create_qos_queues() return SAI_STATUS_SUCCESS; } +sai_status_t SwitchBCM56971B0::set_number_of_queues() +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_INFO("set number of unicast queues"); + + sai_attribute_t attr; + + attr.id = SAI_SWITCH_ATTR_NUMBER_OF_UNICAST_QUEUES; + attr.value.u32 = m_unicastQueueNumber; + + CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr)); + + SWSS_LOG_INFO("set number of multicast queues"); + + attr.id = SAI_SWITCH_ATTR_NUMBER_OF_MULTICAST_QUEUES; + attr.value.u32 = m_multicastQueueNumber; + + CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr)); + + SWSS_LOG_INFO("set number of queues"); + + attr.id = SAI_SWITCH_ATTR_NUMBER_OF_QUEUES; + attr.value.u32 = m_unicastQueueNumber + m_multicastQueueNumber; + + CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr)); + + return SAI_STATUS_SUCCESS; +} + sai_status_t SwitchBCM56971B0::create_port_serdes() { SWSS_LOG_ENTER(); diff --git a/vslib/SwitchBCM56971B0.h b/vslib/SwitchBCM56971B0.h index 286146e4..0da6b46b 100644 --- a/vslib/SwitchBCM56971B0.h +++ b/vslib/SwitchBCM56971B0.h @@ -32,6 +32,8 @@ namespace saivs virtual sai_status_t create_qos_queues() override; + virtual sai_status_t set_number_of_queues() override; + virtual sai_status_t create_scheduler_group_tree( _In_ const std::vector& sgs, _In_ sai_object_id_t port_id) override; @@ -51,5 +53,10 @@ namespace saivs virtual sai_status_t create_port_serdes_per_port( _In_ sai_object_id_t port_id) override; + + protected: + + constexpr static const uint32_t m_unicastQueueNumber = 10; + constexpr static const uint32_t m_multicastQueueNumber = 10; }; } diff --git a/vslib/SwitchMLNX2700.cpp b/vslib/SwitchMLNX2700.cpp index 4ebdcba8..1d5cb403 100644 --- a/vslib/SwitchMLNX2700.cpp +++ b/vslib/SwitchMLNX2700.cpp @@ -34,7 +34,7 @@ sai_status_t SwitchMLNX2700::create_qos_queues_per_port( SWSS_LOG_ENTER(); // 8 in and 8 out queues per port - const uint32_t port_qos_queues_count = 16; + const uint32_t port_qos_queues_count = m_unicastQueueNumber + m_multicastQueueNumber; std::vector queues; for (uint32_t i = 0; i < port_qos_queues_count; ++i) @@ -91,6 +91,36 @@ sai_status_t SwitchMLNX2700::create_qos_queues() return SAI_STATUS_SUCCESS; } +sai_status_t SwitchMLNX2700::set_number_of_queues() +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_INFO("set number of unicast queues"); + + sai_attribute_t attr; + + attr.id = SAI_SWITCH_ATTR_NUMBER_OF_UNICAST_QUEUES; + attr.value.u32 = m_unicastQueueNumber; + + CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr)); + + SWSS_LOG_INFO("set number of multicast queues"); + + attr.id = SAI_SWITCH_ATTR_NUMBER_OF_MULTICAST_QUEUES; + attr.value.u32 = m_multicastQueueNumber; + + CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr)); + + SWSS_LOG_INFO("set number of queues"); + + attr.id = SAI_SWITCH_ATTR_NUMBER_OF_QUEUES; + attr.value.u32 = m_unicastQueueNumber + m_multicastQueueNumber; + + CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr)); + + return SAI_STATUS_SUCCESS; +} + sai_status_t SwitchMLNX2700::create_scheduler_group_tree( _In_ const std::vector& sgs, _In_ sai_object_id_t port_id) diff --git a/vslib/SwitchMLNX2700.h b/vslib/SwitchMLNX2700.h index 26e1cc95..81a4a2b6 100644 --- a/vslib/SwitchMLNX2700.h +++ b/vslib/SwitchMLNX2700.h @@ -29,6 +29,8 @@ namespace saivs virtual sai_status_t create_qos_queues() override; + virtual sai_status_t set_number_of_queues() override; + virtual sai_status_t create_scheduler_group_tree( _In_ const std::vector& sgs, _In_ sai_object_id_t port_id) override; @@ -56,5 +58,9 @@ namespace saivs _Inout_ sai_s32_list_t *enum_values_capability) override; virtual sai_status_t queryPortAutonegFecOverrideSupportCapability( _Out_ sai_attr_capability_t *attr_capability) override; + + protected: + constexpr static const uint32_t m_unicastQueueNumber = 8; + constexpr static const uint32_t m_multicastQueueNumber = 8; }; } diff --git a/vslib/SwitchStateBase.cpp b/vslib/SwitchStateBase.cpp index fa904827..c1c6bd94 100644 --- a/vslib/SwitchStateBase.cpp +++ b/vslib/SwitchStateBase.cpp @@ -1683,6 +1683,15 @@ sai_status_t SwitchStateBase::create_qos_queues() return SAI_STATUS_NOT_IMPLEMENTED; } +sai_status_t SwitchStateBase::set_number_of_queues() +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_ERROR("implement in child class"); + + return SAI_STATUS_NOT_IMPLEMENTED; +} + sai_status_t SwitchStateBase::create_scheduler_group_tree( _In_ const std::vector& sgs, _In_ sai_object_id_t port_id) @@ -1720,6 +1729,20 @@ sai_status_t SwitchStateBase::create_scheduler_groups() return SAI_STATUS_SUCCESS; } +sai_status_t SwitchStateBase::set_maximum_number_of_traffic_classes() +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_INFO("set number of traffic classes"); + + sai_attribute_t attr; + + attr.id = SAI_SWITCH_ATTR_QOS_MAX_NUMBER_OF_TRAFFIC_CLASSES; + attr.value.u8 = 16; + + return set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr); +} + sai_status_t SwitchStateBase::set_maximum_number_of_childs_per_scheduler_group() { SWSS_LOG_ENTER(); @@ -1786,6 +1809,8 @@ sai_status_t SwitchStateBase::initialize_default_objects( CHECK_STATUS(set_acl_capabilities()); CHECK_STATUS(create_ingress_priority_groups()); CHECK_STATUS(create_qos_queues()); + CHECK_STATUS(set_number_of_queues()); + CHECK_STATUS(set_maximum_number_of_traffic_classes()); CHECK_STATUS(set_maximum_number_of_childs_per_scheduler_group()); CHECK_STATUS(set_number_of_ecmp_groups()); CHECK_STATUS(set_switch_default_attributes()); @@ -2504,10 +2529,16 @@ sai_status_t SwitchStateBase::refresh_read_only( case SAI_SWITCH_ATTR_NUMBER_OF_ECMP_GROUPS: return SAI_STATUS_SUCCESS; + case SAI_SWITCH_ATTR_NUMBER_OF_UNICAST_QUEUES: + case SAI_SWITCH_ATTR_NUMBER_OF_MULTICAST_QUEUES: + case SAI_SWITCH_ATTR_NUMBER_OF_QUEUES: + return SAI_STATUS_SUCCESS; + case SAI_SWITCH_ATTR_PORT_NUMBER: case SAI_SWITCH_ATTR_PORT_LIST: return refresh_port_list(meta); + case SAI_SWITCH_ATTR_QOS_MAX_NUMBER_OF_TRAFFIC_CLASSES: case SAI_SWITCH_ATTR_QOS_MAX_NUMBER_OF_CHILDS_PER_SCHEDULER_GROUP: return SAI_STATUS_SUCCESS; @@ -3958,6 +3989,24 @@ sai_status_t SwitchStateBase::querySwitchHashAlgorithmCapability( return SAI_STATUS_SUCCESS; } +sai_status_t SwitchStateBase::querySwitchPacketTrimmingDscpResolutionModeCapability( + _Inout_ sai_s32_list_t *enum_values_capability) +{ + SWSS_LOG_ENTER(); + + if (enum_values_capability->count < 2) + { + enum_values_capability->count = 2; + return SAI_STATUS_BUFFER_OVERFLOW; + } + + enum_values_capability->count = 2; + enum_values_capability->list[0] = SAI_PACKET_TRIM_DSCP_RESOLUTION_MODE_DSCP_VALUE; + enum_values_capability->list[1] = SAI_PACKET_TRIM_DSCP_RESOLUTION_MODE_FROM_TC; + + return SAI_STATUS_SUCCESS; +} + sai_status_t SwitchStateBase::querySwitchPacketTrimmingQueueResolutionModeCapability( _Inout_ sai_s32_list_t *enum_values_capability) { @@ -4025,6 +4074,10 @@ sai_status_t SwitchStateBase::queryAttrEnumValuesCapability( { return querySwitchHashAlgorithmCapability(enum_values_capability); } + else if (object_type == SAI_OBJECT_TYPE_SWITCH && attr_id == SAI_SWITCH_ATTR_PACKET_TRIM_DSCP_RESOLUTION_MODE) + { + return querySwitchPacketTrimmingDscpResolutionModeCapability(enum_values_capability); + } else if (object_type == SAI_OBJECT_TYPE_SWITCH && attr_id == SAI_SWITCH_ATTR_PACKET_TRIM_QUEUE_RESOLUTION_MODE) { return querySwitchPacketTrimmingQueueResolutionModeCapability(enum_values_capability); diff --git a/vslib/SwitchStateBase.h b/vslib/SwitchStateBase.h index 5ad40d5a..be351361 100644 --- a/vslib/SwitchStateBase.h +++ b/vslib/SwitchStateBase.h @@ -92,6 +92,8 @@ namespace saivs virtual sai_status_t set_acl_capabilities(); + virtual sai_status_t set_maximum_number_of_traffic_classes(); + virtual sai_status_t set_maximum_number_of_childs_per_scheduler_group(); virtual sai_status_t set_number_of_ecmp_groups(); @@ -212,6 +214,8 @@ namespace saivs virtual sai_status_t create_qos_queues(); + virtual sai_status_t set_number_of_queues(); + virtual sai_status_t create_scheduler_group_tree( _In_ const std::vector& sgs, _In_ sai_object_id_t port_id); @@ -749,6 +753,9 @@ namespace saivs virtual sai_status_t querySwitchHashAlgorithmCapability( _Inout_ sai_s32_list_t *enum_values_capability); + virtual sai_status_t querySwitchPacketTrimmingDscpResolutionModeCapability( + _Inout_ sai_s32_list_t *enum_values_capability); + virtual sai_status_t querySwitchPacketTrimmingQueueResolutionModeCapability( _Inout_ sai_s32_list_t *enum_values_capability);