summaryrefslogtreecommitdiffstats
path: root/sol/sol_manager.cpp
diff options
context:
space:
mode:
authorTom Joseph <tomjoseph@in.ibm.com>2017-03-14 18:09:11 +0530
committerPatrick Williams <patrick@stwcx.xyz>2017-04-24 11:22:15 -0500
commit2e44e0efa28b6abd386ab2a504c18e959ef46937 (patch)
tree4fc44468b418e88618b8a746e05dab3fd23de9fa /sol/sol_manager.cpp
parentb51f641ef64380de89f82a263d468f3ae7c01d41 (diff)
downloadphosphor-net-ipmid-2e44e0efa28b6abd386ab2a504c18e959ef46937.tar.gz
phosphor-net-ipmid-2e44e0efa28b6abd386ab2a504c18e959ef46937.zip
Add API to start a SOL payload instance
Change-Id: I3c87936350c9e3d7c4eb97b4c720295652aff9c4 Signed-off-by: Tom Joseph <tomjoseph@in.ibm.com>
Diffstat (limited to 'sol/sol_manager.cpp')
-rw-r--r--sol/sol_manager.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/sol/sol_manager.cpp b/sol/sol_manager.cpp
index 5236ff5..ed47398 100644
--- a/sol/sol_manager.cpp
+++ b/sol/sol_manager.cpp
@@ -1,5 +1,6 @@
#include <sys/socket.h>
#include <sys/un.h>
+#include <chrono>
#include <cmath>
#include <phosphor-logging/log.hpp>
#include "main.hpp"
@@ -75,4 +76,40 @@ int Manager::writeConsoleSocket(const Buffer& input) const
return 0;
}
+void Manager::startPayloadInstance(uint8_t payloadInstance,
+ session::SessionID sessionID)
+{
+ if (payloadMap.empty())
+ {
+ initHostConsoleFd();
+
+ // Register the fd in the sd_event_loop
+ std::get<eventloop::EventLoop&>(singletonPool).startHostConsole(
+ *(consoleFD.get()));
+ }
+
+ // Create the SOL Context data for payload instance
+ auto context = std::make_unique<Context>(
+ accumulateInterval, retryCount, payloadInstance, sessionID);
+
+ /*
+ * Start payload event instance
+ *
+ * Accumulate interval is in 5 ms(milli secs) increments, since
+ * sd_event_add_time takes in micro secs, it is converted to micro secs.
+ * The Retry interval is in 10 ms (milli secs) increments.
+ */
+ using namespace std::chrono_literals;
+
+ auto accInterval = 5ms * accumulateInterval;
+ auto retryInterval = 10ms * retryThreshold;
+
+ std::get<eventloop::EventLoop&>(singletonPool).startSOLPayloadInstance(
+ payloadInstance,
+ std::chrono::duration_cast<eventloop::IntervalType>(accInterval),
+ std::chrono::duration_cast<eventloop::IntervalType>(retryInterval));
+
+ payloadMap.emplace(payloadInstance, std::move(context));
+}
+
} // namespace sol
OpenPOWER on IntegriCloud