summaryrefslogtreecommitdiff
path: root/meta-openbmc-mods/meta-common/recipes-network
diff options
context:
space:
mode:
authorJason M. Bills <jason.m.bills@linux.intel.com>2020-05-06 01:31:17 +0300
committerJason M. Bills <jason.m.bills@linux.intel.com>2020-05-14 21:54:34 +0300
commiteda2c7c523d858d25fe25052254a7f393767310b (patch)
tree7c14ec3de42b7fc6c86bc3b0f9ecb4b9f21a5d14 /meta-openbmc-mods/meta-common/recipes-network
parent794d26fa53ad7e8cb54a3a5773436b1d8e813f35 (diff)
downloadopenbmc-eda2c7c523d858d25fe25052254a7f393767310b.tar.xz
Update to internal 0.53
Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com>
Diffstat (limited to 'meta-openbmc-mods/meta-common/recipes-network')
-rw-r--r--meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network/0003-Adding-channel-specific-privilege-to-network.patch47
-rw-r--r--meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network/0004-Enhance-DHCP-beyond-just-OFF-and-IPv4-IPv6-enabled.patch504
-rw-r--r--meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network/0005-Enable-conditional-use-of-ETHTOOL-features-in-the-NI.patch120
-rw-r--r--meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network/0009-Enhance-DHCP-beyond-just-OFF-and-IPv4-IPv6-enabled.patch104
-rw-r--r--meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network/0010-Enable-the-network-link-carrier-state-to-be-reported.patch225
-rw-r--r--meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network_%.bbappend4
6 files changed, 77 insertions, 927 deletions
diff --git a/meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network/0003-Adding-channel-specific-privilege-to-network.patch b/meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network/0003-Adding-channel-specific-privilege-to-network.patch
index ac7d7f8a7..05e26bedb 100644
--- a/meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network/0003-Adding-channel-specific-privilege-to-network.patch
+++ b/meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network/0003-Adding-channel-specific-privilege-to-network.patch
@@ -1,7 +1,7 @@
-From 8a127e2054683479d3999ad99ba7ff76c193aa1a Mon Sep 17 00:00:00 2001
+From 5dfcd6c81a9f26c6c9c867a7a49f5259c3512be2 Mon Sep 17 00:00:00 2001
From: AppaRao Puli <apparao.puli@linux.intel.com>
-Date: Wed, 5 Sep 2018 14:16:54 +0530
-Subject: [PATCH] Adding channel specific privilege to network
+Date: Thu, 2 Apr 2020 17:06:07 +0530
+Subject: [PATCH 1/2] Adding channel specific privilege to network
- Adding the channel access information to the network
interface object. This privilege will be used in
@@ -18,35 +18,36 @@ Change-Id: I3b592a19363eef684e31d5f7c34dad8f2f9211df
Signed-off-by: AppaRao Puli <apparao.puli@linux.intel.com>
Signed-off-by: Yong Li <yong.b.li@linux.intel.com>
---
- ethernet_interface.cpp | 122 +++++++++++++++++++++++++++++++++++++++++
- ethernet_interface.hpp | 39 +++++++++++++-
- network_manager.cpp | 104 ++++++++++++++++++++++++++++++++++++
+ ethernet_interface.cpp | 123 +++++++++++++++++++++++++++++++++++++++++++++++++
+ ethernet_interface.hpp | 39 +++++++++++++++-
+ network_manager.cpp | 104 +++++++++++++++++++++++++++++++++++++++++
network_manager.hpp | 9 ++++
- 4 files changed, 267 insertions(+), 1 deletion(-)
+ 4 files changed, 274 insertions(+), 1 deletion(-)
diff --git a/ethernet_interface.cpp b/ethernet_interface.cpp
-index 2375482..c3edd4b 100644
+index ed1e1ba..fca86bd 100644
--- a/ethernet_interface.cpp
+++ b/ethernet_interface.cpp
-@@ -37,6 +37,9 @@ using namespace phosphor::logging;
+@@ -37,6 +37,10 @@ using namespace phosphor::logging;
using namespace sdbusplus::xyz::openbmc_project::Common::Error;
using Argument = xyz::openbmc_project::Common::InvalidArgument;
+static constexpr const char* networkChannelCfgFile =
+ "/var/channel_intf_data.json";
+static constexpr const char* defaultChannelPriv = "priv-admin";
- EthernetInterface::EthernetInterface(sdbusplus::bus::bus& bus,
- const std::string& objPath,
- bool dhcpEnabled, Manager& parent,
-@@ -56,6 +59,7 @@ EthernetInterface::EthernetInterface(sdbusplus::bus::bus& bus,
-
- EthernetInterfaceIntf::autoNeg(std::get<2>(ifInfo));
++
+ struct EthernetIntfSocket
+ {
+ EthernetIntfSocket(int domain, int type, int protocol)
+@@ -86,6 +90,7 @@ EthernetInterface::EthernetInterface(sdbusplus::bus::bus& bus,
EthernetInterfaceIntf::speed(std::get<0>(ifInfo));
+ EthernetInterfaceIntf::linkUp(std::get<3>(ifInfo));
+ #endif
+ getChannelPrivilege(intfName);
// Emit deferred signal.
if (emitSignal)
-@@ -823,5 +827,123 @@ void EthernetInterface::deleteAll()
+@@ -869,5 +874,123 @@ void EthernetInterface::deleteAll()
manager.writeToConfigurationFile();
}
@@ -171,7 +172,7 @@ index 2375482..c3edd4b 100644
} // namespace network
} // namespace phosphor
diff --git a/ethernet_interface.hpp b/ethernet_interface.hpp
-index 60c56e3..3e4cf12 100644
+index 68668d6..058d328 100644
--- a/ethernet_interface.hpp
+++ b/ethernet_interface.hpp
@@ -2,11 +2,14 @@
@@ -215,7 +216,7 @@ index 60c56e3..3e4cf12 100644
namespace fs = std::experimental::filesystem;
class Manager; // forward declaration of network manager.
-@@ -195,6 +204,14 @@ class EthernetInterface : public Ifaces
+@@ -199,6 +208,14 @@ class EthernetInterface : public Ifaces
*/
void deleteAll();
@@ -229,8 +230,8 @@ index 60c56e3..3e4cf12 100644
+ using ChannelAccessIntf::maxPrivilege;
using EthernetInterfaceIntf::dHCPEnabled;
using EthernetInterfaceIntf::interfaceName;
- using MacAddressIntf::mACAddress;
-@@ -291,6 +308,26 @@ class EthernetInterface : public Ifaces
+ using EthernetInterfaceIntf::linkUp;
+@@ -296,6 +313,26 @@ class EthernetInterface : public Ifaces
std::string objPath;
friend class TestEthernetInterface;
@@ -380,7 +381,7 @@ index 043d7a2..75f4e5f 100644
bool Manager::createDefaultNetworkFiles(bool force)
diff --git a/network_manager.hpp b/network_manager.hpp
-index edb341f..e16b205 100644
+index edb341f..5fb9fe8 100644
--- a/network_manager.hpp
+++ b/network_manager.hpp
@@ -137,6 +137,12 @@ class Manager : public details::VLANCreateIface
@@ -396,7 +397,7 @@ index edb341f..e16b205 100644
protected:
/** @brief Persistent sdbusplus DBus bus connection. */
sdbusplus::bus::bus& bus;
-@@ -159,6 +162,9 @@ class Manager : public details::VLANCreateIface
+@@ -159,6 +165,9 @@ class Manager : public details::VLANCreateIface
/** @brief Network Configuration directory. */
fs::path confDir;
@@ -407,5 +408,5 @@ index edb341f..e16b205 100644
} // namespace network
--
-2.21.0
+2.7.4
diff --git a/meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network/0004-Enhance-DHCP-beyond-just-OFF-and-IPv4-IPv6-enabled.patch b/meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network/0004-Enhance-DHCP-beyond-just-OFF-and-IPv4-IPv6-enabled.patch
deleted file mode 100644
index b6cf8f77d..000000000
--- a/meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network/0004-Enhance-DHCP-beyond-just-OFF-and-IPv4-IPv6-enabled.patch
+++ /dev/null
@@ -1,504 +0,0 @@
-From 42f361622a9c029221c8a90f92104703166e48c2 Mon Sep 17 00:00:00 2001
-From: Johnathan Mantey <johnathanx.mantey@intel.com>
-Date: Thu, 30 Jan 2020 15:07:39 -0800
-Subject: [PATCH] Enhance DHCP beyond just OFF and IPv4/IPv6 enabled.
-
-DHCP is not a binary option. The network interface can have DHCP
-disabled, IPv4 only, IPv6 only, and IPv4/IPv6.
-
-Tested:
-Using dbus-send or busctl:
-Disabled DHCP, and confirmed only link local addresses were present.
-
-Assigned only static addresses. Both with/and without the gateway set
-to 0.0.0.0
-
-Deleted static IPv4 addresses.
-Reassigned static addresses.
-
-Enabled DHCP for ipv4 only, and witnessed a DHCP server assign a valid
-address.
-
-Assigned static IPv4 address.
-Assigned static IPv6 address.
-Confirmed both IPv4 and IPv6 static addresses are active.
-
-Enabled DHCP for ipv6 only, and confirmed the static v4 address
-remains. The ipv6 address is removed, waiting for a DHCP6 server.
-
-Enabled DHCP for both ipv4 and ipv6. IPv4 address was assigned. IPv6
-address is assumed to succeed, as systemd config file enables IPv6
-DHCP.
-
-Change-Id: I2e0ff80ac3a5e88bcff28adac419bf21e37be162
-Signed-off-by: Johnathan Mantey <johnathanx.mantey@intel.com>
----
- Makefile.am | 1 +
- configure.ac | 1 +
- ethernet_interface.cpp | 147 ++++++++++++++++++++++---------
- ethernet_interface.hpp | 31 ++++++-
- test/test_ethernet_interface.cpp | 3 +-
- test/test_vlan_interface.cpp | 3 +-
- types.hpp | 3 +
- util.cpp | 16 +++-
- util.hpp | 7 +-
- vlan_interface.cpp | 2 +-
- vlan_interface.hpp | 4 +-
- 11 files changed, 165 insertions(+), 53 deletions(-)
-
-diff --git a/Makefile.am b/Makefile.am
-index 1c47747..ff252fc 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -97,6 +97,7 @@ phosphor_network_manager_CXXFLAGS = \
- $(SDEVENTPLUS_CFLAGS) \
- $(PHOSPHOR_DBUS_INTERFACES_CFLAGS) \
- $(PHOSPHOR_LOGGING_CFLAGS) \
-+ -DBOOST_ASIO_DISABLE_THREADS \
- -flto
- if FEATURE_NIC_ETHTOOL
- phosphor_network_manager_CXXFLAGS += -DNIC_SUPPORTS_ETHTOOL
-diff --git a/configure.ac b/configure.ac
-index 12d6caa..fed3e09 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -36,6 +36,7 @@ AC_PATH_PROG([SDBUSPLUSPLUS], [sdbus++])
- PKG_CHECK_MODULES([PHOSPHOR_LOGGING], [phosphor-logging])
- PKG_CHECK_MODULES([PHOSPHOR_DBUS_INTERFACES], [phosphor-dbus-interfaces])
- PKG_CHECK_MODULES([LIBNL], [libnl-3.0 libnl-genl-3.0])
-+AC_CHECK_HEADER(boost/algorithm/string/split.hpp, [], [AC_MSG_ERROR([Could not find boost/algorithm/string/split.hpp])])
-
- # Checks for header files.
- AC_CHECK_HEADER(systemd/sd-bus.h, ,\
-diff --git a/ethernet_interface.cpp b/ethernet_interface.cpp
-index 73fd8fe..ba6195e 100644
---- a/ethernet_interface.cpp
-+++ b/ethernet_interface.cpp
-@@ -3,7 +3,6 @@
- #include "ethernet_interface.hpp"
-
- #include "config_parser.hpp"
--#include "ipaddress.hpp"
- #include "neighbor.hpp"
- #include "network_manager.hpp"
- #include "vlan_interface.hpp"
-@@ -40,9 +39,12 @@ using Argument = xyz::openbmc_project::Common::InvalidArgument;
- static constexpr const char* networkChannelCfgFile =
- "/var/channel_intf_data.json";
- static constexpr const char* defaultChannelPriv = "priv-admin";
-+std::map<std::string, std::string> mapDHCPToSystemd = {
-+ {"both", "true"}, {"v4", "ipv4"}, {"v6", "ipv6"}, {"none", "false"}};
-+
- EthernetInterface::EthernetInterface(sdbusplus::bus::bus& bus,
- const std::string& objPath,
-- bool dhcpEnabled, Manager& parent,
-+ DHCPConf dhcpEnabled, Manager& parent,
- bool emitSignal) :
- Ifaces(bus, objPath.c_str(), true),
- bus(bus), manager(parent), objPath(objPath)
-@@ -83,6 +85,65 @@ static IP::Protocol convertFamily(int family)
- throw std::invalid_argument("Bad address family");
- }
-
-+void EthernetInterface::disableDHCP(IP::Protocol protocol)
-+{
-+ DHCPConf dhcpState = EthernetInterfaceIntf::dHCPEnabled();
-+ if (dhcpState == EthernetInterface::DHCPConf::both)
-+ {
-+ if (protocol == IP::Protocol::IPv4)
-+ {
-+ dHCPEnabled(EthernetInterface::DHCPConf::v6);
-+ }
-+ else if (protocol == IP::Protocol::IPv6)
-+ {
-+ dHCPEnabled(EthernetInterface::DHCPConf::v4);
-+ }
-+ }
-+ else if ((dhcpState == EthernetInterface::DHCPConf::v4) &&
-+ (protocol == IP::Protocol::IPv4))
-+ {
-+ dHCPEnabled(EthernetInterface::DHCPConf::none);
-+ }
-+ else if ((dhcpState == EthernetInterface::DHCPConf::v6) &&
-+ (protocol == IP::Protocol::IPv6))
-+ {
-+ dHCPEnabled(EthernetInterface::DHCPConf::none);
-+ }
-+}
-+
-+bool EthernetInterface::dhcpIsEnabled(IP::Protocol family, bool ignoreProtocol)
-+{
-+ return ((EthernetInterfaceIntf::dHCPEnabled() ==
-+ EthernetInterface::DHCPConf::both) ||
-+ ((EthernetInterfaceIntf::dHCPEnabled() ==
-+ EthernetInterface::DHCPConf::v6) &&
-+ ((family == IP::Protocol::IPv6) || ignoreProtocol)) ||
-+ ((EthernetInterfaceIntf::dHCPEnabled() ==
-+ EthernetInterface::DHCPConf::v4) &&
-+ ((family == IP::Protocol::IPv4) || ignoreProtocol)));
-+}
-+
-+bool EthernetInterface::dhcpToBeEnabled(IP::Protocol family,
-+ std::string& nextDHCPState)
-+{
-+ return ((nextDHCPState == "true") ||
-+ ((nextDHCPState == "ipv6") && (family == IP::Protocol::IPv6)) ||
-+ ((nextDHCPState == "ipv4") && (family == IP::Protocol::IPv4)));
-+}
-+
-+bool EthernetInterface::addressIsStatic(IP::AddressOrigin origin)
-+{
-+ return (
-+#ifdef LINK_LOCAL_AUTOCONFIGURATION
-+ (origin == IP::AddressOrigin::Static)
-+#else
-+ (origin == IP::AddressOrigin::Static ||
-+ origin == IP::AddressOrigin::LinkLocal)
-+#endif
-+
-+ );
-+}
-+
- void EthernetInterface::createIPAddressObjects()
- {
- addrs.clear();
-@@ -93,7 +154,7 @@ void EthernetInterface::createIPAddressObjects()
- {
- IP::Protocol addressType = convertFamily(addr.addrType);
- IP::AddressOrigin origin = IP::AddressOrigin::Static;
-- if (dHCPEnabled())
-+ if (dhcpIsEnabled(addressType))
- {
- origin = IP::AddressOrigin::DHCP;
- }
-@@ -154,11 +215,11 @@ ObjectPath EthernetInterface::iP(IP::Protocol protType, std::string ipaddress,
- uint8_t prefixLength, std::string gateway)
- {
-
-- if (dHCPEnabled())
-+ if (dhcpIsEnabled(protType))
- {
- log<level::INFO>("DHCP enabled on the interface"),
- entry("INTERFACE=%s", interfaceName().c_str());
-- dHCPEnabled(false);
-+ disableDHCP(protType);
- }
-
- IP::AddressOrigin origin = IP::AddressOrigin::Static;
-@@ -441,7 +502,7 @@ bool EthernetInterface::iPv6AcceptRA(bool value)
- return value;
- }
-
--bool EthernetInterface::dHCPEnabled(bool value)
-+EthernetInterface::DHCPConf EthernetInterface::dHCPEnabled(DHCPConf value)
- {
- if (value == EthernetInterfaceIntf::dHCPEnabled())
- {
-@@ -508,7 +569,7 @@ void EthernetInterface::loadVLAN(VlanId id)
- std::string path = objPath;
- path += "_" + std::to_string(id);
-
-- auto dhcpEnabled =
-+ DHCPConf dhcpEnabled =
- getDHCPValue(manager.getConfDir().string(), vlanInterfaceName);
-
- auto vlanIntf = std::make_unique<phosphor::network::VlanInterface>(
-@@ -530,7 +591,8 @@ ObjectPath EthernetInterface::createVLAN(VlanId id)
- path += "_" + std::to_string(id);
-
- auto vlanIntf = std::make_unique<phosphor::network::VlanInterface>(
-- bus, path.c_str(), false, id, *this, manager);
-+ bus, path.c_str(), EthernetInterface::DHCPConf::none, id, *this,
-+ manager);
-
- // write the device file for the vlan interface.
- vlanIntf->writeDeviceFile();
-@@ -603,8 +665,6 @@ void EthernetInterface::writeConfigurationFile()
- // write all the static ip address in the systemd-network conf file
-
- using namespace std::string_literals;
-- using AddressOrigin =
-- sdbusplus::xyz::openbmc_project::Network::server::IP::AddressOrigin;
- namespace fs = std::experimental::filesystem;
-
- // if there is vlan interafce then write the configuration file
-@@ -673,42 +733,45 @@ void EthernetInterface::writeConfigurationFile()
- }
-
- // Add the DHCP entry
-- auto value = dHCPEnabled() ? "true"s : "false"s;
-- stream << "DHCP="s + value + "\n";
-+ std::string value = convertForMessage(EthernetInterfaceIntf::dHCPEnabled());
-+ std::string::size_type loc = value.rfind(".");
-+ std::string requestedDHCPState = value.substr(loc + 1);
-+ std::string mappedDHCPState = mapDHCPToSystemd[requestedDHCPState];
-+ stream << "DHCP="s + mappedDHCPState + "\n";
-+
-+ bool dhcpv6Requested = dhcpToBeEnabled(IP::Protocol::IPv6, mappedDHCPState);
-+ bool dhcpv4Requested = dhcpToBeEnabled(IP::Protocol::IPv4, mappedDHCPState);
-+ // Static IP addresses
-+ for (const auto& addr : addrs)
-+ {
-+ bool isValidIPv4 = isValidIP(AF_INET, addr.second->address());
-+ bool isValidIPv6 = isValidIP(AF_INET6, addr.second->address());
-+ if (((!dhcpv4Requested && isValidIPv4) ||
-+ (!dhcpv6Requested && isValidIPv6)) &&
-+ addressIsStatic(addr.second->origin()))
-+ {
-+ // Process all static addresses
-+ std::string address = addr.second->address() + "/" +
-+ std::to_string(addr.second->prefixLength());
-+
-+ // build the address entries. Do not use [Network] shortcuts to
-+ // insert address entries.
-+ stream << "[Address]\n";
-+ stream << "Address=" << address << "\n";
-+ }
-+ }
-
-- // When the interface configured as dhcp, we don't need below given entries
-- // in config file.
-- if (dHCPEnabled() == false)
-+ if (manager.getSystemConf())
- {
-- // Static
-- for (const auto& addr : addrs)
-+ const auto& gateway = manager.getSystemConf()->defaultGateway();
-+ if (!gateway.empty())
- {
-- if (addr.second->origin() == AddressOrigin::Static
--#ifndef LINK_LOCAL_AUTOCONFIGURATION
-- || addr.second->origin() == AddressOrigin::LinkLocal
--#endif
-- )
-- {
-- std::string address =
-- addr.second->address() + "/" +
-- std::to_string(addr.second->prefixLength());
--
-- stream << "Address=" << address << "\n";
-- }
-+ stream << "Gateway=" << gateway << "\n";
- }
--
-- if (manager.getSystemConf())
-+ const auto& gateway6 = manager.getSystemConf()->defaultGateway6();
-+ if (!gateway6.empty())
- {
-- const auto& gateway = manager.getSystemConf()->defaultGateway();
-- if (!gateway.empty())
-- {
-- stream << "Gateway=" << gateway << "\n";
-- }
-- const auto& gateway6 = manager.getSystemConf()->defaultGateway6();
-- if (!gateway6.empty())
-- {
-- stream << "Gateway=" << gateway6 << "\n";
-- }
-+ stream << "Gateway=" << gateway6 << "\n";
- }
- }
-
-@@ -819,7 +882,7 @@ std::string EthernetInterface::mACAddress(std::string value)
-
- void EthernetInterface::deleteAll()
- {
-- if (EthernetInterfaceIntf::dHCPEnabled())
-+ if (dhcpIsEnabled(IP::Protocol::IPv4, true))
- {
- log<level::INFO>("DHCP enabled on the interface"),
- entry("INTERFACE=%s", interfaceName().c_str());
-diff --git a/ethernet_interface.hpp b/ethernet_interface.hpp
-index 3e4cf12..a962751 100644
---- a/ethernet_interface.hpp
-+++ b/ethernet_interface.hpp
-@@ -91,7 +91,7 @@ class EthernetInterface : public Ifaces
- * send.
- */
- EthernetInterface(sdbusplus::bus::bus& bus, const std::string& objPath,
-- bool dhcpEnabled, Manager& parent,
-+ DHCPConf dhcpEnabled, Manager& parent,
- bool emitSignal = true);
-
- /** @brief Function to create ipaddress dbus object.
-@@ -157,7 +157,34 @@ class EthernetInterface : public Ifaces
- }
-
- /** Set value of DHCPEnabled */
-- bool dHCPEnabled(bool value) override;
-+ DHCPConf dHCPEnabled(DHCPConf value) override;
-+
-+ /** @brief Determines if DHCP is active for the IP::Protocol supplied.
-+ * @param[in] protocol - Either IPv4 or IPv6
-+ * @param[in] ignoreProtocol - Allows IPv4 and IPv6 to be checked using a
-+ * single call.
-+ * @returns true/false value if DHCP is active for the input protocol
-+ */
-+ bool dhcpIsEnabled(IP::Protocol protocol, bool ignoreProtocol = false);
-+
-+ /** @brief Determines if DHCP will be active following next reconfig
-+ * @param[in] protocol - Either IPv4 or IPv6
-+ * @param[in] nextDHCPState - The new DHCP mode to take affect
-+ * @returns true/false value if DHCP is active for the input protocol
-+ */
-+ bool dhcpToBeEnabled(IP::Protocol family, std::string& nextDHCPState);
-+
-+ /** @brief Determines if the address is manually assigned
-+ * @param[in] origin - The origin entry of the IP::Address
-+ * @returns true/false value if the address is static
-+ */
-+ bool addressIsStatic(IP::AddressOrigin origin);
-+
-+ /** @brief Selectively disables DHCP
-+ * @param[in] protocol - The IPv4 or IPv6 protocol to return to static
-+ * addressing mode
-+ */
-+ void disableDHCP(IP::Protocol protocol);
-
- /** @brief sets the MAC address.
- * @param[in] value - MAC address which needs to be set on the system.
-diff --git a/test/test_ethernet_interface.cpp b/test/test_ethernet_interface.cpp
-index 30dee8a..87fd68d 100644
---- a/test/test_ethernet_interface.cpp
-+++ b/test/test_ethernet_interface.cpp
-@@ -58,7 +58,8 @@ class TestEthernetInterface : public testing::Test
- {
- mock_clear();
- mock_addIF("test0", 1, mac);
-- return {bus, "/xyz/openbmc_test/network/test0", false, manager};
-+ return {bus, "/xyz/openbmc_test/network/test0",
-+ EthernetInterface::DHCPConf::none, manager};
- }
-
- int countIPObjects()
-diff --git a/test/test_vlan_interface.cpp b/test/test_vlan_interface.cpp
-index 1dffc7e..e49b43f 100644
---- a/test/test_vlan_interface.cpp
-+++ b/test/test_vlan_interface.cpp
-@@ -50,7 +50,8 @@ class TestVlanInterface : public testing::Test
- {
- mock_clear();
- mock_addIF("test0", 1);
-- return {bus, "/xyz/openbmc_test/network/test0", false, manager};
-+ return {bus, "/xyz/openbmc_test/network/test0",
-+ EthernetInterface::DHCPConf::none, manager};
- }
-
- void setConfDir()
-diff --git a/types.hpp b/types.hpp
-index 123067a..c4409fe 100644
---- a/types.hpp
-+++ b/types.hpp
-@@ -1,5 +1,7 @@
- #pragma once
-
-+#include "ipaddress.hpp"
-+
- #include <ifaddrs.h>
- #include <netinet/in.h>
- #include <systemd/sd-event.h>
-@@ -50,6 +52,7 @@ struct AddrInfo
- {
- uint8_t addrType;
- std::string ipaddress;
-+ IP::AddressOrigin origin;
- uint16_t prefix;
- };
-
-diff --git a/util.cpp b/util.cpp
-index 13a607f..554d7f6 100644
---- a/util.cpp
-+++ b/util.cpp
-@@ -410,9 +410,11 @@ std::optional<std::string> interfaceToUbootEthAddr(const char* intf)
- return "eth" + std::to_string(idx) + "addr";
- }
-
--bool getDHCPValue(const std::string& confDir, const std::string& intf)
-+EthernetInterfaceIntf::DHCPConf getDHCPValue(const std::string& confDir,
-+ const std::string& intf)
- {
-- bool dhcp = false;
-+ EthernetInterfaceIntf::DHCPConf dhcp =
-+ EthernetInterfaceIntf::DHCPConf::none;
- // Get the interface mode value from systemd conf
- // using namespace std::string_literals;
- fs::path confPath = confDir;
-@@ -434,7 +436,15 @@ bool getDHCPValue(const std::string& confDir, const std::string& intf)
- // There will be only single value for DHCP key.
- if (values[0] == "true")
- {
-- dhcp = true;
-+ dhcp = EthernetInterfaceIntf::DHCPConf::both;
-+ }
-+ else if (values[0] == "ipv4")
-+ {
-+ dhcp = EthernetInterfaceIntf::DHCPConf::v4;
-+ }
-+ else if (values[0] == "ipv6")
-+ {
-+ dhcp = EthernetInterfaceIntf::DHCPConf::v6;
- }
- return dhcp;
- }
-diff --git a/util.hpp b/util.hpp
-index 251aa0d..ee11f4e 100644
---- a/util.hpp
-+++ b/util.hpp
-@@ -13,12 +13,16 @@
- #include <sdbusplus/bus.hpp>
- #include <string>
- #include <string_view>
-+#include <xyz/openbmc_project/Network/EthernetInterface/server.hpp>
-
- namespace phosphor
- {
- namespace network
- {
-
-+using EthernetInterfaceIntf =
-+ sdbusplus::xyz::openbmc_project::Network::server::EthernetInterface;
-+
- constexpr auto IPV4_MIN_PREFIX_LENGTH = 1;
- constexpr auto IPV4_MAX_PREFIX_LENGTH = 32;
- constexpr auto IPV6_MAX_PREFIX_LENGTH = 64;
-@@ -156,7 +160,8 @@ std::optional<std::string> interfaceToUbootEthAddr(const char* intf);
- * @param[in] confDir - Network configuration directory.
- * @param[in] intf - Interface name.
- */
--bool getDHCPValue(const std::string& confDir, const std::string& intf);
-+EthernetInterfaceIntf::DHCPConf getDHCPValue(const std::string& confDir,
-+ const std::string& intf);
-
- namespace internal
- {
-diff --git a/vlan_interface.cpp b/vlan_interface.cpp
-index 73de4e8..26282cb 100644
---- a/vlan_interface.cpp
-+++ b/vlan_interface.cpp
-@@ -22,7 +22,7 @@ using namespace phosphor::logging;
- using namespace sdbusplus::xyz::openbmc_project::Common::Error;
-
- VlanInterface::VlanInterface(sdbusplus::bus::bus& bus,
-- const std::string& objPath, bool dhcpEnabled,
-+ const std::string& objPath, DHCPConf dhcpEnabled,
- uint32_t vlanID, EthernetInterface& intf,
- Manager& parent) :
- VlanIface(bus, objPath.c_str()),
-diff --git a/vlan_interface.hpp b/vlan_interface.hpp
-index a994d05..37ae7ee 100644
---- a/vlan_interface.hpp
-+++ b/vlan_interface.hpp
-@@ -45,8 +45,8 @@ class VlanInterface : public VlanIface,
- * @param[in] manager - network manager object.
- */
- VlanInterface(sdbusplus::bus::bus& bus, const std::string& objPath,
-- bool dhcpEnabled, uint32_t vlanID, EthernetInterface& intf,
-- Manager& manager);
-+ DHCPConf dhcpEnabled, uint32_t vlanID,
-+ EthernetInterface& intf, Manager& manager);
-
- /** @brief Delete this d-bus object.
- */
---
-2.24.1
-
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
deleted file mode 100644
index c05088990..000000000
--- a/meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network/0005-Enable-conditional-use-of-ETHTOOL-features-in-the-NI.patch
+++ /dev/null
@@ -1,120 +0,0 @@
-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
-
diff --git a/meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network/0009-Enhance-DHCP-beyond-just-OFF-and-IPv4-IPv6-enabled.patch b/meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network/0009-Enhance-DHCP-beyond-just-OFF-and-IPv4-IPv6-enabled.patch
index b6cf8f77d..596dfce48 100644
--- a/meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network/0009-Enhance-DHCP-beyond-just-OFF-and-IPv4-IPv6-enabled.patch
+++ b/meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network/0009-Enhance-DHCP-beyond-just-OFF-and-IPv4-IPv6-enabled.patch
@@ -1,4 +1,4 @@
-From 42f361622a9c029221c8a90f92104703166e48c2 Mon Sep 17 00:00:00 2001
+From 163c1756ee676859622614996be81393eb348220 Mon Sep 17 00:00:00 2001
From: Johnathan Mantey <johnathanx.mantey@intel.com>
Date: Thu, 30 Jan 2020 15:07:39 -0800
Subject: [PATCH] Enhance DHCP beyond just OFF and IPv4/IPv6 enabled.
@@ -35,7 +35,7 @@ Signed-off-by: Johnathan Mantey <johnathanx.mantey@intel.com>
---
Makefile.am | 1 +
configure.ac | 1 +
- ethernet_interface.cpp | 147 ++++++++++++++++++++++---------
+ ethernet_interface.cpp | 146 ++++++++++++++++++++++---------
ethernet_interface.hpp | 31 ++++++-
test/test_ethernet_interface.cpp | 3 +-
test/test_vlan_interface.cpp | 3 +-
@@ -44,10 +44,10 @@ Signed-off-by: Johnathan Mantey <johnathanx.mantey@intel.com>
util.hpp | 7 +-
vlan_interface.cpp | 2 +-
vlan_interface.hpp | 4 +-
- 11 files changed, 165 insertions(+), 53 deletions(-)
+ 11 files changed, 164 insertions(+), 53 deletions(-)
diff --git a/Makefile.am b/Makefile.am
-index 1c47747..ff252fc 100644
+index 3bb5e7b..0bbbc8f 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -97,6 +97,7 @@ phosphor_network_manager_CXXFLAGS = \
@@ -56,8 +56,8 @@ index 1c47747..ff252fc 100644
$(PHOSPHOR_LOGGING_CFLAGS) \
+ -DBOOST_ASIO_DISABLE_THREADS \
-flto
+
if FEATURE_NIC_ETHTOOL
- phosphor_network_manager_CXXFLAGS += -DNIC_SUPPORTS_ETHTOOL
diff --git a/configure.ac b/configure.ac
index 12d6caa..fed3e09 100644
--- a/configure.ac
@@ -71,7 +71,7 @@ index 12d6caa..fed3e09 100644
# Checks for header files.
AC_CHECK_HEADER(systemd/sd-bus.h, ,\
diff --git a/ethernet_interface.cpp b/ethernet_interface.cpp
-index 73fd8fe..ba6195e 100644
+index fca86bd..3fb0f5e 100644
--- a/ethernet_interface.cpp
+++ b/ethernet_interface.cpp
@@ -3,7 +3,6 @@
@@ -82,13 +82,13 @@ index 73fd8fe..ba6195e 100644
#include "neighbor.hpp"
#include "network_manager.hpp"
#include "vlan_interface.hpp"
-@@ -40,9 +39,12 @@ using Argument = xyz::openbmc_project::Common::InvalidArgument;
- static constexpr const char* networkChannelCfgFile =
- "/var/channel_intf_data.json";
- static constexpr const char* defaultChannelPriv = "priv-admin";
+@@ -62,10 +61,12 @@ struct EthernetIntfSocket
+
+ int sock{-1};
+ };
+std::map<std::string, std::string> mapDHCPToSystemd = {
+ {"both", "true"}, {"v4", "ipv4"}, {"v6", "ipv6"}, {"none", "false"}};
-+
+
EthernetInterface::EthernetInterface(sdbusplus::bus::bus& bus,
const std::string& objPath,
- bool dhcpEnabled, Manager& parent,
@@ -96,7 +96,7 @@ index 73fd8fe..ba6195e 100644
bool emitSignal) :
Ifaces(bus, objPath.c_str(), true),
bus(bus), manager(parent), objPath(objPath)
-@@ -83,6 +85,65 @@ static IP::Protocol convertFamily(int family)
+@@ -112,6 +113,65 @@ static IP::Protocol convertFamily(int family)
throw std::invalid_argument("Bad address family");
}
@@ -162,7 +162,7 @@ index 73fd8fe..ba6195e 100644
void EthernetInterface::createIPAddressObjects()
{
addrs.clear();
-@@ -93,7 +154,7 @@ void EthernetInterface::createIPAddressObjects()
+@@ -122,7 +182,7 @@ void EthernetInterface::createIPAddressObjects()
{
IP::Protocol addressType = convertFamily(addr.addrType);
IP::AddressOrigin origin = IP::AddressOrigin::Static;
@@ -171,7 +171,7 @@ index 73fd8fe..ba6195e 100644
{
origin = IP::AddressOrigin::DHCP;
}
-@@ -154,11 +215,11 @@ ObjectPath EthernetInterface::iP(IP::Protocol protType, std::string ipaddress,
+@@ -183,11 +243,11 @@ ObjectPath EthernetInterface::iP(IP::Protocol protType, std::string ipaddress,
uint8_t prefixLength, std::string gateway)
{
@@ -185,7 +185,7 @@ index 73fd8fe..ba6195e 100644
}
IP::AddressOrigin origin = IP::AddressOrigin::Static;
-@@ -441,7 +502,7 @@ bool EthernetInterface::iPv6AcceptRA(bool value)
+@@ -460,7 +520,7 @@ bool EthernetInterface::iPv6AcceptRA(bool value)
return value;
}
@@ -194,7 +194,7 @@ index 73fd8fe..ba6195e 100644
{
if (value == EthernetInterfaceIntf::dHCPEnabled())
{
-@@ -508,7 +569,7 @@ void EthernetInterface::loadVLAN(VlanId id)
+@@ -552,7 +612,7 @@ void EthernetInterface::loadVLAN(VlanId id)
std::string path = objPath;
path += "_" + std::to_string(id);
@@ -203,7 +203,7 @@ index 73fd8fe..ba6195e 100644
getDHCPValue(manager.getConfDir().string(), vlanInterfaceName);
auto vlanIntf = std::make_unique<phosphor::network::VlanInterface>(
-@@ -530,7 +591,8 @@ ObjectPath EthernetInterface::createVLAN(VlanId id)
+@@ -574,7 +634,8 @@ ObjectPath EthernetInterface::createVLAN(VlanId id)
path += "_" + std::to_string(id);
auto vlanIntf = std::make_unique<phosphor::network::VlanInterface>(
@@ -213,7 +213,7 @@ index 73fd8fe..ba6195e 100644
// write the device file for the vlan interface.
vlanIntf->writeDeviceFile();
-@@ -603,8 +665,6 @@ void EthernetInterface::writeConfigurationFile()
+@@ -647,8 +708,6 @@ void EthernetInterface::writeConfigurationFile()
// write all the static ip address in the systemd-network conf file
using namespace std::string_literals;
@@ -222,12 +222,16 @@ index 73fd8fe..ba6195e 100644
namespace fs = std::experimental::filesystem;
// if there is vlan interafce then write the configuration file
-@@ -673,42 +733,45 @@ void EthernetInterface::writeConfigurationFile()
+@@ -717,42 +776,45 @@ void EthernetInterface::writeConfigurationFile()
}
// Add the DHCP entry
- auto value = dHCPEnabled() ? "true"s : "false"s;
- stream << "DHCP="s + value + "\n";
+-
+- // When the interface configured as dhcp, we don't need below given entries
+- // in config file.
+- if (dHCPEnabled() == false)
+ std::string value = convertForMessage(EthernetInterfaceIntf::dHCPEnabled());
+ std::string::size_type loc = value.rfind(".");
+ std::string requestedDHCPState = value.substr(loc + 1);
@@ -238,33 +242,14 @@ index 73fd8fe..ba6195e 100644
+ bool dhcpv4Requested = dhcpToBeEnabled(IP::Protocol::IPv4, mappedDHCPState);
+ // Static IP addresses
+ for (const auto& addr : addrs)
-+ {
+ {
+- // Static
+- for (const auto& addr : addrs)
+ bool isValidIPv4 = isValidIP(AF_INET, addr.second->address());
+ bool isValidIPv6 = isValidIP(AF_INET6, addr.second->address());
+ if (((!dhcpv4Requested && isValidIPv4) ||
+ (!dhcpv6Requested && isValidIPv6)) &&
+ addressIsStatic(addr.second->origin()))
-+ {
-+ // Process all static addresses
-+ std::string address = addr.second->address() + "/" +
-+ std::to_string(addr.second->prefixLength());
-+
-+ // build the address entries. Do not use [Network] shortcuts to
-+ // insert address entries.
-+ stream << "[Address]\n";
-+ stream << "Address=" << address << "\n";
-+ }
-+ }
-
-- // When the interface configured as dhcp, we don't need below given entries
-- // in config file.
-- if (dHCPEnabled() == false)
-+ if (manager.getSystemConf())
- {
-- // Static
-- for (const auto& addr : addrs)
-+ const auto& gateway = manager.getSystemConf()->defaultGateway();
-+ if (!gateway.empty())
{
- if (addr.second->origin() == AddressOrigin::Static
-#ifndef LINK_LOCAL_AUTOCONFIGURATION
@@ -278,12 +263,22 @@ index 73fd8fe..ba6195e 100644
-
- stream << "Address=" << address << "\n";
- }
-+ stream << "Gateway=" << gateway << "\n";
++ // Process all static addresses
++ std::string address = addr.second->address() + "/" +
++ std::to_string(addr.second->prefixLength());
++
++ // build the address entries. Do not use [Network] shortcuts to
++ // insert address entries.
++ stream << "[Address]\n";
++ stream << "Address=" << address << "\n";
}
--
++ }
+
- if (manager.getSystemConf())
-+ const auto& gateway6 = manager.getSystemConf()->defaultGateway6();
-+ if (!gateway6.empty())
++ if (manager.getSystemConf())
++ {
++ const auto& gateway = manager.getSystemConf()->defaultGateway();
++ if (!gateway.empty())
{
- const auto& gateway = manager.getSystemConf()->defaultGateway();
- if (!gateway.empty())
@@ -295,11 +290,16 @@ index 73fd8fe..ba6195e 100644
- {
- stream << "Gateway=" << gateway6 << "\n";
- }
++ stream << "Gateway=" << gateway << "\n";
++ }
++ const auto& gateway6 = manager.getSystemConf()->defaultGateway6();
++ if (!gateway6.empty())
++ {
+ stream << "Gateway=" << gateway6 << "\n";
}
}
-@@ -819,7 +882,7 @@ std::string EthernetInterface::mACAddress(std::string value)
+@@ -863,7 +925,7 @@ std::string EthernetInterface::mACAddress(std::string value)
void EthernetInterface::deleteAll()
{
@@ -309,10 +309,10 @@ index 73fd8fe..ba6195e 100644
log<level::INFO>("DHCP enabled on the interface"),
entry("INTERFACE=%s", interfaceName().c_str());
diff --git a/ethernet_interface.hpp b/ethernet_interface.hpp
-index 3e4cf12..a962751 100644
+index 058d328..4e36ae8 100644
--- a/ethernet_interface.hpp
+++ b/ethernet_interface.hpp
-@@ -91,7 +91,7 @@ class EthernetInterface : public Ifaces
+@@ -92,7 +92,7 @@ class EthernetInterface : public Ifaces
* send.
*/
EthernetInterface(sdbusplus::bus::bus& bus, const std::string& objPath,
@@ -321,7 +321,7 @@ index 3e4cf12..a962751 100644
bool emitSignal = true);
/** @brief Function to create ipaddress dbus object.
-@@ -157,7 +157,34 @@ class EthernetInterface : public Ifaces
+@@ -158,7 +158,34 @@ class EthernetInterface : public Ifaces
}
/** Set value of DHCPEnabled */
@@ -355,8 +355,8 @@ index 3e4cf12..a962751 100644
+ */
+ void disableDHCP(IP::Protocol protocol);
- /** @brief sets the MAC address.
- * @param[in] value - MAC address which needs to be set on the system.
+ /** Retrieve Link State */
+ bool linkUp() const override;
diff --git a/test/test_ethernet_interface.cpp b/test/test_ethernet_interface.cpp
index 30dee8a..87fd68d 100644
--- a/test/test_ethernet_interface.cpp
@@ -500,5 +500,5 @@ index a994d05..37ae7ee 100644
/** @brief Delete this d-bus object.
*/
--
-2.24.1
+2.25.1
diff --git a/meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network/0010-Enable-the-network-link-carrier-state-to-be-reported.patch b/meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network/0010-Enable-the-network-link-carrier-state-to-be-reported.patch
deleted file mode 100644
index eb4efab8f..000000000
--- a/meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network/0010-Enable-the-network-link-carrier-state-to-be-reported.patch
+++ /dev/null
@@ -1,225 +0,0 @@
-From 7e99cfbb5cdbf47cd0350d869be236c88f982fd3 Mon Sep 17 00:00:00 2001
-From: Johnathan Mantey <johnathanx.mantey@intel.com>
-Date: Wed, 8 Jan 2020 10:38:58 -0800
-Subject: [PATCH] Enable the network link carrier state to be reported.
-
-This change allows networkd to keep track of, and report, the state of
-the network carrier signal. When a NIC cable is pulled, or inserted, a
-DBus client is able identify the condition.
-
-Tested:
-ip link set down dev eth0 # take eth0 down
-Get bmc/EthernetInterfaces/eth0 from Redfish # LinkStatus = LinkDown
- # InterfaceEnabled = false
-ip link set up dev eth0 # bring eth0 back
-Get bmc/EthernetInterfaces/eth0 from Redfish # LinkStatus = Linkup
- # InterfaceEnabled = true
-Pull eth0 cable
-Get bmc/EthernetInterfaces/eth0 from Redfish # LinkStatus = LinkDown
- # InterfaceEnabled = true
-Insert eth0 cable
-Get bmc/EthernetInterfaces/eth0 from Redfish # LinkStatus = Linkup
- # InterfaceEnabled = true
-
-Change-Id: I5530cf7882cfbfdba1436dd34b3219c735047c5e
-Signed-off-by: Johnathan Mantey <johnathanx.mantey@intel.com>
----
- ethernet_interface.cpp | 104 ++++++++++++++++++++++++++++-------------
- ethernet_interface.hpp | 7 ++-
- 2 files changed, 77 insertions(+), 34 deletions(-)
-
-diff --git a/ethernet_interface.cpp b/ethernet_interface.cpp
-index ba6195e..8b8f698 100644
---- a/ethernet_interface.cpp
-+++ b/ethernet_interface.cpp
-@@ -42,6 +42,28 @@ static constexpr const char* defaultChannelPriv = "priv-admin";
- std::map<std::string, std::string> mapDHCPToSystemd = {
- {"both", "true"}, {"v4", "ipv4"}, {"v6", "ipv6"}, {"none", "false"}};
-
-+struct EthernetIntfSocket
-+{
-+ EthernetIntfSocket(int domain, int type, int protocol)
-+ {
-+ if ((sock = socket(domain, type, protocol)) < 0)
-+ {
-+ log<level::ERR>("socket creation failed:",
-+ entry("ERROR=%s", strerror(errno)));
-+ }
-+ }
-+
-+ ~EthernetIntfSocket()
-+ {
-+ if (sock >= 0)
-+ {
-+ close(sock);
-+ }
-+ }
-+
-+ int sock{-1};
-+};
-+
- EthernetInterface::EthernetInterface(sdbusplus::bus::bus& bus,
- const std::string& objPath,
- DHCPConf dhcpEnabled, Manager& parent,
-@@ -62,6 +84,7 @@ EthernetInterface::EthernetInterface(sdbusplus::bus::bus& bus,
-
- EthernetInterfaceIntf::autoNeg(std::get<2>(ifInfo));
- EthernetInterfaceIntf::speed(std::get<0>(ifInfo));
-+ EthernetInterfaceIntf::linkUp(std::get<3>(ifInfo));
- #endif
- getChannelPrivilege(intfName);
-
-@@ -294,43 +317,33 @@ ObjectPath EthernetInterface::neighbor(std::string iPAddress,
- */
- InterfaceInfo EthernetInterface::getInterfaceInfo() const
- {
-- int sock{-1};
- ifreq ifr{0};
- ethtool_cmd edata{0};
- LinkSpeed speed{0};
- Autoneg autoneg{0};
- DuplexMode duplex{0};
-- do
-- {
-- sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
-- if (sock < 0)
-- {
-- log<level::ERR>("socket creation failed:",
-- entry("ERROR=%s", strerror(errno)));
-- break;
-- }
-+ LinkUp linkState{false};
-+ EthernetIntfSocket eifSocket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
-
-- strcpy(ifr.ifr_name, interfaceName().c_str());
-- ifr.ifr_data = reinterpret_cast<char*>(&edata);
-+ if (eifSocket.sock < 0)
-+ {
-+ return std::make_tuple(speed, duplex, autoneg, linkState);
-+ }
-
-- edata.cmd = ETHTOOL_GSET;
-+ std::strncpy(ifr.ifr_name, interfaceName().c_str(), IFNAMSIZ - 1);
-+ ifr.ifr_data = reinterpret_cast<char*>(&edata);
-
-- if (ioctl(sock, SIOCETHTOOL, &ifr) < 0)
-- {
-- log<level::ERR>("ioctl failed for SIOCETHTOOL:",
-- entry("ERROR=%s", strerror(errno)));
-- break;
-- }
-+ edata.cmd = ETHTOOL_GSET;
-+ if (ioctl(eifSocket.sock, SIOCETHTOOL, &ifr) >= 0)
-+ {
- speed = edata.speed;
- duplex = edata.duplex;
- autoneg = edata.autoneg;
-- } while (0);
--
-- if (sock)
-- {
-- close(sock);
- }
-- return std::make_tuple(speed, duplex, autoneg);
-+
-+ linkState = linkUp();
-+
-+ return std::make_tuple(speed, duplex, autoneg, linkState);
- }
- #endif
-
-@@ -341,17 +354,17 @@ InterfaceInfo EthernetInterface::getInterfaceInfo() const
- std::string
- EthernetInterface::getMACAddress(const std::string& interfaceName) const
- {
-- ifreq ifr{};
-- int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
-- if (sock < 0)
-+ std::string activeMACAddr = MacAddressIntf::mACAddress();
-+ EthernetIntfSocket eifSocket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
-+
-+ if (eifSocket.sock < 0)
- {
-- log<level::ERR>("socket creation failed:",
-- entry("ERROR=%s", strerror(errno)));
-- elog<InternalFailure>();
-+ return activeMACAddr;
- }
-
-- std::strcpy(ifr.ifr_name, interfaceName.c_str());
-- if (ioctl(sock, SIOCGIFHWADDR, &ifr) != 0)
-+ ifreq ifr{0};
-+ std::strncpy(ifr.ifr_name, interfaceName.c_str(), IFNAMSIZ - 1);
-+ if (ioctl(eifSocket.sock, SIOCGIFHWADDR, &ifr) != 0)
- {
- log<level::ERR>("ioctl failed for SIOCGIFHWADDR:",
- entry("ERROR=%s", strerror(errno)));
-@@ -514,6 +527,31 @@ EthernetInterface::DHCPConf EthernetInterface::dHCPEnabled(DHCPConf value)
- return value;
- }
-
-+bool EthernetInterface::linkUp() const
-+{
-+ EthernetIntfSocket eifSocket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
-+ bool value = EthernetInterfaceIntf::linkUp();
-+
-+ if (eifSocket.sock < 0)
-+ {
-+ return value;
-+ }
-+
-+ ifreq ifr{0};
-+ std::strncpy(ifr.ifr_name, interfaceName().c_str(), IF_NAMESIZE - 1);
-+ if (ioctl(eifSocket.sock, SIOCGIFFLAGS, &ifr) == 0)
-+ {
-+ value = static_cast<bool>(ifr.ifr_flags & IFF_RUNNING);
-+ }
-+ else
-+ {
-+ log<level::ERR>("ioctl failed for SIOCGIFFLAGS:",
-+ entry("ERROR=%s", strerror(errno)));
-+ }
-+
-+ return value;
-+}
-+
- ServerList EthernetInterface::nameservers(ServerList value)
- {
- for (const auto& nameserverip : value)
-diff --git a/ethernet_interface.hpp b/ethernet_interface.hpp
-index a962751..4e36ae8 100644
---- a/ethernet_interface.hpp
-+++ b/ethernet_interface.hpp
-@@ -59,9 +59,10 @@ class Neighbor;
- using LinkSpeed = uint16_t;
- using DuplexMode = uint8_t;
- using Autoneg = uint8_t;
-+using LinkUp = bool;
- using VlanId = uint32_t;
- using InterfaceName = std::string;
--using InterfaceInfo = std::tuple<LinkSpeed, DuplexMode, Autoneg>;
-+using InterfaceInfo = std::tuple<LinkSpeed, DuplexMode, Autoneg, LinkUp>;
- using AddressMap = std::map<std::string, std::shared_ptr<IPAddress>>;
- using NeighborMap = std::map<std::string, std::shared_ptr<Neighbor>>;
- using VlanInterfaceMap =
-@@ -186,6 +187,9 @@ class EthernetInterface : public Ifaces
- */
- void disableDHCP(IP::Protocol protocol);
-
-+ /** Retrieve Link State */
-+ bool linkUp() const override;
-+
- /** @brief sets the MAC address.
- * @param[in] value - MAC address which needs to be set on the system.
- * @returns macAddress of the interface or throws an error.
-@@ -241,6 +245,7 @@ class EthernetInterface : public Ifaces
- using ChannelAccessIntf::maxPrivilege;
- using EthernetInterfaceIntf::dHCPEnabled;
- using EthernetInterfaceIntf::interfaceName;
-+ using EthernetInterfaceIntf::linkUp;
- using MacAddressIntf::mACAddress;
-
- /** @brief Absolute path of the resolv conf file */
---
-2.24.1
-
diff --git a/meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network_%.bbappend b/meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network_%.bbappend
index e1480ec1b..fe7f050c0 100644
--- a/meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network_%.bbappend
+++ b/meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network_%.bbappend
@@ -5,11 +5,9 @@ DEPENDS += "nlohmann-json boost"
#todo: Appu, fix nobranch
SRC_URI = "git://github.com/openbmc/phosphor-networkd;nobranch=1"
SRC_URI += "file://0003-Adding-channel-specific-privilege-to-network.patch \
- file://0005-Enable-conditional-use-of-ETHTOOL-features-in-the-NI.patch \
file://0009-Enhance-DHCP-beyond-just-OFF-and-IPv4-IPv6-enabled.patch \
- file://0010-Enable-the-network-link-carrier-state-to-be-reported.patch \
file://0011-Added-enable-disable-control-of-the-Network-Interfac.patch \
"
-SRCREV = "dbd328d7e037b1af13fb0f20f3708e2261b9e0b6"
+SRCREV = "ad4bf5ce1292c74ac2ecea413ff27c14cf5748fe"
EXTRA_OECONF_append = " --enable-nic-ethtool=yes"