diff --git a/auth_algo.hpp b/auth_algo.hpp
index c0663b1..cf5ccfe 100644
--- a/auth_algo.hpp
+++ b/auth_algo.hpp
@@ -14,7 +14,7 @@
 constexpr size_t BMC_RANDOM_NUMBER_LEN = 16;
 constexpr size_t REMOTE_CONSOLE_RANDOM_NUMBER_LEN = 16;
 
-/*
+/**
  * @enum RAKP Authentication Algorithms
  *
  * RMCP+ Authenticated Key-Exchange Protocol (RAKP)
@@ -35,7 +35,7 @@
     RAKP_HMAC_INVALID = 0xB0
 };
 
-/*
+/**
  * @class Interface
  *
  * Interface is the base class for the Authentication Algorithms.
@@ -59,7 +59,7 @@
         Interface(Interface&&) = default;
         Interface& operator=(Interface&&) = default;
 
-        /*
+        /**
          * @brief Generate the Hash Message Authentication Code
          *
          * This API is invoked to generate the Key Exchange Authentication Code
@@ -76,7 +76,7 @@
         std::vector<uint8_t> virtual generateHMAC(
             std::vector<uint8_t>& input) const = 0;
 
-        /*
+        /**
          * @brief Generate the Integrity Check Value
          *
          * This API is invoked in the RAKP4 sequence for generating the
@@ -105,7 +105,7 @@
         // Session Integrity Key
         std::vector<uint8_t> sessionIntegrityKey;
 
-        /*
+        /**
          * Integrity Algorithm is activated and set in the session data only
          * once the session setup is succeeded in the RAKP34 command. But the
          * integrity algorithm is negotiated in the Open Session Request command
@@ -114,7 +114,7 @@
          */
         integrity::Algorithms intAlgo;
 
-        /*
+        /**
          * Confidentiality Algorithm is activated and set in the session data
          * only once the session setup is succeeded in the RAKP34 command. But
          * the confidentiality algorithm is negotiated in the Open Session
@@ -124,7 +124,7 @@
         crypt::Algorithms cryptAlgo;
 };
 
-/*
+/**
  * @class AlgoSHA1
  *
  * RAKP-HMAC-SHA1 specifies the use of RAKP messages for the key exchange
diff --git a/comm_module.hpp b/comm_module.hpp
index ce5ab66..e96983c 100644
--- a/comm_module.hpp
+++ b/comm_module.hpp
@@ -7,33 +7,33 @@
 namespace command
 {
 
-/*
+/**
  * @brief RMCP+ and RAKP Message Status Codes
  */
 enum class RAKP_ReturnCode : uint8_t
 {
-    NO_ERROR,                   /* No errors */
-    INSUFFICIENT_RESOURCE,      /* Insufficient resources to create a session */
-    INVALID_SESSION_ID,         /* Invalid Session ID */
-    INVALID_PAYLOAD_TYPE,       /* Invalid payload type */
-    INVALID_AUTH_ALGO,          /* Invalid authentication algorithm */
-    INVALID_INTEGRITY_ALGO,     /* Invalid integrity algorithm */
-    NO_MATCH_AUTH_PAYLOAD,      /* No matching authentication payload */
-    NO_MATCH_INTEGRITY_PAYLOAD, /* No matching integrity payload */
-    INACTIVE_SESSIONID,         /* Inactive Session ID */
-    INACTIVE_ROLE,              /* Invalid role */
-    UNAUTH_ROLE_PRIV,           /* Unauthorized role or privilege requested */
-    INSUFFICIENT_RESOURCES_ROLE,/* Insufficient resources to create a session */
-    INVALID_NAME_LENGTH,        /* Invalid name length */
-    UNAUTH_NAME,                /* Unauthorized name */
-    UNAUTH_GUID,                /* Unauthorized GUID */
-    INVALID_INTEGRITY_VALUE,    /* Invalid integrity check value */
-    INVALID_CONF_ALGO,          /* Invalid confidentiality algorithm */
-    NO_CIPHER_SUITE_MATCH,      /* No Cipher Suite match with security algos */
-    ILLEGAL_PARAMETER,          /* Illegal or unrecognized parameter */
+    NO_ERROR,                   //!< No errors
+    INSUFFICIENT_RESOURCE,      //!< Insufficient resources to create a session
+    INVALID_SESSION_ID,         //!< Invalid Session ID
+    INVALID_PAYLOAD_TYPE,       //!< Invalid payload type
+    INVALID_AUTH_ALGO,          //!< Invalid authentication algorithm
+    INVALID_INTEGRITY_ALGO,     //!< Invalid integrity algorithm
+    NO_MATCH_AUTH_PAYLOAD,      //!< No matching authentication payload
+    NO_MATCH_INTEGRITY_PAYLOAD, //!< No matching integrity payload
+    INACTIVE_SESSIONID,         //!< Inactive Session ID
+    INACTIVE_ROLE,              //!< Invalid role
+    UNAUTH_ROLE_PRIV,           //!< Unauthorized role or privilege requested
+    INSUFFICIENT_RESOURCES_ROLE,//!< Insufficient resources to create a session
+    INVALID_NAME_LENGTH,        //!< Invalid name length
+    UNAUTH_NAME,                //!< Unauthorized name
+    UNAUTH_GUID,                //!< Unauthorized GUID
+    INVALID_INTEGRITY_VALUE,    //!< Invalid integrity check value
+    INVALID_CONF_ALGO,          //!< Invalid confidentiality algorithm
+    NO_CIPHER_SUITE_MATCH,      //!< No Cipher Suite match with security algos
+    ILLEGAL_PARAMETER,          //!< Illegal or unrecognized parameter
 };
 
