Add support for Set SOL Configuration parameters command.
Change-Id: I82618bc21c426e37f0110b11aeba9855e588bb6c
Signed-off-by: Tom Joseph <tomjoseph@in.ibm.com>
diff --git a/command/sol_cmds.cpp b/command/sol_cmds.cpp
index 344b6d8..f18bc8b 100644
--- a/command/sol_cmds.cpp
+++ b/command/sol_cmds.cpp
@@ -68,6 +68,91 @@
outPayload);
}
+std::vector<uint8_t> setConfParams(const std::vector<uint8_t>& inPayload,
+ const message::Handler& handler)
+{
+ std::vector<uint8_t> outPayload(sizeof(SetConfParamsResponse));
+ auto request = reinterpret_cast<const SetConfParamsRequest*>
+ (inPayload.data());
+ auto response = reinterpret_cast<SetConfParamsResponse*>
+ (outPayload.data());
+ response->completionCode = IPMI_CC_OK;
+
+ switch (static_cast<Parameter>(request->paramSelector))
+ {
+ case Parameter::PROGRESS:
+ {
+ uint8_t progress = request->value & progressMask;
+ std::get<sol::Manager&>(singletonPool).progress = progress;
+ break;
+ }
+ case Parameter::ENABLE:
+ {
+ bool enable = request->value & enableMask;
+ std::get<sol::Manager&>(singletonPool).enable = enable;
+ break;
+ }
+ case Parameter::AUTHENTICATION:
+ {
+ if (!request->auth.auth || !request->auth.encrypt)
+ {
+ response->completionCode = ipmiCCWriteReadParameter;
+ }
+ else if (request->auth.privilege <
+ static_cast<uint8_t>(session::Privilege::USER) ||
+ request->auth.privilege >
+ static_cast<uint8_t>(session::Privilege::OEM))
+ {
+ response->completionCode = IPMI_CC_INVALID_FIELD_REQUEST;
+ }
+ else
+ {
+ std::get<sol::Manager&>(singletonPool).solMinPrivilege =
+ static_cast<session::Privilege>(request->auth.privilege);
+ }
+ break;
+ }
+ case Parameter::ACCUMULATE:
+ {
+ using namespace std::chrono_literals;
+
+ if (request->acc.threshold == 0)
+ {
+ response->completionCode = IPMI_CC_INVALID_FIELD_REQUEST;
+ break;
+ }
+
+ std::get<sol::Manager&>(singletonPool).accumulateInterval =
+ request->acc.interval * sol::accIntervalFactor * 1ms;
+ std::get<sol::Manager&>(singletonPool).sendThreshold =
+ request->acc.threshold;
+ break;
+ }
+ case Parameter::RETRY:
+ {
+ using namespace std::chrono_literals;
+
+ std::get<sol::Manager&>(singletonPool).retryCount =
+ request->retry.count;
+ std::get<sol::Manager&>(singletonPool).retryInterval =
+ request->retry.interval * sol::retryIntervalFactor * 1ms;
+ break;
+ }
+ case Parameter::PORT:
+ {
+ response->completionCode = ipmiCCWriteReadParameter;
+ break;
+ }
+ case Parameter::NVBITRATE:
+ case Parameter::VBITRATE:
+ case Parameter::CHANNEL:
+ default:
+ response->completionCode = ipmiCCParamNotSupported;
+ }
+
+ return outPayload;
+}
+
} // namespace command
} // namespace sol