summaryrefslogtreecommitdiff
path: root/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host
diff options
context:
space:
mode:
Diffstat (limited to 'meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host')
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0001-Modify-Get-Lan-Configuration-IP-Address-Source-to-us.patch231
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0053-Fix-keep-looping-issue-when-entering-OS.patch29
-rw-r--r--meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0056-add-SetInProgress-to-get-set-boot-option-cmd.patch101
3 files changed, 68 insertions, 293 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
-
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0053-Fix-keep-looping-issue-when-entering-OS.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0053-Fix-keep-looping-issue-when-entering-OS.patch
index 903ae96a7..7a7fd0859 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0053-Fix-keep-looping-issue-when-entering-OS.patch
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0053-Fix-keep-looping-issue-when-entering-OS.patch
@@ -23,7 +23,7 @@ diff --git a/host-cmd-manager.cpp b/host-cmd-manager.cpp
index f3aba7f..465eb81 100644
--- a/host-cmd-manager.cpp
+++ b/host-cmd-manager.cpp
-@@ -26,6 +26,8 @@ constexpr auto MAPPER_INTERFACE = "xyz.openbmc_project.ObjectMapper";
+@@ -23,6 +23,8 @@ namespace command
constexpr auto HOST_STATE_PATH = "/xyz/openbmc_project/state/host0";
constexpr auto HOST_STATE_INTERFACE = "xyz.openbmc_project.State.Host";
constexpr auto HOST_TRANS_PROP = "RequestedHostTransition";
@@ -32,7 +32,7 @@ index f3aba7f..465eb81 100644
// For throwing exceptions
using namespace phosphor::logging;
-@@ -106,6 +108,20 @@ void Manager::clearQueue()
+@@ -103,6 +105,20 @@ void Manager::clearQueue()
// `false` indicating Failure
std::get<CallBack>(command)(ipmiCmdData, false);
}
@@ -53,28 +53,37 @@ index f3aba7f..465eb81 100644
}
// Called for alerting the host
-@@ -115,9 +131,6 @@ void Manager::checkQueueAndAlertHost()
+@@ -112,9 +128,7 @@ void Manager::checkQueueAndAlertHost()
{
log<level::DEBUG>("Asserting SMS Attention");
+- std::string HOST_IPMI_SVC("org.openbmc.HostIpmi");
- std::string IPMI_PATH("/org/openbmc/HostIpmi/1");
- std::string IPMI_INTERFACE("org.openbmc.HostIpmi");
--
- auto host = ::ipmi::getService(this->bus, IPMI_INTERFACE, IPMI_PATH);
++ auto host = ::ipmi::getService(this->bus, IPMI_INTERFACE, IPMI_PATH);
// Start the timer for this transaction
-@@ -131,9 +144,8 @@ void Manager::checkQueueAndAlertHost()
+ auto time = std::chrono::duration_cast<std::chrono::microseconds>(
+@@ -127,12 +141,13 @@ void Manager::checkQueueAndAlertHost()
return;
}
- auto method =
-- this->bus.new_method_call(host.c_str(), IPMI_PATH.c_str(),
+- this->bus.new_method_call(HOST_IPMI_SVC.c_str(), IPMI_PATH.c_str(),
- IPMI_INTERFACE.c_str(), "setAttention");
+- auto reply = this->bus.call(method);
+-
+- if (reply.is_method_error())
+ auto method = this->bus.new_method_call(host.c_str(), IPMI_PATH,
+ IPMI_INTERFACE, "setAttention");
- auto reply = this->bus.call(method);
-
- if (reply.is_method_error())
++ try
++ {
++ auto reply = this->bus.call(method);
++ }
++ catch (const std::exception&)
+ {
+ log<level::ERR>("Error in setting SMS attention");
+ elog<InternalFailure>();
--
2.7.4
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0056-add-SetInProgress-to-get-set-boot-option-cmd.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0056-add-SetInProgress-to-get-set-boot-option-cmd.patch
index 987e61448..862e9baa8 100644
--- a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0056-add-SetInProgress-to-get-set-boot-option-cmd.patch
+++ b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0056-add-SetInProgress-to-get-set-boot-option-cmd.patch
@@ -1,79 +1,76 @@
-From f9f260391f099b4e67999f9d4ca05cbf9b422baf Mon Sep 17 00:00:00 2001
-From: "Jia, chunhui" <chunhui.jia@linux.intel.com>
-Date: Tue, 19 Mar 2019 16:09:06 +0800
-Subject: [PATCH] add SetInProgress to get/set boot option cmd
+From d5cfc5a0aaa50cc94054886e5cb7be25ef167c71 Mon Sep 17 00:00:00 2001
+From: huanghe <he.huang@intel.com>
+Date: Sat, 10 Oct 2020 14:40:00 +0800
+Subject: [PATCH 7/7] Add set in progress paramter to set/get boot option
+ command
-It is required by BIOS. BIOS will check setinprogress first.
-If this flag is not supported, BIOS will bypass all boot
-option flow.
-
-Change-Id: Ibb0501ea5bc36c4f1f72339efef03724dd4e613f
-Signed-off-by: Jia, chunhui <chunhui.jia@linux.intel.com>
-Signed-off-by: Yong Li <yong.b.li@linux.intel.com>
+Signed-off-by: huanghe <he.huang@intel.com>
---
- chassishandler.cpp | 28 +++++++++++++++++++++++++++-
+ chassishandler.cpp | 34 ++++++++++++++++++++++++++++++++++
chassishandler.hpp | 3 +++
- 2 files changed, 30 insertions(+), 1 deletion(-)
+ 2 files changed, 37 insertions(+)
diff --git a/chassishandler.cpp b/chassishandler.cpp
-index 305897b..ee23845 100644
+index f043340..322aa9e 100644
--- a/chassishandler.cpp
+++ b/chassishandler.cpp
-@@ -1399,6 +1399,10 @@ static ipmi_ret_t setBootMode(const Mode::Modes& mode)
- return IPMI_CC_OK;
+@@ -1564,6 +1564,10 @@ static ipmi::Cc setBootMode(const Mode::Modes& mode)
+ return ipmi::ccSuccess;
}
+static constexpr uint8_t setComplete = 0x0;
+static constexpr uint8_t setInProgress = 0x1;
+static uint8_t transferStatus = setComplete;
+
- ipmi_ret_t ipmi_chassis_get_sys_boot_options(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
- ipmi_request_t request,
- ipmi_response_t response,
-@@ -1413,11 +1417,21 @@ ipmi_ret_t ipmi_chassis_get_sys_boot_options(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
- get_sys_boot_options_t* reqptr = (get_sys_boot_options_t*)request;
+ /** @brief implements the Get Chassis system boot option
+ * @param bootOptionParameter - boot option parameter selector
+ * @param reserved1 - reserved bit
+@@ -1598,6 +1602,14 @@ ipmi::RspType<ipmi::message::Payload>
+
IpmiValue bootOption = ipmiDefault;
-+ if (reqptr->parameter ==
-+ static_cast<uint8_t>(BootOptionParameter::SET_IN_PROGRESS))
++
++ if (static_cast<uint8_t>(bootOptionParameter) ==
++ static_cast<uint8_t>(BootOptionParameter::setInProgress))
+ {
-+ *data_len =
-+ static_cast<uint8_t>(BootOptionResponseSize::SET_IN_PROGRESS);
-+ resp->version = SET_PARM_VERSION;
-+ resp->parm = static_cast<uint8_t>(BootOptionParameter::SET_IN_PROGRESS);
-+ resp->data[0] = transferStatus;
-+ return IPMI_CC_OK;
++ response.pack(bootOptionParameter,reserved1,transferStatus);
++ return ipmi::responseSuccess(std::move(response));
+ }
+
- std::memset(resp, 0, sizeof(*resp));
- resp->version = SET_PARM_VERSION;
- resp->parm = 5;
- resp->data[0] = SET_PARM_BOOT_FLAGS_VALID_ONE_TIME;
--
/*
* Parameter #5 means boot flags. Please refer to 28.13 of ipmi doc.
* This is the only parameter used by petitboot.
-@@ -1553,6 +1567,18 @@ ipmi_ret_t ipmi_chassis_set_sys_boot_options(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
- // This IPMI command does not have any resposne data
- *data_len = 0;
+@@ -1719,6 +1731,28 @@ ipmi::RspType<> ipmiChassisSetSysBootOptions(ipmi::Context::ptr ctx,
+ using namespace boot_options;
+ ipmi::Cc rc;
-+ if (reqptr->parameter ==
-+ static_cast<uint8_t>(BootOptionParameter::SET_IN_PROGRESS))
++ if (parameterSelector ==
++ static_cast<uint7_t>(BootOptionParameter::setInProgress))
+ {
++ uint2_t setInProgressFlag;
++ uint6_t rsvd;
++ if (data.unpack(setInProgressFlag,rsvd) != 0 ||
++ !data.fullyUnpacked())
++ {
++ return ipmi::responseReqDataLenInvalid();
++ }
++ if (rsvd)
++ {
++ return ipmi::responseInvalidFieldRequest();
++ }
+ if ((transferStatus == setInProgress) &&
-+ (reqptr->data[0] != setComplete))
++ ((uint8_t)setInProgressFlag != setComplete))
+ {
-+ return IPMI_CC_FAIL_SET_IN_PROGRESS;
++ return ipmi::response(IPMI_CC_FAIL_SET_IN_PROGRESS);
+ }
-+ transferStatus = reqptr->data[0];
-+ return IPMI_CC_OK;
++ transferStatus = (uint8_t)setInProgressFlag;
+ }
+
/* 000101
* Parameter #5 means boot flags. Please refer to 28.13 of ipmi doc.
* This is the only parameter used by petitboot.
diff --git a/chassishandler.hpp b/chassishandler.hpp
-index dcaf06c..353a929 100644
+index 93de2c0..5976abc 100644
--- a/chassishandler.hpp
+++ b/chassishandler.hpp
@@ -25,6 +25,7 @@ enum ipmi_chassis_return_codes
@@ -88,18 +85,18 @@ index dcaf06c..353a929 100644
};
enum class BootOptionParameter : size_t
{
-+ SET_IN_PROGRESS = 0x0,
- BOOT_INFO = 0x4,
- BOOT_FLAGS = 0x5,
- OPAL_NETWORK_SETTINGS = 0x61
++ setInProgress= 0x0,
+ bootInfo = 0x4,
+ bootFlags = 0x5,
+ opalNetworkSettings = 0x61
@@ -53,6 +55,7 @@ enum class BootOptionParameter : size_t
enum class BootOptionResponseSize : size_t
{
-+ SET_IN_PROGRESS = 3,
- BOOT_FLAGS = 5,
- OPAL_NETWORK_SETTINGS = 50
++ setInProgress = 3,
+ bootFlags = 5,
+ opalNetworkSettings = 50
};
--
-2.7.4
+2.17.1