-/*
+/**
  * @brief Register Session Setup commands to the Command Table
  */
 void sessionSetupCommands();
diff --git a/command/channel_auth.hpp b/command/channel_auth.hpp
index 7b922c2..9d96ac0 100644
--- a/command/channel_auth.hpp
+++ b/command/channel_auth.hpp
@@ -7,8 +7,8 @@
 namespace command
 {
 
-/*
- * @ struct GetChannelCapabilitiesReq
+/**
+ * @struct GetChannelCapabilitiesReq
  *
  * IPMI Request data for Get Channel Authentication Capabilities command
  */
@@ -18,8 +18,8 @@
     uint8_t reqMaxPrivLevel;
 } __attribute__((packed));
 
-/*
- * @ struct GetChannelCapabilitiesResp
+/**
+ * @struct GetChannelCapabilitiesResp
  *
  * IPMI Response data for Get Channel Authentication Capabilities command
  */
@@ -101,7 +101,7 @@
     uint8_t oemAuxillary;  // Addition OEM specific information..
 } __attribute__((packed));
 
-/*
+/**
  * @brief Get Channel Authentication Capabilities
  *
  * This message exchange provides a way for a remote console to discover what
diff --git a/command/guid.hpp b/command/guid.hpp
index 03c6272..622b330 100644
--- a/command/guid.hpp
+++ b/command/guid.hpp
@@ -10,7 +10,7 @@
 
 constexpr size_t BMC_GUID_LEN = 16;
 
-/*
+/**
  * @brief Get System GUID
  *
  * @return If UUID is successfully read from the Chassis DBUS object, then the
diff --git a/command/open_session.hpp b/command/open_session.hpp
index 717b99b..677fe55 100644
--- a/command/open_session.hpp
+++ b/command/open_session.hpp
@@ -7,8 +7,8 @@
 namespace command
 {
 
-/*
- * @ struct OpenSessionRequest
+/**
+ * @struct OpenSessionRequest
  *
  * IPMI Payload for RMCP+ Open Session Request
  */
@@ -82,8 +82,8 @@
     uint16_t reserved14;
 } __attribute__((packed));
 
-/*
- * @ struct OpenSessionResponse
+/**
+ * @struct OpenSessionResponse
  *
  * IPMI Payload for RMCP+ Open Session Response
  */
@@ -159,7 +159,7 @@
     uint16_t reserved14;
 } __attribute__((packed));
 
