Skip to content

Commit ef99e84

Browse files
committed
[trim]: Add Packet Trimming Asym DSCP to VS lib
Signed-off-by: Nazarii Hnydyn <[email protected]>
1 parent 28b7285 commit ef99e84

12 files changed

+291
-3
lines changed

tests/aspell.en.pws

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,7 @@ TXSC
430430
typedef
431431
uint
432432
uncomment
433+
unicast
433434
uninitialize
434435
unistd
435436
unittest

unittest/vslib/TestSwitchBCM56850.cpp

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,53 @@ static bool getWarmBootState(
212212
return true;
213213
}
214214

215+
TEST(SwitchBCM56850, test_queue_number_get)
216+
{
217+
auto sc = std::make_shared<SwitchConfig>(0, "");
218+
auto signal = std::make_shared<Signal>();
219+
auto eventQueue = std::make_shared<EventQueue>(signal);
220+
221+
sc->m_saiSwitchType = SAI_SWITCH_TYPE_NPU;
222+
sc->m_switchType = SAI_VS_SWITCH_TYPE_BCM56850;
223+
sc->m_bootType = SAI_VS_BOOT_TYPE_COLD;
224+
sc->m_useTapDevice = false;
225+
sc->m_laneMap = LaneMap::getDefaultLaneMap(0);
226+
sc->m_eventQueue = eventQueue;
227+
228+
auto scc = std::make_shared<SwitchConfigContainer>();
229+
230+
scc->insert(sc);
231+
232+
SwitchBCM56850 sw(
233+
0x2100000000,
234+
std::make_shared<RealObjectIdManager>(0, scc),
235+
sc);
236+
237+
// Initialize switch state
238+
ASSERT_EQ(sw.initialize_default_objects(0, nullptr), SAI_STATUS_SUCCESS);
239+
240+
const sai_uint32_t uqNum = 10;
241+
const sai_uint32_t mqNum = 10;
242+
const sai_uint32_t qNum = uqNum + mqNum;
243+
244+
sai_attribute_t attr;
245+
246+
// Verify unicast queue number
247+
attr.id = SAI_SWITCH_ATTR_NUMBER_OF_UNICAST_QUEUES;
248+
ASSERT_EQ(sw.get(SAI_OBJECT_TYPE_SWITCH, 0x2100000000, 1, &attr), SAI_STATUS_SUCCESS);
249+
ASSERT_EQ(attr.value.u32, uqNum);
250+
251+
// Verify multicast queue number
252+
attr.id = SAI_SWITCH_ATTR_NUMBER_OF_MULTICAST_QUEUES;
253+
ASSERT_EQ(sw.get(SAI_OBJECT_TYPE_SWITCH, 0x2100000000, 1, &attr), SAI_STATUS_SUCCESS);
254+
ASSERT_EQ(attr.value.u32, mqNum);
255+
256+
// Verify total queue number
257+
attr.id = SAI_SWITCH_ATTR_NUMBER_OF_QUEUES;
258+
ASSERT_EQ(sw.get(SAI_OBJECT_TYPE_SWITCH, 0x2100000000, 1, &attr), SAI_STATUS_SUCCESS);
259+
ASSERT_EQ(attr.value.u32, qNum);
260+
}
261+
215262
TEST(SwitchBCM56850, warm_update_queues)
216263
{
217264
auto sc = std::make_shared<SwitchConfig>(0, "");

unittest/vslib/TestSwitchMLNX2700.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,33 @@ TEST_F(SwitchMLNX2700Test, portBulkAddRemove)
139139
}
140140
}
141141

