meta/Globals.cpp (62 lines of code) (raw):

#include "Globals.h" #include "sai_serialize.h" using namespace saimeta; std::string Globals::getAttrInfo( _In_ const sai_attr_metadata_t& md) { SWSS_LOG_ENTER(); /* * Attribute name will contain object type as well so we don't need to * serialize object type separately. */ return std::string(md.attridname) + ":" + sai_serialize_attr_value_type(md.attrvaluetype); } std::string Globals::getHardwareInfo( _In_ uint32_t attrCount, _In_ const sai_attribute_t *attrList) { SWSS_LOG_ENTER(); auto *attr = sai_metadata_get_attr_by_id( SAI_SWITCH_ATTR_SWITCH_HARDWARE_INFO, attrCount, attrList); if (attr == NULL) { return ""; } auto& s8list = attr->value.s8list; if (s8list.count == 0) { return ""; } if (s8list.list == NULL) { SWSS_LOG_WARN("SAI_SWITCH_ATTR_SWITCH_HARDWARE_INFO s8list.list is NULL! but count is %u", s8list.count); return ""; } uint32_t count = s8list.count; if (count > SAI_MAX_HARDWARE_ID_LEN) { SWSS_LOG_WARN("SAI_SWITCH_ATTR_SWITCH_HARDWARE_INFO s8list.count (%u) > SAI_MAX_HARDWARE_ID_LEN (%d), LIMITING !!", count, SAI_MAX_HARDWARE_ID_LEN); count = SAI_MAX_HARDWARE_ID_LEN; } // check actual length, since buffer may contain nulls auto actualLength = strnlen((const char*)s8list.list, count); if (actualLength != count) { SWSS_LOG_WARN("SAI_SWITCH_ATTR_SWITCH_HARDWARE_INFO s8list.list is null padded"); } return std::string((const char*)s8list.list, actualLength); } std::string Globals::joinFieldValues( _In_ const std::vector<swss::FieldValueTuple>& values) { SWSS_LOG_ENTER(); std::stringstream ss; for (size_t i = 0; i < values.size(); ++i) { if (i != 0) { ss << "|"; } ss << fvField(values[i]) << "=" << fvValue(values[i]); } return ss.str(); }