-/*
+/**
  * @brief RMCP+ Open Session Request, RMCP+ Open Session Response
  *
  * The RMCP+ Open Session request and response messages are used to enable a
diff --git a/command/rakp12.hpp b/command/rakp12.hpp
index 2d86bdb..fb9a499 100644
--- a/command/rakp12.hpp
+++ b/command/rakp12.hpp
@@ -8,7 +8,7 @@
 namespace command
 {
 
-/*
+/**
  * @struct RAKP1request
  *
  * IPMI Payload for RAKP Message 1
@@ -26,7 +26,7 @@
     char user_name[16];
 } __attribute__((packed));
 
-/*
+/**
  * @struct RAKP2response
  *
  * IPMI Payload for RAKP Message 2
@@ -41,7 +41,7 @@
     uint8_t managed_system_guid[16];
 } __attribute__((packed));
 
-/*
+/**
  * @brief RAKP Message 1, RAKP Message 2
  *
  * These messages are used to exchange random number and identification
diff --git a/command/rakp34.hpp b/command/rakp34.hpp
index a110a24..deaf2e9 100644
--- a/command/rakp34.hpp
+++ b/command/rakp34.hpp
@@ -8,7 +8,7 @@
 namespace command
 {
 
-/*
+/**
  * @struct RAKP3request
  *
  * IPMI Payload for RAKP Message 3
@@ -22,7 +22,7 @@
     uint8_t keyExchangeAuthCode[20];
 } __attribute__((packed));
 
-/*
+/**
  * @struct RAKP4response
  *
  * IPMI Payload for RAKP Message 4
@@ -35,7 +35,7 @@
     uint32_t remoteConsoleSessionID;
 } __attribute__((packed));
 
-/*
+/**
  * @brief RAKP Message 3, RAKP Message 4
  *
  * The session activation process is completed by the remote console and BMC
diff --git a/command/session_cmds.hpp b/command/session_cmds.hpp
index 95e3464..738bd03 100644
--- a/command/session_cmds.hpp
+++ b/command/session_cmds.hpp
@@ -10,8 +10,8 @@
 constexpr uint8_t IPMI_CC_INVALID_PRIV_LEVEL = 0x80;
 constexpr uint8_t IPMI_CC_EXCEEDS_USER_PRIV = 0x81;
 
-/*
- * @ struct SetSessionPrivLevelReq
+/**
+ * @struct SetSessionPrivLevelReq
  *
  * IPMI Request data for Set Session Privilege Level command
  */
@@ -30,8 +30,8 @@
 
 } __attribute__((packed));
 
-/*
- * @ struct SetSessionPrivLevelResp
+/**
+ * @struct SetSessionPrivLevelResp
  *
  * IPMI Response data for Set Session Privilege Level command
  */
@@ -51,7 +51,7 @@
 
 } __attribute__((packed));
 
-/*
+/**
  * @brief Set Session Privilege Command
  *
  * This command is sent in authenticated format. When a session is activated,
@@ -76,8 +76,8 @@
 
 constexpr uint8_t IPMI_CC_INVALID_SESSIONID = 0x87;
 
-/*
- * @ struct CloseSessionRequest
+/**
+ * @struct CloseSessionRequest
  *
  * IPMI Request data for Close Session command
  */
@@ -87,8 +87,8 @@
     uint8_t sessionHandle;
 } __attribute__((packed));
 
-/*
- * @ struct CloseSessionResponse
+/**
+ * @struct CloseSessionResponse
  *
  * IPMI Response data for Close Session command
  */
@@ -97,7 +97,7 @@
     uint8_t completionCode;
 } __attribute__((packed));
 