142+
TEST_F(SwitchMLNX2700Test, switchQueueNumberGet)
143+
{
144+
// Initialize switch state
145+
ASSERT_EQ(m_ss->initialize_default_objects(0, nullptr), SAI_STATUS_SUCCESS);
146+
147+
const sai_uint32_t uqNum = 8;
148+
const sai_uint32_t mqNum = 8;
149+
const sai_uint32_t qNum = uqNum + mqNum;
150+
151+
sai_attribute_t attr;
152+
153+
// Verify unicast queue number
154+
attr.id = SAI_SWITCH_ATTR_NUMBER_OF_UNICAST_QUEUES;
155+
ASSERT_EQ(m_ss->get(SAI_OBJECT_TYPE_SWITCH, m_swid, 1, &attr), SAI_STATUS_SUCCESS);
156+
ASSERT_EQ(attr.value.u32, uqNum);
157+
158+
// Verify multicast queue number
159+
attr.id = SAI_SWITCH_ATTR_NUMBER_OF_MULTICAST_QUEUES;
160+
ASSERT_EQ(m_ss->get(SAI_OBJECT_TYPE_SWITCH, m_swid, 1, &attr), SAI_STATUS_SUCCESS);
161+
ASSERT_EQ(attr.value.u32, mqNum);
162+
163+
// Verify total queue number
164+
attr.id = SAI_SWITCH_ATTR_NUMBER_OF_QUEUES;
165+
ASSERT_EQ(m_ss->get(SAI_OBJECT_TYPE_SWITCH, m_swid, 1, &attr), SAI_STATUS_SUCCESS);
166+
ASSERT_EQ(attr.value.u32, qNum);
167+
}
168+
142169
TEST(SwitchMLNX2700, ctr)
143170
{
144171
auto sc = std::make_shared<SwitchConfig>(0, "");

unittest/vslib/TestSwitchStateBase.cpp

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,37 @@ TEST_F(SwitchStateBaseTest, switchHashAlgorithmCapabilitiesGet)
175175
ASSERT_EQ(haSet1, haSet2);
176176
}
177177

178+
TEST_F(SwitchStateBaseTest, switchPacketTrimmingDscpModeCapabilitiesGet)
179+
{
180+
sai_s32_list_t data = { .count = 0, .list = nullptr };
181+
182+
auto status = m_ss->queryAttrEnumValuesCapability(
183+
m_swid, SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_PACKET_TRIM_DSCP_RESOLUTION_MODE, &data
184+
);
185+
ASSERT_EQ(status, SAI_STATUS_BUFFER_OVERFLOW);
186+
187+
std::vector<sai_int32_t> qmList(data.count);
188+
data.list = qmList.data();
189+
190+
status = m_ss->queryAttrEnumValuesCapability(
191+
m_swid, SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_PACKET_TRIM_DSCP_RESOLUTION_MODE, &data
192+
);
193+
ASSERT_EQ(status, SAI_STATUS_SUCCESS);
194+
195+
const std::set<sai_packet_trim_dscp_resolution_mode_t> qmSet1 = {
196+
SAI_PACKET_TRIM_DSCP_RESOLUTION_MODE_DSCP_VALUE,
197+
SAI_PACKET_TRIM_DSCP_RESOLUTION_MODE_FROM_TC
198+
};
199+
200+
std::set<sai_packet_trim_dscp_resolution_mode_t> qmSet2;
201+
202+
std::transform(
203+
qmList.cbegin(), qmList.cend(), std::inserter(qmSet2, qmSet2.begin()),
204+
[](sai_int32_t value) { return static_cast<sai_packet_trim_dscp_resolution_mode_t>(value); }
205+
);
206+
ASSERT_EQ(qmSet1, qmSet2);
207+
}
208+
178209
TEST_F(SwitchStateBaseTest, switchPacketTrimmingQueueModeCapabilitiesGet)
179210
{
180211
sai_s32_list_t data = { .count = 0, .list = nullptr };
@@ -237,6 +268,18 @@ TEST_F(SwitchStateBaseTest, bufferProfilePacketAdmissionFailActionCapabilitiesGe
237268
ASSERT_EQ(paSet1, paSet2);
238269
}
239270

271+
TEST_F(SwitchStateBaseTest, switchQoSMaxNumOfTrafficClasses)
272+
{
273+
ASSERT_EQ(m_ss->set_maximum_number_of_traffic_classes(), SAI_STATUS_SUCCESS);
274+
275+
sai_attribute_t attr;
276+
attr.id = SAI_SWITCH_ATTR_QOS_MAX_NUMBER_OF_TRAFFIC_CLASSES;
277+
ASSERT_EQ(m_ss->get(SAI_OBJECT_TYPE_SWITCH, sai_serialize_object_id(m_swid), 1, &attr), SAI_STATUS_SUCCESS);
278+
279+
const sai_uint8_t maxTcNum = 16;
280+
ASSERT_EQ(attr.value.u8, maxTcNum);
281+
}
282+
240283
//Test the following function:
241284
//sai_status_t initialize_voq_switch_objects(
242285
// _In_ uint32_t attr_count,

vslib/SwitchBCM56850.cpp

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ sai_status_t SwitchBCM56850::create_qos_queues_per_port(
3636
sai_attribute_t attr;
3737

3838
// 10 in and 10 out queues per port
39-
const uint32_t port_qos_queues_count = 20;
39+
const uint32_t port_qos_queues_count = m_unicastQueueNumber + m_multicastQueueNumber;
4040

4141
std::vector<sai_object_id_t> queues;
4242

@@ -146,6 +146,36 @@ sai_status_t SwitchBCM56850::create_qos_queues()
146146
return SAI_STATUS_SUCCESS;
147147
}
148148

149+
sai_status_t SwitchBCM56850::set_number_of_queues()
150+
{
151+
SWSS_LOG_ENTER();
152+
153+
SWSS_LOG_INFO("set number of unicast queues");
154+
155+
sai_attribute_t attr;
156+
157+
attr.id = SAI_SWITCH_ATTR_NUMBER_OF_UNICAST_QUEUES;
158+
attr.value.u32 = m_unicastQueueNumber;
159+
160+
CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr));
161+
162+
SWSS_LOG_INFO("set number of multicast queues");
163+
164+
attr.id = SAI_SWITCH_ATTR_NUMBER_OF_MULTICAST_QUEUES;
165+
attr.value.u32 = m_multicastQueueNumber;
166+
167+
CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr));
168+
169+
SWSS_LOG_INFO("set number of queues");
170+
171+
attr.id = SAI_SWITCH_ATTR_NUMBER_OF_QUEUES;
172+
attr.value.u32 = m_unicastQueueNumber + m_multicastQueueNumber;
173+
174+
CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr));
175+
176+
return SAI_STATUS_SUCCESS;
177+
}
178+
149179
sai_status_t SwitchBCM56850::create_port_serdes()
150180
{
151181
SWSS_LOG_ENTER();

vslib/SwitchBCM56850.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ namespace saivs
3232

3333
virtual sai_status_t create_qos_queues() override;
3434

35+
virtual sai_status_t set_number_of_queues() override;
36+
3537
virtual sai_status_t create_scheduler_group_tree(
3638
_In_ const std::vector<sai_object_id_t>& sgs,
3739
_In_ sai_object_id_t port_id) override;
@@ -51,5 +53,10 @@ namespace saivs
5153

5254
virtual sai_status_t create_port_serdes_per_port(
5355
_In_ sai_object_id_t port_id) override;
56+
57+
protected:
58+
59+
constexpr static const uint32_t m_unicastQueueNumber = 10;
60+
constexpr static const uint32_t m_multicastQueueNumber = 10;
5461
};
5562
}

