diff options
Diffstat (limited to 'meta-openbmc-mods/meta-common/recipes-phosphor')
43 files changed, 335 insertions, 2041 deletions
diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/configuration/entity-manager_%.bbappend b/meta-openbmc-mods/meta-common/recipes-phosphor/configuration/entity-manager_%.bbappend index ff89f2ad2..9a25eafa9 100644 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/configuration/entity-manager_%.bbappend +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/configuration/entity-manager_%.bbappend @@ -1,6 +1,6 @@ # this is here just to bump faster than upstream SRC_URI = "git://github.com/openbmc/entity-manager.git" -SRCREV = "01542d2af1b1f45335cc8813fffcd3ed07f22989" +SRCREV = "41622a95da34e3aacbf2b70d687d3a3a7c816c8a" FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0016-Add-DBUS-interface-of-SMBIOS-MDR-V2.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0016-Add-DBUS-interface-of-SMBIOS-MDR-V2.patch deleted file mode 100644 index 576bae81a..000000000 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0016-Add-DBUS-interface-of-SMBIOS-MDR-V2.patch +++ /dev/null @@ -1,227 +0,0 @@ -From 9490574667485cd407193ff9f0d6a96f8c2c87d3 Mon Sep 17 00:00:00 2001 -From: cyang29 <cheng.c.yang@intel.com> -Date: Wed, 12 Sep 2018 00:27:23 +0800 -Subject: [PATCH] Add DBUS interface of SMBIOS MDR V2 - -Support: - SMBIOS MDR V2 service interface. - SMBIOS MDR V2 IPMI Command - SMBIOS MDR V2 Redfish interface. -Base on SMBIOS spec DSP0134_3.0.0 and Managed Data Region -Specification Revision 4 ---- - xyz/openbmc_project/Smbios/MDR_V2.errors.yaml | 9 + - xyz/openbmc_project/Smbios/MDR_V2.interface.yaml | 158 +++++++++++++++++++++++ - xyz/openbmc_project/Smbios/README.md | 21 +++ - 3 files changed, 188 insertions(+) - create mode 100644 xyz/openbmc_project/Smbios/MDR_V2.errors.yaml - create mode 100644 xyz/openbmc_project/Smbios/MDR_V2.interface.yaml - create mode 100644 xyz/openbmc_project/Smbios/README.md - -diff --git a/xyz/openbmc_project/Smbios/MDR_V2.errors.yaml b/xyz/openbmc_project/Smbios/MDR_V2.errors.yaml -new file mode 100644 -index 0000000..88bd6db ---- /dev/null -+++ b/xyz/openbmc_project/Smbios/MDR_V2.errors.yaml -@@ -0,0 +1,9 @@ -+- name: InvalidParameter -+ description: > -+ An invalid parameter is attempted. -+- name: UpdateInProgress -+ description: > -+ Update is in progress. -+- name: InvalidId -+ description: > -+ An invalid Id is attempted. -diff --git a/xyz/openbmc_project/Smbios/MDR_V2.interface.yaml b/xyz/openbmc_project/Smbios/MDR_V2.interface.yaml -new file mode 100644 -index 0000000..f97700a ---- /dev/null -+++ b/xyz/openbmc_project/Smbios/MDR_V2.interface.yaml -@@ -0,0 +1,158 @@ -+description: > -+ SMBIOS MDR V2 service -+methods: -+ - name: GetDirectoryInformation -+ description: > -+ Get the directory with directory index. -+ parameters: -+ - name: dirIndex -+ type: byte -+ description: > -+ Directory index of SMBIOS. -+ returns: -+ - name: dir -+ type: array[byte] -+ description: > -+ Directory of agent. -+ errors: -+ - self.Error.InvalidParameter -+ -+ - name: GetDataInformation -+ description: > -+ Get the data info with id index and data set ID. -+ parameters: -+ - name: idIndex -+ type: byte -+ description: > -+ Index of SMBIOS directory. -+ returns: -+ - name: dataInfo -+ type: array[byte] -+ description: > -+ Data information of SMBIOS. -+ errors: -+ - self.Error.InvalidParameter -+ -+ - name: SendDirectoryInformation -+ description: > -+ Send directory information to SMBIOS directory. -+ parameters: -+ - name: dirVersion -+ type: byte -+ description: > -+ A counter which increments each time directory updated. -+ - name: dirIndex -+ type: byte -+ description: > -+ Directory index of SMBIOS. -+ - name: returnedEntries -+ type: byte -+ description: > -+ Indicates number of directory entries. -+ - name: remainingEntries -+ type: byte -+ description: > -+ Remaining entries which are higher than index in this transfer. -+ - name: dirEntry -+ type: array[byte] -+ description: > -+ Data set ID of SMBIOS table. -+ returns: -+ - name: status -+ type: boolean -+ description: > -+ Need to continue directory transmisson or not. -+ errors: -+ - self.Error.InvalidParameter -+ -+ - name: GetDataOffer -+ description: > -+ Get data set ID. -+ returns: -+ - name: offer -+ type: array[byte] -+ description: > -+ Data set ID. -+ errors: -+ - self.Error.UpdateInProgress -+ -+ - name: SendDataInformation -+ description: > -+ Send data information with directory index. -+ parameters: -+ - name: idIndex -+ type: byte -+ description: > -+ Index of SMBIOS directory. -+ - name: flag -+ type: byte -+ description: > -+ Valid flag to set dir entry status. -+ - name: dataLen -+ type: uint32 -+ description: > -+ The length of the data in bytes. -+ - name: dataVer -+ type: uint32 -+ description: > -+ The version number of this data. -+ - name: timeStamp -+ type: uint32 -+ description: > -+ Timestamp determinded by the agent. -+ returns: -+ - name: status -+ type: boolean -+ description: > -+ Whether data changes. -+ errors: -+ - self.Error.InvalidParameter -+ -+ - name: FindIdIndex -+ description: > -+ Find id index by data info. -+ parameters: -+ - name: dataInfo -+ type: array[byte] -+ description: > -+ Data info of data entry. -+ returns: -+ - name: idIndex -+ type: int32 -+ description: > -+ Id index of data entry. -+ errors: -+ - self.Error.InvalidId -+ -+ - name: AgentSynchronizeData -+ description: > -+ Synchronize SMBIOS data from file. -+ returns: -+ - name: status -+ type: boolean -+ description: > -+ Whether synchronization succeed or not. -+ -+ - name: SynchronizeDirectoryCommonData -+ description: > -+ Synchronize directory common data. -+ parameters: -+ - name: idIndex -+ type: byte -+ description: > -+ Index of SMBIOS directory. -+ - name: size -+ type: uint32 -+ description: > -+ Size of data that BIOS prepare to transfer. -+ returns: -+ - name: commonData -+ type: array[uint32] -+ description: > -+ Directory common data includes data size, version and timestamp. -+ -+properties: -+ - name: DirectoryEntries -+ type: byte -+ description: > -+ Numbers of directory entries. -diff --git a/xyz/openbmc_project/Smbios/README.md b/xyz/openbmc_project/Smbios/README.md -new file mode 100644 -index 0000000..415ac52 ---- /dev/null -+++ b/xyz/openbmc_project/Smbios/README.md -@@ -0,0 +1,22 @@ -+# SMBIOS MDR V2 -+ -+## Overview -+SMBIOS MDR V2 service exposes D-Bus methods for SMBIOS Version 2 operations. -+ -+### SMBIOS MDR V2 Interface -+SMBIOS MDR V2 interface `xyz.openbmc_project.Smbios.MDR_V2` provides following -+methods. -+#### methods -+* GetDirectoryInformation - Get the directory with directory index. -+* GetDataInformation - Get the data information with id index and data set ID. -+* SendDirectoryInformation - Send directory information to SMBIOS directory. -+* GetDataOffer - Get data set ID. -+* SendDataInformation - Send data information with directory index. -+* FindIdIndex - Find id index by data info. -+* SynchronizeDirectoryCommonData - Synchronize directory common data before -+SMBIOS data start to transfer. -+* AgentSynchronizeData - Synchronize SMBIOS data from file after data transfer -+complete. -+ -+#### properties -+* DirEntries - Numbers of directory entries. Default: 0 diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0020-Create-dbus-interface-for-SOL-commands.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0020-Create-dbus-interface-for-SOL-commands.patch deleted file mode 100644 index 68d2c92b7..000000000 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0020-Create-dbus-interface-for-SOL-commands.patch +++ /dev/null @@ -1,76 +0,0 @@ -From 2820ca36ab21c52341cdbde477756f960eaeb68b Mon Sep 17 00:00:00 2001 -From: Cheng C Yang <cheng.c.yang@intel.com> -Date: Wed, 13 Mar 2019 11:19:07 +0800 -Subject: [PATCH] Create dbus interface for SOL commands - -Create dbus properties for Set/Get SOL config parameter command. -Some platforms need to call Set/Get SOL config parameter command -through KCS, and since sol manager in net-ipmid cannot be accessed -by commands in host-ipmid, need to create a dbus interface in -phospher-settings to transfer properties from host-ipmid to -net-ipmid. - -TestedBy: -With the related code change in net-ipmid, busctl introspect -xyz.openbmc_project.Ipmi.SOL /xyz/openbmc_project/SOL -can show all the properties needed. - -Signed-off-by: Cheng C Yang <cheng.c.yang@intel.com> ---- - xyz/openbmc_project/Ipmi/SOL.interface.yaml | 44 ++++++++++++++++++++++++++ - 1 file changed, 44 insertions(+) - create mode 100644 xyz/openbmc_project/Ipmi/SOL.interface.yaml - -diff --git a/xyz/openbmc_project/Ipmi/SOL.interface.yaml b/xyz/openbmc_project/Ipmi/SOL.interface.yaml -new file mode 100644 -index 0000000..94db59f ---- /dev/null -+++ b/xyz/openbmc_project/Ipmi/SOL.interface.yaml -@@ -0,0 +1,44 @@ -+description: > -+ SOL properties use for Get/Set SOL config parameter command in host-ipmid -+ sending config to SOL process in net-ipmid. -+ Since some platforms need to access Get/Set SOL config parameter command -+ through KCS, and current sol manager is implemented in net-ipmid and -+ cannot be accessed by host-ipmid, add a dbus interface for host-ipmid -+ command to transfer properties to net-ipmid. -+ This interface will be implemented in phosphor-settings. -+properties: -+ - name: Progress -+ type: byte -+ description: > -+ Set In Progress property, indicate when any parameters are being -+ updated. -+ - name: Enable -+ type: boolean -+ description: > -+ SOL Enable property, this controls whether the SOL payload type -+ can be activated. -+ - name: Authentication -+ type: byte -+ description: > -+ If SOL enable Force Payload Encryption and Authenticaton. -+ And the minimun operating privilege level SOL required. -+ - name: AccumulateIntervalMS -+ type: byte -+ description: > -+ Character Accumulate Interval in 5ms increments. -+ BMC will wait this time before transmitting a packet. -+ - name: Threshold -+ type: byte -+ description: > -+ BMC will automatically send an SOL character data packet containing -+ this number of characters as soon as this number of characters -+ (or greater) has been accepted from the baseboard serial controller. -+ - name: RetryCount -+ type: byte -+ description: > -+ Packet will be dropped if no ACK/NACK received by time retries -+ expire. -+ - name: RetryIntervalMS -+ type: byte -+ description: > -+ Retry Interval in 10ms increments. --- -2.16.2 - diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0022-Add-chassis-power-cycle-and-reset-to-Chassis-State.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0022-Add-chassis-power-cycle-and-reset-to-Chassis-State.patch deleted file mode 100644 index 181d12428..000000000 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0022-Add-chassis-power-cycle-and-reset-to-Chassis-State.patch +++ /dev/null @@ -1,40 +0,0 @@ -From b55c6847b18fdee5a72d601b871d73085481e4d9 Mon Sep 17 00:00:00 2001 -From: "Jason M. Bills" <jason.m.bills@linux.intel.com> -Date: Mon, 3 Jun 2019 16:31:29 -0700 -Subject: [PATCH] Add chassis power-cycle and reset to Chassis State - -This adds chassis PowerCycle and Reset as possible Transition -values for the Chassis State. These are to support chassis -power cycle and a chassis reset button, respectively. - -Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com> ---- - xyz/openbmc_project/State/Chassis.interface.yaml | 9 ++++++++- - 1 file changed, 8 insertions(+), 1 deletion(-) - -diff --git a/xyz/openbmc_project/State/Chassis.interface.yaml b/xyz/openbmc_project/State/Chassis.interface.yaml -index 4ae6274..470a3a2 100644 ---- a/xyz/openbmc_project/State/Chassis.interface.yaml -+++ b/xyz/openbmc_project/State/Chassis.interface.yaml -@@ -31,10 +31,17 @@ enumerations: - values: - - name: 'Off' - description: > -- Chassis power should be off -+ Chassis power should be off - - name: 'On' - description: > - Chassis power should be on -+ - name: 'PowerCycle' -+ description: > -+ Chassis power should be cycled -+ - name: 'Reset' -+ description: > -+ Chassis should be reset -+ - - - name: PowerState - description: > --- -2.7.4 - diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0026-Add-StandbySpare-support-for-software-inventory.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0026-Add-StandbySpare-support-for-software-inventory.patch index cbf966a37..36c63ec58 100644 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0026-Add-StandbySpare-support-for-software-inventory.patch +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces/0026-Add-StandbySpare-support-for-software-inventory.patch @@ -1,6 +1,6 @@ -From ae9e4b2a166dc4f34b255ed5338abbfa8aa37778 Mon Sep 17 00:00:00 2001 -From: Vikram Bodireddy <vikram.bodireddy@linux.intel.com> -Date: Sat, 30 Nov 2019 18:20:13 +0530 +From 0d6556539be9bda478a3cabb6127eace5764fa11 Mon Sep 17 00:00:00 2001 +From: Vikram Bodireddy <vikram.bodireddy@intel.com> +Date: Wed, 15 Jan 2020 10:01:04 +0800 Subject: [PATCH] Add StandbySpare support for software inventory Add support to allow update for active / recovery @@ -9,14 +9,13 @@ the backend modules to advertise whether the software object is active or recovery (StandbySpare) image. -Change-Id: I0d46206463ba566bcaa710fb271aa4d795fa49cd -Signed-off-by: Vikram Bodireddy <vikram.bodireddy@linux.intel.com> +Signed-off-by: Vikram Bodireddy <vikram.bodireddy@intel.com> --- xyz/openbmc_project/Software/Activation.interface.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/xyz/openbmc_project/Software/Activation.interface.yaml b/xyz/openbmc_project/Software/Activation.interface.yaml -index 37c9cb9..b71b8e7 100644 +index efeeeb6..6c9ce75 100644 --- a/xyz/openbmc_project/Software/Activation.interface.yaml +++ b/xyz/openbmc_project/Software/Activation.interface.yaml @@ -28,12 +28,20 @@ enumerations: @@ -37,10 +36,10 @@ index 37c9cb9..b71b8e7 100644 + description: > + The Software.Version is part of a redundancy set and awaits + a failover or external action to activate. - - name: RequestedActivations - description: > - The possible RequestedActivation states of a Software.Version. -@@ -44,6 +52,10 @@ enumerations: + - name: Staged + description: > + The Software.Version is currently in staged flash area. +@@ -48,6 +56,10 @@ enumerations: - name: Active description: > The Software.Version has been requested for Activation. diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces_%.bbappend b/meta-openbmc-mods/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces_%.bbappend index d9240f760..9690ec20f 100644 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces_%.bbappend +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/dbus/phosphor-dbus-interfaces_%.bbappend @@ -1,5 +1,5 @@ SRC_URI = "git://github.com/openbmc/phosphor-dbus-interfaces.git" -SRCREV = "1b02c38979ab4fa2649699a26266367b115eee7c" +SRCREV = "79064a8e0c49b35cfa1c343cef31f21ebfd7298d" FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" @@ -8,8 +8,6 @@ SRC_URI += "file://0005-Add-DBUS-interface-of-CPU-and-Memory-s-properties.patch file://0010-Increase-the-default-watchdog-timeout-value.patch \ file://0012-Add-RestoreDelay-interface-for-power-restore-delay.patch \ file://0013-Add-ErrConfig.yaml-interface-for-processor-error-config.patch \ - file://0016-Add-DBUS-interface-of-SMBIOS-MDR-V2.patch \ - file://0022-Add-chassis-power-cycle-and-reset-to-Chassis-State.patch \ file://0024-Add-the-pre-timeout-interrupt-defined-in-IPMI-spec.patch \ file://0025-Add-PreInterruptFlag-properity-in-DBUS.patch \ file://0001-Reapply-Enhance-DHCP-beyond-just-OFF-and-IPv4-IPv6-e.patch \ diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0007-PFR-images-support.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0007-PFR-images-support.patch index 34d5b6e67..92b3ced38 100644 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0007-PFR-images-support.patch +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/flash/phosphor-software-manager/0007-PFR-images-support.patch @@ -99,12 +99,15 @@ diff --git a/item_updater.cpp b/item_updater.cpp index 21fb6e0..fd76a7f 100644 --- a/item_updater.cpp +++ b/item_updater.cpp -@@ -64,7 +64,8 @@ void ItemUpdater::createActivation(sdbusplus::message::message& msg) +@@ -64,10 +64,10 @@ void ItemUpdater::createActivation(sdbusplus::message::message& msg) auto value = SVersion::convertVersionPurposeFromString( variant_ns::get<std::string>(property.second)); if (value == VersionPurpose::BMC || +-#ifdef HOST_BIOS_UPGRADE ++#if defined(HOST_BIOS_UPGRADE) || defined(PFR_UPDATE) + value == VersionPurpose::Host || + #endif - value == VersionPurpose::System) -+ value == VersionPurpose::Host || + value == VersionPurpose::Other) { purpose = value; diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/interfaces/bmcweb/0001-Firmware-update-support-for-StandBySpare.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/interfaces/bmcweb/0001-Firmware-update-support-for-StandBySpare.patch index 9e7cdf768..dc3ec060e 100644 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/interfaces/bmcweb/0001-Firmware-update-support-for-StandBySpare.patch +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/interfaces/bmcweb/0001-Firmware-update-support-for-StandBySpare.patch @@ -1,6 +1,6 @@ -From ba9d7f8443716887bc101e300b06c570f7da8159 Mon Sep 17 00:00:00 2001 -From: Vikram Bodireddy <vikram.bodireddy@linux.intel.com> -Date: Thu, 5 Dec 2019 15:13:52 +0530 +From 17caf10b048450979dcd95a9f9333bbaa8c307ec Mon Sep 17 00:00:00 2001 +From: AppaRao Puli <apparao.puli@linux.intel.com> +Date: Fri, 10 Jan 2020 08:16:10 +0530 Subject: [PATCH] Firmware update support for StandBySpare Firmware update support for StandBySpare. This will @@ -28,12 +28,13 @@ Tested: Change-Id: I59f317ac001ebf56bbf30e7f43dbec5d69fa249a Signed-off-by: Vikram Bodireddy <vikram.bodireddy@linux.intel.com> +Signed-off-by: AppaRao Puli <apparao.puli@linux.intel.com> --- - redfish-core/lib/update_service.hpp | 285 ++++++++++++++++++++++++++++++------ - 1 file changed, 241 insertions(+), 44 deletions(-) + redfish-core/lib/update_service.hpp | 284 ++++++++++++++++++++++++++++++------ + 1 file changed, 241 insertions(+), 43 deletions(-) diff --git a/redfish-core/lib/update_service.hpp b/redfish-core/lib/update_service.hpp -index 57dcc07..c189d5a 100644 +index ec9600e..9daf6ce 100644 --- a/redfish-core/lib/update_service.hpp +++ b/redfish-core/lib/update_service.hpp @@ -30,6 +30,17 @@ static std::unique_ptr<sdbusplus::bus::match::match> fwUpdateMatcher; @@ -448,18 +449,17 @@ index 57dcc07..c189d5a 100644 std::string filepath( "/tmp/images/" + -@@ -569,9 +770,7 @@ class SoftwareInventoryCollection : public Node - "xyz.openbmc_project.ObjectMapper", +@@ -574,8 +775,7 @@ class SoftwareInventoryCollection : public Node "/xyz/openbmc_project/object_mapper", - "xyz.openbmc_project.ObjectMapper", "GetSubTree", "/", -- static_cast<int32_t>(0), + "xyz.openbmc_project.ObjectMapper", "GetSubTree", + "/xyz/openbmc_project/software", static_cast<int32_t>(0), - std::array<const char *, 1>{ - "xyz.openbmc_project.Software.Version"}); -+ static_cast<int32_t>(0), std::array<const char *, 1>{versionIntf}); ++ std::array<const char *, 1>{versionIntf}); } }; -@@ -756,7 +955,7 @@ class SoftwareInventory : public Node +@@ -760,7 +960,7 @@ class SoftwareInventory : public Node }, obj.second[0].first, obj.first, "org.freedesktop.DBus.Properties", "GetAll", @@ -468,7 +468,7 @@ index 57dcc07..c189d5a 100644 } if (!found) { -@@ -778,9 +977,7 @@ class SoftwareInventory : public Node +@@ -781,9 +981,7 @@ class SoftwareInventory : public Node "xyz.openbmc_project.ObjectMapper", "/xyz/openbmc_project/object_mapper", "xyz.openbmc_project.ObjectMapper", "GetSubTree", "/", diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/interfaces/bmcweb_%.bbappend b/meta-openbmc-mods/meta-common/recipes-phosphor/interfaces/bmcweb_%.bbappend index 3c679fc51..795d34daf 100644 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/interfaces/bmcweb_%.bbappend +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/interfaces/bmcweb_%.bbappend @@ -1,5 +1,5 @@ SRC_URI = "git://github.com/openbmc/bmcweb.git" -SRCREV = "123e823757a6efc08b215766124ba7321e3cca55" +SRCREV = "f723d7332bbdd7b0d4fbe4aa730b63dfd8db7eff" FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" @@ -9,18 +9,8 @@ USERADD_PARAM_${PN} = "-r -s /usr/sbin/nologin -d /home/bmcweb -m -G shadow bmcw GROUPADD_PARAM_${PN} = "web; redfish " -SRC_URI += "file://0001-Firmware-update-support-for-StandBySpare.patch \ - " - -# Enable CPU Log and Raw PECI support -EXTRA_OECMAKE += "-DBMCWEB_ENABLE_REDFISH_CPU_LOG=ON" -EXTRA_OECMAKE += "-DBMCWEB_ENABLE_REDFISH_RAW_PECI=ON" - -# Enable Redfish BMC Journal support -EXTRA_OECMAKE += "-DBMCWEB_ENABLE_REDFISH_BMC_JOURNAL=ON" +SRC_URI += "file://0001-Firmware-update-support-for-StandBySpare.patch" # Enable PFR support EXTRA_OECMAKE += "${@bb.utils.contains('IMAGE_FSTYPES', 'intel-pfr', '-DBMCWEB_ENABLE_REDFISH_PROVISIONING_FEATURE=ON', '', d)}" -#Disable the Dbus interface -EXTRA_OECMAKE += "-DBMCWEB_ENABLE_DBUS_REST=OFF" diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/ipmitool_%.bbappend b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/ipmitool_%.bbappend new file mode 100644 index 000000000..84e250b66 --- /dev/null +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/ipmitool_%.bbappend @@ -0,0 +1,6 @@ + +# Disable the shell to remove the usage of readline lib +# to fix the license conflict issue. More information: +# https://lists.ozlabs.org/pipermail/openbmc/2019-November/019678.html + +EXTRA_OECONF_append = " --disable-ipmishell" 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 index 1e4d3b0a9..7e3f92dbc 100644 --- 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 @@ -1,4 +1,4 @@ -From 3db78afe49a662ce7e90f3f5ce40d625a54d576b Mon Sep 17 00:00:00 2001 +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 @@ -27,24 +27,24 @@ 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 | 88 ++++++++++++++++++++++++++++++++++++-------- - 1 file changed, 73 insertions(+), 15 deletions(-) + transporthandler.cpp | 97 ++++++++++++++++++++++++++++++++++++-------- + 1 file changed, 79 insertions(+), 18 deletions(-) diff --git a/transporthandler.cpp b/transporthandler.cpp -index 09df184..8dc5677 100644 +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 const char* dhcpv4v6 = ++static constexpr auto dhcpv4v6 = + "xyz.openbmc_project.Network.EthernetInterface.DHCPConf.both"; -+static const char* dhcpv6 = ++static constexpr auto dhcpv6 = + "xyz.openbmc_project.Network.EthernetInterface.DHCPConf.v6"; -+static const char* dhcpv4 = ++static constexpr auto dhcpv4 = + "xyz.openbmc_project.Network.EthernetInterface.DHCPConf.v4"; -+static const char* dhcpoff = ++static constexpr auto dhcpoff = + "xyz.openbmc_project.Network.EthernetInterface.DHCPConf.none"; + +static std::array<const char*, 4> dhcpEnumerations = {dhcpv4v6, dhcpv4, dhcpv6, @@ -134,7 +134,17 @@ index 09df184..8dc5677 100644 } /** @brief Creates a new VLAN on the specified interface -@@ -1395,7 +1445,11 @@ RspType<> setLan(uint4_t channelBits, uint4_t, uint8_t parameter, +@@ -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: { @@ -147,7 +157,7 @@ index 09df184..8dc5677 100644 return responseSuccess(); } case IPSrc::Unspecified: -@@ -1403,7 +1457,7 @@ RspType<> setLan(uint4_t channelBits, uint4_t, uint8_t parameter, +@@ -1439,7 +1494,7 @@ RspType<> setLan(uint4_t channelBits, uint4_t, uint8_t parameter, case IPSrc::BIOS: case IPSrc::BMC: { @@ -156,27 +166,47 @@ index 09df184..8dc5677 100644 return responseSuccess(); } } -@@ -1540,7 +1594,8 @@ RspType<> setLan(uint4_t channelBits, uint4_t, uint8_t parameter, +@@ -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)) ++ if ((dhcp == dhcpv4v6) || (dhcp == dhcpv6)) { expected[IPv6RouterControlFlag::Dynamic] = 1; } -@@ -1690,7 +1745,8 @@ RspType<message::Payload> getLan(uint4_t channelBits, uint3_t, bool revOnly, +@@ -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 dhcpSetting = channelCall<getDHCPProperty>(channel); -+ if ((dhcpSetting == dhcpv4) || (dhcpSetting == dhcpv4v6)) ++ std::string dhcp = channelCall<getDHCPProperty>(channel); ++ if ((dhcp == dhcpv4) || (dhcp == dhcpv4v6)) { src = IPSrc::DHCP; } -@@ -1811,7 +1867,8 @@ RspType<message::Payload> getLan(uint4_t channelBits, uint3_t, bool revOnly, +@@ -1877,7 +1936,8 @@ RspType<message::Payload> getLan(uint4_t channelBits, uint3_t, bool revOnly, case LanParam::IPv6RouterControl: { std::bitset<8> control; @@ -186,7 +216,7 @@ index 09df184..8dc5677 100644 { control[IPv6RouterControlFlag::Dynamic] = 1; } -@@ -1825,7 +1882,8 @@ RspType<message::Payload> getLan(uint4_t channelBits, uint3_t, bool revOnly, +@@ -1891,7 +1951,8 @@ RspType<message::Payload> getLan(uint4_t channelBits, uint3_t, bool revOnly, case LanParam::IPv6StaticRouter1IP: { in6_addr gateway{}; @@ -197,5 +227,5 @@ index 09df184..8dc5677 100644 gateway = channelCall<getGatewayProperty<AF_INET6>>(channel).value_or( -- -2.21.0 +2.24.1 diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0002-Fixed-issue-in-setLan-command-for-IP-source.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0002-Fixed-issue-in-setLan-command-for-IP-source.patch deleted file mode 100644 index 6f080a4f4..000000000 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0002-Fixed-issue-in-setLan-command-for-IP-source.patch +++ /dev/null @@ -1,62 +0,0 @@ -From 12ebdc2d53a18d286e34abf0f1553ca423ca6ca5 Mon Sep 17 00:00:00 2001 -From: Rajashekar Gade Reddy <raja.sekhar.reddy.gade@linux.intel.com> -Date: Wed, 18 Dec 2019 12:01:36 +0530 -Subject: [PATCH] Fixed issue in setLan command for IP source. - -Issue: returns success completion code for multiple requests which -is not correct as per IPMI spec. - -Fix: Added proper conditional checks - -Tested: -//IP Address Source: 0x0 (unspecified) -ipmitool -I lanplus -U root -P 0penBmc -H <ip_addr> raw 0x0c 0x01 0x03 0x04 0x0 -0xCC// Invalid data field in request - -//IP Address Source: 0x1 (static address) -ipmitool -I lanplus -U root -P 0penBmc -H <ip_addr> raw 0x0c 0x01 0x03 0x04 0x1 -0x00 //Success - -//IP Address Source: 0x2 (address obtained by BMC running DHCP) -ipmitool -I lanplus -U root -P 0penBmc -H <ip_addr> raw 0x0c 0x01 0x03 0x04 0x2 -0x00 //Success - -//IP Address Source: 0x3 (address loaded by the BIOS or system software) -ipmitool -I lanplus -U root -P 0penBmc -H <ip_addr> raw 0x0c 0x01 0x03 0x04 0x3 -0xCC// Invalid data field in request - -//IP Address Source: 0x4 (address obtained by BMC running other address assignment protocol) -ipmitool -I lanplus -U root -P 0penBmc -H <ip_addr> raw 0x0c 0x01 0x03 0x04 0x4 -0xCC// Invalid data field in request - -ipmitool -I lanplus -U root -P 0penBmc -H <ip_addr> raw 0x0c 0x01 0x03 0x04 0x5 -0x80 // param not supported - -Signed-off-by: Rajashekar Gade Reddy <raja.sekhar.reddy.gade@linux.intel.com> - -%% original patch: 0002-Fixed-issue-in-setLan-command-for-IP-source.patch ---- - transporthandler.cpp | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/transporthandler.cpp b/transporthandler.cpp -index 7407396..2df3e45 100644 ---- a/transporthandler.cpp -+++ b/transporthandler.cpp -@@ -1453,9 +1453,12 @@ RspType<> setLan(uint4_t channelBits, uint4_t, uint8_t parameter, - return responseSuccess(); - } - case IPSrc::Unspecified: -- case IPSrc::Static: - case IPSrc::BIOS: - case IPSrc::BMC: -+ { -+ return responseInvalidFieldRequest(); -+ } -+ case IPSrc::Static: - { - channelCall<setDHCPProperty>(channel, dhcpoff); - return responseSuccess(); --- -2.17.1 - diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0003-Fix-for-return-CC-in-setLan-command-cases.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0003-Fix-for-return-CC-in-setLan-command-cases.patch deleted file mode 100644 index bab451f32..000000000 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0003-Fix-for-return-CC-in-setLan-command-cases.patch +++ /dev/null @@ -1,69 +0,0 @@ -From 8b3cb6842746d43c0cab3d32821dc5239768642f Mon Sep 17 00:00:00 2001 -From: "Joshi, Mansi" <mansi.joshi@linux.intel.com> -Date: Wed, 18 Dec 2019 15:10:25 +0530 -Subject: [PATCH] Fix for return CC in setLan command cases - -Issue: When DHCP is enabled, setting ip and setting subnet mask returns -completion code 0xff. Setting default gateway returns 0x00. - -Fix: Returns CC 0xd5 because this parameter is R/W. It is only unable -to be updated because the current state blocks it (i.e. 0xd5). - -Tested: -ipmitool raw 0x0c 0x01 0x03 0x03 0x00 0x00 0x00 0x00 //setting ip -0xd5 //Command, or request parameter, not supported in present state. - -ipmitool raw 0x0c 0x01 0x03 0x06 0xff 0xff 0xf0 0x00 //subnet mask -0xd5 //Command, or request parameter, not supported in present state. - -ipmitool raw 0x0c 0x01 0x03 0x0c 0x0a 0xfe 0xef 0x77 //default gateway -0xd5 //Command, or request parameter, not supported in present state. - -%% original patch: 0065-Fix-for-return-CC-in-setLan-command-cases.patch ---- - transporthandler.cpp | 15 +++++++++++++++ - 1 file changed, 15 insertions(+) - -diff --git a/transporthandler.cpp b/transporthandler.cpp -index 7407396..7b9ff3d 100644 ---- a/transporthandler.cpp -+++ b/transporthandler.cpp -@@ -1423,6 +1423,11 @@ RspType<> setLan(uint4_t channelBits, uint4_t, uint8_t parameter, - } - case LanParam::IP: - { -+ std::string dhcp = channelCall<getDHCPProperty>(channel); -+ if ((dhcp == dhcpv4) || (dhcp == dhcpv4v6)) -+ { -+ return responseCommandNotAvailable(); -+ } - in_addr ip; - std::array<uint8_t, sizeof(ip)> bytes; - if (req.unpack(bytes) != 0 || !req.fullyUnpacked()) -@@ -1477,6 +1482,11 @@ RspType<> setLan(uint4_t channelBits, uint4_t, uint8_t parameter, - } - case LanParam::SubnetMask: - { -+ std::string dhcp = channelCall<getDHCPProperty>(channel); -+ if ((dhcp == dhcpv4) || (dhcp == dhcpv4v6)) -+ { -+ return responseCommandNotAvailable(); -+ } - in_addr netmask; - std::array<uint8_t, sizeof(netmask)> bytes; - if (req.unpack(bytes) != 0 || !req.fullyUnpacked()) -@@ -1490,6 +1500,11 @@ RspType<> setLan(uint4_t channelBits, uint4_t, uint8_t parameter, - } - case LanParam::Gateway1: - { -+ std::string dhcp = channelCall<getDHCPProperty>(channel); -+ if ((dhcp == dhcpv4) || (dhcp == dhcpv4v6)) -+ { -+ return responseCommandNotAvailable(); -+ } - in_addr gateway; - std::array<uint8_t, sizeof(gateway)> bytes; - if (req.unpack(bytes) != 0 || !req.fullyUnpacked()) --- -2.7.4 - diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0009-IPv6-Network-changes.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0009-IPv6-Network-changes.patch deleted file mode 100644 index c862a306a..000000000 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0009-IPv6-Network-changes.patch +++ /dev/null @@ -1,877 +0,0 @@ -From c20bc8eb6a08d177d951012eb91b37398b15d81d Mon Sep 17 00:00:00 2001 -From: Vernon Mauery <vernon.mauery@linux.intel.com> -Date: Tue, 27 Nov 2018 11:01:15 -0800 -Subject: [PATCH] IPv6 Network changes - -Allow IPv6 IPMI set/get commands - -Signed-off-by: David Cobbley <david.j.cobbley@linux.intel.com> -Signed-off-by: Yong Li <yong.b.li@linux.intel.com> -Signed-off-by: Vernon Mauery <vernon.mauery@linux.intel.com> - -Change-Id: If5528d3b7294c5f8c17db5919439235d0fad0446 ---- - include/ipmid/types.hpp | 9 + - include/ipmid/utils.hpp | 1 + - transporthandler.cpp | 654 +++++++++++++++++++++++++++++++++++++++- - transporthandler.hpp | 50 +++ - 4 files changed, 713 insertions(+), 1 deletion(-) - -Index: phosphor-host-ipmid.clean/include/ipmid/types.hpp -=================================================================== ---- phosphor-host-ipmid.clean.orig/include/ipmid/types.hpp -+++ phosphor-host-ipmid.clean/include/ipmid/types.hpp -@@ -224,6 +224,7 @@ constexpr auto ADDR_TYPE_FORMAT = "%hhx" - - constexpr auto IPV4_ADDRESS_SIZE_BYTE = 4; - constexpr auto IPV6_ADDRESS_SIZE_BYTE = 16; -+constexpr auto IPV6_ADDRESS_STATUS_SIZE = 22; - - constexpr auto DEFAULT_MAC_ADDRESS = "00:00:00:00:00:00"; - constexpr auto DEFAULT_ADDRESS = "0.0.0.0"; -@@ -235,6 +236,7 @@ constexpr auto BITS_32 = 32; - constexpr auto MASK_32_BIT = 0xFFFFFFFF; - constexpr auto VLAN_ID_MASK = 0x00000FFF; - constexpr auto VLAN_ENABLE_MASK = 0x8000; -+constexpr auto IPV6_DUID_SIZE = 18; - - enum class IPOrigin : uint8_t - { -@@ -243,5 +245,12 @@ enum class IPOrigin : uint8_t - DHCP = 2, - }; - -+enum class AddressingEnables : uint8_t -+{ -+ IPv4Only = 0, -+ IPv6Only = 1, -+ IPv4AndIPv6 = 2, -+}; -+ - } // namespace network - } // namespace ipmi -Index: phosphor-host-ipmid.clean/include/ipmid/utils.hpp -=================================================================== ---- phosphor-host-ipmid.clean.orig/include/ipmid/utils.hpp -+++ phosphor-host-ipmid.clean/include/ipmid/utils.hpp -@@ -256,6 +256,7 @@ namespace network - constexpr auto ROOT = "/xyz/openbmc_project/network"; - constexpr auto SERVICE = "xyz.openbmc_project.Network"; - constexpr auto IP_TYPE = "ipv4"; -+constexpr auto IPV6_TYPE = "ipv6"; - constexpr auto IPV4_PREFIX = "169.254"; - constexpr auto IPV6_PREFIX = "fe80"; - constexpr auto IP_INTERFACE = "xyz.openbmc_project.Network.IP"; -Index: phosphor-host-ipmid.clean/transporthandler.cpp -=================================================================== ---- phosphor-host-ipmid.clean.orig/transporthandler.cpp -+++ phosphor-host-ipmid.clean/transporthandler.cpp -@@ -29,6 +29,12 @@ std::unique_ptr<phosphor::Timer> network - - const int SIZE_MAC = 18; // xx:xx:xx:xx:xx:xx - constexpr auto ipv4Protocol = "xyz.openbmc_project.Network.IP.Protocol.IPv4"; -+constexpr auto ipv6Protocol = "xyz.openbmc_project.Network.IP.Protocol.IPv6"; -+ -+static const std::array<std::string, 3> ipAddressEnablesType = { -+ "xyz.openbmc_project.Network.EthernetInterface.IPAllowed.IPv4Only", -+ "xyz.openbmc_project.Network.EthernetInterface.IPAllowed.IPv6Only", -+ "xyz.openbmc_project.Network.EthernetInterface.IPAllowed.IPv4AndIPv6"}; - - std::map<int, std::unique_ptr<struct ChannelConfig_t>> channelConfig; - -@@ -445,6 +451,11 @@ ipmi_ret_t ipmi_transport_set_lan(ipmi_n - { - case LanParam::IP: - { -+ if (reqLen != lanParamIPSize) -+ { -+ return IPMI_CC_REQ_DATA_LEN_INVALID; -+ } -+ - std::snprintf(ipaddr, INET_ADDRSTRLEN, - ipmi::network::IP_ADDRESS_FORMAT, reqptr->data[0], - reqptr->data[1], reqptr->data[2], reqptr->data[3]); -@@ -455,6 +466,11 @@ ipmi_ret_t ipmi_transport_set_lan(ipmi_n - - case LanParam::IPSRC: - { -+ if (reqLen != lanParamIPSrcSize) -+ { -+ return IPMI_CC_REQ_DATA_LEN_INVALID; -+ } -+ - uint8_t ipsrc{}; - std::memcpy(&ipsrc, reqptr->data, ipmi::network::IPSRC_SIZE_BYTE); - channelConf->ipsrc = static_cast<ipmi::network::IPOrigin>(ipsrc); -@@ -463,6 +479,11 @@ ipmi_ret_t ipmi_transport_set_lan(ipmi_n - - case LanParam::MAC: - { -+ if (reqLen != lanParamMACSize) -+ { -+ return IPMI_CC_REQ_DATA_LEN_INVALID; -+ } -+ - char mac[SIZE_MAC]; - - std::snprintf(mac, SIZE_MAC, ipmi::network::MAC_ADDRESS_FORMAT, -@@ -483,6 +504,11 @@ ipmi_ret_t ipmi_transport_set_lan(ipmi_n - - case LanParam::SUBNET: - { -+ if (reqLen != lanParamSubnetSize) -+ { -+ return IPMI_CC_REQ_DATA_LEN_INVALID; -+ } -+ - std::snprintf(netmask, INET_ADDRSTRLEN, - ipmi::network::IP_ADDRESS_FORMAT, reqptr->data[0], - reqptr->data[1], reqptr->data[2], reqptr->data[3]); -@@ -492,6 +518,11 @@ ipmi_ret_t ipmi_transport_set_lan(ipmi_n - - case LanParam::GATEWAY: - { -+ if (reqLen != lanParamGatewaySize) -+ { -+ return IPMI_CC_REQ_DATA_LEN_INVALID; -+ } -+ - std::snprintf(gateway, INET_ADDRSTRLEN, - ipmi::network::IP_ADDRESS_FORMAT, reqptr->data[0], - reqptr->data[1], reqptr->data[2], reqptr->data[3]); -@@ -522,6 +553,11 @@ ipmi_ret_t ipmi_transport_set_lan(ipmi_n - - case LanParam::INPROGRESS: - { -+ if (reqLen != lanParamInProgressSize) -+ { -+ return IPMI_CC_REQ_DATA_LEN_INVALID; -+ } -+ - if (reqptr->data[0] == SET_COMPLETE) - { - channelConf->lan_set_in_progress = SET_COMPLETE; -@@ -540,6 +576,122 @@ ipmi_ret_t ipmi_transport_set_lan(ipmi_n - } - break; - -+ case LanParam::IPV6_AND_IPV4_ENABLES: -+ { -+ if (reqLen != lanParamIPv6AndIPv4EnablesSize) -+ { -+ return IPMI_CC_REQ_DATA_LEN_INVALID; -+ } -+ -+ channelConf->ipv6AddressingEnables = reqptr->data[0]; -+ break; -+ } -+ -+ case LanParam::IPV6_STATIC_ADDRESSES: -+ { -+ if (reqLen != lanParamIPv6StaticAddressesSize) -+ { -+ return IPMI_CC_REQ_DATA_LEN_INVALID; -+ } -+ -+ channelConf->ipv6AddressSource = -+ reqptr->data[1] & 0x81; // Looking at bit 0 and bit 7 -+ char tmpIPV6[INET6_ADDRSTRLEN]; -+ inet_ntop(AF_INET6, &reqptr->data[2], tmpIPV6, INET6_ADDRSTRLEN); -+ channelConf->ipv6Addr.assign(tmpIPV6); -+ channelConf->ipv6Prefix = reqptr->data[19]; -+ break; -+ } -+ -+ case LanParam::IPV6_ROUTER_ADDRESS_CONF_CTRL: -+ { -+ if (reqLen != lanParamIPv6RouterAddressConfCtrlSize) -+ { -+ return IPMI_CC_REQ_DATA_LEN_INVALID; -+ } -+ -+ channelConf->ipv6RouterAddressConfigControl = reqptr->data[0]; -+ break; -+ } -+ -+ case LanParam::IPV6_STATIC_ROUTER_1_IP_ADDR: -+ { -+ if (reqLen != lanParamIPv6StaticRouter1IPAddrSize) -+ { -+ return IPMI_CC_REQ_DATA_LEN_INVALID; -+ } -+ -+ char tmpIPV6[INET6_ADDRSTRLEN]; -+ inet_ntop(AF_INET6, reinterpret_cast<const void*>(reqptr->data), -+ tmpIPV6, INET6_ADDRSTRLEN); -+ channelConf->ipv6GatewayAddr.assign(tmpIPV6); -+ break; -+ } -+ -+ case LanParam::IPV6_STATIC_ROUTER_1_PREFIX_LEN: -+ { -+ if (reqLen != lanParamIPv6StaticRouter1PrefixLenSize) -+ { -+ return IPMI_CC_REQ_DATA_LEN_INVALID; -+ } -+ -+ channelConf->ipv6GatewayPrefixLength = reqptr->data[0]; -+ break; -+ } -+ -+ case LanParam::IPV6_STATIC_ROUTER_1_PREFIX_VAL: -+ { -+ if (reqLen != lanParamIPv6StaticRouter1PrefixValSize) -+ { -+ return IPMI_CC_REQ_DATA_LEN_INVALID; -+ } -+ -+ char tmpIPV6[INET6_ADDRSTRLEN]; -+ inet_ntop(AF_INET6, reinterpret_cast<const void*>(reqptr->data), -+ tmpIPV6, INET6_ADDRSTRLEN); -+ channelConf->ipv6GatewayPrefixValue.assign(tmpIPV6); -+ break; -+ } -+ -+ case LanParam::IPV6_STATIC_ROUTER_2_IP_ADDR: -+ { -+ if (reqLen != lanParamIPv6StaticRouter2IPAddrSize) -+ { -+ return IPMI_CC_REQ_DATA_LEN_INVALID; -+ } -+ -+ char tmpIPV6[INET6_ADDRSTRLEN]; -+ inet_ntop(AF_INET6, reinterpret_cast<const void*>(reqptr->data), -+ tmpIPV6, INET6_ADDRSTRLEN); -+ channelConf->ipv6BackupGatewayAddr.assign(tmpIPV6); -+ break; -+ } -+ -+ case LanParam::IPV6_STATIC_ROUTER_2_PREFIX_LEN: -+ { -+ if (reqLen != lanParamIPv6StaticRouter2PrefixLenSize) -+ { -+ return IPMI_CC_REQ_DATA_LEN_INVALID; -+ } -+ -+ channelConf->ipv6BackupGatewayPrefixLength = reqptr->data[0]; -+ break; -+ } -+ -+ case LanParam::IPV6_STATIC_ROUTER_2_PREFIX_VAL: -+ { -+ if (reqLen != lanParamIPv6StaticRouter2PrefixValSize) -+ { -+ return IPMI_CC_REQ_DATA_LEN_INVALID; -+ } -+ -+ char tmpIPV6[INET6_ADDRSTRLEN]; -+ inet_ntop(AF_INET6, reinterpret_cast<const void*>(reqptr->data), -+ tmpIPV6, INET6_ADDRSTRLEN); -+ channelConf->ipv6BackupGatewayPrefixValue.assign(tmpIPV6); -+ break; -+ } -+ - default: - { - rc = IPMI_CC_PARM_NOT_SUPPORTED; -@@ -568,6 +720,7 @@ ipmi_ret_t ipmi_transport_get_lan(ipmi_n - ipmi_ret_t rc = IPMI_CC_OK; - *data_len = 0; - const uint8_t current_revision = 0x11; // Current rev per IPMI Spec 2.0 -+ sdbusplus::bus::bus bus{ipmid_get_sd_bus_connection()}; - - get_lan_t* reqptr = (get_lan_t*)request; - // channel number is the lower nibble -@@ -713,6 +866,476 @@ ipmi_ret_t ipmi_transport_get_lan(ipmi_n - static_cast<uint8_t>(cipherList.size()); - break; - } -+ case LanParam::IPV6_AND_IPV4_SUPPORTED: -+ { -+ uint8_t addressSupport = -+ 0x1; // Allow both IPv4 & IPv6 simultaneously -+ std::array<uint8_t, 2> buf = {current_revision, addressSupport}; -+ std::copy(buf.begin(), buf.end(), static_cast<uint8_t*>(response)); -+ *data_len = buf.size(); -+ break; -+ } -+ case LanParam::IPV6_AND_IPV4_ENABLES: -+ { -+ // If DHCP, check if you have an ipv6 and ipv4 address. If static -+ // return not supported -+ -+ // 00h check if conf DHCP == ipv4 or off -+ // 01h check if conf DHCP == ipv6 -+ // 02h check if DHCP == true -+ -+ auto ethIP = ethdevice + "/" + ipmi::network::IPV6_TYPE; -+ std::string networkInterfacePath; -+ uint8_t ipVAddressEnables = 0; -+ -+ if (channelConf->lan_set_in_progress == SET_COMPLETE) -+ { -+ try -+ { -+ ipmi::ObjectTree ancestorMap; -+ // if the system has an ip object,then -+ // get the IP object. -+ auto ipObject = -+ ipmi::getDbusObject(bus, ipmi::network::IP_INTERFACE, -+ ipmi::network::ROOT, ethIP); -+ // Get the parent interface of the IP object. -+ try -+ { -+ ipmi::InterfaceList interfaces; -+ interfaces.emplace_back( -+ ipmi::network::ETHERNET_INTERFACE); -+ -+ ancestorMap = ipmi::getAllAncestors( -+ bus, ipObject.first, std::move(interfaces)); -+ } -+ catch (InternalFailure& e) -+ { -+ // if unable to get the parent interface -+ // then commit the error and return. -+ log<level::ERR>( -+ "Unable to get the parent interface", -+ entry("PATH=%s", ipObject.first.c_str()), -+ entry("INTERFACE=%s", -+ ipmi::network::ETHERNET_INTERFACE)); -+ return IPMI_CC_UNSPECIFIED_ERROR; -+ } -+ // for an ip object there would be single parent -+ // interface. -+ networkInterfacePath = ancestorMap.begin()->first; -+ } -+ catch (InternalFailure& e) -+ { -+ // if there is no ip configured on the system,then -+ // get the network interface object. -+ auto networkInterfaceObject = ipmi::getDbusObject( -+ bus, ipmi::network::ETHERNET_INTERFACE, -+ ipmi::network::ROOT, ethdevice); -+ -+ networkInterfacePath = networkInterfaceObject.first; -+ } -+ -+ ipmi::Value ipEnablesProp = ipmi::getDbusProperty( -+ bus, ipmi::network::SERVICE, networkInterfacePath, -+ ipmi::network::ETHERNET_INTERFACE, "IPAddressEnables"); -+ std::string ipEnables = std::get<std::string>(ipEnablesProp); -+ -+ // check if on off ipv4 ipv6, etc. -+ bool found = false; -+ for (uint8_t ii = 0; ii < ipAddressEnablesType.size(); ii++) -+ { -+ if (ipEnables == ipAddressEnablesType[ii]) -+ { -+ ipVAddressEnables = ii; -+ found = true; -+ break; -+ } -+ } -+ if (!found) -+ { -+ return IPMI_CC_PARM_NOT_SUPPORTED; -+ } -+ } -+ else -+ { -+ ipVAddressEnables = channelConf->ipv6AddressingEnables; -+ } -+ -+ std::array<uint8_t, 2> buf = {current_revision, ipVAddressEnables}; -+ std::copy(buf.begin(), buf.end(), static_cast<uint8_t*>(response)); -+ *data_len = buf.size(); -+ break; -+ } -+ case LanParam::IPV6_STATUS: -+ { -+ // Number of IPV6 addresses that are supported -+ constexpr std::array<uint8_t, 3> statusData = {1, 1, 3}; -+ -+ std::array<uint8_t, 4> buf = {current_revision, statusData[0], -+ statusData[1], statusData[2]}; -+ std::copy(buf.begin(), buf.end(), static_cast<uint8_t*>(response)); -+ *data_len = buf.size(); -+ break; -+ } -+ case LanParam::IPV6_STATIC_ADDRESSES: -+ { -+ // Only return set selector 0 -+ uint8_t ipv6SetSelector = 0; -+ std::string ipaddress; -+ auto ethIP = ethdevice + "/" + ipmi::network::IPV6_TYPE; -+ uint8_t ipv6AddressSource = 0; -+ uint8_t prefixLength = 0; -+ uint8_t status = 0; -+ if (channelConf->lan_set_in_progress == SET_COMPLETE) -+ { -+ try -+ { -+ auto ipObjectInfo = -+ ipmi::getIPObject(bus, ipmi::network::IP_INTERFACE, -+ ipmi::network::ROOT, ethIP); -+ -+ auto properties = ipmi::getAllDbusProperties( -+ bus, ipObjectInfo.second, ipObjectInfo.first, -+ ipmi::network::IP_INTERFACE); -+ -+ if (std::get<std::string>(properties["Origin"]) == -+ "xyz.openbmc_project.Network.IP.AddressOrigin.Static") -+ { -+ ipaddress = -+ std::get<std::string>(properties["Address"]); -+ ipv6AddressSource = 0x81; // Looking at bit 0 and bit 7 -+ prefixLength = -+ std::get<uint8_t>(properties["PrefixLength"]); -+ status = 0; -+ } -+ } -+ // ignore the exception, as it is a valid condition that -+ // the system is not configured with any IP. -+ catch (InternalFailure& e) -+ { -+ // nothing to do. -+ } -+ } -+ else if (channelConf->lan_set_in_progress == SET_IN_PROGRESS) -+ { -+ ipv6AddressSource = channelConf->ipv6AddressSource; -+ ipaddress = channelConf->ipv6Addr.c_str(); -+ prefixLength = channelConf->ipv6Prefix; -+ status = 1; -+ } -+ -+ std::array<uint8_t, ipmi::network::IPV6_ADDRESS_STATUS_SIZE> buf = { -+ current_revision, ipv6SetSelector, ipv6AddressSource}; -+ inet_pton(AF_INET6, ipaddress.c_str(), -+ reinterpret_cast<void*>(&buf[3])); -+ buf[20] = prefixLength; -+ buf[21] = status; -+ -+ std::copy(buf.begin(), buf.end(), static_cast<uint8_t*>(response)); -+ *data_len = buf.size(); -+ break; -+ } -+ case LanParam::IPV6_DHCPV6_STATIC_DUID_STORAGE_LENGTH: -+ { -+ // DHCP unique identified -+ // Only 1 read-only 16-byte Block needed -+ uint8_t duidLength = 1; -+ std::array<uint8_t, 2> buf = {current_revision, duidLength}; -+ std::copy(buf.begin(), buf.end(), static_cast<uint8_t*>(response)); -+ *data_len = buf.size(); -+ break; -+ } -+ case LanParam::IPV6_DHCPV6_STATIC_DUIDS: -+ { -+ std::string macAddress; -+ if (channelConf->lan_set_in_progress == SET_COMPLETE) -+ { -+ auto macObjectInfo = -+ ipmi::getDbusObject(bus, ipmi::network::MAC_INTERFACE, -+ ipmi::network::ROOT, ethdevice); -+ -+ auto variant = ipmi::getDbusProperty( -+ bus, macObjectInfo.second, macObjectInfo.first, -+ ipmi::network::MAC_INTERFACE, "MACAddress"); -+ -+ macAddress = std::get<std::string>(variant); -+ } -+ else if (channelConf->lan_set_in_progress == SET_IN_PROGRESS) -+ { -+ macAddress = channelConf->macAddress; -+ } -+ -+ std::array<uint8_t, -+ ipmi::network::IPV6_DUID_SIZE + sizeof(current_revision)> -+ buf; -+ buf = {current_revision, -+ reqptr->parameter_set, -+ reqptr->parameter_block, -+ DUID_LEN, -+ 0, // Filler byte -+ DUID_LL_TYPE, -+ 0, // Filler byte -+ DUIC_ETH_HW_TYPE}; -+ sscanf(macAddress.c_str(), ipmi::network::MAC_ADDRESS_FORMAT, -+ (&buf[8]), (&buf[9]), (&buf[10]), (&buf[11]), (&buf[12]), -+ (&buf[13])); -+ -+ std::copy(buf.begin(), buf.end(), static_cast<uint8_t*>(response)); -+ *data_len = buf.size(); -+ break; -+ } -+ case LanParam::IPV6_DYNAMIC_ADDRESSES: -+ { -+ std::string ipaddress; -+ uint8_t ipv6AddressSource = 0; -+ uint8_t prefixLength = 0; -+ uint8_t status = 0; -+ auto ethIP = ethdevice + "/" + ipmi::network::IPV6_TYPE; -+ -+ if (channelConf->lan_set_in_progress == SET_COMPLETE) -+ { -+ try -+ { -+ auto ipObjectInfo = -+ ipmi::getIPObject(bus, ipmi::network::IP_INTERFACE, -+ ipmi::network::ROOT, ethIP); -+ -+ auto properties = ipmi::getAllDbusProperties( -+ bus, ipObjectInfo.second, ipObjectInfo.first, -+ ipmi::network::IP_INTERFACE); -+ -+ if (std::get<std::string>(properties["Origin"]) == -+ "xyz.openbmc_project.Network.IP.AddressOrigin.DHCP") -+ { -+ ipaddress = -+ std::get<std::string>(properties["Address"]); -+ ipv6AddressSource = 0x81; // Looking at bit 0 and bit 7 -+ prefixLength = -+ std::get<uint8_t>(properties["PrefixLength"]); -+ status = 0; -+ } -+ else -+ { -+ status = 1; -+ } -+ } -+ // ignore the exception, as it is a valid condition that -+ // the system is not configured with any IP. -+ catch (InternalFailure& e) -+ { -+ // nothing to do. -+ } -+ } -+ else if (channelConf->lan_set_in_progress == SET_IN_PROGRESS) -+ { -+ ipaddress = channelConf->ipv6Addr; -+ ipv6AddressSource = channelConf->ipv6AddressSource; -+ prefixLength = channelConf->ipv6Prefix; -+ status = channelConf->ipv6AddressStatus; -+ } -+ -+ uint8_t ipv6SetSelector = 0; -+ std::array<uint8_t, 22> buf = {current_revision, ipv6SetSelector, -+ ipv6AddressSource}; -+ inet_pton(AF_INET6, ipaddress.c_str(), -+ reinterpret_cast<void*>(&buf[3])); -+ buf[20] = prefixLength; -+ buf[21] = status; -+ -+ std::copy(buf.begin(), buf.end(), static_cast<uint8_t*>(response)); -+ *data_len = buf.size(); -+ break; -+ } -+ case LanParam::IPV6_DHCPV6_DYNAMIC_DUID_STOR_LEN: -+ { -+ uint8_t duidLength = 0; -+ // Only 1 read-only 16-byte Block needed -+ duidLength = 1; -+ -+ std::array<uint8_t, 2> buf = {current_revision, duidLength}; -+ std::copy(buf.begin(), buf.end(), static_cast<uint8_t*>(response)); -+ *data_len = buf.size(); -+ break; -+ } -+ case LanParam::IPV6_DHCPV6_DYNAMIC_DUIDS: -+ { -+ std::string macAddress; -+ if (channelConf->lan_set_in_progress == SET_COMPLETE) -+ { -+ auto macObjectInfo = -+ ipmi::getDbusObject(bus, ipmi::network::MAC_INTERFACE, -+ ipmi::network::ROOT, ethdevice); -+ -+ auto variant = ipmi::getDbusProperty( -+ bus, macObjectInfo.second, macObjectInfo.first, -+ ipmi::network::MAC_INTERFACE, "MACAddress"); -+ -+ macAddress = std::get<std::string>(variant); -+ } -+ else if (channelConf->lan_set_in_progress == SET_IN_PROGRESS) -+ { -+ macAddress = channelConf->macAddress; -+ } -+ -+ std::array<uint8_t, -+ ipmi::network::IPV6_DUID_SIZE + sizeof(current_revision)> -+ buf; -+ buf = {current_revision, -+ reqptr->parameter_set, -+ reqptr->parameter_block, -+ DUID_LEN, -+ 0, // Filler byte -+ DUID_LL_TYPE, -+ 0, // Filler byte -+ DUIC_ETH_HW_TYPE}; -+ -+ sscanf(macAddress.c_str(), ipmi::network::MAC_ADDRESS_FORMAT, -+ (&buf[8]), (&buf[9]), (&buf[10]), (&buf[11]), (&buf[12]), -+ (&buf[13])); -+ -+ std::copy(buf.begin(), buf.end(), static_cast<uint8_t*>(response)); -+ *data_len = buf.size(); -+ break; -+ } -+ case LanParam::IPV6_ROUTER_ADDRESS_CONF_CTRL: -+ { -+ // Determine if automated router discovery occurs when static -+ // addresses are used for the bmc -+ -+ auto ethIP = ethdevice + "/" + ipmi::network::IPV6_TYPE; -+ std::string networkInterfacePath; -+ uint8_t dynamicRA; -+ if (channelConf->lan_set_in_progress == SET_COMPLETE) -+ { -+ -+ try -+ { -+ ipmi::ObjectTree ancestorMap; -+ // if the system is having ip object,then -+ // get the IP object. -+ auto ipObject = -+ ipmi::getDbusObject(bus, ipmi::network::IP_INTERFACE, -+ ipmi::network::ROOT, ethIP); -+ -+ // Get the parent interface of the IP object. -+ try -+ { -+ ipmi::InterfaceList interfaces; -+ interfaces.emplace_back( -+ ipmi::network::ETHERNET_INTERFACE); -+ -+ ancestorMap = ipmi::getAllAncestors( -+ bus, ipObject.first, std::move(interfaces)); -+ } -+ catch (InternalFailure& e) -+ { -+ // if unable to get the parent interface -+ // then commit the error and return. -+ log<level::ERR>( -+ "Unable to get the parent interface", -+ entry("PATH=%s", ipObject.first.c_str()), -+ entry("INTERFACE=%s", -+ ipmi::network::ETHERNET_INTERFACE)); -+ return IPMI_CC_UNSPECIFIED_ERROR; -+ } -+ // for an ip object there would be single parent -+ // interface. -+ networkInterfacePath = ancestorMap.begin()->first; -+ } -+ catch (InternalFailure& e) -+ { -+ // if there is no ip configured on the system,then -+ // get the network interface object. -+ auto networkInterfaceObject = ipmi::getDbusObject( -+ bus, ipmi::network::ETHERNET_INTERFACE, -+ ipmi::network::ROOT, ethdevice); -+ -+ networkInterfacePath = networkInterfaceObject.first; -+ } -+ -+ auto variant = ipmi::getDbusProperty( -+ bus, ipmi::network::SERVICE, networkInterfacePath, -+ ipmi::network::ETHERNET_INTERFACE, "IPv6AcceptRA"); -+ dynamicRA = std::get<bool>(variant); -+ } -+ else -+ { -+ dynamicRA = channelConf->ipv6RouterAddressConfigControl; -+ } -+ -+ std::array<uint8_t, 2> buf = {current_revision, dynamicRA}; -+ std::copy(buf.begin(), buf.end(), static_cast<uint8_t*>(response)); -+ *data_len = buf.size(); -+ break; -+ } -+ case LanParam::IPV6_STATIC_ROUTER_1_IP_ADDR: -+ { -+ std::array<uint8_t, ipmi::network::IPV6_ADDRESS_SIZE_BYTE + -+ sizeof(current_revision)> -+ buf = {current_revision}; -+ inet_pton(AF_INET6, channelConf->ipv6GatewayAddr.c_str(), -+ reinterpret_cast<void*>(&buf[1])); -+ std::copy(buf.begin(), buf.end(), static_cast<uint8_t*>(response)); -+ *data_len = buf.size(); -+ break; -+ } -+ case LanParam::IPV6_STATIC_ROUTER_1_PREFIX_LEN: -+ { -+ std::array<uint8_t, 2> buf = {current_revision, -+ channelConf->ipv6GatewayPrefixLength}; -+ std::copy(buf.begin(), buf.end(), static_cast<uint8_t*>(response)); -+ *data_len = buf.size(); -+ break; -+ } -+ case LanParam::IPV6_STATIC_ROUTER_1_PREFIX_VAL: -+ { -+ constexpr uint8_t setSelector = 0; -+ std::array<uint8_t, sizeof(setSelector) + -+ ipmi::network::IPV6_ADDRESS_SIZE_BYTE + -+ sizeof(current_revision)> -+ buf = {current_revision, setSelector}; -+ -+ inet_pton(AF_INET6, channelConf->ipv6GatewayPrefixValue.c_str(), -+ reinterpret_cast<void*>(&buf[2])); -+ -+ std::copy(buf.begin(), buf.end(), static_cast<uint8_t*>(response)); -+ *data_len = buf.size(); -+ break; -+ } -+ case LanParam::IPV6_STATIC_ROUTER_2_IP_ADDR: -+ { -+ std::array<uint8_t, ipmi::network::IPV6_ADDRESS_SIZE_BYTE + -+ sizeof(current_revision)> -+ buf = {current_revision}; -+ inet_pton(AF_INET6, channelConf->ipv6BackupGatewayAddr.c_str(), -+ reinterpret_cast<void*>(&buf[1])); -+ std::copy(buf.begin(), buf.end(), static_cast<uint8_t*>(response)); -+ *data_len = buf.size(); -+ break; -+ } -+ case LanParam::IPV6_STATIC_ROUTER_2_PREFIX_LEN: -+ { -+ std::array<uint8_t, 2> buf = { -+ current_revision, channelConf->ipv6BackupGatewayPrefixLength}; -+ std::copy(buf.begin(), buf.end(), static_cast<uint8_t*>(response)); -+ *data_len = buf.size(); -+ break; -+ } -+ case LanParam::IPV6_STATIC_ROUTER_2_PREFIX_VAL: -+ { -+ -+ constexpr uint8_t setSelector = 0; -+ std::array<uint8_t, sizeof(setSelector) + -+ ipmi::network::IPV6_ADDRESS_SIZE_BYTE + -+ sizeof(current_revision)> -+ buf = {current_revision, setSelector}; -+ inet_pton(AF_INET6, -+ channelConf->ipv6BackupGatewayPrefixValue.c_str(), -+ reinterpret_cast<void*>(&buf[2])); -+ -+ std::copy(buf.begin(), buf.end(), static_cast<uint8_t*>(response)); -+ *data_len = buf.size(); -+ break; -+ } - default: - log<level::ERR>("Unsupported parameter", - entry("PARAMETER=0x%x", reqptr->parameter)); -@@ -957,6 +1580,16 @@ void applyChanges(int channel) - ipaddress, prefix); - } - -+ if (!channelConf->ipv6Addr.empty() && -+ channelConf->ipv6AddressSource == -+ 0x80) // Check if IPv6 static addresses are enabled -+ { -+ ipmi::network::createIP(bus, ipmi::network::SERVICE, -+ networkInterfacePath, ipv6Protocol, -+ channelConf->ipv6Addr, -+ channelConf->ipv6Prefix); -+ } -+ - if (!gateway.empty()) - { - ipmi::setDbusProperty(bus, systemObject.second, -@@ -964,7 +1597,24 @@ void applyChanges(int channel) - ipmi::network::SYSTEMCONFIG_INTERFACE, - "DefaultGateway", std::string(gateway)); - } -+ else if (!channelConf->ipv6GatewayAddr.empty()) -+ { -+ ipmi::setDbusProperty( -+ bus, systemObject.second, systemObject.first, -+ ipmi::network::SYSTEMCONFIG_INTERFACE, "DefaultGateway", -+ std::string(channelConf->ipv6GatewayAddr)); -+ } - } -+ // set IPAddress Enables -+ ipmi::setDbusProperty( -+ bus, ipmi::network::SERVICE, networkInterfaceObject.first, -+ ipmi::network::ETHERNET_INTERFACE, "IPAddressEnables", -+ ipAddressEnablesType[channelConf->ipv6AddressingEnables]); -+ -+ ipmi::setDbusProperty( -+ bus, ipmi::network::SERVICE, networkInterfaceObject.first, -+ ipmi::network::ETHERNET_INTERFACE, "IPv6AcceptRA", -+ (bool)channelConf->ipv6RouterAddressConfigControl); - } - catch (sdbusplus::exception::exception& e) - { -Index: phosphor-host-ipmid.clean/transporthandler.hpp -=================================================================== ---- phosphor-host-ipmid.clean.orig/transporthandler.hpp -+++ phosphor-host-ipmid.clean/transporthandler.hpp -@@ -79,8 +79,27 @@ enum class LanParam : uint8_t - IPV6_NEIGHBOR_TIMING_CONFIGURATION = 80, - }; - -+constexpr uint8_t DUID_LEN = 10; -+constexpr uint8_t DUID_LL_TYPE = 3; -+constexpr uint8_t DUIC_ETH_HW_TYPE = 1; -+ - // Data length of parameters - constexpr size_t lanParamVLANSize = 4; -+constexpr size_t lanParamInProgressSize = 3; -+constexpr size_t lanParamIPSize = 6; -+constexpr size_t lanParamIPSrcSize = 3; -+constexpr size_t lanParamMACSize = 8; -+constexpr size_t lanParamSubnetSize = 6; -+constexpr size_t lanParamGatewaySize = 6; -+constexpr size_t lanParamIPv6AndIPv4EnablesSize = 3; -+constexpr size_t lanParamIPv6StaticAddressesSize = 23; -+constexpr size_t lanParamIPv6RouterAddressConfCtrlSize = 3; -+constexpr size_t lanParamIPv6StaticRouter1IPAddrSize = 18; -+constexpr size_t lanParamIPv6StaticRouter1PrefixLenSize = 3; -+constexpr size_t lanParamIPv6StaticRouter1PrefixValSize = 19; -+constexpr size_t lanParamIPv6StaticRouter2IPAddrSize = 18; -+constexpr size_t lanParamIPv6StaticRouter2PrefixLenSize = 3; -+constexpr size_t lanParamIPv6StaticRouter2PrefixValSize = 19; - constexpr uint8_t SET_COMPLETE = 0; - constexpr uint8_t SET_IN_PROGRESS = 1; - constexpr uint8_t SET_COMMIT_WRITE = 2; // Optional -@@ -103,6 +122,20 @@ struct ChannelConfig_t - uint8_t lan_set_in_progress = SET_COMPLETE; - bool flush = false; - -+ // IPV6 parameters -+ uint8_t ipv6AddressSource = 0x0; -+ uint8_t ipv6AddressingEnables = 0x2; -+ std::string ipv6Addr; -+ uint8_t ipv6Prefix = 32; -+ uint8_t ipv6AddressStatus = 0x0; -+ uint8_t ipv6RouterAddressConfigControl = 0x0; -+ std::string ipv6GatewayAddr; -+ std::string ipv6BackupGatewayAddr; -+ uint8_t ipv6GatewayPrefixLength; -+ std::string ipv6GatewayPrefixValue; -+ uint8_t ipv6BackupGatewayPrefixLength = 0x0; -+ std::string ipv6BackupGatewayPrefixValue; -+ - void clear() - { - ipaddr.clear(); -@@ -113,6 +146,20 @@ struct ChannelConfig_t - ipsrc = ipmi::network::IPOrigin::UNSPECIFIED; - lan_set_in_progress = SET_COMPLETE; - flush = false; -+ -+ // IPv6 -+ ipv6Addr.clear(); -+ ipv6GatewayAddr.clear(); -+ ipv6BackupGatewayAddr.clear(); -+ ipv6AddressingEnables = 0x2; -+ ipv6AddressSource = 0x0; -+ ipv6Prefix = 32; -+ ipv6AddressStatus = 0x0; -+ ipv6RouterAddressConfigControl = 0x0; -+ ipv6GatewayPrefixLength = 0x0; -+ ipv6GatewayPrefixValue.clear(); -+ ipv6BackupGatewayPrefixLength = 0x0; -+ ipv6BackupGatewayPrefixValue.clear(); - } - }; - diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0010-fix-get-system-GUID-ipmi-command.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0010-fix-get-system-GUID-ipmi-command.patch index efee7cc26..ccf326a91 100644 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0010-fix-get-system-GUID-ipmi-command.patch +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0010-fix-get-system-GUID-ipmi-command.patch @@ -1,22 +1,24 @@ -commit 72e6573f36fd3b9ce018e71b07bc1be63275d1f8 -Author: Vernon Mauery <vernon.mauery@linux.intel.com> -Date: Fri Jun 21 12:27:20 2019 -0700 +From c1925ab965271875d4e9333be85cdfe8e1516948 Mon Sep 17 00:00:00 2001 +From: Vernon Mauery <vernon.mauery@linux.intel.com> +Date: Fri, 14 Feb 2020 13:13:06 -0800 +Subject: [PATCH] Fix 'Get System GUID' to use settings UUID - Fix 'Get System GUID' to use settings UUID - - The upstream Get System GUID command looks first for a BMC interface - and then assumes that the UUID interface is next to that. But that is - not the case on Intel systems where the system GUID is found in the - settings daemon. - - Change-Id: I924bd05e0a546f2b30288c1faf72157296ab6579 - Signed-off-by: Vernon Mauery <vernon.mauery@linux.intel.com> +The upstream Get System GUID command looks first for a BMC interface +and then assumes that the UUID interface is next to that. But that is +not the case on Intel systems where the system GUID is found in the +settings daemon. + +Change-Id: I924bd05e0a546f2b30288c1faf72157296ab6579 +Signed-off-by: Vernon Mauery <vernon.mauery@linux.intel.com> +--- + apphandler.cpp | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apphandler.cpp b/apphandler.cpp -index 280d0db..25af6bb 100644 +index dcfda11..780afbc 100644 --- a/apphandler.cpp +++ b/apphandler.cpp -@@ -799,8 +799,6 @@ auto ipmiAppGetBtCapabilities() +@@ -784,8 +784,6 @@ auto ipmiAppGetBtCapabilities() auto ipmiAppGetSystemGuid() -> ipmi::RspType<std::array<uint8_t, 16>> { @@ -25,7 +27,7 @@ index 280d0db..25af6bb 100644 static constexpr auto uuidInterface = "xyz.openbmc_project.Common.UUID"; static constexpr auto uuidProperty = "UUID"; -@@ -809,7 +807,7 @@ auto ipmiAppGetSystemGuid() -> ipmi::RspType<std::array<uint8_t, 16>> +@@ -794,7 +792,7 @@ auto ipmiAppGetSystemGuid() -> ipmi::RspType<std::array<uint8_t, 16>> { // Get the Inventory object implementing BMC interface auto busPtr = getSdBus(); @@ -34,3 +36,6 @@ index 280d0db..25af6bb 100644 // Read UUID property value from bmcObject // UUID is in RFC4122 format Ex: 61a39523-78f2-11e5-9862-e6402cfc3223 +-- +2.17.1 + diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0054-Fix-User-commands-require-channel-layer-lib.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0054-Fix-User-commands-require-channel-layer-lib.patch deleted file mode 100644 index bf6f672cf..000000000 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0054-Fix-User-commands-require-channel-layer-lib.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 5d0c9d2217dbe369daffb8a92d7b5e7d7d34d566 Mon Sep 17 00:00:00 2001 -From: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com> -Date: Sat, 2 Mar 2019 20:08:32 +0530 -Subject: [PATCH] Fix: User commands require channel layer lib - -As channel layer is separated out from user layer lib, it -has to be manually included in libusercommands, as user -command handlers use channel layer API's - -Tested-by: -1. Made sure that libusercommands are loaded on it's own -without any undefined symbol error. -2. ipmitool user list 1 works on host interface - -Change-Id: I6652ad248e01afc1349e3a9612754dbdb84b96ad -Signed-off-by: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com> ---- - Makefile.am | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/Makefile.am b/Makefile.am -index bb7bdbf..4e9101e 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -120,7 +120,8 @@ libipmi20_la_CXXFLAGS = $(COMMON_CXX) - providers_LTLIBRARIES += libusercmds.la - libusercmds_la_LIBADD = \ - libipmid/libipmid.la \ -- user_channel/libuserlayer.la -+ user_channel/libuserlayer.la \ -+ user_channel/libchannellayer.la - libusercmds_la_SOURCES = \ - user_channel/usercommands.cpp - libusercmds_la_LDFLAGS = \ --- -2.7.4 - diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0062-Update-IPMI-Chassis-Control-command.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0062-Update-IPMI-Chassis-Control-command.patch index 6c61e0995..96e45cad3 100644 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0062-Update-IPMI-Chassis-Control-command.patch +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0062-Update-IPMI-Chassis-Control-command.patch @@ -1,12 +1,14 @@ -From 959030b7ee71a7b23d1c081a0aadaa4eedbc0f63 Mon Sep 17 00:00:00 2001 +From 92bdbcd90a445e49ba2f8e483d44ec41152d32b4 Mon Sep 17 00:00:00 2001 From: "Jason M. Bills" <jason.m.bills@linux.intel.com> Date: Mon, 3 Jun 2019 17:01:47 -0700 Subject: [PATCH] Update IPMI Chassis Control command This change updates the IPMI Chassis Control command to use the new -chassis state transitions. This allows each chassis control action +host state transitions. This allows each chassis control action to more closely follow the behavior defined in the IPMI spec. +ref: https://gerrit.openbmc-project.xyz/c/openbmc/docs/+/22358 + Tested: Ran each IPMI chassis control command to confirm the expected behavior: @@ -19,11 +21,11 @@ ipmitool power soft: soft power-off requested from system software Change-Id: Ic9fba3ca4abd9a758eb88f1e6ee09f7ca64ff80a Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com> --- - chassishandler.cpp | 205 +++++++++++++---------------------------------------- - 1 file changed, 50 insertions(+), 155 deletions(-) + chassishandler.cpp | 206 +++++++++++++---------------------------------------- + 1 file changed, 50 insertions(+), 156 deletions(-) diff --git a/chassishandler.cpp b/chassishandler.cpp -index 053f29a..53b25b8 100644 +index 0326806..8bfab88 100644 --- a/chassishandler.cpp +++ b/chassishandler.cpp @@ -31,6 +31,7 @@ @@ -34,7 +36,7 @@ index 053f29a..53b25b8 100644 #include <xyz/openbmc_project/State/Host/server.hpp> #include <xyz/openbmc_project/State/PowerOnHours/server.hpp> -@@ -712,59 +713,63 @@ ipmi::RspType<> ipmiSetChassisCap(bool intrusion, bool fpLockout, +@@ -717,59 +718,63 @@ ipmi::RspType<> ipmiSetChassisCap(bool intrusion, bool fpLockout, //------------------------------------------ // Calls into Host State Manager Dbus object //------------------------------------------ @@ -108,10 +110,11 @@ index 053f29a..53b25b8 100644 - HOST_STATE_MANAGER_IFACE, PROPERTY, "s", - request.c_str()); - if (rc < 0) -+ try - { +- { - log<level::ERR>("Failed to initiate transition", - entry("ERRNO=0x%X, REQUEST=%s", -rc, request.c_str())); ++ try ++ { + ipmi::setDbusProperty(*getSdBus(), service, chassisStatePath, + chassisStateIntf, "RequestedPowerTransition", + request); @@ -134,7 +137,7 @@ index 053f29a..53b25b8 100644 } //------------------------------------------ -@@ -1065,76 +1070,6 @@ ipmi::RspType<bool, // Power is on +@@ -1071,76 +1076,6 @@ ipmi::RspType<bool, // Power is on diagButtonDisableAllow, sleepButtonDisableAllow); } @@ -211,7 +214,7 @@ index 053f29a..53b25b8 100644 /** @brief Implementation of chassis control command * * @param - chassisControl command byte -@@ -1147,63 +1082,23 @@ ipmi::RspType<> ipmiChassisControl(uint8_t chassisControl) +@@ -1153,63 +1088,22 @@ ipmi::RspType<> ipmiChassisControl(uint8_t chassisControl) switch (chassisControl) { case CMD_POWER_ON: @@ -256,8 +259,8 @@ index 053f29a..53b25b8 100644 break; - case CMD_HARD_RESET: -+ rc = initiateChassisStateTransition( -+ State::Chassis::Transition::Reset); ++ rc = initiateHostStateTransition( ++ State::Host::Transition::ForceWarmReboot); + break; case CMD_POWER_CYCLE: - // SPEC has a section that says certain implementations can trigger @@ -271,8 +274,7 @@ index 053f29a..53b25b8 100644 - indicate_no_softoff_needed(); - - rc = initiate_state_transition(State::Host::Transition::Reboot); -+ rc = initiateChassisStateTransition( -+ State::Chassis::Transition::PowerCycle); ++ rc = initiateHostStateTransition(State::Host::Transition::Reboot); break; - case CMD_SOFT_OFF_VIA_OVER_TEMP: diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0064-Update-provisioning-mode-filter-logic.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0064-Update-provisioning-mode-filter-logic.patch deleted file mode 100644 index 5cd8b3ec4..000000000 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/0064-Update-provisioning-mode-filter-logic.patch +++ /dev/null @@ -1,301 +0,0 @@ -From dcfce847654bd7e2475ad74bedf569b6120701dd Mon Sep 17 00:00:00 2001 -From: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com> -Date: Tue, 18 Jun 2019 19:42:30 +0530 -Subject: [PATCH 1/1] Update provisioning mode filter logic - -Updated provisioning mode filtering logic support. Based on the -RestrictionMode property, Host (system) interface commands will be -filtered as per the allowed list in ProvisionedHostWhitelist once -POST complete is achieved. No commands will be allowed in -ProvisionedHostDisabled after POST complete and in all other cases -filterning logic will not be applied. - -Tested -1. Verified the filtering logic through EFI shell and made sure -filtering logic is applied when RestrictionMode is in -ProvisionedHostWhitelist mode -2. Verified no filtering logic is applied in normal modes -3. Made sure BIOS is able to execute commands, which are not in -whitelist (Note: New whitelist conf is under review). - -Change-Id: I7a14e827d70e2d8d6975e600a0fd00e2a790bc22 -Signed-off-by: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com> -Signed-off-by: James Feist <james.feist@linux.intel.com> ---- - whitelist-filter.cpp | 191 ++++++++++++++++++++++++++++++------------- - 1 file changed, 136 insertions(+), 55 deletions(-) - -diff --git a/whitelist-filter.cpp b/whitelist-filter.cpp -index 9f1e7c8..53461b4 100644 ---- a/whitelist-filter.cpp -+++ b/whitelist-filter.cpp -@@ -25,6 +25,7 @@ namespace - */ - class WhitelistFilter - { -+ - public: - WhitelistFilter(); - ~WhitelistFilter() = default; -@@ -35,17 +36,24 @@ class WhitelistFilter - - private: - void postInit(); -- void cacheRestrictedMode(); -+ void cacheRestrictedAndPostCompleteMode(); - void handleRestrictedModeChange(sdbusplus::message::message& m); -+ void handlePostCompleteChange(sdbusplus::message::message& m); - ipmi::Cc filterMessage(ipmi::message::Request::ptr request); - -- bool restrictedMode = true; -+ sdbusplus::xyz::openbmc_project::Control::Security::server:: -+ RestrictionMode::Modes restrictionMode = -+ sdbusplus::xyz::openbmc_project::Control::Security::server:: -+ RestrictionMode::Modes::ProvisionedHostWhitelist; -+ bool postCompleted = false; - std::shared_ptr<sdbusplus::asio::connection> bus; -- std::unique_ptr<settings::Objects> objects; - std::unique_ptr<sdbusplus::bus::match::match> modeChangeMatch; -+ std::unique_ptr<sdbusplus::bus::match::match> postCompleteMatch; - - static constexpr const char restrictionModeIntf[] = - "xyz.openbmc_project.Control.Security.RestrictionMode"; -+ static constexpr const char* systemOsStatusIntf = -+ "xyz.openbmc_project.State.OperatingSystem.Status"; - }; - - WhitelistFilter::WhitelistFilter() -@@ -63,43 +71,83 @@ WhitelistFilter::WhitelistFilter() - post_work([this]() { postInit(); }); - } - --void WhitelistFilter::cacheRestrictedMode() -+void WhitelistFilter::cacheRestrictedAndPostCompleteMode() - { - using namespace sdbusplus::xyz::openbmc_project::Control::Security::server; -+ - std::string restrictionModeSetting; - std::string restrictionModeService; -+ std::string systemOsStatusPath; -+ std::string systemOsStatusService; - try - { -- restrictionModeSetting = objects->map.at(restrictionModeIntf).at(0); -+ auto objects = settings::Objects( -+ *bus, std::vector<settings::Interface>({restrictionModeIntf})); -+ auto postCompleteObj = settings::Objects( -+ *bus, std::vector<settings::Interface>({systemOsStatusIntf})); -+ -+ restrictionModeSetting = objects.map.at(restrictionModeIntf).at(0); - restrictionModeService = -- objects->service(restrictionModeSetting, restrictionModeIntf); -+ objects.service(restrictionModeSetting, restrictionModeIntf); -+ -+ systemOsStatusPath = postCompleteObj.map.at(systemOsStatusIntf).at(0); -+ systemOsStatusService = -+ postCompleteObj.service(systemOsStatusPath, systemOsStatusIntf); - } - catch (const std::out_of_range& e) - { -- log<level::ERR>( -- "Could not look up restriction mode interface from cache"); -+ log<level::INFO>( -+ "Could not initialize provisioning mode, defaulting to restricted"); -+ return; -+ } -+ catch (const std::exception&) -+ { -+ log<level::INFO>( -+ "Could not initialize provisioning mode, defaulting to restricted"); - return; - } -+ - bus->async_method_call( - [this](boost::system::error_code ec, ipmi::Value v) { - if (ec) - { -- log<level::ERR>("Error in RestrictionMode Get"); -- // Fail-safe to true. -- restrictedMode = true; -+ log<level::INFO>("Could not initialize provisioning mode, " -+ "defaulting to restricted"); - return; - } - auto mode = std::get<std::string>(v); -- auto restrictionMode = -- RestrictionMode::convertModesFromString(mode); -- restrictedMode = -- (restrictionMode == RestrictionMode::Modes::Whitelist); -- log<level::INFO>((restrictedMode ? "Set restrictedMode = true" -- : "Set restrictedMode = false")); -+ restrictionMode = RestrictionMode::convertModesFromString(mode); -+ log<level::INFO>( -+ "Read restriction mode", -+ entry("VALUE=%d", static_cast<int>(restrictionMode))); - }, - restrictionModeService, restrictionModeSetting, - "org.freedesktop.DBus.Properties", "Get", restrictionModeIntf, - "RestrictionMode"); -+ -+ bus->async_method_call( -+ [this](boost::system::error_code ec, const ipmi::Value& v) { -+ if (ec) -+ { -+ log<level::ERR>("Error in OperatingSystemState Get"); -+ postCompleted = true; -+ return; -+ } -+ auto value = std::get<std::string>(v); -+ if (value == "Standby") -+ { -+ postCompleted = true; -+ } -+ else -+ { -+ postCompleted = false; -+ } -+ log<level::INFO>("Read POST complete value", -+ entry("VALUE=%d", postCompleted)); -+ }, -+ systemOsStatusService, systemOsStatusPath, -+ "org.freedesktop.DBus.Properties", "Get", systemOsStatusIntf, -+ "OperatingSystemState"); - } - - void WhitelistFilter::handleRestrictedModeChange(sdbusplus::message::message& m) -@@ -112,61 +160,94 @@ void WhitelistFilter::handleRestrictedModeChange(sdbusplus::message::message& m) - { - if (property.first == "RestrictionMode") - { -- RestrictionMode::Modes restrictionMode = -- RestrictionMode::convertModesFromString( -- std::get<std::string>(property.second)); -- restrictedMode = -- (restrictionMode == RestrictionMode::Modes::Whitelist); -- log<level::INFO>((restrictedMode -- ? "Updated restrictedMode = true" -- : "Updated restrictedMode = false")); -+ restrictionMode = RestrictionMode::convertModesFromString( -+ std::get<std::string>(property.second)); -+ log<level::INFO>( -+ "Updated restriction mode", -+ entry("VALUE=%d", static_cast<int>(restrictionMode))); - } - } - } -- --void WhitelistFilter::postInit() -+void WhitelistFilter::handlePostCompleteChange(sdbusplus::message::message& m) - { -- objects = std::make_unique<settings::Objects>( -- *bus, std::vector<settings::Interface>({restrictionModeIntf})); -- if (!objects) -+ std::string intf; -+ std::vector<std::pair<std::string, ipmi::Value>> propertyList; -+ m.read(intf, propertyList); -+ for (const auto& property : propertyList) - { -- log<level::ERR>( -- "Failed to create settings object; defaulting to restricted mode"); -- return; -+ if (property.first == "OperatingSystemState") -+ { -+ std::string value = std::get<std::string>(property.second); -+ if (value == "Standby") -+ { -+ postCompleted = true; -+ } -+ else -+ { -+ postCompleted = false; -+ } -+ log<level::INFO>(postCompleted ? "Updated to POST Complete" -+ : "Updated to !POST Complete"); -+ } - } -- -+} -+void WhitelistFilter::postInit() -+{ - // Initialize restricted mode -- cacheRestrictedMode(); -+ cacheRestrictedAndPostCompleteMode(); - // Wait for changes on Restricted mode -- std::string filterStr; -- try -- { -- filterStr = sdbusplus::bus::match::rules::propertiesChanged( -- objects->map.at(restrictionModeIntf).at(0), restrictionModeIntf); -- } -- catch (const std::out_of_range& e) -- { -- log<level::ERR>("Failed to determine restriction mode filter string"); -- return; -- } -+ namespace rules = sdbusplus::bus::match::rules; -+ const std::string filterStrModeChange = -+ rules::type::signal() + rules::member("PropertiesChanged") + -+ rules::interface("org.freedesktop.DBus.Properties") + -+ rules::argN(0, restrictionModeIntf); -+ -+ const std::string filterStrPostComplete = -+ rules::type::signal() + rules::member("PropertiesChanged") + -+ rules::interface("org.freedesktop.DBus.Properties") + -+ rules::argN(0, systemOsStatusIntf); -+ - modeChangeMatch = std::make_unique<sdbusplus::bus::match::match>( -- *bus, filterStr, [this](sdbusplus::message::message& m) { -+ *bus, filterStrModeChange, [this](sdbusplus::message::message& m) { - handleRestrictedModeChange(m); - }); -+ postCompleteMatch = std::make_unique<sdbusplus::bus::match::match>( -+ *bus, filterStrPostComplete, [this](sdbusplus::message::message& m) { -+ handlePostCompleteChange(m); -+ }); - } - - ipmi::Cc WhitelistFilter::filterMessage(ipmi::message::Request::ptr request) - { -- if (request->ctx->channel == ipmi::channelSystemIface && restrictedMode) -+ using namespace sdbusplus::xyz::openbmc_project::Control::Security::server; -+ -+ if (request->ctx->channel == ipmi::channelSystemIface && -+ (restrictionMode != RestrictionMode::Modes::None && -+ restrictionMode != RestrictionMode::Modes::Provisioning)) - { -- if (!std::binary_search( -- whitelist.cbegin(), whitelist.cend(), -- std::make_pair(request->ctx->netFn, request->ctx->cmd))) -+ if (!postCompleted) -+ { -+ // Allow all commands, till POST is not completed -+ return ipmi::ccSuccess; -+ } -+ switch (restrictionMode) - { -- log<level::ERR>("Net function not whitelisted", -- entry("NETFN=0x%X", int(request->ctx->netFn)), -- entry("CMD=0x%X", int(request->ctx->cmd))); -- return ipmi::ccInsufficientPrivilege; -+ case RestrictionMode::Modes::ProvisionedHostWhitelist: -+ { -+ if (!std::binary_search( -+ whitelist.cbegin(), whitelist.cend(), -+ std::make_pair(request->ctx->netFn, request->ctx->cmd))) -+ { -+ log<level::ERR>( -+ "Net function not whitelisted", -+ entry("NETFN=0x%X", int(request->ctx->netFn)), -+ entry("CMD=0x%X", int(request->ctx->cmd))); -+ return ipmi::ccInsufficientPrivilege; -+ } -+ break; -+ } -+ default: // for whitelist, blacklist & HostDisabled -+ return ipmi::ccInsufficientPrivilege; - } - } - return ipmi::ccSuccess; --- -2.17.1 - diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/host-ipmid-whitelist.conf b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/host-ipmid-whitelist.conf deleted file mode 100644 index 268e12848..000000000 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/host-ipmid-whitelist.conf +++ /dev/null @@ -1,200 +0,0 @@ -#<NetFn>:<Command> -#IPMI whitelist command list version 9b -0x00:0x00 //<Chassis>:<Get Chassis Capabiliti> -0x00:0x01 //<Chassis>:<Get Chassis Status> -0x00:0x04 //<Chassis>:<Chassis Identify> -0x00:0x07 //<Chassis>:<Get System Restart Cause> -0x00:0x09 //<Chassis>:<Get System Boot Options> -0x00:0x0A //<Chassis>:<Set Front Panel Enables> -0x00:0x0F //<Chassis>:<Get POH Counter> -0x04:0x01 //<Sensor/Event>:<Get Event Receiver> -0x04:0x02 //<Sensor/Event>:<SEL Platform event> -0x04:0x10 //<Sensor/Event>:<PEF Get Capabilities> -0x04:0x13 //<Sensor/Event>:<PEF Get Configuration Parameters> -0x04:0x15 //<Sensor/Event>:<PEF Get Processed EventID> -0x04:0x20 //<Sensor/Event>:<Get Device SDR Info> -0x04:0x21 //<Sensor/Event>:<Get Device SDR> -0x04:0x23 //<Sensor/Event>:<Get Sensor Reading Factors> -0x04:0x25 //<Sensor/Event>:<Get Sensor Hysteresis> -0x04:0x27 //<Sensor/Event>:<Get Sensor Threshold> -0x04:0x29 //<Sensor/Event>:<Get SensorEvent Enable> -0x04:0x2B //<Sensor/Event>:<Get SensorEvent Status> -0x04:0x2D //<Sensor/Event>:<Get SensorReading> -0x04:0x2F //<Sensor/Event>:<Get Sensor Type> -0x06:0x01 //<App>:<Get Device ID> -0x06:0x04 //<App>:<Get Self Test> -0x06:0x06 //<App>:<Set ACPI Power State> -0x06:0x07 //<App>:<Get ACPI Power State> -0x06:0x08 //<App>:<Get Device GUID> -0x06:0x22 //<App>:<Reset Watchdog Timer> -0x06:0x24 //<App>:<Set Watchdog Timer> -0x06:0x25 //<App>:<Get Watchdog Timer> -0x06:0x2F //<App>:<Get BMC Global Enables> -0x06:0x30 //<App>:<Clear Message Flags> -0x06:0x31 //<App>:<Get Message Flags> -0x06:0x33 //<App>:<Get Message> -0x06:0x35 //<App>:<Read Event Message Buffer> -0x06:0x37 //<App>:<Get System GUID> -0x06:0x38 //<App>:<Get Channel Authentication Capability> -0x06:0x39 //<App>:<Get Session Challenge> -0x06:0x3D //<App>:<Get Channel Session Info> -0x06:0x3F //<App>:<Get Authentication Code> -0x06:0x41 //<App>:<Get Channel Access> -0x06:0x42 //<App>:<Get Channel Info> -0x06:0x44 //<App>:<Get User Access> -0x06:0x46 //<App>:<Get User Name> -0x06:0x4A //<App>:<Get Payload Activation Status> -0x06:0x4B //<App>:<Get Payload Instance Info> -0x06:0x4D //<App>:<Get User Payload Access> -0x06:0x4E //<App>:<Get Channel Payload Support> -0x06:0x4F //<App>:<Get Channel Payload Version> -0x06:0x50 //<App>:<Get Channel OEM Payload Info> -0x06:0x54 //<App>:<Get Channel Cipher Suites> -0x06:0x57 //<App>:<Get System Interface Capabilities> -0x08:0x20 //<Firmware>:<Get Version Information> -0x08:0x21 //<Firmware>:<Security Version Information> -0x08:0x22 //<Firmware>:<Firmware Update Channel Information> -0x08:0x23 //<Firmware>:<BMC Execution Context> -0x08:0x24 //<Firmware>:<Get Boot Certificate Info> -0x08:0x25 //<Firmware>:<Get Boot Certificate Data> -0x08:0x26 //<Firmware>:<Firmware Random Number Update> -0x08:0x27 //<Firmware>:<Set Firmware Update Mode> -0x08:0x28 //<Firmware>:<Exit Firmware Update Mode> -0x08:0x29 //<Firmware>:<Firmware Update Control> -0x08:0x2A //<Firmware>:<Get Firmware Update Status> -0x08:0x2B //<Firmware>:<Set Firmware Update Options> -0x08:0x2C //<Firmware>:<Write Firmware Image> -0x08:0x2D //<Firmware>:<Get Firmware Update Status Code Message> -0x08:0xE0 //<Firmware>:<Get Firmware Update Error Code Message> -0x0A:0x10 //<Storage>:<Get FRU Inventory Area Info> -0x0A:0x11 //<Storage>:<Read FRU Data> -0x0A:0x20 //<Storage>:<Get SDR Repository Info> -0x0A:0x21 //<Storage>:<Get SDR Alloc Info> -0x0A:0x23 //<Storage>:<Get SDR> -0x0A:0x28 //<Storage>:<SEL Get Time> -0x0A:0x40 //<Storage>:<Get SEL Info> -0x0A:0x41 //<Storage>:<Get SEL Alloc Info> -0x0A:0x43 //<Storage>:<Get SEL Entry> -0x0A:0x48 //<Storage>:<Get SEL Time> -0x0A:0x5A //<Storage>:<Get SEL Auxiliary Log Status> -0x0A:0x5C //<Storage>:<Get SEL Time UTC Offset> -0x0C:0x02 //<Transport>:<Get LAN Configuration Parameters> -0x0C:0x04 //<Transport>:<Get IPUDPRMCP Statistics> -0x0C:0x11 //<Transport>:<Get Serial Modem Configuration> -0x0C:0x21 //<Transport>:<Set SOL Configuration Parameters> -0x0C:0x22 //<Transport>:<Get SOL Configuration Parameters> -0x2C:0x1F //<Group Extension>:<Get CPU PECI Package Config Data> -0x2C:0x20 //<Group Extension>:<Get MDR Data Region Status> -0x2C:0x21 //<Group Extension>:<Get MDR Region Update Complete> -0x2C:0x22 //<Group Extension>:<Read MDR Region> -0x2C:0x23 //<Group Extension>:<Write MDR Region> -0x2C:0x24 //<Group Extension>:<Get MDR Region Lock> -0x2C:0x25 //<Group Extension>:<Get System Mode> -0x2C:0x29 //<Group Extension>:<Get TPM Configuration> -0x2C:0x37 //<Group Extension>:<Read PCIe Cable EEPROM Data> -0x30:0x04 //<Intel General Application>:<Get NW Switch MIB> -0x30:0x05 //<Intel General Application>:<Get PDB FW Version> -0x30:0x09 //<Intel General Application>:<Get BMC Config> -0x30:0x14 //<Intel General Application>:<Get SM Signal> -0x30:0x19 //<Intel General Application>:<Read LAN Channel Port Value> -0x30:0x1A //<Intel General Application>:<Get NIC Info> -0x30:0x1B //<Intel General Application>:<Get LAN Available> -0x30:0x1D //<Intel General Application>:<Get Master MAC> -0x30:0x1F //<Intel General Application>:<Get Secure Mode> -0x30:0x20 //<Intel General Application>:<OEM Get SEL info> -0x30:0x21 //<Intel General Application>:<OEM Get SEL Allocation Info> -0x30:0x22 //<Intel General Application>:<OEM Platform Event Message> -0x30:0x23 //<Intel General Application>:<OEM Get SEL Entry> -0x30:0x26 //<Intel General Application>:<Set BIOS ID> -0x30:0x27 //<Intel General Application>:<Get OEM Device Information> -0x30:0x2E //<Intel General Application>:<Get Cold Redundancy Configuration> -0x30:0x30 //<Intel General Application>:<Get Sensor Severity> -0x30:0x31 //<Intel General Application>:<Get AIC Slot FRU ID SLOT POS Records> -0x30:0x33 //<Intel General Application>:<Get Controller Status> -0x30:0x38 //<Intel General Application>:<Get Satellite Firmware update status> -0x30:0x39 //<Intel General Application>:<HSBP Get Owner> -0x30:0x3C //<Intel General Application>:<Get AIC MAC> -0x30:0x41 //<Intel General Application>:<Set System GUID> -0x30:0x43 //<Intel General Application>:<Get BMC Reset Disables> -0x30:0x44 //<Intel General Application>:<Send Embedded Firmware Update Status> -0x30:0x47 //<Intel General Application>:<HSBP Get Version> -0x30:0x54 //<Intel General Application>:<Set Power Restore Delay> -0x30:0x55 //<Intel General Application>:<Get Power Restore Delay> -0x30:0x55 //<Intel General Application>:<Get Power Restore Delay> -0x30:0x58 //<Intel General Application>:<Get DIMM Fault Status> -0x30:0x62 //<Intel General Application>:<Get Shutdown Policy> -0x30:0x63 //<Intel General Application>:<Get Node Slot Presence> -0x30:0x65 //<Intel General Application>:<Get HDD Drive Fault LED State> -0x30:0x66 //<Intel General Application>:<Get Buffer Size> -0x30:0x71 //<Intel General Application>:<Get Advanced Support> -0x30:0x73 //<Intel General Application>:<Get EFI Payload> -0x30:0x74 //<Intel General Application>:<Get RMM Status> -0x30:0x75 //<Intel General Application>:<Get Voltage Name> -0x30:0x80 //<Intel General Application>:<HSBP Get Register From Memory> -0x30:0x81 //<Intel General Application>:<Get Power State> -0x30:0x82 //<Intel General Application>:<Get ACPI Config> -0x30:0x85 //<Intel General Application>:<Get SF PWM> -0x30:0x8A //<Intel General Application>:<Get Fan Control Configuration> -0x30:0x8B //<Intel General Application>:<Auto Fan Detect> -0x30:0x8D //<Intel General Application>:<Get fan speed offset> -0x30:0x8F //<Intel General Application>:<Get DIMM offset> -0x30:0x91 //<Intel General Application>:<Get FSC Parameter> -0x30:0x92 //<Intel General Application>:<Get Chassis Identifier> -0x30:0x93 //<Intel General Application>:<Read Base Board Product ID> -0x30:0x94 //<Intel General Application>:<Get BMC Revision ID> -0x30:0x95 //<Intel General Application>:<Get Is AP CPU> -0x30:0x9A //<Intel General Application>:<Get Processor Error Configuration and Status> -0x30:0x9B //<Intel General Application>:<Set Processor Error Config> -0x30:0x9D //<Intel General Application>:<Get Fan PWM Limit> -0x30:0xB0 //<Intel General Application>:<Get LED Status> -0x30:0xB2 //<Intel General Application>:<Get BMC Service Status> -0x30:0xB3 //<Intel General Application>:<Get BMC Security Control Mode> -0x30:0xBB //<Intel General Application>:<Get CPLD Revision ID> -0x30:0xC2 //<Intel General Application>:<Get OEM Extended Sys Info> -0x30:0xC6 //<Intel General Application>:<Get Partition Config> -0x30:0xC7 //<Intel General Application>:<Get Zone Information> -0x30:0xC9 //<Intel General Application>:<Get Configuration Status> -0x30:0xCA //<Intel General Application>:<Get Fabric Information> -0x30:0xCB //<Intel General Application>:<Get EndPoints Information> -0x30:0xCC //<Intel General Application>:<Get Switches Information> -0x30:0xCD //<Intel General Application>:<Get Switch Collection Information> -0x30:0xD0 //<Intel General Application>:<Get NVMe Drive Data> -0x30:0xD1 //<Intel General Application>:<HSBP Statistics> -0x30:0xD4 //<Intel General Application>:<Get BIOS Capsule (OOB Update)> -0x30:0xE2 //<Intel General Application>:<OEM Get Reading> -0x30:0xE5 //<Intel General Application>:<Get NMI Source> -0x30:0xE8 //<Intel General Application>:<Get PCIe SMBus Slot Card Info> -0x30:0xE9 //<Intel General Application>:<Get BIOS POST CODE> -0x30:0xF9 //<Intel General Application>:<Get POST Progress Codes> -0x30:0xFD //<Intel General Application>:<Get Riser Presence> -0x32:0x60 //<Intel OEM Platform>:<Get PM Bus Information> -0x32:0x63 //<Intel OEM Platform>:<Get Tach Information> -0x32:0x8D //<Intel OEM Platform>:<Get SSD Power> -0x3E:0x02 //<Intel Managed Data Region>:<BMC Data Region Update Event Message> -0x3E:0x20 //<Intel Managed Data Region>:<BMC Region Status> -0x3E:0x21 //<Intel Managed Data Region>:<BMC Region Update Complete> -0x3E:0x22 //<Intel Managed Data Region>:<MDR Event> -0x3E:0x23 //<Intel Managed Data Region>:<BMC Region Read> -0x3E:0x24 //<Intel Managed Data Region>:<BMC Region Write> -0x3E:0x25 //<Intel Managed Data Region>:<BMC Region Lock> -0x3E:0x28 //<Intel Managed Data Region>:<Get DIMM information> -0x3E:0x30 //<Intel Managed Data Region>:<MDR2 Status> -0x3E:0x31 //<Intel Managed Data Region>:<MDR2 GET Direction> -0x3E:0x32 //<Intel Managed Data Region>:<MDR2 Get Data Set Info> -0x3E:0x33 //<Intel Managed Data Region>:<MDR2 Lock Data> -0x3E:0x34 //<Intel Managed Data Region>:<MDR2 Unlock Data> -0x3E:0x35 //<Intel Managed Data Region>:<MDR2 Dget Data Block> -0x3E:0x38 //<Intel Managed Data Region>:<MDR2 Send Direction> -0x3E:0x39 //<Intel Managed Data Region>:<MDR2 Data Info Offer> -0x3E:0x3A //<Intel Managed Data Region>:<MDR2 Data Info> -0x3E:0x3B //<Intel Managed Data Region>:<MDR2 Data Start> -0x3E:0x3C //<Intel Managed Data Region>:<MDR2 Data Done> -0x3E:0x3D //<Intel Managed Data Region>:<MDR2 Data Block> -0x3E:0x41 //<Intel Managed Data Region>:<Enter Platform Debug Log file transfer mode> -0x3E:0x42 //<Intel Managed Data Region>:<Read Platform Debug Log file> -0x3E:0x43 //<Intel Managed Data Region>:<Status of the Platform Debug Log file transfer mode> -0x3E:0x44 //<Intel Managed Data Region>:<Exit Platform Debug Log file transfer mode> -0x3E:0x50 //<Intel Managed Data Region>:<Node IPMB slave address> -0x3E:0x51 //<Intel Managed Data Region>:<Slot IPMB> -0x3E:0x52 //<Intel Managed Data Region>:<Slot I2C Master Write Read> -0x3E:0x75 //<Intel Managed Data Region>:<Get Remote Log IP> diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/transporthandler_oem.cpp b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/transporthandler_oem.cpp index 3cb79dc3f..856a80fbc 100644 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/transporthandler_oem.cpp +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host/transporthandler_oem.cpp @@ -59,7 +59,8 @@ RspType<> setLanOem(uint8_t channel, uint8_t parameter, message::Payload& req) } size_t numDataBytes = req.size() - 4; - if (numDataBytes > IpmiHostnameLen) + if ((numDataBytes > IpmiHostnameLen) || + (!complete && (numDataBytes < IpmiHostnameLen))) { return responseReqDataLenInvalid(); } diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend index ba148779f..e1311a70d 100644 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-host_%.bbappend @@ -2,10 +2,9 @@ FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" PROJECT_SRC_DIR := "${THISDIR}/${PN}" SRC_URI = "git://github.com/openbmc/phosphor-host-ipmid" -SRCREV = "ebc53cb165ea26aa48f0bbf01d9bce0e4abb0b7d" +SRCREV = "86d8bd793968e9251f41dbb8eaea482490e68eb1" SRC_URI += "file://phosphor-ipmi-host.service \ - file://host-ipmid-whitelist.conf \ file://0010-fix-get-system-GUID-ipmi-command.patch \ file://0053-Fix-keep-looping-issue-when-entering-OS.patch \ file://0056-add-SetInProgress-to-get-set-boot-option-cmd.patch \ @@ -13,15 +12,13 @@ SRC_URI += "file://phosphor-ipmi-host.service \ file://0060-Move-Get-SOL-config-parameter-to-host-ipmid.patch \ file://0062-Update-IPMI-Chassis-Control-command.patch \ file://0063-Save-the-pre-timeout-interrupt-in-dbus-property.patch \ - file://0064-Update-provisioning-mode-filter-logic.patch \ file://0001-Modify-Get-Lan-Configuration-IP-Address-Source-to-us.patch \ - file://0002-Fixed-issue-in-setLan-command-for-IP-source.patch \ - file://0003-Fix-for-return-CC-in-setLan-command-cases.patch \ " EXTRA_OECONF_append = " --disable-i2c-whitelist-check" EXTRA_OECONF_append = " --enable-transport-oem=yes" EXTRA_OECONF_append = " --disable-boot-flag-safe-mode-support" +EXTRA_OECONF_append = " --disable-ipmi-whitelist" RDEPENDS_${PN}_remove = "clear-once" @@ -37,10 +34,6 @@ FILES_${PN}_remove = " \ ${systemd_unitdir}/system/obmc-host-shutdown@0.target.requires/xyz.openbmc_project.Ipmi.Internal.SoftPowerOff.service \ " -do_configure_append(){ - cp -f ${WORKDIR}/host-ipmid-whitelist.conf ${S} -} - do_compile_prepend(){ cp -f ${PROJECT_SRC_DIR}/transporthandler_oem.cpp ${S} } diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-ipmb_%.bbappend b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-ipmb_%.bbappend index 016dd0002..69b730221 100644 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-ipmb_%.bbappend +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-ipmb_%.bbappend @@ -1,2 +1,2 @@ SRC_URI = "git://github.com/openbmc/ipmbbridge.git" -SRCREV = "43c89138ea759b4e47f6cef481f677b9f421d148" +SRCREV = "a86059348fe133725f4616f3e46ff0d555db4039" diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-net_%.bbappend b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-net_%.bbappend index 614133645..c82736781 100644 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-net_%.bbappend +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-ipmi-net_%.bbappend @@ -3,7 +3,7 @@ inherit useradd # TODO: This should be removed, once up-stream bump up # issue is resolved SRC_URI += "git://github.com/openbmc/phosphor-net-ipmid" -SRCREV = "46bec0f60a201a644c1f3af4cec2f31da58a0595" +SRCREV = "2555e2ec1c5bd6636eb67a1a2cdf6b8b567772c9" USERADD_PACKAGES = "${PN}" # add a group called ipmi diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-node-manager-proxy_git.bb b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-node-manager-proxy_git.bb index 9f657e39b..36d65fd72 100644 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-node-manager-proxy_git.bb +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/ipmi/phosphor-node-manager-proxy_git.bb @@ -3,7 +3,7 @@ DESCRIPTION = "The Node Manager Proxy provides a simple interface for communicat with Management Engine via IPMB" SRC_URI = "git://github.com/Intel-BMC/node-manager;protocol=ssh" -SRCREV = "ddba32d5ac94cdd8db19e18215535d7fe86675e6" +SRCREV = "de212d839bb515939bd089c66072e4fcf33b8653" PV = "0.1+git${SRCPV}" LICENSE = "Apache-2.0" diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/multi-node-nl/multi-node-nl.bb b/meta-openbmc-mods/meta-common/recipes-phosphor/multi-node-nl/multi-node-nl.bb new file mode 100644 index 000000000..c47a581f6 --- /dev/null +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/multi-node-nl/multi-node-nl.bb @@ -0,0 +1,27 @@ +SUMMARY = "Multi-node Non-legacy" +DESCRIPTION = "New systemd target for non-legacy nodes on multi-node platform" + +inherit systemd + +SYSTEMD_SERVICE_${PN} = "multi-node-nl.target" +SYSTEMD_SERVICE_${PN} += "nonLegacyNode.service" + +S = "${WORKDIR}" +SRC_URI = "file://multi-node-nl.target \ + file://nonLegacyNode.service \ + file://nonLegacyNode.sh \ + " + +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${INTELBASE}/COPYING.apache-2.0;md5=34400b68072d710fecd0a2940a0d1658" + +RDEPENDS_${PN} = "bash" + +do_install_append() { + install -d ${D}${bindir} + install -m 0755 ${S}/nonLegacyNode.sh ${D}/${bindir}/nonLegacyNode.sh + + install -d ${D}${base_libdir}/systemd/system + install -m 0644 ${S}/multi-node-nl.target ${D}${base_libdir}/systemd/system + install -m 0644 ${S}/nonLegacyNode.service ${D}${base_libdir}/systemd/system +} diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/multi-node-nl/multi-node-nl/multi-node-nl.target b/meta-openbmc-mods/meta-common/recipes-phosphor/multi-node-nl/multi-node-nl/multi-node-nl.target new file mode 100644 index 000000000..32b50532f --- /dev/null +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/multi-node-nl/multi-node-nl/multi-node-nl.target @@ -0,0 +1,4 @@ +[Unit] +Description=Target for non-legacy node in multi-node system +Documentation=man:systemd.special(7) + diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/multi-node-nl/multi-node-nl/nonLegacyNode.service b/meta-openbmc-mods/meta-common/recipes-phosphor/multi-node-nl/multi-node-nl/nonLegacyNode.service new file mode 100644 index 000000000..8e3d07ba4 --- /dev/null +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/multi-node-nl/multi-node-nl/nonLegacyNode.service @@ -0,0 +1,9 @@ +[Unit] +Description=Non Legacy node + +[Service] +ExecStart=/usr/bin/nonLegacyNode.sh +Type=exec + +[Install] +WantedBy=multi-node-nl.target diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/multi-node-nl/multi-node-nl/nonLegacyNode.sh b/meta-openbmc-mods/meta-common/recipes-phosphor/multi-node-nl/multi-node-nl/nonLegacyNode.sh new file mode 100755 index 000000000..2a1a5ea3b --- /dev/null +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/multi-node-nl/multi-node-nl/nonLegacyNode.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +PWM_FILE="/sys/class/hwmon/hwmon0/pwm" +FAN_SPEED=$((255 * 80 / 100)) + +set_fan_speed() { + local idx=0 + for ((idx=1; idx<=8; idx++)) + do + if [ -f $PWM_FILE$idx ]; then + echo $FAN_SPEED > $PWM_FILE$idx + fi + done +} + +$(set_fan_speed) + +export TERM=xterm +# Autologin root user to serial console (ttyS4) on boot +exec /sbin/agetty -a root -J -8 -L ttyS4 115200 $TERM diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/phosphor-u-boot-mgr/phosphor-u-boot-mgr_git.bb b/meta-openbmc-mods/meta-common/recipes-phosphor/phosphor-u-boot-mgr/phosphor-u-boot-mgr_git.bb index 12cb4ef78..2a561dbe1 100644 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/phosphor-u-boot-mgr/phosphor-u-boot-mgr_git.bb +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/phosphor-u-boot-mgr/phosphor-u-boot-mgr_git.bb @@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e" SRC_URI = "git://github.com/Intel-BMC/provingground.git;protocol=ssh" -SRCREV = "5a03fdc6a119b65ecf320622ce2809e340749fa9" +SRCREV = "bee56d62b209088454d166d1efae4825a2b175df" inherit cmake systemd SYSTEMD_SERVICE_${PN} = "xyz.openbmc_project.U_Boot.Environment.Manager.service" diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/preinit-mounts/preinit-mounts/init b/meta-openbmc-mods/meta-common/recipes-phosphor/preinit-mounts/preinit-mounts/init index 0e38f3aeb..e954d7757 100755 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/preinit-mounts/preinit-mounts/init +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/preinit-mounts/preinit-mounts/init @@ -115,41 +115,15 @@ full_clean() { done sync } -# attach a UBI device to the MTD device -prepare_ubi_volume() { - local nv_num="$1" - local mtd="/dev/mtd${nv_num}" - local ubi="/dev/ubi${nv_num}" - if [ ! -e $ubi ]; then - if ! ubiattach -m "$nv_num" -d "$nv_num"; then - # the attach failed, so format the MTD device and try again - log "Warning! Failed to attach $ubi to $mtd." - log "UBI-formatting $mtd to attach again. Data on this device will be lost." - ubiformat -y "$mtd" - ubiattach -m "$nv_num" -d "$nv_num" - fi - fi - - # make a UBI volume on the UBI device - local vol="${ubi}_0" - if [ ! -e $vol ]; then - ubimkvol "$ubi" -N "$mtd" -m - fi -} -reformat_ubi_volume() { - local nv_num="$1" +reformat_jffs2_partition() { + local mtd_name="$1" local mnt="$2" - local mtd="/dev/mtd${nv_num}" - local ubi="/dev/ubi${nv_num}" - local vol="${ubi}_0" - # unmount the volume to reformat it + # unmount the partition to reformat it umount -f "$mnt" - ubidetach -m $nv_num - ubiformat -y "$mtd" - prepare_ubi_volume $nv_num - # remount the UBIFS on the UBI volume - mount -t ubifs -o sync "$vol" "$mnt" + flash_eraseall "$(mtd_by_name ${mtd_name})" + # remount the JFFS2 + mount -t jffs2 -o sync mtd:"$mtd_name" "$mnt" if [ $? -ne 0 ]; then log "Failed to mount reformatted NV volume; system unstable" fi @@ -162,14 +136,13 @@ clear_ubenv() { # mount NV filesystem mkdir -p "$RWFS_MNT" -prepare_ubi_volume $NV_MTD_NUM -mount -t ubifs -o sync "/dev/ubi${NV_MTD_NUM}_0" "$RWFS_MNT" +mount -t jffs2 -o sync mtd:"$NV_MTD" "$RWFS_MNT" if [ $? -ne 0 ]; then log "Failed to mount NV volume; attempting recovery" - reformat_ubi_volume $NV_MTD_NUM $RWFS_MNT + reformat_jffs2_partition $NV_MTD $RWFS_MNT fi -# check for full factory reset: if so, ubiformat $NV_MTD_DEV +# check for full factory reset: if so, format $NV_MTD_DEV RESTORE_FLAG=$RWFS_MNT/.restore_op restore_op=$(cat $RESTORE_FLAG) # read from NV restore_op=${restore_op:-0} # set default value 0 @@ -181,7 +154,7 @@ elif [ $restore_op -eq 2 ]; then clear_ubenv elif [ $restore_op -eq 3 ]; then log "restore-defaults: reformat" - reformat_ubi_volume $NV_MTD_NUM $RWFS_MNT + reformat_jffs2_partition $NV_MTD $RWFS_MNT clear_ubenv fi rm -f $RESTORE_FLAG @@ -229,15 +202,57 @@ if ! grep -q sofs /proc/mounts; then SOFS_MTD=sofs SOFS_MTD_NUM="$(mtdnum_by_name ${SOFS_MTD})" - # mount a UBIFS on the UBI volume - prepare_ubi_volume $SOFS_MTD_NUM - mount -t ubifs -o sync "/dev/ubi${SOFS_MTD_NUM}_0" "$SOFS_MNT" + # mount a JFFS2 on the partition + mount -t jffs2 -o sync mtd:"$SOFS_MTD" "$SOFS_MNT" if [ $? -ne 0 ]; then log "Failed to mount SOFS volume; attempting recovery" - reformat_ubi_volume $SOFS_MTD_NUM $SOFS_MNT + reformat_jffs2_partition $SOFS_MTD $SOFS_MNT fi fi log "Finished mounting nv and overlays" + +# Detect the non-legacy node in cooper city and boot in to special mode. + +readonly COOPER_CITY=40 # Board id of cooper city + +is_nl_node() { + typeset -i nid1=$(gpioget $(gpiofind "FM_NODE_ID_1")) + typeset -i nid2=$(gpioget $(gpiofind "FM_NODE_ID_2")) + echo $((nid1|nid2)) +} + +read_board_id() { + local idx=0 + local result=0 + local value=0 + for ((idx=0; idx<6; idx++)) + do + typeset -i value=$(gpioget $(gpiofind "FM_BMC_BOARD_SKU_ID${idx}_N")) + value=$((value << idx)) + result=$((result | value)) + done + echo $result +} + +pfr_write() { + [ $# -ne 2 ] && return 1 + local PFR_BUS=4 + local PFR_ADDR=0x38 + local reg=$1 + local val=$2 + i2cset -y $PFR_BUS $PFR_ADDR $reg $val >&/dev/null +} + +board_id=$(read_board_id) +if [ $board_id -eq $COOPER_CITY ]; then + if [ $(is_nl_node) -ne 0 ]; then + systemctl set-default multi-node-nl.target + PFR_BMC_CHECKPOINT_REG=0xf + PFR_BMC_CHECKPOINT_COMPLETE=0x9 + pfr_write $PFR_BMC_CHECKPOINT_REG $PFR_BMC_CHECKPOINT_COMPLETE + fi +fi + exec /lib/systemd/systemd diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/prov-mode-mgr/prov-mode-mgr_git.bb b/meta-openbmc-mods/meta-common/recipes-phosphor/prov-mode-mgr/prov-mode-mgr_git.bb index 146d2e523..9db4eeb56 100644 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/prov-mode-mgr/prov-mode-mgr_git.bb +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/prov-mode-mgr/prov-mode-mgr_git.bb @@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e" SRC_URI = "git://github.com/Intel-BMC/provingground.git;protocol=ssh" -SRCREV = "5a03fdc6a119b65ecf320622ce2809e340749fa9" +SRCREV = "bee56d62b209088454d166d1efae4825a2b175df" inherit cmake systemd SYSTEMD_SERVICE_${PN} = "xyz.openbmc_project.RestrictionMode.Manager.service" diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/security-manager/security-manager_git.bb b/meta-openbmc-mods/meta-common/recipes-phosphor/security-manager/security-manager_git.bb index 8faa23f97..64201acc1 100644 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/security-manager/security-manager_git.bb +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/security-manager/security-manager_git.bb @@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = "file://${INTELBASE}/COPYING.apache-2.0;md5=34400b68072d710fe inherit cmake systemd SRC_URI = "git://github.com/Intel-BMC/provingground.git;protocol=ssh" -SRCREV = "5a03fdc6a119b65ecf320622ce2809e340749fa9" +SRCREV = "bee56d62b209088454d166d1efae4825a2b175df" SYSTEMD_SERVICE_${PN} += "xyz.openbmc_project.SecurityManager.service" diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/sensors/dbus-sensors_%.bbappend b/meta-openbmc-mods/meta-common/recipes-phosphor/sensors/dbus-sensors_%.bbappend index 5511e3b0f..ec101469e 100644 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/sensors/dbus-sensors_%.bbappend +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/sensors/dbus-sensors_%.bbappend @@ -1,7 +1,9 @@ -SRCREV = "347dd4e7a0a4923583151e4d9eb483b65dba9e7b" +SRCREV = "d9d8cafcb1f4096e579188478b88cb8cefca8bd4" SRC_URI = "git://github.com/openbmc/dbus-sensors.git" DEPENDS_append = " libgpiod libmctp" FILESEXTRAPATHS_append := ":${THISDIR}/${PN}" +EXTRA_OECMAKE += "-DDISABLE_NVME=OFF" +SYSTEMD_SERVICE_${PN} += " xyz.openbmc_project.nvmesensor.service" diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/settings/settings_git.bb b/meta-openbmc-mods/meta-common/recipes-phosphor/settings/settings_git.bb index 314e31779..e49a410cb 100644 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/settings/settings_git.bb +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/settings/settings_git.bb @@ -1,7 +1,7 @@ SUMMARY = "Settings" SRC_URI = "git://github.com/Intel-BMC/provingground.git;protocol=ssh" -SRCREV = "5a03fdc6a119b65ecf320622ce2809e340749fa9" +SRCREV = "bee56d62b209088454d166d1efae4825a2b175df" PV = "0.1+git${SRCPV}" LICENSE = "Apache-2.0" diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/special-mode-mgr/special-mode-mgr_git.bb b/meta-openbmc-mods/meta-common/recipes-phosphor/special-mode-mgr/special-mode-mgr_git.bb index 2c4cb80a7..2690169ff 100644 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/special-mode-mgr/special-mode-mgr_git.bb +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/special-mode-mgr/special-mode-mgr_git.bb @@ -9,7 +9,7 @@ LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e" SRC_URI = "git://github.com/Intel-BMC/provingground.git;protocol=ssh" -SRCREV = "5a03fdc6a119b65ecf320622ce2809e340749fa9" +SRCREV = "bee56d62b209088454d166d1efae4825a2b175df" EXTRA_OECMAKE += "${@bb.utils.contains('EXTRA_IMAGE_FEATURES', 'validation-unsecure', '-DBMC_VALIDATION_UNSECURE_FEATURE=ON', '', d)}" inherit cmake systemd @@ -21,6 +21,7 @@ DEPENDS += " \ sdbusplus-native \ phosphor-logging \ boost \ + libpam \ " RDEPENDS_${PN} += " \ libsystemd \ diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/srvcfg-manager/srvcfg-manager_git.bb b/meta-openbmc-mods/meta-common/recipes-phosphor/srvcfg-manager/srvcfg-manager_git.bb index 6cef4c3ea..b1ac1fbc1 100644 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/srvcfg-manager/srvcfg-manager_git.bb +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/srvcfg-manager/srvcfg-manager_git.bb @@ -9,7 +9,7 @@ LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e" SRC_URI = "git://github.com/Intel-BMC/provingground.git;protocol=ssh" -SRCREV = "5a03fdc6a119b65ecf320622ce2809e340749fa9" +SRCREV = "bee56d62b209088454d166d1efae4825a2b175df" inherit cmake systemd SYSTEMD_SERVICE_${PN} = "srvcfg-manager.service" diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/state/phosphor-state-manager_%.bbappend b/meta-openbmc-mods/meta-common/recipes-phosphor/state/phosphor-state-manager_%.bbappend new file mode 100644 index 000000000..aef2a020f --- /dev/null +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/state/phosphor-state-manager_%.bbappend @@ -0,0 +1,3 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" + +DEPENDS += "gtest" diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/state/post-code-manager_git.bb b/meta-openbmc-mods/meta-common/recipes-phosphor/state/post-code-manager_git.bb index 98e0706fa..97896d72a 100644 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/state/post-code-manager_git.bb +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/state/post-code-manager_git.bb @@ -18,6 +18,7 @@ SYSTEMD_SERVICE_${PN} += "xyz.openbmc_project.State.Boot.PostCode.service" DEPENDS += " \ autoconf-archive-native \ systemd \ + boost \ sdbusplus \ sdbusplus-native \ phosphor-dbus-interfaces \ diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/system/callback-manager.bb b/meta-openbmc-mods/meta-common/recipes-phosphor/system/callback-manager.bb index 910bf9fae..cc84015f4 100644 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/system/callback-manager.bb +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/system/callback-manager.bb @@ -7,7 +7,7 @@ inherit cmake systemd DEPENDS = "boost sdbusplus" PV = "0.1+git${SRCPV}" -SRCREV = "5a03fdc6a119b65ecf320622ce2809e340749fa9" +SRCREV = "bee56d62b209088454d166d1efae4825a2b175df" S = "${WORKDIR}/git/callback-manager" diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/users/phosphor-user-manager/0006-Use-groupmems-instead-of-getgrnam_r-due-to-overlay.patch b/meta-openbmc-mods/meta-common/recipes-phosphor/users/phosphor-user-manager/0006-Use-groupmems-instead-of-getgrnam_r-due-to-overlay.patch new file mode 100644 index 000000000..12a2bda3e --- /dev/null +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/users/phosphor-user-manager/0006-Use-groupmems-instead-of-getgrnam_r-due-to-overlay.patch @@ -0,0 +1,73 @@ +From c0bf911cbc33659adddebde767029ffc23251c61 Mon Sep 17 00:00:00 2001 +From: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com> +Date: Mon, 24 Feb 2020 13:37:12 +0530 +Subject: [PATCH] Use groupmems instead of getgrnam_r due to overlay + +With JFFS2 overlay, getgrnam_r during initial time returns the +old group details as per the lower dir, instead of the overlay one +but at the same time groupmems where returning proper values, which +reads the file everytime. Hence replacing getgrnam_r with groupmems + +Tested: +1. Verified that when added multiple user and then doing +BMC reset using ipmitool raw 6 2 doesn't reproduce the issue of +user with only ssh group. (on 38 version source + this fix) +2. Updated using redfish to version 39 + this fix, and made sure +issue doesn't happen. + +Note: For testing purpose added debug statements to dump ouput of +both getgrnam_r & groupmems and able to see proper list only +in groupmems when the issue is reproduced + +Signed-off-by: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com> +--- + user_service.cpp | 26 +++++++++++--------------- + 1 file changed, 11 insertions(+), 15 deletions(-) + +diff --git a/user_service.cpp b/user_service.cpp +index c3c45bd..4fdf7a1 100644 +--- a/user_service.cpp ++++ b/user_service.cpp +@@ -143,28 +143,24 @@ class ShadowService : public phosphor::user::UserServiceInterface + getUsersInGroup(const std::string &groupName) const override + { + std::vector<std::string> usersInGroup; +- // Should be more than enough to get the pwd structure. +- std::array<char, 4096> buffer{}; +- struct group grp; +- struct group *grpPtr = &grp; +- struct group *resultPtr; +- +- int status = getgrnam_r(groupName.c_str(), grpPtr, buffer.data(), +- buffer.max_size(), &resultPtr); +- +- if (!status && (grpPtr == resultPtr)) ++ std::vector<std::string> output; ++ try + { +- for (; *(grp.gr_mem) != NULL; ++(grp.gr_mem)) +- { +- usersInGroup.emplace_back(*(grp.gr_mem)); +- } ++ output = phosphor::user::executeCmd("/usr/sbin/groupmems", "-l", ++ "-g", groupName.c_str()); + } +- else ++ catch (const phosphor::user::InternalFailure &e) + { + phosphor::logging::log<phosphor::logging::level::ERR>( + "Group not found", + phosphor::logging::entry("GROUP=%s", groupName.c_str())); + // Don't throw error, just return empty usersInGroup - fallback ++ return usersInGroup; ++ } ++ if (!output.empty()) ++ { ++ boost::algorithm::split(usersInGroup, output[0], ++ boost::algorithm::is_any_of(" ")); + } + return usersInGroup; + } +-- +2.7.4 + diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/users/phosphor-user-manager_%.bbappend b/meta-openbmc-mods/meta-common/recipes-phosphor/users/phosphor-user-manager_%.bbappend index f7a3a7875..238511ed5 100644 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/users/phosphor-user-manager_%.bbappend +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/users/phosphor-user-manager_%.bbappend @@ -7,4 +7,5 @@ EXTRA_OECONF += "${@bb.utils.contains_any("IMAGE_FEATURES", [ 'debug-tweaks', 'a SRC_URI += " \ file://0005-Added-suport-for-multiple-user-manager-services.patch \ + file://0006-Use-groupmems-instead-of-getgrnam_r-due-to-overlay.patch \ " diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/virtual-media/virtual-media.bb b/meta-openbmc-mods/meta-common/recipes-phosphor/virtual-media/virtual-media.bb index 007265667..da60ca67e 100644 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/virtual-media/virtual-media.bb +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/virtual-media/virtual-media.bb @@ -2,7 +2,7 @@ SUMMARY = "Virtual Media Service" DESCRIPTION = "Virtual Media Service" SRC_URI = "git://github.com/Intel-BMC/provingground.git;protocol=ssh" -SRCREV = "5a03fdc6a119b65ecf320622ce2809e340749fa9" +SRCREV = "bee56d62b209088454d166d1efae4825a2b175df" S = "${WORKDIR}/git/virtual-media/" PV = "1.0+git${SRCPV}" diff --git a/meta-openbmc-mods/meta-common/recipes-phosphor/webui/phosphor-webui_%.bbappend b/meta-openbmc-mods/meta-common/recipes-phosphor/webui/phosphor-webui_%.bbappend index bd72b27be..e16e658a1 100644 --- a/meta-openbmc-mods/meta-common/recipes-phosphor/webui/phosphor-webui_%.bbappend +++ b/meta-openbmc-mods/meta-common/recipes-phosphor/webui/phosphor-webui_%.bbappend @@ -1,2 +1,2 @@ SRC_URI = "git://github.com/Intel-BMC/phosphor-webui;protocol=ssh;branch=intel2" -SRCREV = "376cb79388c70253cc8c2b2f8eb40e0f5833ac40" +SRCREV = "68c48ed0e48f57bf3092bc5a5bd4b8ac336a4d93" |