Skip to content

Commit 78f3613

Browse files
authored
Added query Enum value capability for vxlan EVPN feature (sonic-net#920)
1 parent 2e58cd9 commit 78f3613

7 files changed

+406
-1
lines changed

unittest/vslib/TestSwitchBCM56850.cpp

+150
Original file line numberDiff line numberDiff line change
@@ -268,3 +268,153 @@ TEST(SwitchBCM56850, warm_update_queues)
268268

269269
EXPECT_EQ(sw.get(SAI_OBJECT_TYPE_BRIDGE, sboid, 1, &attr), SAI_STATUS_SUCCESS);
270270
}
271+
272+
TEST(SwitchBCM56850, test_tunnel_term_capability)
273+
{
274+
auto sc = std::make_shared<SwitchConfig>(0, "");
275+
auto signal = std::make_shared<Signal>();
276+
auto eventQueue = std::make_shared<EventQueue>(signal);
277+
278+
sc->m_saiSwitchType = SAI_SWITCH_TYPE_NPU;
279+
sc->m_switchType = SAI_VS_SWITCH_TYPE_BCM56850;
280+
sc->m_bootType = SAI_VS_BOOT_TYPE_COLD;
281+
sc->m_useTapDevice = false;
282+
sc->m_laneMap = LaneMap::getDefaultLaneMap(0);
283+
sc->m_eventQueue = eventQueue;
284+
285+
auto scc = std::make_shared<SwitchConfigContainer>();
286+
287+
scc->insert(sc);
288+
289+
SwitchBCM56850 sw(
290+
0x2100000000,
291+
std::make_shared<RealObjectIdManager>(0, scc),
292+
sc);
293+
294+
295+
sai_s32_list_t enum_val_cap;
296+
int32_t list[2];
297+
298+
enum_val_cap.count = 2;
299+
enum_val_cap.list = list;
300+
301+
EXPECT_EQ(sw.queryAttrEnumValuesCapability(0x2100000000,
302+
SAI_OBJECT_TYPE_TUNNEL,
303+
SAI_TUNNEL_ATTR_PEER_MODE,
304+
&enum_val_cap),
305+
SAI_STATUS_SUCCESS);
306+
307+
EXPECT_EQ(enum_val_cap.count, 2);
308+
309+
int modes_found = 0;
310+
311+
for (uint32_t i = 0; i < enum_val_cap.count; i++)
312+
{
313+
if (enum_val_cap.list[i] == SAI_TUNNEL_PEER_MODE_P2MP || enum_val_cap.list[i] == SAI_TUNNEL_PEER_MODE_P2P)
314+
{
315+
modes_found++;
316+
}
317+
}
318+
319+
EXPECT_EQ(modes_found, 2);
320+
}
321+
322+
TEST(SwitchBCM56850, test_vlan_flood_capability)
323+
{
324+
auto sc = std::make_shared<SwitchConfig>(0, "");
325+
auto signal = std::make_shared<Signal>();
326+
auto eventQueue = std::make_shared<EventQueue>(signal);
327+
328+
sc->m_saiSwitchType = SAI_SWITCH_TYPE_NPU;
329+
sc->m_switchType = SAI_VS_SWITCH_TYPE_BCM56850;
330+
sc->m_bootType = SAI_VS_BOOT_TYPE_COLD;
331+
sc->m_useTapDevice = false;
332+
sc->m_laneMap = LaneMap::getDefaultLaneMap(0);
333+
sc->m_eventQueue = eventQueue;
334+
335+
auto scc = std::make_shared<SwitchConfigContainer>();
336+
337+
scc->insert(sc);
338+
339+
SwitchBCM56850 sw(
340+
0x2100000000,
341+
std::make_shared<RealObjectIdManager>(0, scc),
342+
sc);
343+
344+
sai_s32_list_t enum_val_cap;
345+
int32_t list[4];
346+
347+
enum_val_cap.count = 4;
348+
enum_val_cap.list = list;
349+
350+
EXPECT_EQ(sw.queryAttrEnumValuesCapability(0x2100000000,
351+
SAI_OBJECT_TYPE_VLAN,
352+
SAI_VLAN_ATTR_UNKNOWN_UNICAST_FLOOD_CONTROL_TYPE,
353+
&enum_val_cap),
354+
SAI_STATUS_SUCCESS);
355+
356+
EXPECT_EQ(enum_val_cap.count, 3);
357+
358+
int flood_types_found = 0;
359+
for (uint32_t i = 0; i < enum_val_cap.count; i++)
360+
{
361+
if (enum_val_cap.list[i] == SAI_VLAN_FLOOD_CONTROL_TYPE_ALL ||
362+
enum_val_cap.list[i] == SAI_VLAN_FLOOD_CONTROL_TYPE_NONE ||
363+
enum_val_cap.list[i] == SAI_VLAN_FLOOD_CONTROL_TYPE_L2MC_GROUP)
364+
{
365+
flood_types_found++;
366+
}
367+
}
368+
369+
EXPECT_EQ(flood_types_found, 3);
370+
371+
memset(list, 0, sizeof(list));
372+
flood_types_found = 0;
373+
enum_val_cap.count = 4;
374+
enum_val_cap.list = list;
375+
376+
EXPECT_EQ(sw.queryAttrEnumValuesCapability(0x2100000000,
377+
SAI_OBJECT_TYPE_VLAN,
378+
SAI_VLAN_ATTR_UNKNOWN_MULTICAST_FLOOD_CONTROL_TYPE,
379+
&enum_val_cap),
380+
SAI_STATUS_SUCCESS);
381+
382+
EXPECT_EQ(enum_val_cap.count, 3);
383+
384+
for (uint32_t i = 0; i < enum_val_cap.count; i++)
385+
{
386+
if (enum_val_cap.list[i] == SAI_VLAN_FLOOD_CONTROL_TYPE_ALL ||
387+
enum_val_cap.list[i] == SAI_VLAN_FLOOD_CONTROL_TYPE_NONE ||
388+
enum_val_cap.list[i] == SAI_VLAN_FLOOD_CONTROL_TYPE_L2MC_GROUP)
389+
{
390+
flood_types_found++;
391+
}
392+
}
393+
394+
EXPECT_EQ(flood_types_found, 3);
395+
396+
memset(list, 0, sizeof(list));
397+
flood_types_found = 0;
398+
enum_val_cap.count = 4;
399+
enum_val_cap.list = list;
400+
401+
EXPECT_EQ(sw.queryAttrEnumValuesCapability(0x2100000000,
402+
SAI_OBJECT_TYPE_VLAN,
403+
SAI_VLAN_ATTR_BROADCAST_FLOOD_CONTROL_TYPE,
404+
&enum_val_cap),
405+
SAI_STATUS_SUCCESS);
406+
407+
EXPECT_EQ(enum_val_cap.count, 3);
408+
409+
for (uint32_t i = 0; i < enum_val_cap.count; i++)
410+
{
411+
if (enum_val_cap.list[i] == SAI_VLAN_FLOOD_CONTROL_TYPE_ALL ||
412+
enum_val_cap.list[i] == SAI_VLAN_FLOOD_CONTROL_TYPE_NONE ||
413+
enum_val_cap.list[i] == SAI_VLAN_FLOOD_CONTROL_TYPE_L2MC_GROUP)
414+
{
415+
flood_types_found++;
416+
}
417+
}
418+
419+
EXPECT_EQ(flood_types_found, 3);
420+
}

