diff --git a/redfish-core/lib/network_protocol.hpp b/redfish-core/lib/network_protocol.hpp
index 4fd606a..d070413 100644
--- a/redfish-core/lib/network_protocol.hpp
+++ b/redfish-core/lib/network_protocol.hpp
@@ -33,6 +33,7 @@
 #include <optional>
 #include <string_view>
 #include <variant>
+#include <vector>
 
 namespace redfish
 {
@@ -53,7 +54,8 @@
 
 inline void extractNTPServersAndDomainNamesData(
     const dbus::utility::ManagedObjectType& dbusData,
-    std::vector<std::string>& ntpData, std::vector<std::string>& dnData)
+    std::vector<std::string>& ntpData, std::vector<std::string>& dynamicNtpData,
+    std::vector<std::string>& dnData)
 {
     for (const auto& obj : dbusData)
     {
@@ -78,6 +80,16 @@
                                        ntpServers->end());
                     }
                 }
+                else if (propertyPair.first == "NTPServers")
+                {
+                    const std::vector<std::string>* dynamicNtpServers =
+                        std::get_if<std::vector<std::string>>(
+                            &propertyPair.second);
+                    if (dynamicNtpServers != nullptr)
+                    {
+                        dynamicNtpData = *dynamicNtpServers;
+                    }
+                }
                 else if (propertyPair.first == "DomainName")
                 {
                     const std::vector<std::string>* domainNames =
@@ -106,18 +118,19 @@
             const boost::system::error_code& ec,
             const dbus::utility::ManagedObjectType& dbusData) {
             std::vector<std::string> ntpServers;
+            std::vector<std::string> dynamicNtpServers;
             std::vector<std::string> domainNames;
 
             if (ec)
             {
-                callback(false, ntpServers, domainNames);
+                callback(false, ntpServers, dynamicNtpServers, domainNames);
                 return;
             }
 
             extractNTPServersAndDomainNamesData(dbusData, ntpServers,
-                                                domainNames);
+                                                dynamicNtpServers, domainNames);
 
-            callback(true, ntpServers, domainNames);
+            callback(true, ntpServers, dynamicNtpServers, domainNames);
         });
 }
 
@@ -166,7 +179,7 @@
         boost::beast::http::field::link,
         "</redfish/v1/JsonSchemas/ManagerNetworkProtocol/NetworkProtocol.json>; rel=describedby");
     asyncResp->res.jsonValue["@odata.type"] =
-        "#ManagerNetworkProtocol.v1_5_0.ManagerNetworkProtocol";
+        "#ManagerNetworkProtocol.v1_9_0.ManagerNetworkProtocol";
     asyncResp->res.jsonValue["@odata.id"] =
         boost::urls::format("/redfish/v1/Managers/{}/NetworkProtocol",
                             BMCWEB_REDFISH_MANAGER_URI_NAME);
@@ -204,6 +217,7 @@
     getEthernetIfaceData([hostName, asyncResp](
                              const bool& success,
                              const std::vector<std::string>& ntpServers,
+                             const std::vector<std::string>& dynamicNtpServers,
                              const std::vector<std::string>& domainNames) {
         if (!success)
         {
@@ -212,6 +226,8 @@
             return;
         }
         asyncResp->res.jsonValue["NTP"]["NTPServers"] = ntpServers;
+        asyncResp->res.jsonValue["NTP"]["NetworkSuppliedServers"] =
+            dynamicNtpServers;
         if (!hostName.empty())
         {
             std::string fqdn = hostName;
@@ -520,6 +536,7 @@
         getEthernetIfaceData(
             [asyncResp, ntpServerObjects](
                 const bool success, std::vector<std::string>& currentNtpServers,
+                const std::vector<std::string>& /*dynamicNtpServers*/,
                 const std::vector<std::string>& /*domainNames*/) {
                 if (!success)
                 {
