diff --git a/Makefile.am b/Makefile.am
index 8d6dda1..42cc4d8 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,5 +1,22 @@
-sbin_PROGRAMS = netman_watch_dns
+sbin_PROGRAMS = netman_watch_dns phosphor-network-manager
+
 
 netman_watch_dns_SOURCES = netman_watch_dns.c
 netman_watch_dns_LDFLAGS = $(SYSTEMD_LIBS)
 netman_watch_dns_CFLAGS = $(SYSTEMD_CFLAGS)
+
+noinst_HEADERS = \
+		ethernet_interface.hpp
+
+phosphor_network_manager_SOURCES = \
+		network_manager_main.cpp
+
+phosphor_network_manager_LDFLAGS = \
+		$(SYSTEMD_LIBS) \
+		$(SDBUSPLUS_LIBS) \
+		$(PHOSPHOR_DBUS_INTERFACES_LIBS)
+
+phosphor_network_manager_CXXFLAGS = \
+		$(SYSTEMD_CFLAGS) \
+		$(SDBUSPLUS_CFLAGS) \
+		$(PHOSPHOR_DBUS_INTERFACES_CFLAGS)
diff --git a/configure.ac b/configure.ac
index 4b943c9..56a430c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,21 +1,41 @@
 # Initializaion
 AC_PREREQ([2.69])
 AC_INIT([phosphor-networkd], [1.0], [https://github.com/openbmc/phosphor-networkd/issues])
+AC_LANG([C++])
 AC_CONFIG_HEADERS([config.h])
 AM_INIT_AUTOMAKE([subdir-objects -Wall -Werror foreign dist-xz])
 AM_SILENT_RULES([yes])
 
+
+# Checks for typedefs, structures, and compiler characteristics.
+AX_CXX_COMPILE_STDCXX_14([noext])
+AX_APPEND_COMPILE_FLAGS([-fpic -Wall -Werror], [CXXFLAGS])
+
 # Checks for programs.
+AC_PROG_CXX
 AC_PROG_CC
 AM_PROG_AR
 AC_PROG_INSTALL
 AC_PROG_MAKE_SET
 
+# Surpress the --with-libtool-sysroot error
+LT_INIT
+
 # Checks for libraries.
 PKG_CHECK_MODULES([SYSTEMD], [libsystemd >= 221])
 
+PKG_CHECK_MODULES([SDBUSPLUS], [sdbusplus],,\
+AC_MSG_ERROR(["Requires sdbusplus package."]))
+
+PKG_CHECK_MODULES([PHOSPHOR_LOGGING], [phosphor-logging],,\
+AC_MSG_ERROR(["Requires phosphor-logging package."]))
+
 # Checks for header files.
-AC_CHECK_HEADER(systemd/sd-bus.h, ,[AC_MSG_ERROR([Could not find systemd/sd-bus.h...systemd development package required])])
+AC_CHECK_HEADER(systemd/sd-bus.h, ,\
+[AC_MSG_ERROR([Could not find systemd/sd-bus.h...systemd development package required])])
+
+AX_PKG_CHECK_MODULES([PHOSPHOR_DBUS_INTERFACES], [], [phosphor-dbus-interfaces],\
+[], [AC_MSG_ERROR(["phosphor-dbus-interfaces required and not found."])])
 
 # Checks for typedefs, structures, and compiler characteristics.
 AX_APPEND_COMPILE_FLAGS([-Wall -Werror -Wno-unused-result], [CFLAGS])
@@ -23,6 +43,7 @@
 # Checks for library functions.
 LT_INIT # Removes 'unrecognized options: --with-libtool-sysroot'
 
+
 # Check/set gtest specific functions.
 AX_PTHREAD([GTEST_CPPFLAGS="-DGTEST_HAS_PTHREAD=1"],[GTEST_CPPFLAGS="-GTEST_HAS_PTHREAD=0"])
 AC_SUBST(GTEST_CPPFLAGS)
@@ -45,6 +66,14 @@
     AC_SUBST([OESDK_TESTCASE_FLAGS], [$testcase_flags])
 )
 
+AC_ARG_VAR(BUSNAME_NETWORK, [The Dbus busname to own])
+AS_IF([test "x$BUSNAME_NETWORK" == "x"], [BUSNAME_NETWORK="xyz.openbmc_project.Network"])
+AC_DEFINE_UNQUOTED([BUSNAME_NETWORK], ["$BUSNAME_NETWORK"], [The DBus busname to own])
+
+AC_ARG_VAR(OBJ_NETWORK, [The network manager DBus object path])
+AS_IF([test "x$OBJ_NETWORK" == "x"], [OBJ_NETWORK="/xyz/openbmc_project/network"])
+AC_DEFINE_UNQUOTED([OBJ_NETWORK], ["$OBJ_NETWORK"], [The network manager DBus object path])
+
 # Create configured output.
 AC_CONFIG_FILES([Makefile])
 AC_OUTPUT
diff --git a/ethernet_interface.hpp b/ethernet_interface.hpp
new file mode 100644
index 0000000..5c66834
--- /dev/null
+++ b/ethernet_interface.hpp
@@ -0,0 +1,77 @@
+#pragma once
+
+#include "xyz/openbmc_project/Network/EthernetInterface/server.hpp"
+
+#include <sdbusplus/bus.hpp>
+#include <sdbusplus/server/object.hpp>
+
+#include <string>
+
+namespace phosphor
+{
+namespace network
+{
+namespace details
+{
+
+template <typename T>
+using ServerObject = typename sdbusplus::server::object::object<T>;
+
+using EthernetIface =
+    sdbusplus::server::object::object<
+    sdbusplus::xyz::openbmc_project::Network::server::EthernetInterface>;
+
+} // namespace details
+
+using LinkSpeed = uint16_t;
+using DuplexMode = uint8_t;
+using Autoneg = uint8_t;
+using InterfaceInfo = std::tuple<LinkSpeed, DuplexMode, Autoneg>;
+
+
+/** @class EthernetInterface
+ *  @brief OpenBMC Ethernet Interface implementation.
+ *  @details A concrete implementation for the
+ *  xyz.openbmc_project.Network.EthernetInterface DBus API.
+ */
+class EthernetInterface : public details::EthernetIface
+{
+    public:
+        EthernetInterface() = delete;
+        EthernetInterface(const EthernetInterface&) = delete;
+        EthernetInterface& operator=(const EthernetInterface&) = delete;
+        EthernetInterface(EthernetInterface&&) = delete;
+        EthernetInterface& operator=(EthernetInterface&&) = delete;
+        virtual ~EthernetInterface() = default;
+
+        /** @brief Constructor to put object onto bus at a dbus path.
+         *  @param[in] bus - Bus to attach to.
+         *  @param[in] objPath - Path to attach at.
+         *  @param[in] intfName - name of the ethernet interface.
+         *  @param[in] dhcpEnabled - is dhcp enabled(true/false).
+         */
+        EthernetInterface(sdbusplus::bus::bus& bus,
+                          const char* objPath,
+                          const std::string& intfName,
+                          bool dhcpEnabled);
+
+
+
+    private:
+
+        /** @brief get the info of the ethernet interface.
+         *  @return tuple having the link speed,autonegotiation,duplexmode .
+         */
+
+        InterfaceInfo getInterfaceInfo() const;
+
+        /** @brief get the mac address of the interface.
+         *  @return macaddress on success
+         */
+
+        std::string getMACAddress() const;
+
+};
+
+} // namespace network
+} // namespace phosphor
diff --git a/network_manager_main.cpp b/network_manager_main.cpp
new file mode 100644
index 0000000..c63a8df
--- /dev/null
+++ b/network_manager_main.cpp
@@ -0,0 +1,5 @@
+
+int main(int argc, char *argv[])
+{
+    return 0;
+}
