Add RMCP Ping support

Added support of RMCP Ping/Pong request and response
(ASF messages).

Tested: Tested using rmcpping tool to send RMCP ping.

Resolves openbmc/phosphor-net-ipmid#15

Signed-off-by: Kirill Pakhomov <k.pakhomov@yadro.com>
Change-Id: Ie5199e6af69860d9406bdd516952b62c3d05793f
diff --git a/message.hpp b/message.hpp
index 738652c..f01fcc9 100644
--- a/message.hpp
+++ b/message.hpp
@@ -21,6 +21,24 @@
     INVALID = 0xFF,
 };
 
+// RMCP Classes of Message as per section 13.1.3.
+enum class ClassOfMsg : uint8_t
+{
+    RESERVED = 0x05,
+    ASF = 0x06,
+    IPMI = 0x07,
+    OEM = 0x08,
+};
+
+#ifdef RMCP_PING
+// RMCP Message Type as per section 13.1.3.
+enum class RmcpMsgType : uint8_t
+{
+    PING = 0x80,
+    PONG = 0x40,
+};
+#endif // RMCP_PING
+
 namespace LAN
 {
 
@@ -103,7 +121,8 @@
     Message() :
         payloadType(PayloadType::INVALID),
         rcSessionID(Message::MESSAGE_INVALID_SESSION_ID),
-        bmcSessionID(Message::MESSAGE_INVALID_SESSION_ID)
+        bmcSessionID(Message::MESSAGE_INVALID_SESSION_ID),
+        rmcpMsgClass(ClassOfMsg::RESERVED)
     {
     }
 
@@ -120,7 +139,7 @@
         isPacketEncrypted(other.isPacketEncrypted),
         isPacketAuthenticated(other.isPacketAuthenticated),
         payloadType(other.payloadType), rcSessionID(other.rcSessionID),
-        bmcSessionID(other.bmcSessionID)
+        bmcSessionID(other.bmcSessionID), rmcpMsgClass(other.rmcpMsgClass)
     {
         // special behavior for rmcp+ session creation
         if (PayloadType::OPEN_SESSION_REQUEST == other.payloadType)
@@ -227,6 +246,10 @@
     uint32_t rcSessionID;       // Remote Client's Session ID
     uint32_t bmcSessionID;      // BMC's session ID
     uint32_t sessionSeqNum;     // Session Sequence Number
+    ClassOfMsg rmcpMsgClass;    // Class of Message
+#ifdef RMCP_PING
+    uint8_t asfMsgTag; // ASF Message Tag
+#endif                 // RMCP_PING
 
     /** @brief Message payload
      *