-/*
+/**
  * @brief Close Session Command
  *
  * This command is used to immediately terminate a session in progress. It is
diff --git a/command_table.hpp b/command_table.hpp
index 85d7c3e..62738c8 100644
--- a/command_table.hpp
+++ b/command_table.hpp
@@ -27,7 +27,7 @@
     uint8_t cmd;
 } __attribute__((packed));
 
-/*
+/**
  * CommandFunctor is the functor register for commands defined in
  * phosphor-net-ipmid. This would take the request part of the command as a
  * vector and a reference to the message handler. The response part of the
@@ -36,7 +36,7 @@
 using CommandFunctor = std::function<std::vector<uint8_t>(
         const std::vector<uint8_t>&, const message::Handler&)>;
 
-/*
+/**
  * @struct CmdDetails
  *
  * Command details is used to register commands supported in phosphor-net-ipmid.
@@ -49,7 +49,7 @@
     bool sessionless;
 };
 
-/*
+/**
  * @enum NetFns
  *
  * A field that identifies the functional class of the message. The Network
@@ -92,7 +92,7 @@
     OEM_RESP           = (0x2F << 10),
 };
 
-/*
+/**
  * @class Entry
  *
  * This is the base class for registering IPMI commands. There are two ways of
@@ -148,7 +148,7 @@
         session::Privilege privilege;
 };
 
-/*
+/**
  * @class NetIpmidEntry
  *
  * NetIpmidEntry is used to register commands that are consumed only in
@@ -197,7 +197,7 @@
         bool sessionless;
 };
 
-/*
+/**
  * @class ProviderIpmidEntry
  *
  * ProviderIpmidEntry is used to register commands to the Command Table, that
@@ -237,7 +237,7 @@
         ipmid_callback_t functor;
 };
 
-/*
+/**
  * @class Table
  *
  * Table keeps the IPMI command entries as a sorted associative container with
diff --git a/integrity_algo.hpp b/integrity_algo.hpp
index 7b895c5..eb78578 100644
--- a/integrity_algo.hpp
+++ b/integrity_algo.hpp
@@ -30,7 +30,7 @@
                          0x01, 0x01, 0x01, 0x01, 0x01
                        };
 
-/*
+/**
  * @enum Integrity Algorithms
  *
  * The Integrity Algorithm Number specifies the algorithm used to generate the
@@ -48,7 +48,7 @@
     HMAC_SHA256_128,       // Optional
 };
 
-/*
+/**
  * @class Interface
  *
  * Interface is the base class for the Integrity Algorithms.
@@ -59,7 +59,7 @@
 class Interface
 {
     public:
-        /*
+        /**
          * @brief Constructor for Interface
          *
          * @param[in] - Session Integrity Key to generate K1
@@ -77,7 +77,7 @@
         Interface(Interface&&) = default;
         Interface& operator=(Interface&&) = default;
 
-        /*
+        /**
          * @brief Verify the integrity data of the packet
          *
          * @param[in] packet - Incoming IPMI packet
@@ -92,7 +92,7 @@
                 const size_t packetLen,
                 Buffer::const_iterator integrityData) const = 0;
 
-        /*
+        /**
          * @brief Generate integrity data for the outgoing IPMI packet
          *
          * @param[in] input - Outgoing IPMI packet
@@ -122,20 +122,21 @@
             }
         }
 
-        /*
-         * AuthCode field length varies based on the integrity algorithm, for
-         * HMAC-SHA1-96 the authcode field is 12 bytes. For HMAC-SHA256-128 and
-         * HMAC-MD5-128 the authcode field is 16 bytes.
+        /** @brief Authcode field
+         *
+         *  AuthCode field length varies based on the integrity algorithm, for
+         *  HMAC-SHA1-96 the authcode field is 12 bytes. For HMAC-SHA256-128 and
+         *  HMAC-MD5-128 the authcode field is 16 bytes.
          */
         size_t authCodeLength;
 
     protected:
 
-        // K1 key used to generated the integrity data
+        /** @brief K1 key used to generated the integrity data. */
         Key K1;
 };
 
