Skip to content

Commit

Permalink
[libsai] Add attr name logging when doing get api (#451)
Browse files Browse the repository at this point in the history
* [libsai] Add attr name logging when doing get api

Using metadata add generic code to obtain attr name and log it when
attr is not supported

* Add log attr name in auto generated dash api

Also using metadata

* Add more attr logging in DashSai

For better debugging
  • Loading branch information
kcudnik authored Oct 21, 2023
1 parent c18ea3f commit 778d920
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 13 deletions.
52 changes: 42 additions & 10 deletions dash-pipeline/SAI/src/dashsai.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
#include "dashsai.h"

extern "C" {
#include "saimetadata.h"
}

#include <cstdlib>

using namespace dash;
Expand Down Expand Up @@ -235,7 +239,11 @@ sai_status_t DashSai::createSwitch(

for (uint32_t i = 0; i < attr_count; i++)
{
DASH_LOG_WARN("attr id %d is NOT IMPLEMENTED, ignored", attr_list[i].id);
auto *md = sai_metadata_get_attr_metadata(SAI_OBJECT_TYPE_SWITCH, attr_list[i].id);

const char* attrName = md ? md->attridname : "unknown";

DASH_LOG_WARN("attr id %d %s is NOT IMPLEMENTED, ignored", attr_list[i].id, attrName);

if (attr_list[i].id == SAI_SWITCH_ATTR_SWITCH_HARDWARE_INFO)
{
Expand Down Expand Up @@ -307,6 +315,10 @@ sai_status_t DashSai::setSwitchAttribute(
DASH_LOG_ENTER();
DASH_CHECK_API_INITIALIZED();

auto *md = sai_metadata_get_attr_metadata(SAI_OBJECT_TYPE_SWITCH, attr->id);

const char* attrName = md ? md->attridname : "unknown";

switch (attr->id)
{
case SAI_SWITCH_ATTR_SWITCH_STATE_CHANGE_NOTIFY:
Expand All @@ -317,13 +329,13 @@ sai_status_t DashSai::setSwitchAttribute(
case SAI_SWITCH_ATTR_QUEUE_PFC_DEADLOCK_NOTIFY:
case SAI_SWITCH_ATTR_BFD_SESSION_STATE_CHANGE_NOTIFY:

DASH_LOG_NOTICE("setting dummy notification callback (attr id: %d)", attr->id);
DASH_LOG_NOTICE("setting dummy notification callback (attr id: %d %s)", attr->id, attrName);

return SAI_STATUS_SUCCESS;

default:

DASH_LOG_ERROR("set attr %d NOT IMPLEMENTED", attr->id);
DASH_LOG_ERROR("set attr %d %s NOT IMPLEMENTED", attr->id, attrName);

return SAI_STATUS_NOT_IMPLEMENTED;
}
Expand All @@ -341,6 +353,10 @@ sai_status_t DashSai::getSwitchAttribute(

for (uint32_t i = 0; i < attr_count ; i++, attr++)
{
auto *md = sai_metadata_get_attr_metadata(SAI_OBJECT_TYPE_SWITCH, attr->id);

const char* attrName = md ? md->attridname : "unknown";

switch(attr->id)
{
case SAI_SWITCH_ATTR_NUMBER_OF_ACTIVE_PORTS:
Expand Down Expand Up @@ -421,12 +437,12 @@ sai_status_t DashSai::getSwitchAttribute(

if (getenv(DASH_USE_NOT_SUPPORTED))
{
DASH_LOG_WARN("[%d] attr %d is NOT SUPPORTED", i, attr->id);
DASH_LOG_WARN("[%d] attr %d %s is NOT SUPPORTED", i, attr->id, attrName);

return SAI_STATUS_NOT_SUPPORTED;
}

DASH_LOG_WARN("[%d] attr %d is NOT SUPPORTED, but returning SAI_STATUS_SUCCESS", i, attr->id);
DASH_LOG_WARN("[%d] attr %d %s is NOT SUPPORTED, but returning SAI_STATUS_SUCCESS", i, attr->id, attrName);

memset(&attr->value, 0, sizeof(attr->value)); // clear potential caller garbage

Expand All @@ -449,6 +465,10 @@ sai_status_t DashSai::getPortAttribute(

for (uint32_t i = 0; i < attr_count ; i++, attr++)
{
auto *md = sai_metadata_get_attr_metadata(SAI_OBJECT_TYPE_PORT, attr->id);

const char* attrName = md ? md->attridname : "unknown";

switch(attr->id)
{
case SAI_PORT_ATTR_QOS_NUMBER_OF_QUEUES:
Expand Down Expand Up @@ -488,12 +508,12 @@ sai_status_t DashSai::getPortAttribute(

if (getenv(DASH_USE_NOT_SUPPORTED))
{
DASH_LOG_WARN("[%d] attr %d is NOT SUPPORTED", i, attr->id);
DASH_LOG_WARN("[%d] attr %d %s is NOT SUPPORTED", i, attr->id, attrName);

return SAI_STATUS_NOT_SUPPORTED;
}

DASH_LOG_WARN("[%d] attr %d is NOT SUPPORTED, but returning SAI_STATUS_SUCCESS", i, attr->id);
DASH_LOG_WARN("[%d] attr %d %s is NOT SUPPORTED, but returning SAI_STATUS_SUCCESS", i, attr->id, attrName);

memset(&attr->value, 0, sizeof(attr->value)); // clear potential caller garbage

Expand Down Expand Up @@ -702,7 +722,11 @@ sai_status_t DashSai::create(

*objectId = m_objectIdManager->allocateNewObjectId(objectType, m_switchId);

DASH_LOG_WARN("creating dummy object for object type %d: 0x%lx", objectType, *objectId);
auto* ot = sai_metadata_get_object_type_info(objectType);

const char* otName = ot ? ot->objecttypename : "unknown";

DASH_LOG_WARN("creating dummy object for object type %d %s: 0x%lx", objectType, otName, *objectId);

return SAI_STATUS_SUCCESS;
}
Expand Down Expand Up @@ -733,7 +757,11 @@ sai_status_t DashSai::set(
if (objectType == SAI_OBJECT_TYPE_SWITCH)
return setSwitchAttribute(objectId, attr);

DASH_LOG_WARN("dummy set: 0x%lx, attr id: %d", objectId, attr->id);
auto *md = sai_metadata_get_attr_metadata(objectType, attr->id);

const char* attrName = md ? md->attridname : "unknown";

DASH_LOG_WARN("dummy set: 0x%lx, attr id: %d %s", objectId, attr->id, attrName);

return SAI_STATUS_SUCCESS;
}
Expand All @@ -753,7 +781,11 @@ sai_status_t DashSai::get(
if (objectType == SAI_OBJECT_TYPE_SWITCH)
return getSwitchAttribute(objectId, attr_count, attr_list);

DASH_LOG_ERROR("not implemented for object type %d", objectType);
auto* ot = sai_metadata_get_object_type_info(objectType);

const char* otName = ot ? ot->objecttypename : "unknown";

DASH_LOG_ERROR("not implemented for object type %d %s", objectType, otName);

return SAI_STATUS_NOT_IMPLEMENTED;
}
22 changes: 19 additions & 3 deletions dash-pipeline/SAI/templates/saiapi.cpp.j2
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
#include "utils.h"
#include "saiimpl.h"

extern "C" {
#include "saimetadata.h"
}

using namespace dash::utils;

{% set registered_group = [] %}
Expand Down Expand Up @@ -63,6 +67,10 @@ static sai_status_t dash_sai_create_{{ table.name }}(
// Copy P4 table keys from appropriate SAI attributes
for (uint32_t i = 0; i < attr_count; i++)
{
auto *md = sai_metadata_get_attr_metadata((sai_object_type_t)SAI_OBJECT_TYPE_{{ table.name | upper }}, attr_list[i].id);

const char* attrName = md ? md->attridname : "unknown";

switch(attr_list[i].id)
{
{% for key in table['keys'] %}
Expand Down Expand Up @@ -120,7 +128,7 @@ static sai_status_t dash_sai_create_{{ table.name }}(
{% endif %}
{% endif %}
default:
DASH_LOG_ERROR("attribute [%d] %d not supported yet", i, attr_list[i].id);
DASH_LOG_ERROR("attribute [%d] %d %s not supported yet", i, attr_list[i].id, attrName);
break;
}
}
Expand Down Expand Up @@ -163,6 +171,10 @@ static sai_status_t dash_sai_create_{{ table.name }}(

for (uint32_t i = 0; i < attr_count; i++)
{
auto *md = sai_metadata_get_attr_metadata((sai_object_type_t)SAI_OBJECT_TYPE_{{ table.name | upper }}, attr_list[i].id);

const char* attrName = md ? md->attridname : "unknown";

switch(attr_list[i].id)
{
{% for param in table.actionParams %}
Expand All @@ -188,7 +200,7 @@ static sai_status_t dash_sai_create_{{ table.name }}(
{% endif %}
{% endfor %}
default:
DASH_LOG_ERROR("attribute [%d] %d not supported yet", i, attr_list[i].id);
DASH_LOG_ERROR("attribute [%d] %d %s not supported yet", i, attr_list[i].id, attrName);
break;
}
}
Expand Down Expand Up @@ -387,6 +399,10 @@ static sai_status_t dash_sai_create_{{ table.name }}(

for (uint32_t i = 0; i < attr_count; i++)
{
auto *md = sai_metadata_get_attr_metadata((sai_object_type_t)SAI_OBJECT_TYPE_{{ table.name | upper }}, attr_list[i].id);

const char* attrName = md ? md->attridname : "unknown";

switch(attr_list[i].id)
{
{% for param in table.actionParams %}
Expand All @@ -412,7 +428,7 @@ static sai_status_t dash_sai_create_{{ table.name }}(
{% endif %}
{% endfor %}
default:
DASH_LOG_ERROR("attribute [%d] %d not supported yet", i, attr_list[i].id);
DASH_LOG_ERROR("attribute [%d] %d %s not supported yet", i, attr_list[i].id, attrName);
break;
}
}
Expand Down

0 comments on commit 778d920

Please sign in to comment.