summaryrefslogtreecommitdiffstats
path: root/command/sol_cmds.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'command/sol_cmds.cpp')
-rw-r--r--command/sol_cmds.cpp85
1 files changed, 85 insertions, 0 deletions
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 @@ void activating(uint8_t payloadInstance, uint32_t sessionID)
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
OpenPOWER on IntegriCloud