diff --git a/include/ibm/locks.hpp b/include/ibm/locks.hpp
index dcd110f..e191959 100644
--- a/include/ibm/locks.hpp
+++ b/include/ibm/locks.hpp
@@ -27,13 +27,13 @@
 using Rc =
     std::pair<bool, std::variant<uint32_t, std::pair<uint32_t, LockRequest>>>;
 using RcRelaseLock = std::pair<bool, std::pair<uint32_t, LockRequest>>;
-using RcGetLocklist = std::pair<
-    bool,
-    std::variant<std::string, std::vector<std::pair<uint32_t, LockRequests>>>>;
+using RcGetLockList =
+    std::variant<std::string, std::vector<std::pair<uint32_t, LockRequests>>>;
 using ListOfTransactionIds = std::vector<uint32_t>;
 using RcAcquireLock = std::pair<bool, std::variant<Rc, std::pair<bool, int>>>;
 using RcReleaseLockApi = std::pair<bool, std::variant<bool, RcRelaseLock>>;
 using SessionFlags = std::pair<SType, SType>;
+using ListOfSessionIds = std::vector<std::string>;
 
 class Lock
 {
@@ -142,6 +142,12 @@
     RcReleaseLockApi releaseLock(const ListOfTransactionIds &,
                                  const SessionFlags &);
 
+    /*
+     * This function implements the logic for getting the list of locks obtained
+     * by a particular management console.
+     */
+    RcGetLockList getLockList(const ListOfSessionIds &);
+
     Lock()
     {
         transactionId = 0;
@@ -149,6 +155,39 @@
 
 } lockObject;
 
+RcGetLockList Lock::getLockList(const ListOfSessionIds &listSessionId)
+{
+
+    std::vector<std::pair<uint32_t, LockRequests>> lockList;
+
+    if (!lockTable.empty())
+    {
+        for (const auto &i : listSessionId)
+        {
+            auto it = lockTable.begin();
+            while (it != lockTable.end())
+            {
+                // Check if session id of this entry matches with session id
+                // given
+                if (std::get<0>(it->second[0]) == i)
+                {
+                    BMCWEB_LOG_DEBUG << "Session id is found in the locktable";
+
+                    // Push the whole lock record into a vector for returning
+                    // the json
+                    lockList.push_back(std::make_pair(it->first, it->second));
+                }
+                // Go to next entry in map
+                it++;
+            }
+        }
+    }
+    // we may have found at least one entry with the given session id
+    // return the json list of lock records pertaining to the given
+    // session id, or send an empty list if lock table is empty
+    return lockList;
+}
+
 RcReleaseLockApi Lock::releaseLock(const ListOfTransactionIds &p,
                                    const SessionFlags &ids)
 {
