Define interfaces of the EthernetInterface

Change-Id: Ibc6030934cdb04eaf603ce730d88d0bedc0a29b3
Signed-off-by: Ratan Gupta <ratagupt@in.ibm.com>
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;
+}