diff options
-rw-r--r-- | Makefile.am | 19 | ||||
-rw-r--r-- | configure.ac | 31 | ||||
-rw-r--r-- | ethernet_interface.hpp | 77 | ||||
-rw-r--r-- | network_manager_main.cpp | 5 |
4 files changed, 130 insertions, 2 deletions
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 @@ AX_APPEND_COMPILE_FLAGS([-Wall -Werror -Wno-unused-result], [CFLAGS]) # 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 @@ AS_IF([test "x$enable_oe_sdk" == "xyes"], 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; +} |