Skip to content

Commit 935eaf0

Browse files
Merge branch 'master' into fix-portsorch-init-crash
2 parents 8b1d0f2 + ab96400 commit 935eaf0

File tree

3 files changed

+70
-59
lines changed

3 files changed

+70
-59
lines changed

orchagent/switch/trimming/capabilities.cpp

Lines changed: 39 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,13 @@ static std::string toStr(const std::set<sai_packet_trim_queue_resolution_mode_t>
115115
return join(",", strList.cbegin(), strList.cend());
116116
}
117117

118+
static std::string toStr(sai_status_t value)
119+
{
120+
const auto *name = sai_metadata_get_status_name(value);
121+
122+
return name != nullptr ? name : "UNKNOWN";
123+
}
124+
118125
static std::string toStr(sai_uint8_t value)
119126
{
120127
return std::to_string(value);
@@ -297,9 +304,10 @@ void SwitchTrimmingCapabilities::queryTrimSizeAttrCapabilities()
297304
);
298305
if (status != SAI_STATUS_SUCCESS)
299306
{
300-
SWSS_LOG_ERROR(
301-
"Failed to get attribute(%s) capabilities",
302-
toStr(SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_PACKET_TRIM_SIZE).c_str()
307+
SWSS_LOG_NOTICE(
308+
"Attribute(%s) capabilities are not available: unexpected status(%s)",
309+
toStr(SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_PACKET_TRIM_SIZE).c_str(),
310+
toStr(status).c_str()
303311
);
304312
return;
305313
}
@@ -324,19 +332,12 @@ void SwitchTrimmingCapabilities::queryTrimDscpModeEnumCapabilities()
324332
auto status = queryEnumCapabilitiesSai(
325333
mList, SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_PACKET_TRIM_DSCP_RESOLUTION_MODE
326334
);
327-
if (status == SAI_STATUS_NOT_SUPPORTED)
335+
if (status != SAI_STATUS_SUCCESS)
328336
{
329337
SWSS_LOG_NOTICE(
330-
"Attribute not supported(%s) to query enum value capabilities",
331-
toStr(SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_PACKET_TRIM_DSCP_RESOLUTION_MODE).c_str()
332-
);
333-
return;
334-
}
335-
else if (status != SAI_STATUS_SUCCESS)
336-
{
337-
SWSS_LOG_ERROR(
338-
"Failed to get attribute(%s) enum value capabilities",
339-
toStr(SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_PACKET_TRIM_DSCP_RESOLUTION_MODE).c_str()
338+
"Attribute(%s) enum value capabilities are not available: unexpected status(%s)",
339+
toStr(SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_PACKET_TRIM_DSCP_RESOLUTION_MODE).c_str(),
340+
toStr(status).c_str()
340341
);
341342
return;
342343
}
@@ -377,19 +378,12 @@ void SwitchTrimmingCapabilities::queryTrimDscpModeAttrCapabilities()
377378
auto status = queryAttrCapabilitiesSai(
378379
attrCap, SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_PACKET_TRIM_DSCP_RESOLUTION_MODE
379380
);
380-
if (status == SAI_STATUS_NOT_SUPPORTED)
381+
if (status != SAI_STATUS_SUCCESS)
381382
{
382383
SWSS_LOG_NOTICE(
383-
"Attribute not supported(%s) to query attr vapabilities",
384-
toStr(SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_PACKET_TRIM_DSCP_RESOLUTION_MODE).c_str()
385-
);
386-
return;
387-
}
388-
else if (status != SAI_STATUS_SUCCESS)
389-
{
390-
SWSS_LOG_ERROR(
391-
"Failed to get attribute(%s) capabilities",
392-
toStr(SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_PACKET_TRIM_DSCP_RESOLUTION_MODE).c_str()
384+
"Attribute(%s) capabilities are not available: unexpected status(%s)",
385+
toStr(SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_PACKET_TRIM_DSCP_RESOLUTION_MODE).c_str(),
386+
toStr(status).c_str()
393387
);
394388
return;
395389
}
@@ -417,9 +411,10 @@ void SwitchTrimmingCapabilities::queryTrimDscpAttrCapabilities()
417411
);
418412
if (status != SAI_STATUS_SUCCESS)
419413
{
420-
SWSS_LOG_ERROR(
421-
"Failed to get attribute(%s) capabilities",
422-
toStr(SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_PACKET_TRIM_DSCP_VALUE).c_str()
414+
SWSS_LOG_NOTICE(
415+
"Attribute(%s) capabilities are not available: unexpected status(%s)",
416+
toStr(SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_PACKET_TRIM_DSCP_VALUE).c_str(),
417+
toStr(status).c_str()
423418
);
424419
return;
425420
}
@@ -447,9 +442,10 @@ void SwitchTrimmingCapabilities::queryTrimTcAttrCapabilities()
447442
);
448443
if (status != SAI_STATUS_SUCCESS)
449444
{
450-
SWSS_LOG_ERROR(
451-
"Failed to get attribute(%s) capabilities",
452-
toStr(SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_PACKET_TRIM_TC_VALUE).c_str()
445+
SWSS_LOG_NOTICE(
446+
"Attribute(%s) capabilities are not available: unexpected status(%s)",
447+
toStr(SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_PACKET_TRIM_TC_VALUE).c_str(),
448+
toStr(status).c_str()
453449
);
454450
return;
455451
}
@@ -474,19 +470,12 @@ void SwitchTrimmingCapabilities::queryTrimQueueModeEnumCapabilities()
474470
auto status = queryEnumCapabilitiesSai(
475471
mList, SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_PACKET_TRIM_QUEUE_RESOLUTION_MODE
476472
);
477-
if (status == SAI_STATUS_NOT_SUPPORTED)
473+
if (status != SAI_STATUS_SUCCESS)
478474
{
479475
SWSS_LOG_NOTICE(
480-
"Attribute not supported(%s) to query enum value capabilities",
481-
toStr(SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_PACKET_TRIM_QUEUE_RESOLUTION_MODE).c_str()
482-
);
483-
return;
484-
}
485-
else if (status != SAI_STATUS_SUCCESS)
486-
{
487-
SWSS_LOG_ERROR(
488-
"Failed to get attribute(%s) enum value capabilities",
489-
toStr(SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_PACKET_TRIM_QUEUE_RESOLUTION_MODE).c_str()
476+
"Attribute(%s) enum value capabilities are not available: unexpected status(%s)",
477+
toStr(SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_PACKET_TRIM_QUEUE_RESOLUTION_MODE).c_str(),
478+
toStr(status).c_str()
490479
);
491480
return;
492481
}
@@ -514,19 +503,12 @@ void SwitchTrimmingCapabilities::queryTrimQueueModeAttrCapabilities()
514503
auto status = queryAttrCapabilitiesSai(
515504
attrCap, SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_PACKET_TRIM_QUEUE_RESOLUTION_MODE
516505
);
517-
if (status == SAI_STATUS_NOT_SUPPORTED)
506+
if (status != SAI_STATUS_SUCCESS)
518507
{
519508
SWSS_LOG_NOTICE(
520-
"Attribute not supported(%s) to query attr capabilities",
521-
toStr(SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_PACKET_TRIM_QUEUE_RESOLUTION_MODE).c_str()
522-
);
523-
return;
524-
}
525-
else if (status != SAI_STATUS_SUCCESS)
526-
{
527-
SWSS_LOG_ERROR(
528-
"Failed to get attribute(%s) capabilities",
529-
toStr(SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_PACKET_TRIM_QUEUE_RESOLUTION_MODE).c_str()
509+
"Attribute(%s) capabilities are not available: unexpected status(%s)",
510+
toStr(SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_PACKET_TRIM_QUEUE_RESOLUTION_MODE).c_str(),
511+
toStr(status).c_str()
530512
);
531513
return;
532514
}
@@ -554,9 +536,10 @@ void SwitchTrimmingCapabilities::queryTrimQueueIndexAttrCapabilities()
554536
);
555537
if (status != SAI_STATUS_SUCCESS)
556538
{
557-
SWSS_LOG_ERROR(
558-
"Failed to get attribute(%s) capabilities",
559-
toStr(SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_PACKET_TRIM_QUEUE_INDEX).c_str()
539+
SWSS_LOG_NOTICE(
540+
"Attribute(%s) capabilities are not available: unexpected status(%s)",
541+
toStr(SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_PACKET_TRIM_QUEUE_INDEX).c_str(),
542+
toStr(status).c_str()
560543
);
561544
return;
562545
}

tests/dvslib/dvs_queue.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ class DVSQueue:
1717
COUNTERS_COUNTERS = "COUNTERS"
1818
COUNTERS_QUEUE_NAME_MAP = "COUNTERS_QUEUE_NAME_MAP"
1919

20+
OID_NULL = "oid:0x0"
21+
2022
def __init__(self, asic_db, config_db, counters_db):
2123
"""Create a new DVS queue manager."""
2224
self.asic_db = asic_db
@@ -48,6 +50,12 @@ def get_queue_buffer_profile_id(
4850
attr_list = [ field ]
4951
fvs = self.asic_db.wait_for_fields(self.ASIC_QUEUE, sai_queue_id, attr_list)
5052

53+
if fvs[field] == self.OID_NULL:
54+
attr_dict = {
55+
field: self.OID_NULL
56+
}
57+
fvs = self.asic_db.wait_for_field_negative_match(self.ASIC_QUEUE, sai_queue_id, attr_dict)
58+
5159
return fvs[field]
5260

5361
def get_queue_buffer_profile_name(

tests/test_trimming.py

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,20 @@ def genericConfig(self, switchData):
431431
qualifiers=attr_dict
432432
)
433433

434+
sai_attr_dict = {
435+
"SAI_SWITCH_ATTR_PACKET_TRIM_SIZE": "100",
436+
"SAI_SWITCH_ATTR_PACKET_TRIM_DSCP_RESOLUTION_MODE": SAI_DSCP_MODE_DICT["from-tc"],
437+
"SAI_SWITCH_ATTR_PACKET_TRIM_TC_VALUE": "1",
438+
"SAI_SWITCH_ATTR_PACKET_TRIM_QUEUE_RESOLUTION_MODE": SAI_QUEUE_MODE_DICT["static"],
439+
"SAI_SWITCH_ATTR_PACKET_TRIM_QUEUE_INDEX": "1"
440+
}
441+
442+
trimlogger.info("Validate trimming global")
443+
self.dvs_switch.verify_switch(
444+
sai_switch_id=switchId,
445+
sai_qualifiers=sai_attr_dict
446+
)
447+
434448
# Symmetric DSCP mode
435449

436450
attr_dict = {
@@ -444,13 +458,10 @@ def genericConfig(self, switchData):
444458
qualifiers=attr_dict
445459
)
446460

447-
# Validation
448-
449461
sai_attr_dict = {
450462
"SAI_SWITCH_ATTR_PACKET_TRIM_SIZE": "100",
451463
"SAI_SWITCH_ATTR_PACKET_TRIM_DSCP_RESOLUTION_MODE": SAI_DSCP_MODE_DICT["dscp-value"],
452464
"SAI_SWITCH_ATTR_PACKET_TRIM_DSCP_VALUE": "10",
453-
"SAI_SWITCH_ATTR_PACKET_TRIM_TC_VALUE": "1",
454465
"SAI_SWITCH_ATTR_PACKET_TRIM_QUEUE_RESOLUTION_MODE": SAI_QUEUE_MODE_DICT["static"],
455466
"SAI_SWITCH_ATTR_PACKET_TRIM_QUEUE_INDEX": "1"
456467
}
@@ -463,6 +474,15 @@ def genericConfig(self, switchData):
463474

464475
yield
465476

477+
sai_attr_dict = {
478+
"SAI_SWITCH_ATTR_PACKET_TRIM_SIZE": "100",
479+
"SAI_SWITCH_ATTR_PACKET_TRIM_DSCP_RESOLUTION_MODE": SAI_DSCP_MODE_DICT["dscp-value"],
480+
"SAI_SWITCH_ATTR_PACKET_TRIM_DSCP_VALUE": "10",
481+
"SAI_SWITCH_ATTR_PACKET_TRIM_TC_VALUE": "1",
482+
"SAI_SWITCH_ATTR_PACKET_TRIM_QUEUE_RESOLUTION_MODE": SAI_QUEUE_MODE_DICT["static"],
483+
"SAI_SWITCH_ATTR_PACKET_TRIM_QUEUE_INDEX": "1"
484+
}
485+
466486
trimlogger.info("Validate trimming global")
467487
self.dvs_switch.verify_switch(
468488
sai_switch_id=switchId,

0 commit comments

Comments
 (0)