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;
+}