blob: 330a8a6c6dd4c6fd2b7b6348fe61c6e7b9078f71 [file] [log] [blame]
Ratan Gupta00659052017-02-23 17:29:08 +05301#pragma once
2
3#include <stdint.h>
4
5#include <map>
6#include <string>
7
8#include <sdbusplus/server.hpp>
9
10namespace ipmi
11{
Ratan Guptadcb10672017-07-10 10:33:50 +053012
13using DbusObjectPath = std::string;
14using DbusService = std::string;
15using DbusInterface = std::string;
16using DbusObjectInfo = std::pair<DbusObjectPath, DbusService>;
17using DbusProperty = std::string;
Ratan Guptacc8feb42017-07-25 21:52:10 +053018
19using Value = sdbusplus::message::variant<bool, uint8_t, int16_t,
20 uint16_t, int32_t, uint32_t,
21 int64_t, uint64_t, std::string>;
22
Ratan Guptadcb10672017-07-10 10:33:50 +053023using PropertyMap = std::map<DbusProperty, Value>;
Ratan Guptab8e99552017-07-27 07:07:48 +053024
Ratan Guptadcb10672017-07-10 10:33:50 +053025using ObjectTree = std::map<DbusObjectPath,
26 std::map<DbusService, std::vector<DbusInterface>>>;
Ratan Gupta8c31d232017-08-13 05:49:43 +053027
Ratan Guptacc6cdbf2017-09-01 23:06:25 +053028using InterfaceList = std::vector<std::string>;
29
Ratan Gupta00659052017-02-23 17:29:08 +053030namespace sensor
31{
32
33using Offset = uint8_t;
Ratan Gupta00659052017-02-23 17:29:08 +053034
35struct Values
36{
37 Value assert;
38 Value deassert;
39};
40
Tom Joseph816e92b2017-09-06 19:23:00 +053041/**
42 * @struct SetSensorReadingReq
43 *
44 * IPMI Request data for Set Sensor Reading and Event Status Command
45 */
46struct SetSensorReadingReq
47{
48 uint8_t number;
49 uint8_t operation;
50 uint8_t reading;
51 uint8_t assertOffset0_7;
52 uint8_t assertOffset8_14;
53 uint8_t deassertOffset0_7;
54 uint8_t deassertOffset8_14;
55 uint8_t eventData1;
56 uint8_t eventData2;
57 uint8_t eventData3;
58} __attribute__((packed));
59
60/**
61 * @struct GetReadingResponse
62 *
63 * IPMI response data for Get Sensor Reading command.
64 */
65struct GetReadingResponse
66{
67 uint8_t reading; //!< Sensor reading.
68 uint8_t operation; //!< Sensor scanning status / reading state.
69 uint8_t assertOffset0_7; //!< Discrete assertion states(0-7).
70 uint8_t assertOffset8_14; //!< Discrete assertion states(8-14).
71} __attribute__((packed));
72
73constexpr auto inventoryRoot = "/xyz/openbmc_project/inventory";
74
75using GetSensorResponse = std::array<uint8_t, sizeof(GetReadingResponse)>;
76
Ratan Gupta00659052017-02-23 17:29:08 +053077using OffsetValueMap = std::map<Offset,Values>;
78
Ratan Gupta00659052017-02-23 17:29:08 +053079using DbusPropertyMap = std::map<DbusProperty,OffsetValueMap>;
80
Ratan Gupta00659052017-02-23 17:29:08 +053081using DbusInterfaceMap = std::map<DbusInterface,DbusPropertyMap>;
82
83using InstancePath = std::string;
84using Type = uint8_t;
85using ReadingType = uint8_t;
Emily Shaffer10f49592017-05-10 12:01:10 -070086using Multiplier = uint16_t;
87using OffsetB = uint16_t;
88using Exponent = uint8_t;
89using ScaledOffset = int64_t;
Ratan Gupta00659052017-02-23 17:29:08 +053090
Emily Shaffercc941e12017-06-14 13:06:26 -070091enum class Mutability
92{
93 Read = 1 << 0,
94 Write = 1 << 1,
95};
96
97inline Mutability operator|(Mutability lhs, Mutability rhs)
98{
99 return static_cast<Mutability>(
100 static_cast<uint8_t>(lhs) | static_cast<uint8_t>(rhs));
101}
102
103inline Mutability operator&(Mutability lhs, Mutability rhs)
104{
105 return static_cast<Mutability>(
106 static_cast<uint8_t>(lhs) & static_cast<uint8_t>(rhs));
107}
108
Ratan Gupta00659052017-02-23 17:29:08 +0530109struct Info
110{
111 Type sensorType;
112 InstancePath sensorPath;
Deepak Kodihalli1bb0d382017-08-12 02:01:27 -0500113 DbusInterface sensorInterface;
Ratan Gupta00659052017-02-23 17:29:08 +0530114 ReadingType sensorReadingType;
Emily Shaffer10f49592017-05-10 12:01:10 -0700115 Multiplier coefficientM;
116 OffsetB coefficientB;
117 Exponent exponentB;
118 ScaledOffset scaledOffset;
Deepak Kodihalli1bb0d382017-08-12 02:01:27 -0500119 std::function<uint8_t(SetSensorReadingReq&, const Info&)> updateFunc;
Emily Shaffercc941e12017-06-14 13:06:26 -0700120 Mutability mutability;
Deepak Kodihalli1bb0d382017-08-12 02:01:27 -0500121 DbusInterfaceMap propertyInterfaces;
Ratan Gupta00659052017-02-23 17:29:08 +0530122};
123
124using Id = uint8_t;
125using IdInfoMap = std::map<Id,Info>;
126
Ratan Guptadcb10672017-07-10 10:33:50 +0530127using PropertyMap = ipmi::PropertyMap;
Tom Josephbe703f72017-03-09 12:34:35 +0530128
129using InterfaceMap = std::map<DbusInterface, PropertyMap>;
130
131using Object = sdbusplus::message::object_path;
132using ObjectMap = std::map<Object, InterfaceMap>;
133
Dhruvaraj Subhashchandrane0af7202017-07-12 06:35:20 -0500134using IpmiUpdateData = sdbusplus::message::message;
135
Tom Josephdd78a1d2017-05-05 11:04:29 +0530136struct SelData
137{
138 Id sensorID;
139 Type sensorType;
140 ReadingType eventReadingType;
141 Offset eventOffset;
142};
143
144using InventoryPath = std::string;
145
146using InvObjectIDMap = std::map<InventoryPath, SelData>;
147
Ratan Gupta8c31d232017-08-13 05:49:43 +0530148}// namespace sensor
149
150namespace network
151{
152
153constexpr auto MAC_ADDRESS_FORMAT = "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx";
154constexpr auto IP_ADDRESS_FORMAT = "%u.%u.%u.%u";
155constexpr auto PREFIX_FORMAT = "%hhd";
156constexpr auto ADDR_TYPE_FORMAT = "%hhx";
157
158constexpr auto IPV4_ADDRESS_SIZE_BYTE = 4;
159constexpr auto IPV6_ADDRESS_SIZE_BYTE = 16;
160
161constexpr auto DEFAULT_MAC_ADDRESS = "00:00:00:00:00:00";
162constexpr auto DEFAULT_ADDRESS = "0.0.0.0";
163
Ratan Guptab8e99552017-07-27 07:07:48 +0530164constexpr auto MAC_ADDRESS_SIZE_BYTE = 6;
Ratan Gupta533d03b2017-07-30 10:39:22 +0530165constexpr auto VLAN_SIZE_BYTE = 2;
Ratan Guptacc6cdbf2017-09-01 23:06:25 +0530166constexpr auto IPSRC_SIZE_BYTE = 1;
Ratan Guptab8e99552017-07-27 07:07:48 +0530167constexpr auto BITS_32 = 32;
168constexpr auto MASK_32_BIT = 0xFFFFFFFF;
Ratan Gupta533d03b2017-07-30 10:39:22 +0530169constexpr auto VLAN_ID_MASK = 0x00000FFF;
170constexpr auto VLAN_ENABLE_MASK = 0x8000;
Ratan Guptab8e99552017-07-27 07:07:48 +0530171
Ratan Guptacc6cdbf2017-09-01 23:06:25 +0530172enum class IPOrigin: uint8_t
173{
174 UNSPECIFIED = 0,
175 STATIC = 1,
176 DHCP = 2,
177};
178
179
Ratan Gupta8c31d232017-08-13 05:49:43 +0530180}//namespace network
Ratan Gupta00659052017-02-23 17:29:08 +0530181}//namespace ipmi