From 778d92045910de71b3987c2f44edbe436af4e31c Mon Sep 17 00:00:00 2001 From: Kamil Cudnik Date: Sat, 21 Oct 2023 19:18:07 +0200 Subject: [PATCH] [libsai] Add attr name logging when doing get api (#451) * [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 --- dash-pipeline/SAI/src/dashsai.cpp | 52 ++++++++++++++++++----- dash-pipeline/SAI/templates/saiapi.cpp.j2 | 22 ++++++++-- 2 files changed, 61 insertions(+), 13 deletions(-) diff --git a/dash-pipeline/SAI/src/dashsai.cpp b/dash-pipeline/SAI/src/dashsai.cpp index 69dbb4b81..91d7fad4a 100644 --- a/dash-pipeline/SAI/src/dashsai.cpp +++ b/dash-pipeline/SAI/src/dashsai.cpp @@ -1,5 +1,9 @@ #include "dashsai.h" +extern "C" { +#include "saimetadata.h" +} + #include using namespace dash; @@ -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) { @@ -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: @@ -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; } @@ -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: @@ -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 @@ -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: @@ -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 @@ -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; } @@ -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; } @@ -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; } diff --git a/dash-pipeline/SAI/templates/saiapi.cpp.j2 b/dash-pipeline/SAI/templates/saiapi.cpp.j2 index a9289436b..2ca9a3522 100644 --- a/dash-pipeline/SAI/templates/saiapi.cpp.j2 +++ b/dash-pipeline/SAI/templates/saiapi.cpp.j2 @@ -1,6 +1,10 @@ #include "utils.h" #include "saiimpl.h" +extern "C" { +#include "saimetadata.h" +} + using namespace dash::utils; {% set registered_group = [] %} @@ -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'] %} @@ -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; } } @@ -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 %} @@ -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; } } @@ -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 %} @@ -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; } }