tools: ipmi handler must open ipmi device
The ipmi handler must open the ipmi device on the host.
Note: The initial implementation will only support ipmi system devices
that are listed as device 0. This can be improved later or swapped
out to link against another ipmi command implementation.
Change-Id: I262039fdf3554ba144be1943875fd088766f3b57
Signed-off-by: Patrick Venture <venture@google.com>
diff --git a/tools/ipmi_handler.cpp b/tools/ipmi_handler.cpp
index a0c1198..e1e0529 100644
--- a/tools/ipmi_handler.cpp
+++ b/tools/ipmi_handler.cpp
@@ -16,9 +16,40 @@
#include "ipmi_handler.hpp"
+#include <fcntl.h>
+
+#include <sstream>
+#include <string>
+#include <vector>
+
namespace host_tool
{
+bool IpmiHandler::open()
+{
+ const int device = 0;
+ const std::vector<std::string> formats = {"/dev/ipmi", "/dev/ipmi/",
+ "/dev/ipmidev/"};
+
+ for (const auto& format : formats)
+ {
+ std::ostringstream path;
+ path << format << device;
+
+ fd = sys->open(path.str().c_str(), O_RDWR);
+ if (fd < 0)
+ {
+ continue;
+ }
+ break;
+ }
+
+ /* Should we throw an exception here, since we exhausted these options?
+ * Maybe. :D
+ */
+ return !(fd < 0);
+}
+
std::vector<std::uint8_t>
IpmiHandler::sendPacket(const std::vector<std::uint8_t>& data)
{