blob: 431d5b6adfdf114f5eb3b9afa920405c9992d923 [file] [log] [blame]
#pragma once
#include <stdint.h>
#include <map>
#include <sdbusplus/server.hpp>
#include <string>
namespace ipmi
{
using DbusObjectPath = std::string;
using DbusService = std::string;
using DbusInterface = std::string;
using DbusObjectInfo = std::pair<DbusObjectPath, DbusService>;
using DbusProperty = std::string;
using Value = sdbusplus::message::variant<bool, uint8_t, int16_t, uint16_t,
int32_t, uint32_t, int64_t, uint64_t,
double, std::string>;
using PropertyMap = std::map<DbusProperty, Value>;
using ObjectTree =
std::map<DbusObjectPath, std::map<DbusService, std::vector<DbusInterface>>>;
using InterfaceList = std::vector<std::string>;
using DbusInterfaceMap = std::map<DbusInterface, PropertyMap>;
using ObjectValueTree =
std::map<sdbusplus::message::object_path, DbusInterfaceMap>;
namespace sensor
{
using Offset = uint8_t;
/**
* @enum SkipAssertion
* Matching value for skipping the update
*/
enum class SkipAssertion
{
NONE, // No skip defined
ASSERT, // Skip on Assert
DEASSERT, // Skip on Deassert
};
struct Values
{
SkipAssertion skip;
Value assert;
Value deassert;
};
/**
* @enum PreReqValues
* Pre-req conditions for a property.
*/
struct PreReqValues
{
Value assert; // Value in case of assert.
Value deassert; // Value in case of deassert.
};
using PreReqOffsetValueMap = std::map<Offset, PreReqValues>;
/**
* @struct SetSensorReadingReq
*
* IPMI Request data for Set Sensor Reading and Event Status Command
*/
struct SetSensorReadingReq
{
uint8_t number;
uint8_t operation;
uint8_t reading;
uint8_t assertOffset0_7;
uint8_t assertOffset8_14;
uint8_t deassertOffset0_7;
uint8_t deassertOffset8_14;
uint8_t eventData1;
uint8_t eventData2;
uint8_t eventData3;
} __attribute__((packed));
/**
* @struct GetReadingResponse
*
* IPMI response data for Get Sensor Reading command.
*/
struct GetReadingResponse
{
uint8_t reading; //!< Sensor reading.
uint8_t operation; //!< Sensor scanning status / reading state.
uint8_t assertOffset0_7; //!< Discrete assertion states(0-7).
uint8_t assertOffset8_14; //!< Discrete assertion states(8-14).
} __attribute__((packed));
constexpr auto inventoryRoot = "/xyz/openbmc_project/inventory";
using GetSensorResponse = std::array<uint8_t, sizeof(GetReadingResponse)>;
using OffsetValueMap = std::map<Offset, Values>;
using DbusPropertyValues = std::pair<PreReqOffsetValueMap, OffsetValueMap>;
using DbusPropertyMap = std::map<DbusProperty, DbusPropertyValues>;
using DbusInterfaceMap = std::map<DbusInterface, DbusPropertyMap>;
using InstancePath = std::string;
using Type = uint8_t;
using ReadingType = uint8_t;
using Multiplier = uint16_t;
using OffsetB = int16_t;
using Exponent = int8_t;
using ScaledOffset = int64_t;
using Scale = int16_t;
using Unit = std::string;
using EntityType = uint8_t;
using EntityInst = uint8_t;
using SensorName = std::string;
enum class Mutability
{
Read = 1 << 0,
Write = 1 << 1,
};
inline Mutability operator|(Mutability lhs, Mutability rhs)
{
return static_cast<Mutability>(static_cast<uint8_t>(lhs) |
static_cast<uint8_t>(rhs));
}
inline Mutability operator&(Mutability lhs, Mutability rhs)
{
return static_cast<Mutability>(static_cast<uint8_t>(lhs) &
static_cast<uint8_t>(rhs));
}
struct Info
{
EntityType entityType;
EntityInst instance;
Type sensorType;
InstancePath sensorPath;
DbusInterface sensorInterface;
ReadingType sensorReadingType;
Multiplier coefficientM;
OffsetB coefficientB;
Exponent exponentB;
ScaledOffset scaledOffset;
Exponent exponentR;
bool hasScale;
Scale scale;
Unit unit;
std::function<uint8_t(SetSensorReadingReq&, const Info&)> updateFunc;
std::function<GetSensorResponse(const Info&)> getFunc;
Mutability mutability;
std::function<SensorName(const Info&)> sensorNameFunc;
DbusInterfaceMap propertyInterfaces;
};
using Id = uint8_t;
using IdInfoMap = std::map<Id, Info>;
using PropertyMap = ipmi::PropertyMap;
using InterfaceMap = std::map<DbusInterface, PropertyMap>;
using Object = sdbusplus::message::object_path;
using ObjectMap = std::map<Object, InterfaceMap>;
using IpmiUpdateData = sdbusplus::message::message;
struct SelData
{
Id sensorID;
Type sensorType;
ReadingType eventReadingType;
Offset eventOffset;
};
using InventoryPath = std::string;
using InvObjectIDMap = std::map<InventoryPath, SelData>;
enum class ThresholdMask
{
NON_CRITICAL_LOW_MASK = 0x01,
CRITICAL_LOW_MASK = 0x02,
NON_CRITICAL_HIGH_MASK = 0x08,
CRITICAL_HIGH_MASK = 0x10,
};
} // namespace sensor
namespace network
{
using ChannelEthMap = std::map<int, std::string>;
constexpr auto MAC_ADDRESS_FORMAT = "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx";
constexpr auto IP_ADDRESS_FORMAT = "%u.%u.%u.%u";
constexpr auto PREFIX_FORMAT = "%hhd";
constexpr auto ADDR_TYPE_FORMAT = "%hhx";
constexpr auto IPV4_ADDRESS_SIZE_BYTE = 4;
constexpr auto IPV6_ADDRESS_SIZE_BYTE = 16;
constexpr auto DEFAULT_MAC_ADDRESS = "00:00:00:00:00:00";
constexpr auto DEFAULT_ADDRESS = "0.0.0.0";
constexpr auto MAC_ADDRESS_SIZE_BYTE = 6;
constexpr auto VLAN_SIZE_BYTE = 2;
constexpr auto IPSRC_SIZE_BYTE = 1;
constexpr auto BITS_32 = 32;
constexpr auto MASK_32_BIT = 0xFFFFFFFF;
constexpr auto VLAN_ID_MASK = 0x00000FFF;
constexpr auto VLAN_ENABLE_MASK = 0x8000;
enum class IPOrigin : uint8_t
{
UNSPECIFIED = 0,
STATIC = 1,
DHCP = 2,
};
} // namespace network
} // namespace ipmi