summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sensorhandler.cpp147
1 files changed, 75 insertions, 72 deletions
diff --git a/sensorhandler.cpp b/sensorhandler.cpp
index f6ccc13..4fabac5 100644
--- a/sensorhandler.cpp
+++ b/sensorhandler.cpp
@@ -413,65 +413,57 @@ ipmi_ret_t ipmi_sen_set_sensor(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
return ipmiRC;
}
-
-ipmi_ret_t ipmi_sen_get_sensor_reading(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
- ipmi_request_t request, ipmi_response_t response,
- ipmi_data_len_t data_len, ipmi_context_t context)
+ipmi_ret_t legacyGetSensorReading(uint8_t sensorNum,
+ ipmi_response_t response,
+ ipmi_data_len_t data_len)
{
- sensor_data_t *reqptr = (sensor_data_t*)request;
- ipmi_ret_t rc = IPMI_CC_SENSOR_INVALID;
- uint8_t type = 0;
- sensorreadingresp_t *resp = (sensorreadingresp_t*) response;
int r;
dbus_interface_t a;
sd_bus *bus = ipmid_get_sd_bus_connection();
+ ipmi_ret_t rc = IPMI_CC_SENSOR_INVALID;
+ uint8_t type = 0;
sd_bus_message *reply = NULL;
int reading = 0;
char* assertion = NULL;
- ipmi::sensor::GetSensorResponse getResponse {};
- static constexpr auto scanningEnabledBit = 6;
-
- printf("IPMI GET_SENSOR_READING [0x%02x]\n",reqptr->sennum);
-
- r = find_openbmc_path(reqptr->sennum, &a);
+ sensorreadingresp_t *resp = (sensorreadingresp_t*) response;
+ *data_len=0;
+ r = find_openbmc_path(sensorNum, &a);
if (r < 0)
{
- fprintf(stderr, "Failed to find Sensor 0x%02x\n", reqptr->sennum);
+ sd_journal_print(LOG_ERR, "Failed to find Sensor 0x%02x\n", sensorNum);
+ return IPMI_CC_SENSOR_INVALID;
}
- else
- {
- type = get_type_from_interface(a);
- if(type == 0) {
- fprintf(stderr, "Failed to find Sensor 0x%02x\n", reqptr->sennum);
- return IPMI_CC_SENSOR_INVALID;
- }
- fprintf(stderr, "Bus: %s, Path: %s, Interface: %s\n", a.bus, a.path,
- a.interface);
+ type = get_type_from_interface(a);
+ if (type == 0)
+ {
+ sd_journal_print(LOG_ERR, "Failed to find Sensor 0x%02x\n",
+ sensorNum);
+ return IPMI_CC_SENSOR_INVALID;
}
- *data_len=0;
-
switch(type) {
case 0xC2:
case 0xC8:
- r = sd_bus_get_property(bus,a.bus, a.path, a.interface, "value", NULL, &reply, "i");
- if (r < 0) {
- fprintf(stderr, "Failed to call sd_bus_get_property:%d, %s\n", r, strerror(-r));
- fprintf(stderr, "Bus: %s, Path: %s, Interface: %s\n",
- a.bus, a.path, a.interface);
+ r = sd_bus_get_property(bus,a.bus, a.path, a.interface,
+ "value", NULL, &reply, "i");
+ if (r < 0)
+ {
+ sd_journal_print(LOG_ERR, "Failed to call sd_bus_get_property:"
+ " %d, %s\n", r, strerror(-r));
+ sd_journal_print(LOG_ERR, "Bus: %s, Path: %s, Interface: %s\n",
+ a.bus, a.path, a.interface);
break;
}
r = sd_bus_message_read(reply, "i", &reading);
if (r < 0) {
- fprintf(stderr, "Failed to read sensor: %s\n", strerror(-r));
+ sd_journal_print(LOG_ERR, "Failed to read sensor: %s\n",
+ strerror(-r));
break;
}
- printf("Contents of a 0x%02x is 0x%02x\n", type, reading);
-
rc = IPMI_CC_OK;
*data_len=sizeof(sensorreadingresp_t);
@@ -483,17 +475,22 @@ ipmi_ret_t ipmi_sen_get_sensor_reading(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
//TODO openbmc/openbmc#2154 Move this sensor to right place.
case 0xCA:
- r = sd_bus_get_property(bus,a.bus, a.path, a.interface, "value", NULL, &reply, "s");
- if (r < 0) {
- fprintf(stderr, "Failed to call sd_bus_get_property:%d, %s\n", r, strerror(-r));
- fprintf(stderr, "Bus: %s, Path: %s, Interface: %s\n",
- a.bus, a.path, a.interface);
+ r = sd_bus_get_property(bus,a.bus, a.path, a.interface, "value",
+ NULL, &reply, "s");
+ if (r < 0)
+ {
+ sd_journal_print(LOG_ERR, "Failed to call sd_bus_get_property:"
+ " %d, %s\n", r, strerror(-r));
+ sd_journal_print(LOG_ERR, "Bus: %s, Path: %s, Interface: %s\n",
+ a.bus, a.path, a.interface);
break;
}
r = sd_bus_message_read(reply, "s", &assertion);
- if (r < 0) {
- fprintf(stderr, "Failed to read sensor: %s\n", strerror(-r));
+ if (r < 0)
+ {
+ sd_journal_print(LOG_ERR, "Failed to read sensor: %s\n",
+ strerror(-r));
break;
}
@@ -515,37 +512,7 @@ ipmi_ret_t ipmi_sen_get_sensor_reading(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
default:
{
- const auto iter = sensors.find(reqptr->sennum);
- if (iter == sensors.end())
- {
- return IPMI_CC_SENSOR_INVALID;
- }
- if (ipmi::sensor::Mutability::Read !=
- (iter->second.mutability & ipmi::sensor::Mutability::Read))
- {
- return IPMI_CC_SENSOR_INVALID;
- }
-
- try
- {
- getResponse = iter->second.getFunc(iter->second);
- *data_len = getResponse.size();
- memcpy(resp, getResponse.data(), *data_len);
- resp->operation = 1 << scanningEnabledBit;
- return IPMI_CC_OK;
- }
- catch (InternalFailure& e)
- {
- *data_len = getResponse.size();
- memcpy(resp, getResponse.data(), *data_len);
- return IPMI_CC_OK;
- }
- catch (const std::runtime_error& e)
- {
- *data_len = getResponse.size();
- memcpy(resp, getResponse.data(), *data_len);
- return IPMI_CC_OK;
- }
+ return IPMI_CC_SENSOR_INVALID;
}
}
@@ -554,6 +521,42 @@ ipmi_ret_t ipmi_sen_get_sensor_reading(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
return rc;
}
+ipmi_ret_t ipmi_sen_get_sensor_reading(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
+ ipmi_request_t request, ipmi_response_t response,
+ ipmi_data_len_t data_len, ipmi_context_t context)
+{
+ sensor_data_t *reqptr = (sensor_data_t*)request;
+ sensorreadingresp_t *resp = (sensorreadingresp_t*) response;
+ ipmi::sensor::GetSensorResponse getResponse {};
+ static constexpr auto scanningEnabledBit = 6;
+
+ const auto iter = sensors.find(reqptr->sennum);
+ if (iter == sensors.end())
+ {
+ return legacyGetSensorReading(reqptr->sennum, response, data_len);
+ }
+ if (ipmi::sensor::Mutability::Read !=
+ (iter->second.mutability & ipmi::sensor::Mutability::Read))
+ {
+ return IPMI_CC_SENSOR_INVALID;
+ }
+
+ try
+ {
+ getResponse = iter->second.getFunc(iter->second);
+ *data_len = getResponse.size();
+ memcpy(resp, getResponse.data(), *data_len);
+ resp->operation = 1 << scanningEnabledBit;
+ return IPMI_CC_OK;
+ }
+ catch (const std::exception& e)
+ {
+ *data_len = getResponse.size();
+ memcpy(resp, getResponse.data(), *data_len);
+ return IPMI_CC_OK;
+ }
+}
+
void getSensorThresholds(uint8_t sensorNum,
get_sdr::GetSensorThresholdsResponse* response)
{
OpenPOWER on IntegriCloud