chassishandler: move chassis control to new API
Rewritten "Chassis control" command to the use newly
introduced IPMI provider API.
Tested:
Verified ipmitool raw chassis control command
ipmitool raw 0 2 0/1/2/3/4/5 and for invalid value
got invalid field in request response.
Change-Id: I0213157640e34c693b53999f69d7d47ced950e0d
Signed-off-by: anil kumar appana <anil.kumarx.appana@intel.com>
Signed-off-by: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>
diff --git a/chassishandler.cpp b/chassishandler.cpp
index a89c2a5..a9e188f 100644
--- a/chassishandler.cpp
+++ b/chassishandler.cpp
@@ -1006,25 +1006,16 @@
std::ofstream(path.c_str());
}
-//----------------------------------------------------------------------
-// Chassis Control commands
-//----------------------------------------------------------------------
-ipmi_ret_t ipmi_chassis_control(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)
+/** @brief Implementation of chassis control command
+ *
+ * @param - chassisControl command byte
+ *
+ * @return Success or InvalidFieldRequest.
+ */
+ipmi::RspType<> ipmiChassisControl(uint8_t chassisControl)
{
- // Error from power off.
int rc = 0;
-
- // No response for this command.
- *data_len = 0;
-
- // Catch the actual operaton by peeking into request buffer
- uint8_t chassis_ctrl_cmd = *(uint8_t*)request;
-
- switch (chassis_ctrl_cmd)
+ switch (chassisControl)
{
case CMD_POWER_ON:
rc = initiate_state_transition(State::Host::Transition::On);
@@ -1087,12 +1078,13 @@
default:
{
log<level::ERR>("Invalid Chassis Control command",
- entry("CMD=0x%X", chassis_ctrl_cmd));
- rc = -1;
+ entry("CMD=0x%X", chassisControl));
+ return ipmi::responseInvalidFieldRequest();
}
}
- return ((rc < 0) ? IPMI_CC_INVALID : IPMI_CC_OK);
+ return ((rc < 0) ? ipmi::responseUnspecifiedError()
+ : ipmi::responseSuccess());
}
/** @brief Return D-Bus connection string to enclosure identify LED object
@@ -1710,8 +1702,9 @@
ipmi_get_chassis_status, PRIVILEGE_USER);
// <Chassis Control>
- ipmi_register_callback(NETFUN_CHASSIS, IPMI_CMD_CHASSIS_CONTROL, NULL,
- ipmi_chassis_control, PRIVILEGE_OPERATOR);
+ ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnChassis,
+ ipmi::chassis::cmdChassisControl,
+ ipmi::Privilege::Operator, ipmiChassisControl);
// <Chassis Identify>
ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnChassis,