syncd/SaiObj.cpp (99 lines of code) (raw):
#include "SaiObj.h"
#include "swss/logger.h"
using namespace syncd;
std::string ObjectStatus::sai_serialize_object_status(
_In_ sai_object_status_t os)
{
SWSS_LOG_ENTER();
switch (os)
{
case SAI_OBJECT_STATUS_NOT_PROCESSED:
return "not-processed";
case SAI_OBJECT_STATUS_MATCHED:
return "matched";
case SAI_OBJECT_STATUS_REMOVED:
return "removed";
case SAI_OBJECT_STATUS_FINAL:
return "final";
default:
SWSS_LOG_THROW("unknown object status: %d", os);
}
}
SaiObj::SaiObj():
m_createdObject(false),
m_objectStatus(SAI_OBJECT_STATUS_NOT_PROCESSED)
{
SWSS_LOG_ENTER();
// empty
}
bool SaiObj::isOidObject() const
{
SWSS_LOG_ENTER();
return m_info->isobjectid;
}
const std::unordered_map<sai_attr_id_t, std::shared_ptr<SaiAttr>>& SaiObj::getAllAttributes() const
{
SWSS_LOG_ENTER();
return m_attrs;
}
std::shared_ptr<const SaiAttr> SaiObj::getSaiAttr(
_In_ sai_attr_id_t id) const
{
SWSS_LOG_ENTER();
auto it = m_attrs.find(id);
if (it == m_attrs.end())
{
for (const auto &ita: m_attrs)
{
const auto &a = ita.second;
SWSS_LOG_ERROR("%s: %s", a->getStrAttrId().c_str(), a->getStrAttrValue().c_str());
}
SWSS_LOG_THROW("object %s has no attribute %d", m_str_object_id.c_str(), id);
}
return it->second;
}
std::shared_ptr<const SaiAttr> SaiObj::tryGetSaiAttr(
_In_ sai_attr_id_t id) const
{
SWSS_LOG_ENTER();
auto it = m_attrs.find(id);
if (it == m_attrs.end())
return nullptr;
return it->second;
}
void SaiObj::setObjectStatus(
_In_ sai_object_status_t objectStatus)
{
SWSS_LOG_ENTER();
m_objectStatus = objectStatus;
}
sai_object_status_t SaiObj::getObjectStatus() const
{
SWSS_LOG_ENTER();
return m_objectStatus;
}
sai_object_type_t SaiObj::getObjectType() const
{
SWSS_LOG_ENTER();
return m_meta_key.objecttype;
}
void SaiObj::setAttr(
_In_ const std::shared_ptr<SaiAttr> &attr)
{
SWSS_LOG_ENTER();
m_attrs[attr->getSaiAttr()->id] = attr;
}
bool SaiObj::hasAttr(
_In_ sai_attr_id_t id) const
{
SWSS_LOG_ENTER();
return m_attrs.find(id) != m_attrs.end();
}
sai_object_id_t SaiObj::getVid() const
{
SWSS_LOG_ENTER();
if (isOidObject())
{
return m_meta_key.objectkey.key.object_id;
}
SWSS_LOG_THROW("object %s it not object id type", m_str_object_id.c_str());
}