summaryrefslogtreecommitdiffstats
path: root/dcmihandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dcmihandler.cpp')
-rw-r--r--dcmihandler.cpp155
1 files changed, 29 insertions, 126 deletions
diff --git a/dcmihandler.cpp b/dcmihandler.cpp
index 3188585..f8498f5 100644
--- a/dcmihandler.cpp
+++ b/dcmihandler.cpp
@@ -13,7 +13,7 @@
#include <phosphor-logging/elog-errors.hpp>
#include <phosphor-logging/log.hpp>
#include <sdbusplus/bus.hpp>
-#include <sdbusplus/message/types.hpp>
+#include <variant>
#include <xyz/openbmc_project/Common/error.hpp>
using namespace phosphor::logging;
@@ -37,8 +37,8 @@ constexpr auto DCMI_OPTION_60_43_MASK = 0x02;
constexpr auto DCMI_OPTION_12_MASK = 0x01;
constexpr auto DCMI_ACTIVATE_DHCP_MASK = 0x01;
constexpr auto DCMI_ACTIVATE_DHCP_REPLY = 0x00;
-constexpr auto DCMI_SET_CONF_PARAM_REQ_PACKET_MAX_SIZE = 0x05;
-constexpr auto DCMI_SET_CONF_PARAM_REQ_PACKET_MIN_SIZE = 0x04;
+constexpr auto DCMI_SET_CONF_PARAM_REQ_PACKET_MAX_SIZE = 0x04;
+constexpr auto DCMI_SET_CONF_PARAM_REQ_PACKET_MIN_SIZE = 0x03;
constexpr auto DHCP_TIMING1 = 0x04; // 4 sec
constexpr auto DHCP_TIMING2_UPPER = 0x00; // 2 min
constexpr auto DHCP_TIMING2_LOWER = 0x78;
@@ -54,7 +54,6 @@ constexpr auto SENSOR_VALUE_PROP = "Value";
constexpr auto SENSOR_SCALE_PROP = "Scale";
using namespace phosphor::logging;
-namespace variant_ns = sdbusplus::message::variant_ns;
namespace dcmi
{
@@ -86,10 +85,10 @@ uint32_t getPcap(sdbusplus::bus::bus& bus)
log<level::ERR>("Error in getPcap prop");
elog<InternalFailure>();
}
- sdbusplus::message::variant<uint32_t> pcap;
+ std::variant<uint32_t> pcap;
reply.read(pcap);
- return variant_ns::get<uint32_t>(pcap);
+ return std::get<uint32_t>(pcap);
}
bool getPcapEnabled(sdbusplus::bus::bus& bus)
@@ -107,10 +106,10 @@ bool getPcapEnabled(sdbusplus::bus::bus& bus)
log<level::ERR>("Error in getPcapEnabled prop");
elog<InternalFailure>();
}
- sdbusplus::message::variant<bool> pcapEnabled;
+ std::variant<bool> pcapEnabled;
reply.read(pcapEnabled);
- return variant_ns::get<bool>(pcapEnabled);
+ return std::get<bool>(pcapEnabled);
}
void setPcap(sdbusplus::bus::bus& bus, const uint32_t powerCap)
@@ -121,7 +120,7 @@ void setPcap(sdbusplus::bus::bus& bus, const uint32_t powerCap)
"org.freedesktop.DBus.Properties", "Set");
method.append(PCAP_INTERFACE, POWER_CAP_PROP);
- method.append(sdbusplus::message::variant<uint32_t>(powerCap));
+ method.append(std::variant<uint32_t>(powerCap));
auto reply = bus.call(method);
@@ -140,7 +139,7 @@ void setPcapEnable(sdbusplus::bus::bus& bus, bool enabled)
"org.freedesktop.DBus.Properties", "Set");
method.append(PCAP_INTERFACE, POWER_CAP_ENABLE_PROP);
- method.append(sdbusplus::message::variant<bool>(enabled));
+ method.append(std::variant<bool>(enabled));
auto reply = bus.call(method);
@@ -206,10 +205,10 @@ std::string readAssetTag()
elog<InternalFailure>();
}
- sdbusplus::message::variant<std::string> assetTag;
+ std::variant<std::string> assetTag;
reply.read(assetTag);
- return variant_ns::get<std::string>(assetTag);
+ return std::get<std::string>(assetTag);
}
void writeAssetTag(const std::string& assetTag)
@@ -226,7 +225,7 @@ void writeAssetTag(const std::string& assetTag)
(objectTree.begin()->first).c_str(), dcmi::propIntf, "Set");
method.append(dcmi::assetTagIntf);
method.append(dcmi::assetTagProp);
- method.append(sdbusplus::message::variant<std::string>(assetTag));
+ method.append(std::variant<std::string>(assetTag));
auto reply = bus.call(method);
if (reply.is_method_error())
@@ -244,7 +243,7 @@ std::string getHostName(void)
auto value = ipmi::getDbusProperty(bus, service, networkConfigObj,
networkConfigIntf, hostNameProp);
- return variant_ns::get<std::string>(value);
+ return std::get<std::string>(value);
}
bool getDHCPEnabled()
@@ -258,7 +257,7 @@ bool getDHCPEnabled()
auto value = ipmi::getDbusProperty(bus, service, ethernetObj.first,
ethernetIntf, "DHCPEnabled");
- return variant_ns::get<bool>(value);
+ return std::get<bool>(value);
}
bool getDHCPOption(std::string prop)
@@ -268,7 +267,7 @@ bool getDHCPOption(std::string prop)
auto service = ipmi::getService(bus, dhcpIntf, dhcpObj);
auto value = ipmi::getDbusProperty(bus, service, dhcpObj, dhcpIntf, prop);
- return variant_ns::get<bool>(value);
+ return std::get<bool>(value);
}
void setDHCPOption(std::string prop, bool value)
@@ -311,18 +310,10 @@ ipmi_ret_t getPowerLimit(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
return IPMI_CC_INVALID;
}
- auto requestData =
- reinterpret_cast<const dcmi::GetPowerLimitRequest*>(request);
std::vector<uint8_t> outPayload(sizeof(dcmi::GetPowerLimitResponse));
auto responseData =
reinterpret_cast<dcmi::GetPowerLimitResponse*>(outPayload.data());
- if (requestData->groupID != dcmi::groupExtId)
- {
- *data_len = 0;
- return IPMI_CC_INVALID_FIELD_REQUEST;
- }
-
sdbusplus::bus::bus sdbus{ipmid_get_sd_bus_connection()};
uint32_t pcapValue = 0;
bool pcapEnable = false;
@@ -338,8 +329,6 @@ ipmi_ret_t getPowerLimit(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
return IPMI_CC_UNSPECIFIED_ERROR;
}
- responseData->groupID = dcmi::groupExtId;
-
/*
* Exception action if power limit is exceeded and cannot be controlled
* with the correction time limit is hardcoded to Hard Power Off system
@@ -381,15 +370,6 @@ ipmi_ret_t setPowerLimit(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
auto requestData =
reinterpret_cast<const dcmi::SetPowerLimitRequest*>(request);
- std::vector<uint8_t> outPayload(sizeof(dcmi::SetPowerLimitResponse));
- auto responseData =
- reinterpret_cast<dcmi::SetPowerLimitResponse*>(outPayload.data());
-
- if (requestData->groupID != dcmi::groupExtId)
- {
- *data_len = 0;
- return IPMI_CC_INVALID_FIELD_REQUEST;
- }
sdbusplus::bus::bus sdbus{ipmid_get_sd_bus_connection()};
@@ -407,10 +387,7 @@ ipmi_ret_t setPowerLimit(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
log<level::INFO>("Set Power Cap",
entry("POWERCAP=%u", requestData->powerLimit));
- responseData->groupID = dcmi::groupExtId;
- memcpy(response, outPayload.data(), outPayload.size());
- *data_len = outPayload.size();
-
+ *data_len = 0;
return IPMI_CC_OK;
}
@@ -427,15 +404,6 @@ ipmi_ret_t applyPowerLimit(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
auto requestData =
reinterpret_cast<const dcmi::ApplyPowerLimitRequest*>(request);
- std::vector<uint8_t> outPayload(sizeof(dcmi::ApplyPowerLimitResponse));
- auto responseData =
- reinterpret_cast<dcmi::ApplyPowerLimitResponse*>(outPayload.data());
-
- if (requestData->groupID != dcmi::groupExtId)
- {
- *data_len = 0;
- return IPMI_CC_INVALID_FIELD_REQUEST;
- }
sdbusplus::bus::bus sdbus{ipmid_get_sd_bus_connection()};
@@ -453,10 +421,7 @@ ipmi_ret_t applyPowerLimit(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
log<level::INFO>("Set Power Cap Enable",
entry("POWERCAPENABLE=%u", requestData->powerLimitAction));
- responseData->groupID = dcmi::groupExtId;
- memcpy(response, outPayload.data(), outPayload.size());
- *data_len = outPayload.size();
-
+ *data_len = 0;
return IPMI_CC_OK;
}
@@ -470,12 +435,6 @@ ipmi_ret_t getAssetTag(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
auto responseData =
reinterpret_cast<dcmi::GetAssetTagResponse*>(outPayload.data());
- if (requestData->groupID != dcmi::groupExtId)
- {
- *data_len = 0;
- return IPMI_CC_INVALID_FIELD_REQUEST;
- }
-
// Verify offset to read and number of bytes to read are not exceeding the
// range.
if ((requestData->offset > dcmi::assetTagMaxOffset) ||
@@ -498,8 +457,6 @@ ipmi_ret_t getAssetTag(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
return IPMI_CC_UNSPECIFIED_ERROR;
}
- responseData->groupID = dcmi::groupExtId;
-
// Return if the asset tag is not populated.
if (!assetTag.size())
{
@@ -545,12 +502,6 @@ ipmi_ret_t setAssetTag(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
auto responseData =
reinterpret_cast<dcmi::SetAssetTagResponse*>(outPayload.data());
- if (requestData->groupID != dcmi::groupExtId)
- {
- *data_len = 0;
- return IPMI_CC_INVALID_FIELD_REQUEST;
- }
-
// Verify offset to read and number of bytes to read are not exceeding the
// range.
if ((requestData->offset > dcmi::assetTagMaxOffset) ||
@@ -581,7 +532,6 @@ ipmi_ret_t setAssetTag(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
dcmi::writeAssetTag(assetTag);
- responseData->groupID = dcmi::groupExtId;
responseData->tagLength = assetTag.size();
memcpy(response, outPayload.data(), outPayload.size());
*data_len = outPayload.size();
@@ -607,8 +557,7 @@ ipmi_ret_t getMgmntCtrlIdStr(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
*data_len = 0;
- if (requestData->groupID != dcmi::groupExtId ||
- requestData->bytes > dcmi::maxBytes ||
+ if (requestData->bytes > dcmi::maxBytes ||
requestData->offset + requestData->bytes > dcmi::maxCtrlIdStrLen)
{
return IPMI_CC_INVALID_FIELD_REQUEST;
@@ -630,7 +579,6 @@ ipmi_ret_t getMgmntCtrlIdStr(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
auto responseStr = hostName.substr(requestData->offset, requestData->bytes);
auto responseStrLen = std::min(static_cast<std::size_t>(requestData->bytes),
responseStr.length() + 1);
- responseData->groupID = dcmi::groupExtId;
responseData->strLen = hostName.length();
std::copy(begin(responseStr), end(responseStr), responseData->data);
@@ -651,8 +599,7 @@ ipmi_ret_t setMgmntCtrlIdStr(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
*data_len = 0;
- if (requestData->groupID != dcmi::groupExtId ||
- requestData->bytes > dcmi::maxBytes ||
+ if (requestData->bytes > dcmi::maxBytes ||
requestData->offset + requestData->bytes > dcmi::maxCtrlIdStrLen + 1 ||
(requestData->offset + requestData->bytes ==
dcmi::maxCtrlIdStrLen + 1 &&
@@ -701,7 +648,6 @@ ipmi_ret_t setMgmntCtrlIdStr(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
return IPMI_CC_UNSPECIFIED_ERROR;
}
- responseData->groupID = dcmi::groupExtId;
responseData->offset = requestData->offset + requestData->bytes;
*data_len = sizeof(*responseData);
return IPMI_CC_OK;
@@ -768,12 +714,6 @@ ipmi_ret_t getDCMICapabilities(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
return IPMI_CC_INVALID_FIELD_REQUEST;
}
- if (requestData->groupID != dcmi::groupExtId)
- {
- *data_len = 0;
- return IPMI_CC_INVALID_FIELD_REQUEST;
- }
-
auto responseData = reinterpret_cast<dcmi::GetDCMICapResponse*>(response);
// For each capabilities in a parameter fill the data from
@@ -808,7 +748,6 @@ ipmi_ret_t getDCMICapabilities(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
}
}
- responseData->groupID = dcmi::groupExtId;
responseData->major = DCMI_SPEC_MAJOR_VERSION;
responseData->minor = DCMI_SPEC_MINOR_VERSION;
responseData->paramRevision = DCMI_PARAMETER_REVISION;
@@ -834,16 +773,15 @@ Temperature readTemp(const std::string& dbusService,
sdbusplus::bus::bus bus{ipmid_get_sd_bus_connection()};
auto result = ipmi::getAllDbusProperties(
bus, dbusService, dbusPath, "xyz.openbmc_project.Sensor.Value");
- auto temperature = sdbusplus::message::variant_ns::visit(
- ipmi::VariantToDoubleVisitor(), result.at("Value"));
+ auto temperature =
+ std::visit(ipmi::VariantToDoubleVisitor(), result.at("Value"));
double absTemp = std::abs(temperature);
auto findFactor = result.find("Scale");
double factor = 0.0;
if (findFactor != result.end())
{
- factor = sdbusplus::message::variant_ns::visit(
- ipmi::VariantToDoubleVisitor(), findFactor->second);
+ factor = std::visit(ipmi::VariantToDoubleVisitor(), findFactor->second);
}
double scale = std::pow(10, factor);
@@ -997,13 +935,6 @@ ipmi_ret_t getTempReadings(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
return IPMI_CC_INVALID_FIELD_REQUEST;
}
- if (requestData->groupID != dcmi::groupExtId)
- {
- log<level::ERR>("Invalid Group ID",
- entry("GROUP_ID=%d", requestData->groupID));
- return IPMI_CC_INVALID_FIELD_REQUEST;
- }
-
if (requestData->sensorType != dcmi::temperatureSensorType)
{
log<level::ERR>("Invalid sensor type",
@@ -1036,7 +967,6 @@ ipmi_ret_t getTempReadings(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
return IPMI_CC_UNSPECIFIED_ERROR;
}
- responseData->groupID = dcmi::groupExtId;
size_t payloadSize = temps.size() * sizeof(dcmi::temp_readings::Response);
if (!temps.empty())
{
@@ -1084,8 +1014,8 @@ int64_t getPowerReading(sdbusplus::bus::bus& bus)
// Read the sensor value and scale properties
auto properties = ipmi::getAllDbusProperties(bus, service, objectPath,
SENSOR_VALUE_INTF);
- auto value = variant_ns::get<int64_t>(properties[SENSOR_VALUE_PROP]);
- auto scale = variant_ns::get<int64_t>(properties[SENSOR_SCALE_PROP]);
+ auto value = std::get<int64_t>(properties[SENSOR_VALUE_PROP]);
+ auto scale = std::get<int64_t>(properties[SENSOR_SCALE_PROP]);
// Power reading needs to be scaled with the Scale value using the
// formula Value * 10^Scale.
@@ -1106,19 +1036,15 @@ ipmi_ret_t setDCMIConfParams(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
{
auto requestData =
reinterpret_cast<const dcmi::SetConfParamsRequest*>(request);
- auto responseData =
- reinterpret_cast<dcmi::SetConfParamsResponse*>(response);
- if (requestData->groupID != dcmi::groupExtId ||
- *data_len < DCMI_SET_CONF_PARAM_REQ_PACKET_MIN_SIZE ||
+ if (*data_len < DCMI_SET_CONF_PARAM_REQ_PACKET_MIN_SIZE ||
*data_len > DCMI_SET_CONF_PARAM_REQ_PACKET_MAX_SIZE)
{
- log<level::ERR>("Invalid Group ID or Invalid Requested Packet size",
- entry("GROUP_ID=%d", requestData->groupID),
+ log<level::ERR>("Invalid Requested Packet size",
entry("PACKET SIZE=%d", *data_len));
+ *data_len = 0;
return IPMI_CC_INVALID_FIELD_REQUEST;
}
-
*data_len = 0;
try
@@ -1170,9 +1096,6 @@ ipmi_ret_t setDCMIConfParams(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
log<level::ERR>(e.what());
return IPMI_CC_UNSPECIFIED_ERROR;
}
- responseData->groupID = dcmi::groupExtId;
- *data_len = sizeof(dcmi::SetConfParamsResponse);
-
return IPMI_CC_OK;
}
@@ -1188,11 +1111,9 @@ ipmi_ret_t getDCMIConfParams(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
responseData->data[0] = 0x00;
- if (requestData->groupID != dcmi::groupExtId ||
- *data_len != sizeof(dcmi::GetConfParamsRequest))
+ if (*data_len != sizeof(dcmi::GetConfParamsRequest))
{
- log<level::ERR>("Invalid Group ID or Invalid Requested Packet size",
- entry("GROUP_ID=%d", requestData->groupID),
+ log<level::ERR>("Invalid Requested Packet size",
entry("PACKET SIZE=%d", *data_len));
return IPMI_CC_INVALID_FIELD_REQUEST;
}
@@ -1242,7 +1163,6 @@ ipmi_ret_t getDCMIConfParams(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
return IPMI_CC_UNSPECIFIED_ERROR;
}
- responseData->groupID = dcmi::groupExtId;
responseData->major = DCMI_SPEC_MAJOR_VERSION;
responseData->minor = DCMI_SPEC_MINOR_VERSION;
responseData->paramRevision = DCMI_CONFIG_PARAMETER_REVISION;
@@ -1262,17 +1182,9 @@ ipmi_ret_t getPowerReading(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
}
ipmi_ret_t rc = IPMI_CC_OK;
- auto requestData =
- reinterpret_cast<const dcmi::GetPowerReadingRequest*>(request);
auto responseData =
reinterpret_cast<dcmi::GetPowerReadingResponse*>(response);
- if (requestData->groupID != dcmi::groupExtId)
- {
- *data_len = 0;
- return IPMI_CC_INVALID_FIELD_REQUEST;
- }
-
sdbusplus::bus::bus bus{ipmid_get_sd_bus_connection()};
int64_t power = 0;
try
@@ -1286,7 +1198,6 @@ ipmi_ret_t getPowerReading(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
entry("PROPERTY=%s", SENSOR_VALUE_PROP));
return IPMI_CC_UNSPECIFIED_ERROR;
}
- responseData->groupID = dcmi::groupExtId;
// TODO: openbmc/openbmc#2819
// Minimum, Maximum, Average power, TimeFrame, TimeStamp,
@@ -1427,13 +1338,6 @@ ipmi_ret_t getSensorInfo(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
return IPMI_CC_INVALID_FIELD_REQUEST;
}
- if (requestData->groupID != dcmi::groupExtId)
- {
- log<level::ERR>("Invalid Group ID",
- entry("GROUP_ID=%d", requestData->groupID));
- return IPMI_CC_INVALID_FIELD_REQUEST;
- }
-
if (requestData->sensorType != dcmi::temperatureSensorType)
{
log<level::ERR>("Invalid sensor type",
@@ -1475,7 +1379,6 @@ ipmi_ret_t getSensorInfo(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
return IPMI_CC_UNSPECIFIED_ERROR;
}
- responseData->groupID = dcmi::groupExtId;
size_t payloadSize = sensors.size() * sizeof(dcmi::sensor_info::Response);
if (!sensors.empty())
{
OpenPOWER on IntegriCloud