summaryrefslogtreecommitdiffstats
path: root/include/ipmid/api.hpp
diff options
context:
space:
mode:
authorVernon Mauery <vernon.mauery@linux.intel.com>2019-04-03 09:19:34 -0700
committerVernon Mauery <vernon.mauery@linux.intel.com>2019-04-08 17:24:51 +0000
commite08fbffcd9bd1976f7d26d48bf7a4c3e5843d4a8 (patch)
tree6abf67790aef9bc4d8bdf49302550941dc2230c2 /include/ipmid/api.hpp
parent6c90b04bc5ec1c7e868eab00da7e9774626751b2 (diff)
downloadphosphor-host-ipmid-e08fbffcd9bd1976f7d26d48bf7a4c3e5843d4a8.tar.gz
phosphor-host-ipmid-e08fbffcd9bd1976f7d26d48bf7a4c3e5843d4a8.zip
Only include ipmid/api.hpp for the new API
After some feedback from users of the new IPMI API, they wanted to see two things: 1) don't require ipmid/api.hpp and ipmid/registration.hpp to be able to write new handlers 2) only require including ipmid/api.hpp (instead of ipmid/api.h) So now, by simply including ipmid/api.hpp instead of ipmid/api.h (deprecated), handlers incorporating the new IPMI API can be written. Change-Id: I446dcce70cff03d4ecc28c658292d052485f77fc Signed-off-by: Vernon Mauery <vernon.mauery@linux.intel.com>
Diffstat (limited to 'include/ipmid/api.hpp')
-rw-r--r--include/ipmid/api.hpp208
1 files changed, 8 insertions, 200 deletions
diff --git a/include/ipmid/api.hpp b/include/ipmid/api.hpp
index b825796..f4cbf13 100644
--- a/include/ipmid/api.hpp
+++ b/include/ipmid/api.hpp
@@ -17,210 +17,18 @@
#pragma once
#define ALLOW_DEPRECATED_API 1
-
-#include <ipmid/iana.hpp>
+// make it possible to ONLY include api.hpp during the transition
+#ifdef ALLOW_DEPRECATED_API
+#include <ipmid/api.h>
+#endif
+
+#include <ipmid/api-types.hpp>
+#include <ipmid/filter.hpp>
+#include <ipmid/handler.hpp>
#include <ipmid/message/types.hpp>
-#include <optional>
#include <sdbusplus/asio/connection.hpp>
#include <sdbusplus/asio/object_server.hpp>
-/* NOTE:
- *
- * This is intended for native C++ use. For the legacy C api, include
- * ipmid-api.h for a reduced functionality. Note that the C api is now marked
- * as deprecated and will be removed once all the internal users of it have
- * been updated to use the new C++ api.
- */
-
-namespace ipmi
-{
-
-using Iana = oem::Number;
-
-using Group = uint8_t;
-constexpr Group groupPICMG = 0x00;
-constexpr Group groupDMTG = 0x01;
-constexpr Group groupSSI = 0x02;
-constexpr Group groupVSO = 0x03;
-constexpr Group groupDCMI = 0xDC;
-
-/*
- * Set the priority as the lowest number that is necessary so
- * it is possible that others can override it if desired.
- * This may be linked to what level of integration the handler
- * is being created at.
- */
-constexpr int prioOpenBmcBase = 10;
-constexpr int prioOemBase = 20;
-constexpr int prioOdmBase = 30;
-constexpr int prioCustomBase = 40;
-constexpr int prioMax = 50;
-
-/*
- * Channel IDs pulled from the IPMI 2.0 specification
- */
-constexpr int channelPrimaryIpmb = 0x00;
-// 0x01-0x0B Implementation specific
-// Implementation specific channel numbers are specified
-// by a configuration file external to ipmid
-// 0x0C-0x0D reserved
-constexpr int channelCurrentIface = 0x0E; // 'Present I/F'
-constexpr int channelSystemIface = 0x0F;
-
-/*
- * Specifies the minimum privilege level required to execute the command
- * This means the command can be executed at a given privilege level or higher
- * privilege level. Those commands which can be executed via system interface
- * only should use SYSTEM_INTERFACE
- */
-enum class Privilege : uint8_t
-{
- None = 0x00,
- Callback,
- User,
- Operator,
- Admin,
- Oem,
-};
-
-// IPMI Net Function number as specified by IPMI V2.0 spec.
-using NetFn = uint8_t;
-
-// IPMI Command for a Net Function number as specified by IPMI V2.0 spec.
-using Cmd = uint8_t;
-
-// ipmi function return the status code
-using Cc = uint8_t;
-
-// These are the command network functions, the response
-// network functions are the function + 1. So to determine
-// the proper network function which issued the command
-// associated with a response, subtract 1.
-// Note: these will be left shifted when combined with the LUN
-constexpr NetFn netFnChassis = 0x00;
-constexpr NetFn netFnBridge = 0x02;
-constexpr NetFn netFnSensor = 0x04;
-constexpr NetFn netFnApp = 0x06;
-constexpr NetFn netFnFirmware = 0x08;
-constexpr NetFn netFnStorage = 0x0A;
-constexpr NetFn netFnTransport = 0x0C;
-// reserved 0Eh..28h
-constexpr NetFn netFnGroup = 0x2C;
-constexpr NetFn netFnOem = 0x2E;
-constexpr NetFn netFnOemOne = 0x30;
-constexpr NetFn netFnOemTwo = 0x32;
-constexpr NetFn netFnOemThree = 0x34;
-constexpr NetFn netFnOemFour = 0x36;
-constexpr NetFn netFnOemFive = 0x38;
-constexpr NetFn netFnOemSix = 0x3A;
-constexpr NetFn netFnOemSeven = 0x3C;
-constexpr NetFn netFnOemEight = 0x3E;
-
-// IPMI commands for net functions. Callbacks using this should be careful to
-// parse arguments to the sub-functions and can take advantage of the built-in
-// message handling mechanism to create custom routing
-constexpr Cmd cmdWildcard = 0xFF;
-
-// IPMI standard completion codes specified by the IPMI V2.0 spec.
-//
-// This might have been an enum class, but that would make it hard for
-// OEM- and command-specific completion codes to be added elsewhere.
-//
-// Custom completion codes can be defined in individual modules for
-// command specific errors in the 0x80-0xBE range
-//
-// Alternately, OEM completion codes are in the 0x01-0x7E range
-constexpr Cc ccSuccess = 0x00;
-constexpr Cc ccBusy = 0xC0;
-constexpr Cc ccInvalidCommand = 0xC1;
-constexpr Cc ccInvalidCommandOnLun = 0xC2;
-constexpr Cc ccTimeout = 0xC2;
-constexpr Cc ccOutOfSpace = 0xC2;
-constexpr Cc ccInvalidReservationId = 0xC5;
-constexpr Cc ccReqDataTruncated = 0xC6;
-constexpr Cc ccReqDataLenInvalid = 0xC7;
-constexpr Cc ccReqDataLenExceeded = 0xC8;
-constexpr Cc ccParmOutOfRange = 0xC9;
-constexpr Cc ccRetBytesUnavailable = 0xCA;
-constexpr Cc ccSensorInvalid = 0xCB;
-constexpr Cc ccInvalidFieldRequest = 0xCC;
-constexpr Cc ccIllegalCommand = 0xCD;
-constexpr Cc ccResponseError = 0xCE;
-constexpr Cc ccDuplicateRequest = 0xCF;
-constexpr Cc ccCmdFailSdrMode = 0xD0;
-constexpr Cc ccCmdFailFwUpdMode = 0xD1;
-constexpr Cc ccCmdFailInitAgent = 0xD2;
-constexpr Cc ccDestinationUnavailable = 0xD3;
-constexpr Cc ccInsufficientPrivilege = 0xD4;
-constexpr Cc ccCommandNotAvailable = 0xD5;
-constexpr Cc ccCommandDisabled = 0xD6;
-constexpr Cc ccUnspecifiedError = 0xFF;
-
-/* ipmi often has two return types:
- * 1. Failure: CC is non-zero; no trailing data
- * 2. Success: CC is zero; trailing data (usually a fixed type)
- *
- * using ipmi::response(cc, ...), it will automatically always pack
- * the correct type for the response without having to explicitly type out all
- * the parameters that the function would return.
- *
- * To enable this feature, you just define the ipmi function as returning an
- * ipmi::RspType which has the optional trailing data built in, with your types
- * defined as parameters.
- */
-
-template <typename... RetTypes>
-using RspType = std::tuple<ipmi::Cc, std::optional<std::tuple<RetTypes...>>>;
-
-/**
- * @brief helper function to create an IPMI response tuple
- *
- * IPMI handlers all return a tuple with two parts: a completion code and an
- * optional tuple containing the rest of the data to return. This helper
- * function makes it easier by constructing that out of an arbitrary number of
- * arguments.
- *
- * @param cc - the completion code for the response
- * @param args... - the optional list of values to return
- *
- * @return a standard IPMI return type (as described above)
- */
-template <typename... Args>
-static inline auto response(ipmi::Cc cc, Args&&... args)
-{
- return std::make_tuple(cc, std::make_optional(std::make_tuple(args...)));
-}
-static inline auto response(ipmi::Cc cc)
-{
- return std::make_tuple(cc, std::nullopt);
-}
-
-/**
- * @brief helper function to create an IPMI success response tuple
- *
- * IPMI handlers all return a tuple with two parts: a completion code and an
- * optional tuple containing the rest of the data to return. This helper
- * function makes it easier by constructing that out of an arbitrary number of
- * arguments. Because it is a success response, this automatically packs
- * the completion code, without needing to explicitly pass it in.
- *
- * @param args... - the optional list of values to return
- *
- * @return a standard IPMI return type (as described above)
- */
-template <typename... Args>
-static inline auto responseSuccess(Args&&... args)
-{
- return std::make_tuple(ipmi::ccSuccess,
- std::make_optional(std::make_tuple(args...)));
-}
-static inline auto responseSuccess()
-{
- return std::make_tuple(ipmi::ccSuccess, std::nullopt);
-}
-
-} // namespace ipmi
-
// any client can interact with the main asio context
std::shared_ptr<boost::asio::io_context> getIoContext();
OpenPOWER on IntegriCloud