-/*
+/**
  * @class AlgoSHA1
  *
  * @brief Implementation of the HMAC-SHA1-96 Integrity algorithm
@@ -151,7 +152,7 @@
     public:
         static constexpr size_t SHA1_96_AUTHCODE_LENGTH = 12;
 
-        /*
+        /**
          * @brief Constructor for AlgoSHA1
          *
          * @param[in] - Session Integrity Key
@@ -166,7 +167,7 @@
         AlgoSHA1(AlgoSHA1&&) = default;
         AlgoSHA1& operator=(AlgoSHA1&&) = default;
 
-        /*
+        /**
          * @brief Verify the integrity data of the packet
          *
          * @param[in] packet - Incoming IPMI packet
@@ -182,7 +183,7 @@
                 const size_t length,
                 Buffer::const_iterator integrityData) const override;
 
-        /*
+        /**
          * @brief Generate integrity data for the outgoing IPMI packet
          *
          * @param[in] input - Outgoing IPMI packet
@@ -193,7 +194,7 @@
         Buffer generateIntegrityData(const Buffer& packet) const override;
 
     private:
-        /*
+        /**
          * @brief Generate HMAC based on HMAC-SHA1-96 algorithm
          *
          * @param[in] input - pointer to the message
diff --git a/message.hpp b/message.hpp
index a53727a..59aa6e6 100644
--- a/message.hpp
+++ b/message.hpp
@@ -19,8 +19,8 @@
     INVALID               = 0xFF,
 };
 
-/*
- * @ struct Message
+/**
+ * @struct Message
  *
  * IPMI message is data encapsulated in an IPMI Session packet. The IPMI
  * Session packets are encapsulated in RMCP packets, which are encapsulated in
@@ -50,12 +50,13 @@
     uint32_t bmcSessionID;          // BMC's session ID
     uint32_t sessionSeqNum;         // Session Sequence Number
 
-    /*
-     * “Payloads” are a capability specified for RMCP+ that enable an IPMI
-     * session to carry types of traffic that are in addition to IPMI Messages.
-     * Payloads can be ‘standard’ or ‘OEM’.Standard payload types include IPMI
-     * Messages, messages for session setup under RMCP+, and the payload for the
-     * “Serial Over LAN” capability introduced in IPMI v2.0.
+    /** @brief Message payload
+     *
+     *  “Payloads” are a capability specified for RMCP+ that enable an IPMI
+     *  session to carry types of traffic that are in addition to IPMI Messages.
+     *  Payloads can be ‘standard’ or ‘OEM’.Standard payload types include IPMI
+     *  Messages, messages for session setup under RMCP+, and the payload for
+     *  the “Serial Over LAN” capability introduced in IPMI v2.0.
      */
     std::vector<uint8_t> payload;
 };
