diff --git a/src/ibm/hypervisor-network-mgr-src/hyp_ethernet_interface.cpp b/src/ibm/hypervisor-network-mgr-src/hyp_ethernet_interface.cpp
index 84c9598..8f5aac9 100644
--- a/src/ibm/hypervisor-network-mgr-src/hyp_ethernet_interface.cpp
+++ b/src/ibm/hypervisor-network-mgr-src/hyp_ethernet_interface.cpp
@@ -14,5 +14,81 @@
     return manager.getBIOSTableAttrs();
 }
 
+bool HypEthInterface::ipv6AcceptRA(bool value)
+{
+    auto currValue = ipv6AcceptRA();
+    if (currValue != value)
+    {
+        HypEthernetIntf::ipv6AcceptRA(value);
+    }
+    return value;
+}
+
+bool HypEthInterface::dhcp4(bool value)
+{
+    auto currValue = dhcp4();
+    if (currValue != value)
+    {
+        HypEthernetIntf::dhcp4(value);
+    }
+    return value;
+}
+
+bool HypEthInterface::dhcp6(bool value)
+{
+    auto currValue = dhcp6();
+    if (currValue != value)
+    {
+        HypEthernetIntf::dhcp6(value);
+    }
+    return value;
+}
+
+bool HypEthInterface::dhcpIsEnabled(HypIP::Protocol family)
+{
+    switch (family)
+    {
+        case HypIP::Protocol::IPv6:
+            return dhcp6();
+        case HypIP::Protocol::IPv4:
+            return dhcp4();
+    }
+    throw std::logic_error("Unreachable");
+}
+
+HypEthInterface::DHCPConf HypEthInterface::dhcpEnabled(DHCPConf value)
+{
+    auto old4 = HypEthernetIntf::dhcp4();
+    auto new4 = HypEthernetIntf::dhcp4(value == DHCPConf::v4 ||
+                                       value == DHCPConf::v4v6stateless ||
+                                       value == DHCPConf::both);
+    auto old6 = HypEthernetIntf::dhcp6();
+    auto new6 = HypEthernetIntf::dhcp6(value == DHCPConf::v6 ||
+                                       value == DHCPConf::both);
+    auto oldra = HypEthernetIntf::ipv6AcceptRA();
+    auto newra = HypEthernetIntf::ipv6AcceptRA(
+        value == DHCPConf::v6stateless || value == DHCPConf::v4v6stateless ||
+        value == DHCPConf::v6 || value == DHCPConf::both);
+
+    if (old4 != new4 || old6 != new6 || oldra != newra)
+    {
+        HypEthernetIntf::dhcpEnabled(value);
+    }
+    return value;
+}
+
+HypEthInterface::DHCPConf HypEthInterface::dhcpEnabled() const
+{
+    if (dhcp6())
+    {
+        return dhcp4() ? DHCPConf::both : DHCPConf::v6;
+    }
+    else if (dhcp4())
+    {
+        return ipv6AcceptRA() ? DHCPConf::v4v6stateless : DHCPConf::v4;
+    }
+    return ipv6AcceptRA() ? DHCPConf::v6stateless : DHCPConf::none;
+}
+
 } // namespace network
 } // namespace phosphor
diff --git a/src/ibm/hypervisor-network-mgr-src/hyp_ethernet_interface.hpp b/src/ibm/hypervisor-network-mgr-src/hyp_ethernet_interface.hpp
index d2e3b8b..557db96 100644
--- a/src/ibm/hypervisor-network-mgr-src/hyp_ethernet_interface.hpp
+++ b/src/ibm/hypervisor-network-mgr-src/hyp_ethernet_interface.hpp
@@ -77,6 +77,26 @@
      */
     biosTableType getBiosAttrsMap();
 
+    /* @brief Returns the dhcp enabled property
+     * @param[in] protocol - ipv4/ipv6
+     * @return bool - true if dhcpEnabled
+     */
+    bool isDHCPEnabled(HypIP::Protocol protocol);
+
+    /** Set value of DHCPEnabled */
+    HypEthernetIntf::DHCPConf dhcpEnabled() const override;
+    HypEthernetIntf::DHCPConf dhcpEnabled(DHCPConf value) override;
+    using HypEthernetIntf::dhcp4;
+    bool dhcp4(bool value) override;
+    using HypEthernetIntf::dhcp6;
+    bool dhcp6(bool value) override;
+
+    /** @brief check conf file for Router Advertisements
+     *
+     */
+    bool ipv6AcceptRA(bool value) override;
+    using HypEthernetIntf::ipv6AcceptRA;
+
     using HypEthernetIntf::interfaceName;
 
   protected:
@@ -88,6 +108,13 @@
 
     /** @brief Parent of this object */
     HypNetworkMgr& manager;
+
+  private:
+    /** @brief Determines if DHCP is active for the IP::Protocol supplied.
+     *  @param[in] protocol - Either IPv4 or IPv6
+     *  @returns true/false value if DHCP is active for the input protocol
+     */
+    bool dhcpIsEnabled(HypIP::Protocol protocol);
 };
 
 } // namespace network