unittest/vslib/TestSwitchMLNX2700.cpp

+144
Original file line numberDiff line numberDiff line change
@@ -267,3 +267,147 @@ TEST(SwitchMLNX2700, warm_update_queues)
267267

268268
EXPECT_EQ(sw.get(SAI_OBJECT_TYPE_BRIDGE, sboid, 1, &attr), SAI_STATUS_SUCCESS);
269269
}
270+
271+
TEST(SwitchMLNX2700, test_tunnel_term_capability)
272+
{
273+
auto sc = std::make_shared<SwitchConfig>(0, "");
274+
auto signal = std::make_shared<Signal>();
275+
auto eventQueue = std::make_shared<EventQueue>(signal);
276+
277+
sc->m_saiSwitchType = SAI_SWITCH_TYPE_NPU;
278+
sc->m_switchType = SAI_VS_SWITCH_TYPE_MLNX2700;
279+
sc->m_bootType = SAI_VS_BOOT_TYPE_COLD;
280+
sc->m_useTapDevice = false;
281+
sc->m_laneMap = LaneMap::getDefaultLaneMap(0);
282+
sc->m_eventQueue = eventQueue;
283+
284+
auto scc = std::make_shared<SwitchConfigContainer>();
285+
286+
scc->insert(sc);
287+
288+
SwitchMLNX2700 sw(
289+
0x2100000000,
290+
std::make_shared<RealObjectIdManager>(0, scc),
291+
sc);
292+
293+
sai_s32_list_t enum_val_cap;
294+
int32_t list[2];
295+
296+
enum_val_cap.count = 2;
297+
enum_val_cap.list = list;
298+
299+
EXPECT_EQ(sw.queryAttrEnumValuesCapability(0x2100000000,
300+
SAI_OBJECT_TYPE_TUNNEL,
301+
SAI_TUNNEL_ATTR_PEER_MODE,
302+
&enum_val_cap),
303+
SAI_STATUS_SUCCESS);
304+
305+
EXPECT_EQ(enum_val_cap.count, 1);
306+
307+
EXPECT_EQ(enum_val_cap.list[0], SAI_TUNNEL_PEER_MODE_P2MP);
308+
309+
}
310+
311+
TEST(SwitchMLNX2700, test_vlan_flood_capability)
312+
{
313+
auto sc = std::make_shared<SwitchConfig>(0, "");
314+
auto signal = std::make_shared<Signal>();
315+
auto eventQueue = std::make_shared<EventQueue>(signal);
316+
317+
sc->m_saiSwitchType = SAI_SWITCH_TYPE_NPU;
318+
sc->m_switchType = SAI_VS_SWITCH_TYPE_MLNX2700;
319+
sc->m_bootType = SAI_VS_BOOT_TYPE_COLD;
320+
sc->m_useTapDevice = false;
321+
sc->m_laneMap = LaneMap::getDefaultLaneMap(0);
322+
sc->m_eventQueue = eventQueue;
323+
324+
auto scc = std::make_shared<SwitchConfigContainer>();
325+
326+
scc->insert(sc);
327+
328+
SwitchMLNX2700 sw(
329+
0x2100000000,
330+
std::make_shared<RealObjectIdManager>(0, scc),
331+
sc);
332+
333+
sai_s32_list_t enum_val_cap;
334+
int32_t list[4];
335+
336+
enum_val_cap.count = 4;
337+
enum_val_cap.list = list;
338+
339+
EXPECT_EQ(sw.queryAttrEnumValuesCapability(0x2100000000,
340+
SAI_OBJECT_TYPE_VLAN,
341+
SAI_VLAN_ATTR_UNKNOWN_UNICAST_FLOOD_CONTROL_TYPE,
342+
&enum_val_cap),
343+
SAI_STATUS_SUCCESS);
344+
345+
EXPECT_EQ(enum_val_cap.count, 4);
346+
347+
int flood_types_found = 0;
348+
349+
for (uint32_t i = 0; i < enum_val_cap.count; i++)
350+
{
351+
if (enum_val_cap.list[i] == SAI_VLAN_FLOOD_CONTROL_TYPE_ALL ||
352+
enum_val_cap.list[i] == SAI_VLAN_FLOOD_CONTROL_TYPE_NONE ||
353+
enum_val_cap.list[i] == SAI_VLAN_FLOOD_CONTROL_TYPE_L2MC_GROUP ||
354+
enum_val_cap.list[i] == SAI_VLAN_FLOOD_CONTROL_TYPE_COMBINED)
355+
{
356+
flood_types_found++;
357+
}
358+
}
359+
360+
EXPECT_EQ(flood_types_found, 4);
361+
362+
memset(list, 0, sizeof(list));
363+
flood_types_found = 0;
364+
enum_val_cap.count = 4;
365+
enum_val_cap.list = list;
366+
367+
EXPECT_EQ(sw.queryAttrEnumValuesCapability(0x2100000000,
368+
SAI_OBJECT_TYPE_VLAN,
369+
SAI_VLAN_ATTR_UNKNOWN_MULTICAST_FLOOD_CONTROL_TYPE,
370+
&enum_val_cap),
371+
SAI_STATUS_SUCCESS);
372+
373+
EXPECT_EQ(enum_val_cap.count, 4);
374+
375+
for (uint32_t i = 0; i < enum_val_cap.count; i++)
376+
{
377+
if (enum_val_cap.list[i] == SAI_VLAN_FLOOD_CONTROL_TYPE_ALL ||
378+
enum_val_cap.list[i] == SAI_VLAN_FLOOD_CONTROL_TYPE_NONE ||
379+
enum_val_cap.list[i] == SAI_VLAN_FLOOD_CONTROL_TYPE_L2MC_GROUP ||
380+
enum_val_cap.list[i] == SAI_VLAN_FLOOD_CONTROL_TYPE_COMBINED)
381+
{
382+
flood_types_found++;
383+
}
384+
}
385+
386+
EXPECT_EQ(flood_types_found, 4);
387+
388+
memset(list, 0, sizeof(list));
389+
flood_types_found = 0;
390+
enum_val_cap.count = 4;
391+
enum_val_cap.list = list;
392+
393+
EXPECT_EQ(sw.queryAttrEnumValuesCapability(0x2100000000,
394+
SAI_OBJECT_TYPE_VLAN,
395+
SAI_VLAN_ATTR_BROADCAST_FLOOD_CONTROL_TYPE,
396+
&enum_val_cap),
397+
SAI_STATUS_SUCCESS);
398+
399+
EXPECT_EQ(enum_val_cap.count, 4);
400+
401+
for (uint32_t i = 0; i < enum_val_cap.count; i++)
402+
{
403+
if (enum_val_cap.list[i] == SAI_VLAN_FLOOD_CONTROL_TYPE_ALL ||
404+
enum_val_cap.list[i] == SAI_VLAN_FLOOD_CONTROL_TYPE_NONE ||
405+
enum_val_cap.list[i] == SAI_VLAN_FLOOD_CONTROL_TYPE_L2MC_GROUP ||
406+
enum_val_cap.list[i] == SAI_VLAN_FLOOD_CONTROL_TYPE_COMBINED)
407+
{
408+
flood_types_found++;
409+
}
410+
}
411+
412+
EXPECT_EQ(flood_types_found, 4);
413+
}