vslib/SwitchBCM56971B0.cpp

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ sai_status_t SwitchBCM56971B0::create_qos_queues_per_port(
3636
sai_attribute_t attr;
3737

3838
// 10 in and 10 out queues per port
39-
const uint32_t port_qos_queues_count = 20;
39+
const uint32_t port_qos_queues_count = m_unicastQueueNumber + m_multicastQueueNumber;
4040

4141
std::vector<sai_object_id_t> queues;
4242

@@ -146,6 +146,36 @@ sai_status_t SwitchBCM56971B0::create_qos_queues()
146146
return SAI_STATUS_SUCCESS;
147147
}
148148

149+
sai_status_t SwitchBCM56971B0::set_number_of_queues()
150+
{
151+
SWSS_LOG_ENTER();
152+
153+
SWSS_LOG_INFO("set number of unicast queues");
154+
155+
sai_attribute_t attr;
156+
157+
attr.id = SAI_SWITCH_ATTR_NUMBER_OF_UNICAST_QUEUES;
158+
attr.value.u32 = m_unicastQueueNumber;
159+
160+
CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr));
161+
162+
SWSS_LOG_INFO("set number of multicast queues");
163+
164+
attr.id = SAI_SWITCH_ATTR_NUMBER_OF_MULTICAST_QUEUES;
165+
attr.value.u32 = m_multicastQueueNumber;
166+
167+
CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr));
168+
169+
SWSS_LOG_INFO("set number of queues");
170+
171+
attr.id = SAI_SWITCH_ATTR_NUMBER_OF_QUEUES;
172+
attr.value.u32 = m_unicastQueueNumber + m_multicastQueueNumber;
173+
174+
CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr));
175+
176+
return SAI_STATUS_SUCCESS;
177+
}
178+
149179
sai_status_t SwitchBCM56971B0::create_port_serdes()
150180
{
151181
SWSS_LOG_ENTER();

vslib/SwitchBCM56971B0.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ namespace saivs
3232

3333
virtual sai_status_t create_qos_queues() override;
3434

35+
virtual sai_status_t set_number_of_queues() override;
36+
3537
virtual sai_status_t create_scheduler_group_tree(
3638
_In_ const std::vector<sai_object_id_t>& sgs,
3739
_In_ sai_object_id_t port_id) override;
@@ -51,5 +53,10 @@ namespace saivs
5153

5254
virtual sai_status_t create_port_serdes_per_port(
5355
_In_ sai_object_id_t port_id) override;
56+
57+
protected:
58+
59+
constexpr static const uint32_t m_unicastQueueNumber = 10;
60+
constexpr static const uint32_t m_multicastQueueNumber = 10;
5461
};
5562
}

