diff --git a/src/ibm/hypervisor-network-mgr-src/hyp_network_manager.cpp b/src/ibm/hypervisor-network-mgr-src/hyp_network_manager.cpp
index ad0b8b4..4923cac 100644
--- a/src/ibm/hypervisor-network-mgr-src/hyp_network_manager.cpp
+++ b/src/ibm/hypervisor-network-mgr-src/hyp_network_manager.cpp
@@ -82,6 +82,19 @@
     }
 }
 
+void HypNetworkMgr::setDefaultBIOSTableAttrsOnIntf(const std::string& intf)
+{
+    biosTableAttrs.emplace("vmi_" + intf + "_ipv4_ipaddr", "0.0.0.0");
+    biosTableAttrs.emplace("vmi_" + intf + "_ipv4_gateway", "0.0.0.0");
+    biosTableAttrs.emplace("vmi_" + intf + "_ipv4_prefix_length", 0);
+    biosTableAttrs.emplace("vmi_" + intf + "_ipv4_method", "IPv4Static");
+}
+
+void HypNetworkMgr::setDefaultHostnameInBIOSTableAttrs()
+{
+    biosTableAttrs.emplace("vmi_hostname", "");
+}
+
 void HypNetworkMgr::setBIOSTableAttrs()
 {
     try
@@ -176,10 +189,6 @@
                         &std::get<biosBaseCurrValue>(item.second));
                     if (currValue != nullptr)
                     {
-                        if (item.first == "vmi_if_count")
-                        {
-                            intfCount = *currValue;
-                        }
                         biosTableAttrs.emplace(item.first, *currValue);
                     }
                 }
@@ -210,11 +219,6 @@
     }
 }
 
-uint16_t HypNetworkMgr::getIntfCount()
-{
-    return intfCount;
-}
-
 biosTableType HypNetworkMgr::getBIOSTableAttrs()
 {
     return biosTableAttrs;
@@ -224,21 +228,17 @@
 {
     setBIOSTableAttrs();
 
-    if (intfCount == 1)
+    if ((getBIOSTableAttrs()).size() == 0)
     {
-        // TODO: create eth0 object
-        log<level::INFO>("Create eth0 object");
+        setDefaultHostnameInBIOSTableAttrs();
     }
-    else if (intfCount == 2)
-    {
-        // TODO: create eth0 and eth1 objects
-        log<level::INFO>("Create eth0 and eth1 objects");
-    }
-    else
-    {
-        log<level::ERR>("More than 2 Interfaces");
-        return;
-    }
+
+    // The hypervisor can support maximum of
+    // 2 ethernet interfaces. Both eth0/1 objects are
+    // created during init time to support the static
+    // network configurations on the both.
+    // create eth0 and eth1 objects
+    log<level::INFO>("Create eth0 and eth1 objects");
 }
 
 } // namespace network
diff --git a/src/ibm/hypervisor-network-mgr-src/hyp_network_manager.hpp b/src/ibm/hypervisor-network-mgr-src/hyp_network_manager.hpp
index fa56d96..a1b4d9a 100644
--- a/src/ibm/hypervisor-network-mgr-src/hyp_network_manager.hpp
+++ b/src/ibm/hypervisor-network-mgr-src/hyp_network_manager.hpp
@@ -67,11 +67,7 @@
     HypNetworkMgr(sdbusplus::bus::bus& bus, sdeventplus::Event& event,
                   const char* path) :
         bus(bus),
-        event(event), objectPath(path)
-    {
-        // Create the hypervisor eth interface objects
-        createIfObjects();
-    };
+        event(event), objectPath(path){};
 
     /** @brief Get the BaseBiosTable attributes
      *
@@ -91,7 +87,24 @@
                           std::variant<std::string, int64_t> attrValue,
                           std::string attrType);
 
-  private:
+    /** @brief Method to set all the interface 0 attributes
+     *         to its default value in biosTableAttrs data member
+     */
+    void setDefaultBIOSTableAttrsOnIntf(const std::string& intf);
+
+    /** @brief Method to set the hostname attribute
+     *         to its default value in biosTableAttrs
+     *         data member
+     */
+    void setDefaultHostnameInBIOSTableAttrs();
+
+    /** @brief Fetch the interface and the ipaddress details
+     *         from the Bios table and create the hyp ethernet interfaces
+     *         dbus object.
+     */
+    void createIfObjects();
+
+  protected:
     /**
      * @brief get Dbus Prop
      *
@@ -104,18 +117,6 @@
     auto getDBusProp(const std::string& objectName,
                      const std::string& interface, const std::string& kw);
 
-    /** @brief Fetch the interface and the ipaddress details
-     *         from the Bios table and create the hyp ethernet interfaces
-     *         dbus object.
-     */
-    void createIfObjects();
-
-    /** @brief Get the hypervisor eth interfaces count
-     *
-     *  @return number of interfaces
-     */
-    uint16_t getIntfCount();
-
     /** @brief Setter method for biosTableAttrs data member
      *         GET operation on the BIOS table to
      *         read all the hyp attrbutes (name, value pair)
@@ -137,9 +138,6 @@
      */
     std::map<std::string, std::shared_ptr<HypEthInterface>> interfaces;
 
-    /** @brief interface count */
-    uint16_t intfCount;
-
     /** @brief map of bios table attrs and values */
     std::map<biosAttrName, biosAttrCurrValue> biosTableAttrs;
 };
diff --git a/src/ibm/hypervisor-network-mgr-src/hyp_network_manager_main.cpp b/src/ibm/hypervisor-network-mgr-src/hyp_network_manager_main.cpp
index ddb515b..d0d7b7d 100644
--- a/src/ibm/hypervisor-network-mgr-src/hyp_network_manager_main.cpp
+++ b/src/ibm/hypervisor-network-mgr-src/hyp_network_manager_main.cpp
@@ -24,6 +24,9 @@
     phosphor::network::HypNetworkMgr manager(bus, event,
                                              DEFAULT_HYP_NW_OBJPATH);
 
+    // Create the hypervisor eth interface objects
+    manager.createIfObjects();
+
     bus.request_name(HYP_DEFAULT_NETWORK_BUSNAME);
 
     event.loop();
