diff options
Diffstat (limited to 'meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network/0005-Enable-conditional-use-of-ETHTOOL-features-in-the-NI.patch')
-rw-r--r-- | meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network/0005-Enable-conditional-use-of-ETHTOOL-features-in-the-NI.patch | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network/0005-Enable-conditional-use-of-ETHTOOL-features-in-the-NI.patch b/meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network/0005-Enable-conditional-use-of-ETHTOOL-features-in-the-NI.patch new file mode 100644 index 000000000..c05088990 --- /dev/null +++ b/meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network/0005-Enable-conditional-use-of-ETHTOOL-features-in-the-NI.patch @@ -0,0 +1,120 @@ +From 6d3d50c506e2d6b4982ff6040af9fd61edaa8beb Mon Sep 17 00:00:00 2001 +From: Johnathan Mantey <johnathanx.mantey@intel.com> +Date: Fri, 24 Jan 2020 13:30:39 -0800 +Subject: [PATCH] Enable conditional use of ETHTOOL features in the NIC driver + +The retrieval of the NIC speed, duplex, and autonegotiation +capabilities using the ETHTOOL driver extensions is not supported in +every NIC. + +Depending on the driver, the use of the ETHTOOL_GSET command may +result in undesirable messages being printed by the kernel. In order +to avoid these kernel messages a compile time switch is added. By +default the switch disables the use of the ETHTOOL features. Enable +the ETHTOOL feature by adding: + EXTRA_OECONF_append = " --enable-nic-ethtool=yes" +to the phosphor-network bbappend file. + +Tested: +Compiled the source without changing the bbappend file. The code +compiled as is, and after code was added that would cause a compile +time failure. +Loaded the code, and performed a Redfish read of the NIC. The +SpeedMbps field was confirmed to be set to 0. + +Enabled compiling the code by adding the EXTRA_OECONF entry to the +bbappend file. The code compiled as is, and failed to compile after +adding invalid code to the protected blocks. +Loaded the code, and performed a Redfish read of the NIC. The +SpeedMbps reported the correct link speed. + +Change-Id: If03e7d473d439ebb4a01b5d3f45e37ede2a5a84f +Signed-off-by: Johnathan Mantey <johnathanx.mantey@intel.com> +--- + Makefile.am | 3 +++ + configure.ac | 10 ++++++++++ + ethernet_interface.cpp | 13 ++++++++----- + 3 files changed, 21 insertions(+), 5 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index 2a54797..ff252fc 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -99,6 +99,9 @@ phosphor_network_manager_CXXFLAGS = \ + $(PHOSPHOR_LOGGING_CFLAGS) \ + -DBOOST_ASIO_DISABLE_THREADS \ + -flto ++if FEATURE_NIC_ETHTOOL ++phosphor_network_manager_CXXFLAGS += -DNIC_SUPPORTS_ETHTOOL ++endif + + xyz/openbmc_project/Network/VLAN/Create/server.cpp: xyz/openbmc_project/Network/VLAN/Create.interface.yaml xyz/openbmc_project/Network/VLAN/Create/server.hpp + @mkdir -p `dirname $@` +diff --git a/configure.ac b/configure.ac +index 00b23bc..fed3e09 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -114,6 +114,16 @@ AC_SUBST(DEFAULT_BUSNAME, ["$DEFAULT_BUSNAME"]) + AC_ARG_VAR(SYSTEMD_TARGET, "Target for starting this service") + AS_IF([test "x$SYSTEMD_TARGET" == "x"], [SYSTEMD_TARGET="multi-user.target"]) + ++AC_ARG_ENABLE([nic_ethtool], ++ [ --enable-nic-ethtool Enable/disable the use of ETHTOOL features in the NIC driver], ++ [case "${enableval}" in ++ yes) nic_ethtool=true ;; ++ no) nic_ethtool=false ;; ++ *) AC_MSG_ERROR([bad value ${nic_ethtool} for --enable-nic-ethtool]) ;; ++ esac],[nic_ethtool=false] ++ ) ++AM_CONDITIONAL([FEATURE_NIC_ETHTOOL], [test x$nic_ethtool = xtrue]) ++ + # Create configured output. + AC_CONFIG_FILES([Makefile test/Makefile]) + AC_CONFIG_FILES([xyz.openbmc_project.Network.service]) +diff --git a/ethernet_interface.cpp b/ethernet_interface.cpp +index 7f81003..ba6195e 100644 +--- a/ethernet_interface.cpp ++++ b/ethernet_interface.cpp +@@ -57,10 +57,12 @@ EthernetInterface::EthernetInterface(sdbusplus::bus::bus& bus, + MacAddressIntf::mACAddress(getMACAddress(intfName)); + EthernetInterfaceIntf::nTPServers(getNTPServersFromConf()); + EthernetInterfaceIntf::nameservers(getNameServerFromConf()); ++#if NIC_SUPPORTS_ETHTOOL + InterfaceInfo ifInfo = EthernetInterface::getInterfaceInfo(); + + EthernetInterfaceIntf::autoNeg(std::get<2>(ifInfo)); + EthernetInterfaceIntf::speed(std::get<0>(ifInfo)); ++#endif + getChannelPrivilege(intfName); + + // Emit deferred signal. +@@ -283,13 +285,13 @@ ObjectPath EthernetInterface::neighbor(std::string iPAddress, + return objectPath; + } + ++#if NIC_SUPPORTS_ETHTOOL + /* +-Note: We don't have support for ethtool now +-will enable this code once we bring the ethtool +-in the image. +-TODO: https://github.com/openbmc/openbmc/issues/1484 ++ Enable this code if your NIC driver supports the ETHTOOL features. ++ Do this by adding the following to your phosphor-network*.bbappend file. ++ EXTRA_OECONF_append = " --enable-nic-ethtool=yes" ++ The default compile mode is to omit getInterfaceInfo() + */ +- + InterfaceInfo EthernetInterface::getInterfaceInfo() const + { + int sock{-1}; +@@ -330,6 +332,7 @@ InterfaceInfo EthernetInterface::getInterfaceInfo() const + } + return std::make_tuple(speed, duplex, autoneg); + } ++#endif + + /** @brief get the mac address of the interface. + * @return macaddress on success +-- +2.24.1 + |