vslib/SwitchMLNX2700.cpp

+34
Original file line numberDiff line numberDiff line change
@@ -424,3 +424,37 @@ sai_status_t SwitchMLNX2700::warm_update_queues()
424424

425425
return SAI_STATUS_SUCCESS;
426426
}
427+
428+
sai_status_t SwitchMLNX2700::queryVlanfloodTypeCapability(
429+
_Inout_ sai_s32_list_t *enum_values_capability)
430+
{
431+
SWSS_LOG_ENTER();
432+
433+
if (enum_values_capability->count < 4)
434+
{
435+
return SAI_STATUS_BUFFER_OVERFLOW;
436+
}
437+
438+
enum_values_capability->count = 4;
439+
enum_values_capability->list[0] = SAI_VLAN_FLOOD_CONTROL_TYPE_ALL;
440+
enum_values_capability->list[1] = SAI_VLAN_FLOOD_CONTROL_TYPE_NONE;
441+
enum_values_capability->list[2] = SAI_VLAN_FLOOD_CONTROL_TYPE_L2MC_GROUP;
442+
enum_values_capability->list[3] = SAI_VLAN_FLOOD_CONTROL_TYPE_COMBINED;
443+
444+
return SAI_STATUS_SUCCESS;
445+
}
446+
447+
sai_status_t SwitchMLNX2700::queryTunnelPeerModeCapability(
448+
_Inout_ sai_s32_list_t *enum_values_capability)
449+
{
450+
SWSS_LOG_ENTER();
451+
452+
if (enum_values_capability->count < 1)
453+
{
454+
return SAI_STATUS_BUFFER_OVERFLOW;
455+
}
456+
457+
enum_values_capability->count = 1;
458+
enum_values_capability->list[0] = SAI_TUNNEL_PEER_MODE_P2MP;
459+
return SAI_STATUS_SUCCESS;
460+
}

vslib/SwitchMLNX2700.h

+7
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,12 @@ namespace saivs
4343
_In_ sai_object_id_t bridge_id) override;
4444

4545
virtual sai_status_t warm_update_queues() override;
46+
47+
protected:
48+
virtual sai_status_t queryTunnelPeerModeCapability(
49+
_Inout_ sai_s32_list_t *enum_values_capability) override;
50+
virtual sai_status_t queryVlanfloodTypeCapability(
51+
_Inout_ sai_s32_list_t *enum_values_capability) override;
52+
4653
};
4754
}

0 commit comments

Comments
 (0)