vslib/FdbInfo.cpp (117 lines of code) (raw):
#include "FdbInfo.h"
#include "meta/sai_serialize.h"
#include "swss/logger.h"
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wshadow"
#include <nlohmann/json.hpp>
#pragma GCC diagnostic pop
using namespace saivs;
using json = nlohmann::json;
FdbInfo::FdbInfo()
{
SWSS_LOG_ENTER();
m_portId = SAI_NULL_OBJECT_ID;
m_vlanId = 0; // essential
m_bridgePortId = SAI_NULL_OBJECT_ID;
m_timestamp = 0;
memset(&m_fdbEntry, 0, sizeof(m_fdbEntry));
}
sai_object_id_t FdbInfo::getPortId() const
{
SWSS_LOG_ENTER();
return m_portId;
}
sai_vlan_id_t FdbInfo::getVlanId() const
{
SWSS_LOG_ENTER();
return m_vlanId;
}
sai_object_id_t FdbInfo::getBridgePortId() const
{
SWSS_LOG_ENTER();
return m_bridgePortId;
}
const sai_fdb_entry_t& FdbInfo::getFdbEntry() const
{
SWSS_LOG_ENTER();
return m_fdbEntry;
}
uint32_t FdbInfo::getTimestamp() const
{
SWSS_LOG_ENTER();
return m_timestamp;
}
// TODO move to meta serialize
// requires to move FdbInfo to common
std::string FdbInfo::serialize() const
{
SWSS_LOG_ENTER();
json j;
j["port_id"] = sai_serialize_object_id(m_portId);
j["vlan_id"] = sai_serialize_vlan_id(m_vlanId);
j["bridge_port_id"] = sai_serialize_object_id(m_bridgePortId);
j["fdb_entry"] = sai_serialize_fdb_entry(m_fdbEntry);
j["timestamp"] = sai_serialize_number(m_timestamp);
SWSS_LOG_INFO("item: %s", j.dump().c_str());
return j.dump();
}
FdbInfo FdbInfo::deserialize(
_In_ const std::string& data)
{
SWSS_LOG_ENTER();
SWSS_LOG_INFO("item: %s", data.c_str());
const json& j = json::parse(data);
FdbInfo fi;
sai_deserialize_object_id(j["port_id"], fi.m_portId);
sai_deserialize_vlan_id(j["vlan_id"], fi.m_vlanId);
sai_deserialize_object_id(j["bridge_port_id"], fi.m_bridgePortId);
sai_deserialize_fdb_entry(j["fdb_entry"], fi.m_fdbEntry);
sai_deserialize_number(j["timestamp"], fi.m_timestamp);
return fi;
}
bool FdbInfo::operator<(
_In_ const FdbInfo& other) const
{
SWSS_LOG_ENTER();
int res = memcmp(m_fdbEntry.mac_address, other.m_fdbEntry.mac_address, sizeof(sai_mac_t));
if (res < 0)
return true;
if (res > 0)
return false;
return m_vlanId < other.m_vlanId;
}
bool FdbInfo::operator()(
_In_ const FdbInfo& lhs,
_In_ const FdbInfo& rhs) const
{
SWSS_LOG_ENTER();
return lhs < rhs;
}
void FdbInfo::setFdbEntry(
_In_ const sai_fdb_entry_t& entry)
{
SWSS_LOG_ENTER();
m_fdbEntry = entry;
}
void FdbInfo::setVlanId(
_In_ sai_vlan_id_t vlanId)
{
SWSS_LOG_ENTER();
m_vlanId = vlanId;
}
void FdbInfo::setPortId(
_In_ const sai_object_id_t portId)
{
SWSS_LOG_ENTER();
m_portId = portId;
}
void FdbInfo::setBridgePortId(
_In_ const sai_object_id_t portId)
{
SWSS_LOG_ENTER();
m_bridgePortId = portId;
}
void FdbInfo::setTimestamp(
_In_ uint32_t timestamp)
{
SWSS_LOG_ENTER();
m_timestamp = timestamp;
}