summaryrefslogtreecommitdiff
path: root/meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network/0010-Enable-the-network-link-carrier-state-to-be-reported.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network/0010-Enable-the-network-link-carrier-state-to-be-reported.patch')
-rw-r--r--meta-openbmc-mods/meta-common/recipes-network/network/phosphor-network/0010-Enable-the-network-link-carrier-state-to-be-reported.patch225
1 files changed, 0 insertions, 225 deletions
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
-