vslib/SwitchMLNX2700.cpp

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ sai_status_t SwitchMLNX2700::create_qos_queues_per_port(
3434
SWSS_LOG_ENTER();
3535

3636
// 8 in and 8 out queues per port
37-
const uint32_t port_qos_queues_count = 16;
37+
const uint32_t port_qos_queues_count = m_unicastQueueNumber + m_multicastQueueNumber;
3838
std::vector<sai_object_id_t> queues;
3939

4040
for (uint32_t i = 0; i < port_qos_queues_count; ++i)
@@ -91,6 +91,36 @@ sai_status_t SwitchMLNX2700::create_qos_queues()
9191
return SAI_STATUS_SUCCESS;
9292
}
9393

94+
sai_status_t SwitchMLNX2700::set_number_of_queues()
95+
{
96+
SWSS_LOG_ENTER();
97+
98+
SWSS_LOG_INFO("set number of unicast queues");
99+
100+
sai_attribute_t attr;
101+
102+
attr.id = SAI_SWITCH_ATTR_NUMBER_OF_UNICAST_QUEUES;
103+
attr.value.u32 = m_unicastQueueNumber;
104+
105+
CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr));
106+
107+
SWSS_LOG_INFO("set number of multicast queues");
108+
109+
attr.id = SAI_SWITCH_ATTR_NUMBER_OF_MULTICAST_QUEUES;
110+
attr.value.u32 = m_multicastQueueNumber;
111+
112+
CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr));
113+
114+
SWSS_LOG_INFO("set number of queues");
115+
116+
attr.id = SAI_SWITCH_ATTR_NUMBER_OF_QUEUES;
117+
attr.value.u32 = m_unicastQueueNumber + m_multicastQueueNumber;
118+
119+
CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr));
120+
121+
return SAI_STATUS_SUCCESS;
122+
}
123+
94124
sai_status_t SwitchMLNX2700::create_scheduler_group_tree(
95125
_In_ const std::vector<sai_object_id_t>& sgs,
96126
_In_ sai_object_id_t port_id)

vslib/SwitchMLNX2700.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ namespace saivs
2929

3030
virtual sai_status_t create_qos_queues() override;
3131

32+
virtual sai_status_t set_number_of_queues() override;
33+
3234
virtual sai_status_t create_scheduler_group_tree(
3335
_In_ const std::vector<sai_object_id_t>& sgs,
3436
_In_ sai_object_id_t port_id) override;
@@ -56,5 +58,9 @@ namespace saivs
5658
_Inout_ sai_s32_list_t *enum_values_capability) override;
5759
virtual sai_status_t queryPortAutonegFecOverrideSupportCapability(
5860
_Out_ sai_attr_capability_t *attr_capability) override;
61+
62+
protected:
63+
constexpr static const uint32_t m_unicastQueueNumber = 8;
64+
constexpr static const uint32_t m_multicastQueueNumber = 8;
5965
};
6066
}

0 commit comments

Comments
 (0)