diff --git a/src/ncsi_util.cpp b/src/ncsi_util.cpp
index 839c80d..c3d3794 100644
--- a/src/ncsi_util.cpp
+++ b/src/ncsi_util.cpp
@@ -9,8 +9,6 @@
 #include <stdplus/numeric/str.hpp>
 #include <stdplus/str/buf.hpp>
 
-#include <iomanip>
-#include <iostream>
 #include <vector>
 
 namespace phosphor
@@ -344,7 +342,29 @@
         return ret;
     }
 
-    if (cmd.operation != DEFAULT_VALUE)
+    if ((cmd.ncsi_cmd == ncsi_nl_commands::NCSI_CMD_SET_PACKAGE_MASK) ||
+        (cmd.ncsi_cmd == ncsi_nl_commands::NCSI_CMD_SET_CHANNEL_MASK))
+    {
+        if (cmd.payload.size() != sizeof(unsigned int))
+        {
+            lg2::error("Package/Channel mask must be 32-bits");
+            return -EINVAL;
+        }
+        int maskAttr =
+            cmd.ncsi_cmd == ncsi_nl_commands::NCSI_CMD_SET_PACKAGE_MASK
+                ? NCSI_ATTR_PACKAGE_MASK
+                : NCSI_ATTR_CHANNEL_MASK;
+        ret = nla_put_u32(
+            msg.get(), maskAttr,
+            *(reinterpret_cast<const unsigned int*>(cmd.payload.data())));
+        if (ret < 0)
+        {
+            lg2::error("Failed to set the mask attribute, RC : {RC}", "RC",
+                       ret);
+            return ret;
+        }
+    }
+    else if (cmd.ncsi_cmd == ncsi_nl_commands::NCSI_CMD_SEND_CMD)
     {
         std::vector<unsigned char> pl(
             sizeof(NCSIPacketHeader) + cmd.payload.size());
@@ -457,6 +477,36 @@
     }
 }
 
+int setPackageMask(int ifindex, unsigned int mask)
+{
+    lg2::debug(
+        "Set Package Mask , INTERFACE_INDEX: {INTERFACE_INDEX} MASK: {MASK}",
+        "INTERFACE_INDEX", lg2::hex, ifindex, "MASK", lg2::hex, mask);
+    auto payload = std::span<const unsigned char>(
+        reinterpret_cast<const unsigned char*>(&mask),
+        reinterpret_cast<const unsigned char*>(&mask) + sizeof(decltype(mask)));
+    return internal::applyCmd(
+        ifindex, internal::Command(ncsi_nl_commands::NCSI_CMD_SET_PACKAGE_MASK,
+                                   0, payload));
+}
+
+int setChannelMask(int ifindex, int package, unsigned int mask)
+{
+    lg2::debug(
+        "Set Channel Mask , INTERFACE_INDEX: {INTERFACE_INDEX}, PACKAGE : {PACKAGE} MASK: {MASK}",
+        "INTERFACE_INDEX", lg2::hex, ifindex, "PACKAGE", lg2::hex, package,
+        "MASK", lg2::hex, mask);
+    auto payload = std::span<const unsigned char>(
+        reinterpret_cast<const unsigned char*>(&mask),
+        reinterpret_cast<const unsigned char*>(&mask) + sizeof(decltype(mask)));
+    return internal::applyCmd(
+        ifindex,
+        internal::Command(ncsi_nl_commands::NCSI_CMD_SET_CHANNEL_MASK, 0,
+                          payload),
+        package);
+    return 0;
+}
+
 } // namespace ncsi
 } // namespace network
 } // namespace phosphor
