diff --git a/ipmi-whitelist.conf b/ipmi-whitelist.conf
index 17bf8bb..67bf9f2 100644
--- a/ipmi-whitelist.conf
+++ b/ipmi-whitelist.conf
@@ -47,13 +47,13 @@
 0x06:0x22:0xff7f   //<App>:<Reset Watchdog Timer>
 0x06:0x24:0xff7f   //<App>:<Set Watchdog Timer>
 0x06:0x25:0xff7f   //<App>:<Get Watchdog Timer>
-0x06:0x2e:0x7f7f   //<App>:<Set BMC Global Enables>
+0x06:0x2e:0x0000   //<App>:<Set BMC Global Enables>
 0x06:0x2f:0xffff   //<App>:<Get BMC Global Enables>
-0x06:0x30:0xffff   //<App>:<Clear Message Flags>
-0x06:0x31:0xffff   //<App>:<Get Message Flags>
-0x06:0x33:0xff7f   //<App>:<Get Message>
+0x06:0x30:0x8080   //<App>:<Clear Message Flags>
+0x06:0x31:0x8080   //<App>:<Get Message Flags>
+0x06:0x33:0x8000   //<App>:<Get Message>
 0x06:0x34:0x7f7f   //<App>:<Send Message>
-0x06:0x35:0xffff   //<App>:<Read Event Message Buffer>
+0x06:0x35:0x8080   //<App>:<Read Event Message Buffer>
 0x06:0x37:0xff7f   //<App>:<Get System GUID>
 0x06:0x38:0xff7f   //<App>:<Get Channel Authentication Capability>
 0x06:0x39:0xff7f   //<App>:<Get Session Challenge>
diff --git a/src/bridgingcommands.cpp b/src/bridgingcommands.cpp
index 2f2c3fa..b44edc3 100644
--- a/src/bridgingcommands.cpp
+++ b/src/bridgingcommands.cpp
@@ -23,6 +23,7 @@
 #include <sdbusplus/bus/match.hpp>
 #include <sdbusplus/message.hpp>
 #include <storagecommands.hpp>
+#include <user_channel/channel_layer.hpp>
 
 #include <bitset>
 #include <cstring>
@@ -468,8 +469,30 @@
 ipmi::RspType<uint8_t,             // channelNumber
               std::vector<uint8_t> // messageData
               >
-    ipmiAppGetMessage()
+    ipmiAppGetMessage(ipmi::Context::ptr ctx)
 {
+    ipmi::ChannelInfo chInfo;
+
+    try
+    {
+        getChannelInfo(ctx->channel, chInfo);
+    }
+    catch (sdbusplus::exception_t& e)
+    {
+        phosphor::logging::log<phosphor::logging::level::ERR>(
+            "ipmiAppGetMessage: Failed to get Channel Info",
+            phosphor::logging::entry("MSG: %s", e.description()));
+        return ipmi::responseUnspecifiedError();
+    }
+    if (chInfo.mediumType !=
+        static_cast<uint8_t>(ipmi::EChannelMediumType::systemInterface))
+    {
+        phosphor::logging::log<phosphor::logging::level::ERR>(
+            "ipmiAppGetMessage: Error - supported only in System(SMS) "
+            "interface");
+        return ipmi::responseCommandNotAvailable();
+    }
+
     uint8_t channelData = 0;
     std::vector<uint8_t> res(ipmbMaxFrameLength);
     size_t dataLength = 0;
@@ -513,8 +536,30 @@
 
 @return IPMI completion code plus Flags as response data on success.
 **/
-ipmi::RspType<std::bitset<8>> ipmiAppGetMessageFlags()
+ipmi::RspType<std::bitset<8>> ipmiAppGetMessageFlags(ipmi::Context::ptr ctx)
 {
+    ipmi::ChannelInfo chInfo;
+
+    try
+    {
+        getChannelInfo(ctx->channel, chInfo);
+    }
+    catch (sdbusplus::exception_t& e)
+    {
+        phosphor::logging::log<phosphor::logging::level::ERR>(
+            "ipmiAppGetMessageFlags: Failed to get Channel Info",
+            phosphor::logging::entry("MSG: %s", e.description()));
+        return ipmi::responseUnspecifiedError();
+    }
+    if (chInfo.mediumType !=
+        static_cast<uint8_t>(ipmi::EChannelMediumType::systemInterface))
+    {
+        phosphor::logging::log<phosphor::logging::level::ERR>(
+            "ipmiAppGetMessageFlags: Error - supported only in System(SMS) "
+            "interface");
+        return ipmi::responseCommandNotAvailable();
+    }
+
     std::bitset<8> getMsgFlagsRes;
 
     // set event message buffer bit
@@ -570,11 +615,34 @@
 
  *  @return IPMI completion code on success
  */
-ipmi::RspType<> ipmiAppClearMessageFlags(bool receiveMessage,
+ipmi::RspType<> ipmiAppClearMessageFlags(ipmi::Context::ptr ctx,
+                                         bool receiveMessage,
                                          bool eventMsgBufFull, bool reserved2,
                                          bool watchdogTimeout, bool reserved1,
                                          bool oem0, bool oem1, bool oem2)
 {
+    ipmi::ChannelInfo chInfo;
+
+    try
+    {
+        getChannelInfo(ctx->channel, chInfo);
+    }
+    catch (sdbusplus::exception_t& e)
+    {
+        phosphor::logging::log<phosphor::logging::level::ERR>(
+            "ipmiAppClearMessageFlags: Failed to get Channel Info",
+            phosphor::logging::entry("MSG: %s", e.description()));
+        return ipmi::responseUnspecifiedError();
+    }
+    if (chInfo.mediumType !=
+        static_cast<uint8_t>(ipmi::EChannelMediumType::systemInterface))
+    {
+        phosphor::logging::log<phosphor::logging::level::ERR>(
+            "ipmiAppClearMessageFlags: Error - supported only in System(SMS) "
+            "interface");
+        return ipmi::responseCommandNotAvailable();
+    }
+
     if (reserved1 || reserved2)
     {
         return ipmi::responseInvalidFieldRequest();
@@ -640,8 +708,30 @@
               uint8_t,  // Record Type
               std::variant<systemEventType, oemTsEventType,
                            oemEventType>> // Record Content
-    ipmiAppReadEventMessageBuffer()
+    ipmiAppReadEventMessageBuffer(ipmi::Context::ptr ctx)
 {
+    ipmi::ChannelInfo chInfo;
+
+    try
+    {
+        getChannelInfo(ctx->channel, chInfo);
+    }
+    catch (sdbusplus::exception_t& e)
+    {
+        phosphor::logging::log<phosphor::logging::level::ERR>(
+            "ipmiAppReadEventMessageBuffer: Failed to get Channel Info",
+            phosphor::logging::entry("MSG: %s", e.description()));
+        return ipmi::responseUnspecifiedError();
+    }
+    if (chInfo.mediumType !=
+        static_cast<uint8_t>(ipmi::EChannelMediumType::systemInterface))
+    {
+        phosphor::logging::log<phosphor::logging::level::ERR>(
+            "ipmiAppReadEventMessageBuffer: Error - supported only in "
+            "System(SMS) interface");
+        return ipmi::responseCommandNotAvailable();
+    }
+
     uint16_t recordId =
         static_cast<uint16_t>(0x5555); // recordId: 0x55 << 8 | 0x55
     uint16_t generatorId =
