summaryrefslogtreecommitdiffstats
path: root/include/ipmid
diff options
context:
space:
mode:
authorWilliam A. Kennington III <wak@google.com>2019-04-24 01:44:44 -0700
committerWilliam A. Kennington III <wak@google.com>2019-04-29 12:06:35 -0700
commit51694c22130d4f6160f63167a547d0a40763ef31 (patch)
tree0cede79b38a3095efdacc49b69b66f80bef0a02a /include/ipmid
parentd6a2da07d5c90e21aaf7a1612314180db73bdb6b (diff)
downloadphosphor-host-ipmid-51694c22130d4f6160f63167a547d0a40763ef31.tar.gz
phosphor-host-ipmid-51694c22130d4f6160f63167a547d0a40763ef31.zip
message/payload: Clean up check / trailing state
We want to be able to trivially re-use payloads for marshalling data from a buffer into other formats. This change tries to make the meaning of trailingOk and unpackCheck consistent, since the meanings didn't seem clear in the previous code. Now, unpackCheck is only used to determine if unpacking was checked, and trailingOk determines if unpackCheck is required. This also fixes lots of spurious warnings being printed for commands which were checking their output correctly, or were legacy and unable to check output. Change-Id: Id7aa9266693b4e3f896027acf6b3e5d757fdf981 Signed-off-by: William A. Kennington III <wak@google.com>
Diffstat (limited to 'include/ipmid')
-rw-r--r--include/ipmid/handler.hpp1
-rw-r--r--include/ipmid/message.hpp10
-rw-r--r--include/ipmid/message/unpack.hpp6
3 files changed, 6 insertions, 11 deletions
diff --git a/include/ipmid/handler.hpp b/include/ipmid/handler.hpp
index 1421c3d..ebeb442 100644
--- a/include/ipmid/handler.hpp
+++ b/include/ipmid/handler.hpp
@@ -153,6 +153,7 @@ class IpmiHandler final : public HandlerBase
using ResultType = boost::callable_traits::return_type_t<Handler>;
UnpackArgsType unpackArgs;
+ request->payload.trailingOk = false;
ipmi::Cc unpackError = request->unpack(unpackArgs);
if (unpackError != ipmi::ccSuccess)
{
diff --git a/include/ipmid/message.hpp b/include/ipmid/message.hpp
index 7f1ad7e..b10fc42 100644
--- a/include/ipmid/message.hpp
+++ b/include/ipmid/message.hpp
@@ -103,15 +103,14 @@ struct Payload
Payload(Payload&&) = default;
Payload& operator=(Payload&&) = default;
- explicit Payload(std::vector<uint8_t>&& data) :
- raw(std::move(data)), unpackCheck(false)
+ explicit Payload(std::vector<uint8_t>&& data) : raw(std::move(data))
{
}
~Payload()
{
using namespace phosphor::logging;
- if (trailingOk && !unpackCheck && !fullyUnpacked())
+ if (raw.size() != 0 && !trailingOk && !unpackCheck && !unpackError)
{
log<level::ERR>("Failed to check request for full unpack");
}
@@ -449,8 +448,8 @@ struct Payload
size_t bitCount = 0;
std::vector<uint8_t> raw;
size_t rawIndex = 0;
- bool trailingOk = false;
- bool unpackCheck = true;
+ bool trailingOk = true;
+ bool unpackCheck = false;
bool unpackError = false;
};
@@ -573,7 +572,6 @@ struct Request
// not all bits were consumed by requested parameters
return ipmi::ccReqDataLenInvalid;
}
- payload.unpackCheck = false;
}
}
return unpackRet;
diff --git a/include/ipmid/message/unpack.hpp b/include/ipmid/message/unpack.hpp
index 94f80f1..fb2b066 100644
--- a/include/ipmid/message/unpack.hpp
+++ b/include/ipmid/message/unpack.hpp
@@ -324,13 +324,9 @@ struct UnpackSingle<Payload>
{
static int op(Payload& p, Payload& t)
{
+ t = p;
// mark that this payload is being included in the args
p.trailingOk = true;
- t = p;
- // reset the unpacking flags so it can be properly checked
- t.trailingOk = false;
- t.unpackCheck = true;
- t.unpackError = false;
return 0;
}
};
OpenPOWER on IntegriCloud