diff options
Diffstat (limited to 'dcmihandler.cpp')
-rw-r--r-- | dcmihandler.cpp | 155 |
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()) { |