diff options
Diffstat (limited to 'meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0001-Modify-Get-Lan-Configuration-IP-Address-Source-to-us.patch')
-rw-r--r-- | meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0001-Modify-Get-Lan-Configuration-IP-Address-Source-to-us.patch | 231 |
1 files changed, 0 insertions, 231 deletions
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0001-Modify-Get-Lan-Configuration-IP-Address-Source-to-us.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0001-Modify-Get-Lan-Configuration-IP-Address-Source-to-us.patch deleted file mode 100644 index 7e3f92dbc..000000000 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0001-Modify-Get-Lan-Configuration-IP-Address-Source-to-us.patch +++ /dev/null @@ -1,231 +0,0 @@ -From 8e9fba263179ccc87be7212c7dbd87cd7a37ac30 Mon Sep 17 00:00:00 2001 -From: Johnathan Mantey <johnathanx.mantey@intel.com> -Date: Thu, 14 Nov 2019 11:24:19 -0800 -Subject: [PATCH] Modify Get Lan Configuration IP Address Source to use correct - DBus DHCPEnabled type - -The Get/Set Lan Configuration "IP Address Source" subcommand got -broken by phosphor-dbus-interfaces commit 12162be - -12162be changed the DBus DHCPEnabled type from boolean to enum -type. The Get LAN Configuration IP address Source IPMI command did not -get changed to an enum type prior to 12162be being merged. This commit -retroactively updates the boolean type to enum type. - -Tested: - -ipmitool raw 0xc 2 3 4 0 0 # returns correct state -ipmitool raw 0xc 1 3 4 1 # changes DCHP to Static -ipmitool raw 0xc 1 3 4 2 # returns Static to DHCP - -Assigned a static address via Redfish and tested using: -ipmitool raw 0xc 2 3 4 0 0 # returns correct state - -Returned the NIC to use DHCP via Redfish and tested using: -ipmitool raw 0xc 2 3 4 0 0 # returns correct state - -Change-Id: Ia66f7fcf3d5ad0a383b06658b18e8ce2b282e052 -Signed-off-by: Johnathan Mantey <johnathanx.mantey@intel.com> ---- - transporthandler.cpp | 97 ++++++++++++++++++++++++++++++++++++-------- - 1 file changed, 79 insertions(+), 18 deletions(-) - -diff --git a/transporthandler.cpp b/transporthandler.cpp -index 16ce2b2..ccc2a97 100644 ---- a/transporthandler.cpp -+++ b/transporthandler.cpp -@@ -109,6 +109,18 @@ constexpr auto INTF_NEIGHBOR_CREATE_STATIC = - constexpr auto INTF_VLAN = "xyz.openbmc_project.Network.VLAN"; - constexpr auto INTF_VLAN_CREATE = "xyz.openbmc_project.Network.VLAN.Create"; - -+static constexpr auto dhcpv4v6 = -+ "xyz.openbmc_project.Network.EthernetInterface.DHCPConf.both"; -+static constexpr auto dhcpv6 = -+ "xyz.openbmc_project.Network.EthernetInterface.DHCPConf.v6"; -+static constexpr auto dhcpv4 = -+ "xyz.openbmc_project.Network.EthernetInterface.DHCPConf.v4"; -+static constexpr auto dhcpoff = -+ "xyz.openbmc_project.Network.EthernetInterface.DHCPConf.none"; -+ -+static std::array<const char*, 4> dhcpEnumerations = {dhcpv4v6, dhcpv4, dhcpv6, -+ dhcpoff}; -+ - /** @brief Generic paramters for different address families */ - template <int family> - struct AddrFamily -@@ -456,25 +468,63 @@ auto channelCall(uint8_t channel, Args&&... args) - * - * @param[in] bus - The bus object used for lookups - * @param[in] params - The parameters for the channel -- * @return True if DHCP is enabled, false otherwise -+ * @return string containing an enumerated value -+ * constexpr's dhcpv4v6, dhcpv4, dhcpv6, and dhcpoff - */ --bool getDHCPProperty(sdbusplus::bus::bus& bus, const ChannelParams& params) -+std::string getDHCPProperty(sdbusplus::bus::bus& bus, -+ const ChannelParams& params) - { -- return std::get<bool>(getDbusProperty( -+ return std::get<std::string>(getDbusProperty( - bus, params.service, params.logicalPath, INTF_ETHERNET, "DHCPEnabled")); - } - - /** @brief Sets the system value for DHCP on the given interface - * -- * @param[in] bus - The bus object used for lookups -- * @param[in] params - The parameters for the channel -- * @param[in] on - Whether or not to enable DHCP -+ * @param[in] bus - The bus object used for lookups -+ * @param[in] params - The parameters for the channel -+ * @param[in] setting - DHCP state to assign (none, v4, v6, both) - */ - void setDHCPProperty(sdbusplus::bus::bus& bus, const ChannelParams& params, -- bool on) -+ const std::string& setting) - { -+ auto it = dhcpEnumerations.begin(); -+ while (it != dhcpEnumerations.end()) -+ { -+ if (*it == setting) -+ { -+ break; -+ } -+ it++; -+ } -+ if (it == dhcpEnumerations.end()) -+ { -+ log<level::ERR>("Invalid DHCP setting.", -+ entry("Requested DHCP mode=%s", setting.c_str())); -+ elog<InternalFailure>(); -+ } -+ -+ std::string dhcp = getDHCPProperty(bus, params); -+ std::string nextDhcp{}; -+ -+ if (((dhcp == dhcpv4) && (setting == dhcpv6)) || -+ ((dhcp == dhcpv6) && (setting == dhcpv4))) -+ { -+ // DHCP is enabled independently for IPv4 and IPv6. If IPv4 -+ // DHCP is enabled, and a request to add IPv6 is received, -+ // change the DHCPEnabled enum to "both" active. The same -+ // logic is applied if IPV6 is already enabled, and an IPv4 -+ // enable request is made. -+ nextDhcp = dhcpv4v6; -+ } -+ else -+ { -+ // "both" enabled -> ipv4 only -+ // "both" enabled -> ipv6 only -+ // "ip4v", "ipv6", or "both" enabled -> no DHCP -+ nextDhcp = setting; -+ } - setDbusProperty(bus, params.service, params.logicalPath, INTF_ETHERNET, -- "DHCPEnabled", on); -+ "DHCPEnabled", nextDhcp); - } - - /** @brief Converts a human readable MAC string into MAC bytes -@@ -1113,7 +1163,7 @@ void deconfigureChannel(sdbusplus::bus::bus& bus, ChannelParams& params) - } - - // Clear out any settings on the lower physical interface -- setDHCPProperty(bus, params, false); -+ setDHCPProperty(bus, params, dhcpoff); - } - - /** @brief Creates a new VLAN on the specified interface -@@ -1401,7 +1451,8 @@ RspType<> setLan(uint4_t channelBits, uint4_t, uint8_t parameter, - } - case LanParam::IP: - { -- if (channelCall<getDHCPProperty>(channel)) -+ std::string dhcpSetting = channelCall<getDHCPProperty>(channel); -+ if ((dhcpSetting == dhcpv4) || (dhcpSetting == dhcpv4v6)) - { - return responseCommandNotAvailable(); - } -@@ -1431,7 +1482,11 @@ RspType<> setLan(uint4_t channelBits, uint4_t, uint8_t parameter, - { - case IPSrc::DHCP: - { -- channelCall<setDHCPProperty>(channel, true); -+ // The IPSrc IPMI command is only for IPv4 -+ // management. Modifying IPv6 state is done using -+ // a completely different Set LAN Configuration -+ // subcommand. -+ channelCall<setDHCPProperty>(channel, dhcpv4); - return responseSuccess(); - } - case IPSrc::Unspecified: -@@ -1439,7 +1494,7 @@ RspType<> setLan(uint4_t channelBits, uint4_t, uint8_t parameter, - case IPSrc::BIOS: - case IPSrc::BMC: - { -- channelCall<setDHCPProperty>(channel, false); -+ channelCall<setDHCPProperty>(channel, dhcpoff); - return responseSuccess(); - } - } -@@ -1464,7 +1519,8 @@ RspType<> setLan(uint4_t channelBits, uint4_t, uint8_t parameter, - } - case LanParam::SubnetMask: - { -- if (channelCall<getDHCPProperty>(channel)) -+ std::string dhcpSetting = channelCall<getDHCPProperty>(channel); -+ if ((dhcpSetting == dhcpv4) || (dhcpSetting == dhcpv4v6)) - { - return responseCommandNotAvailable(); - } -@@ -1481,7 +1537,8 @@ RspType<> setLan(uint4_t channelBits, uint4_t, uint8_t parameter, - } - case LanParam::Gateway1: - { -- if (channelCall<getDHCPProperty>(channel)) -+ std::string dhcpSetting = channelCall<getDHCPProperty>(channel); -+ if ((dhcpSetting == dhcpv4) || (dhcpSetting == dhcpv4v6)) - { - return responseCommandNotAvailable(); - } -@@ -1606,7 +1663,8 @@ RspType<> setLan(uint4_t channelBits, uint4_t, uint8_t parameter, - return responseReqDataLenInvalid(); - } - std::bitset<8> expected; -- if (channelCall<getDHCPProperty>(channel)) -+ std::string dhcp = channelCall<getDHCPProperty>(channel); -+ if ((dhcp == dhcpv4v6) || (dhcp == dhcpv6)) - { - expected[IPv6RouterControlFlag::Dynamic] = 1; - } -@@ -1756,7 +1814,8 @@ RspType<message::Payload> getLan(uint4_t channelBits, uint3_t, bool revOnly, - case LanParam::IPSrc: - { - auto src = IPSrc::Static; -- if (channelCall<getDHCPProperty>(channel)) -+ std::string dhcp = channelCall<getDHCPProperty>(channel); -+ if ((dhcp == dhcpv4) || (dhcp == dhcpv4v6)) - { - src = IPSrc::DHCP; - } -@@ -1877,7 +1936,8 @@ RspType<message::Payload> getLan(uint4_t channelBits, uint3_t, bool revOnly, - case LanParam::IPv6RouterControl: - { - std::bitset<8> control; -- if (channelCall<getDHCPProperty>(channel)) -+ std::string dhcp = channelCall<getDHCPProperty>(channel); -+ if ((dhcp == dhcpv4v6) || (dhcp == dhcpv6)) - { - control[IPv6RouterControlFlag::Dynamic] = 1; - } -@@ -1891,7 +1951,8 @@ RspType<message::Payload> getLan(uint4_t channelBits, uint3_t, bool revOnly, - case LanParam::IPv6StaticRouter1IP: - { - in6_addr gateway{}; -- if (!channelCall<getDHCPProperty>(channel)) -+ std::string dhcp = channelCall<getDHCPProperty>(channel); -+ if ((dhcp == dhcpv4) || (dhcp == dhcpoff)) - { - gateway = - channelCall<getGatewayProperty<AF_INET6>>(channel).value_or( --- -2.24.1 - |