@@ -69,7 +70,9 @@
 namespace header
 {
 
-// IPMI LAN Message Request Header
+/**
+ * @struct IPMI LAN Message Request Header
+ */
 struct Request
 {
     uint8_t rsaddr;
@@ -80,7 +83,9 @@
     uint8_t cmd;
 } __attribute__((packed));
 
-// IPMI LAN Message Response Header
+/**
+ * @struct IPMI LAN Message Response Header
+ */
 struct Response
 {
     uint8_t rqaddr;
@@ -96,7 +101,9 @@
 namespace trailer
 {
 
-// IPMI LAN Message Trailer
+/**
+ * @struct IPMI LAN Message Trailer
+ */
 struct Request
 {
     uint8_t checksum;
diff --git a/message_handler.hpp b/message_handler.hpp
index 882a077..11cc42a 100644
--- a/message_handler.hpp
+++ b/message_handler.hpp
@@ -26,7 +26,7 @@
         Handler(Handler&&) = default;
         Handler& operator=(Handler&&) = default;
 
-        /*
+        /**
          * @brief Receive the IPMI packet
          *
          * Read the data on the socket, get the parser based on the Session
@@ -37,7 +37,7 @@
          */
         std::unique_ptr<Message> receive();
 
-        /*
+        /**
          * @brief Process the incoming IPMI message
          *
          * The incoming message payload is handled and the command handler for
@@ -93,7 +93,7 @@
 
         parser::SessionHeader sessionHeader  = parser::SessionHeader::IPMI20;
 
-        /*
+        /**
          * @brief Create the response IPMI message
          *
          * The IPMI outgoing message is constructed out of payload and the
@@ -116,7 +116,7 @@
             return outMessage;
         }
 
-        /*
+        /**
          * @brief Extract the command from the IPMI payload
          *
          * @param[in] message - Incoming message
@@ -125,7 +125,7 @@
          */
         uint32_t getCommand(Message& message);
 
-        /*
+        /**
          * @brief Calculate 8 bit 2's complement checksum
          *
          * Initialize checksum to 0. For each byte, checksum = (checksum + byte)
diff --git a/message_parsers.hpp b/message_parsers.hpp
index fc82abc..e55e405 100644
--- a/message_parsers.hpp
+++ b/message_parsers.hpp
@@ -49,7 +49,7 @@
     } format;
 } __attribute__((packed));
 
-/*
+/**
  * @brief Unflatten an incoming packet and prepare the IPMI message
  *
  * @param[in] inPacket - Incoming IPMI packet
@@ -62,7 +62,7 @@
 std::tuple<std::unique_ptr<Message>, SessionHeader> unflatten(
         std::vector<uint8_t>& inPacket);
 
-/*
+/**
  * @brief Flatten an IPMI message and generate the IPMI packet with the
  *        session header
  *
@@ -95,7 +95,7 @@
     uint8_t legacyPad;
 } __attribute__((packed));
 
-/*
+/**
  * @brief Unflatten an incoming packet and prepare the IPMI message
  *
  * @param[in] inPacket - Incoming IPMI packet
@@ -104,7 +104,7 @@
  */
 std::unique_ptr<Message> unflatten(std::vector<uint8_t>& inPacket);
 
-/*
+/**
  * @brief Flatten an IPMI message and generate the IPMI packet with the
  *        session header
  *
@@ -141,7 +141,7 @@
     uint8_t nextHeader;
 } __attribute__((packed));
 
-/*
+/**
  * @brief Unflatten an incoming packet and prepare the IPMI message
  *
  * @param[in] inPacket - Incoming IPMI packet
@@ -150,7 +150,7 @@
  */
 std::unique_ptr<Message> unflatten(std::vector<uint8_t>& inPacket);
 
-/*
+/**
  * @brief Flatten an IPMI message and generate the IPMI packet with the
  *        session header
  *
@@ -163,7 +163,7 @@
 namespace internal
 {
 
-/*
+/**
  * @brief Add sequence number to the message
  *
  * @param[in] packet - outgoing packet to which to add sequence number
@@ -172,7 +172,7 @@
  */
 void addSequenceNumber(std::vector<uint8_t>& packet, session::Session& session);
 
-/*
+/**
  * @brief Verify the integrity data of the incoming IPMI packet
  *
  * @param[in] packet - Incoming IPMI packet
@@ -184,7 +184,7 @@
                            const Message& message,
                            size_t payloadLen);
 
-/*
+/**
  * @brief Add Integrity data to the outgoing IPMI packet
  *
  * @param[in] packet - Outgoing IPMI packet
@@ -195,7 +195,7 @@
                       const Message& message,
                       size_t payloadLen);
 
-/*
+/**
  * @brief Decrypt the encrypted payload in the incoming IPMI packet
  *
  * @param[in] packet - Incoming IPMI packet
@@ -208,7 +208,7 @@
                                     const Message& message,
                                     size_t payloadLen);
 
-/*
+/**
  * @brief Encrypt the plain text payload for the outgoing IPMI packet
  *
  * @param[in] message - IPMI Message populated for the outgoing packet
diff --git a/provider_registration.hpp b/provider_registration.hpp
index 6c05dde..ad956fc 100644
--- a/provider_registration.hpp
+++ b/provider_registration.hpp
@@ -3,7 +3,7 @@
 namespace provider
 {
 
-/*
+/**
  * @brief Provider Library filename extension
  *
  * Autotools versions the shared libraries, so the shared libraries end with
@@ -12,7 +12,7 @@
 
 constexpr auto PROVIDER_SONAME_EXTN = ".so.";
 
-/*
+/**
  * @brief Register Callback handlers for IPMI provider libraries
  *
  * Open the directory path for net-ipmid provider libraries and scan the
diff --git a/session.hpp b/session.hpp
index 637438a..feef2d4 100644
--- a/session.hpp
+++ b/session.hpp
@@ -42,7 +42,7 @@
 // Seconds of inactivity allowed when session is active
 constexpr auto SESSION_INACTIVITY_TIMEOUT = 60s;
 
-/*
+/**
  * @struct SequenceNumbers Session Sequence Numbers
  *
  * IPMI v2.0 RMCP+ Session Sequence Numbers are used for rejecting packets that
@@ -79,7 +79,7 @@
         uint32_t in = 0;
         uint32_t out = 0;
 };
-/*
+/**
  * @class Session
  *
  * Encapsulates the data related to an IPMI Session
@@ -102,7 +102,7 @@
         Session(Session&&) = default;
         Session& operator=(Session&&) = default;
 
-        /*
+        /**
          * @brief Session Constructor
          *
          * This is issued by the Session Manager when a session is started for
@@ -144,7 +144,7 @@
             authAlgoInterface = std::move(inAuthAlgo);
         }
 
-        /*
+        /**
          * @brief Get Session's Integrity Algorithm
          *
          * @return pointer to the integrity algorithm
@@ -161,7 +161,7 @@
             }
         }
 
-        /*
+        /**
          * @brief Set Session's Integrity Algorithm
          *
          * @param[in] integrityAlgo - unique pointer to integrity algorithm
@@ -182,7 +182,7 @@
             return integrityAlgoInterface ? true : false;
         }
 
-        /*
+        /**
          * @brief Get Session's Confidentiality Algorithm
          *
          * @return pointer to the confidentiality algorithm
@@ -199,7 +199,7 @@
             }
         }
 
-        /*
+        /**
          * @brief Set Session's Confidentiality Algorithm
          *
          * @param[in] confAlgo - unique pointer to confidentiality algorithm
@@ -226,7 +226,7 @@
             lastTime = std::chrono::steady_clock::now();
         }
 
-        /*
+        /**
          * @brief Session Active Status
          *
          * Session Active status is decided upon the Session State and the last
@@ -235,12 +235,12 @@
          */
         bool isSessionActive();
 
-        /*
+        /**
          * @brief Session's Current Privilege Level
          */
         Privilege curPrivLevel;
 
-        /*
+        /**
          * @brief Session's Maximum Privilege Level
          */
         Privilege maxPrivLevel = Privilege::CALLBACK;
diff --git a/sessions_manager.hpp b/sessions_manager.hpp
index 792516b..1d842de 100644
--- a/sessions_manager.hpp
+++ b/sessions_manager.hpp
@@ -19,7 +19,7 @@
 constexpr size_t MAX_SESSIONLESS_COUNT = 1;
 constexpr size_t MAX_SESSION_COUNT = 5;
 
-/*
+/**
  * @class Manager
  *
  * Manager class acts a manager for the IPMI sessions and provides interfaces
@@ -41,7 +41,7 @@
         Manager(Manager&&) = default;
         Manager& operator=(Manager&&) = default;
 
-        /*
+        /**
          * @brief Start an IPMI session
          *
          * @param[in] remoteConsoleSessID - Remote Console Session ID mentioned
@@ -59,7 +59,7 @@
                 cipher::integrity::Algorithms intAlgo,
                 cipher::crypt::Algorithms cryptAlgo);
 
-        /*
+        /**
          * @brief Stop IPMI Session
          *
          * @param[in] bmcSessionID - BMC Session ID
@@ -69,7 +69,7 @@
          */
         bool stopSession(SessionID bmcSessionID);
 
-        /*
+        /**
          * @brief Get Session Handle
          *
          * @param[in] sessionID - Session ID
@@ -85,13 +85,13 @@
 
     private:
 
-        /*
+        /**
          * @brief Session Manager keeps the session objects as a sorted
          *        associative container with Session ID as the unique key
          */
         SessionMap sessionsMap;
 
-        /*
+        /**
          * @brief Clean Session Stale Entries
          *
          *  Removes the inactive sessions entries from the Session Map
