diff --git a/redfish-core/lib/ethernet.hpp b/redfish-core/lib/ethernet.hpp
index 71ad624..0356b0c 100644
--- a/redfish-core/lib/ethernet.hpp
+++ b/redfish-core/lib/ethernet.hpp
@@ -81,6 +81,7 @@
     bool DHCPEnabled;
     std::string hostname;
     std::string default_gateway;
+    std::string ipv6_default_gateway;
     std::string mac_address;
     std::vector<std::uint32_t> vlan_id;
     std::vector<std::string> nameservers;
@@ -270,6 +271,16 @@
                             ethData.default_gateway = *defaultGateway;
                         }
                     }
+                    else if (propertyPair.first == "DefaultGateway6")
+                    {
+                        const std::string *defaultGateway6 =
+                            sdbusplus::message::variant_ns::get_if<std::string>(
+                                &propertyPair.second);
+                        if (defaultGateway6 != nullptr)
+                        {
+                            ethData.ipv6_default_gateway = *defaultGateway6;
+                        }
+                    }
                 }
             }
         }
@@ -1245,6 +1256,7 @@
                                       {"Gateway", gatewayStr}});
             }
         }
+        json_response["IPv6DefaultGateway"] = ethData.ipv6_default_gateway;
     }
 
     /**
@@ -1301,6 +1313,7 @@
 
         std::optional<std::string> hostname;
         std::optional<std::string> macAddress;
+        std::optional<std::string> ipv6DefaultGateway;
         std::optional<nlohmann::json> ipv4Addresses;
         std::optional<nlohmann::json> ipv6Addresses;
         std::optional<std::vector<std::string>> staticNameServers;
@@ -1308,7 +1321,8 @@
         if (!json_util::readJson(
                 req, res, "HostName", hostname, "IPv4Addresses", ipv4Addresses,
                 "IPv6Addresses", ipv6Addresses, "MACAddress", macAddress,
-                "StaticNameServers", staticNameServers))
+                "StaticNameServers", staticNameServers, "IPv6DefaultGateway",
+                ipv6DefaultGateway))
         {
             return;
         }
@@ -1321,6 +1335,7 @@
              macAddress = std::move(macAddress),
              ipv4Addresses = std::move(ipv4Addresses),
              ipv6Addresses = std::move(ipv6Addresses),
+             ipv6DefaultGateway = std::move(ipv6DefaultGateway),
              staticNameServers = std::move(staticNameServers)](
                 const bool &success, const EthernetInterfaceData &ethData,
                 const boost::container::flat_set<IPv4AddressData> &ipv4Data) {
@@ -1371,6 +1386,12 @@
                     handleStaticNameServersPatch(iface_id, *staticNameServers,
                                                  asyncResp);
                 }
+
+                if (ipv6DefaultGateway)
+                {
+                    messages::propertyNotWritable(asyncResp->res,
+                                                  "IPv6DefaultGateway");
+                }
             });
     }
 };
