summaryrefslogtreecommitdiffstats
path: root/redfish-core
Commit message (Collapse)AuthorAgeFilesLines
...
* Add Redfish PCIe informationJason M. Bills2019-07-113-0/+352
| | | | | | | | | | | | This adds the capability to get PCIe device information from D-Bus and display it in the appropriate Redfish PCIeDevice and PCIeFunction objects. Tested: Passed the Redfish validator for the new PCIeDevice and PCIeFunction objects. Change-Id: I06f3b0e7d283e48d2235b7d34f78f603b22de79f Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com>
* bmcweb implementation of NMI (soft reset) control codeLakshminarayana R. Kammath2019-07-091-1/+31
| | | | | | | | | | | | | | | Tested : Verified following 1) Redfish validator result is Negative 2) verified following command triggered NMI on host curl -k -H "X-Auth-Token: $bmc_token" -X POST https://9.5.180.47/redfish/v1/Systems/system/Actions/ComputerSystem.Reset -d '{"ResetType":"Nmi"}' Response : OK 2) Host rebooted and crash dump is collected Signed-off-by: Lakshminarayana R. Kammath <lkammath@in.ibm.com> Change-Id: I09efa1e3d94437c89afbe1a1b9d148cc4f577ebe
* Fix Redfish Validator Errors in EventLogGunnar Mills2019-07-091-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | /redfish/v1/Systems/system/LogServices/EventLog ERROR - LogService.v1_0_0.LogService:Actions : Could not get details on this property (This item should not be a List) ERROR - Actions: Item is present, but no schema found Before: curl -k https://${bmc}/redfish/v1/Systems/system/LogServices/EventLog/ { "@odata.context": "/redfish/v1/$metadata#LogService.LogService", "@odata.id": "/redfish/v1/Systems/system/LogServices/EventLog", "@odata.type": "#LogService.v1_1_0.LogService", "Actions": [ { "#LogService.ClearLog": { "target": "/redfish/v1/Systems/system/LogServices/EventLog/Actions/LogService.ClearLog" } } ], After: curl -k https://${bmc}/redfish/v1/Systems/system/LogServices/EventLog/ { "@odata.context": "/redfish/v1/$metadata#LogService.LogService", "@odata.id": "/redfish/v1/Systems/system/LogServices/EventLog", "@odata.type": "#LogService.v1_1_0.LogService", "Actions": { "#LogService.ClearLog": { "target": "/redfish/v1/Systems/system/LogServices/EventLog/Actions/LogService.ClearLog" } }, LogService.ClearLog currently does not work on master on Witherspoon, see https://github.com/openbmc/bmcweb/issues/97 Change-Id: Id2cea926b4f5248782c751f3da247c4dc5662cf3 Tested: No longer see the Errors. Signed-off-by: Gunnar Mills <gmills@us.ibm.com>
* Return active bmc fw versionAndrew Geissler2019-07-081-43/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | Utilize the new utility interface to return the actively running BMC firmware image. The current code just returns the first instance it finds which is incorrect. Tested: cat /etc/os-release ID="openbmc-phosphor" NAME="Phosphor OpenBMC (Phosphor OpenBMC Project Reference Distro)" VERSION="2.7.0-dev" VERSION_ID="2.7.0-dev-1010-gb417d47" Before Change: curl -k -H "X-Auth-Token: $TOKEN" -X GET https://${BMC_IP}/redfish/v1/Managers/bmc | grep Firmware "FirmwareVersion": "2.7.0-dev-999-gfbdb73f" After Change: curl -k -H "X-Auth-Token: $TOKEN" -X GET https://${BMC_IP}/redfish/v1/Managers/bmc | grep Firmware "FirmwareVersion": "2.7.0-dev-1010-gb417d47", Resolves openbmc/bmcweb#38 Change-Id: I50388c7adfaed8938e3a927becbebd801f0f7673 Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
* Move PowerLimit to correct locationGunnar Mills2019-07-082-6/+35
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | See the following Redfish Validator errors and warning: /redfish/v1/Chassis/chassis/Power ERROR - PowerLimit not defined in schema Power.v1_5_2 (check version, spelling and casing) /redfish/v1/Chassis/chassis/Power#/PowerControl/ ERROR - Decoded object no longer a dictionary /redfish/v1/Chassis/chassis/Power ERROR - @odata.id of ReferenceableMember does not properly resolve: /redfish/v1/Chassis/chassis/Power#/PowerControl/ WARNING - No @odata.type present, assuming highest type Power.v1_0_0.PowerControl Power.v1_4_0.PowerControl If you look at the specification/mockups, PowerLimit is under PowerControl. From the https://redfish.dmtf.org/redfish/mockups/v1/893 mockup: PowerControl": [ { "@odata.id": "/redfish/v1/Chassis/1U/Power#/PowerControl/0", "MemberId": "0", ... "PowerAvailableWatts": 0, "PowerCapacityWatts": 800, ... "PowerLimit": { "LimitInWatts": 500, "LimitException": "LogEventOnly", "CorrectionInMs": 50 } , ... } ], Added an odata.type and fixed the odata.id for PowerControl. Put all power control sensors under the same PowerControl like we do for PowerSupplies. Tested: No longer see the errors. If no total_power (happens when a Open Power system is off): curl -k https://${bmc}/redfish/v1/Chassis/chassis/Power ... "PowerControl": [ { "@odata.id": "/redfish/v1/Chassis/chassis/Power#/PowerControl/0", "@odata.type": "#Power.v1_0_0.PowerControl", "MemberId": "0", "Name": "Chassis Power Control", "PowerLimit": { "LimitInWatts": null } } ], "Redundancy": [], ... curl -k https://${bmc}/redfish/v1/Chassis/chassis/Power/ { "PowerControl": [ { "@odata.id": "/redfish/v1/Chassis/chassis/Power#/PowerControl/0", "@odata.type": "#Power.v1_0_0.PowerControl", "MemberId": "0", "Name": "Chassis Power Control", "PowerConsumedWatts": 232.0, "PowerLimit": { "LimitInWatts": null }, "Status": { "Health": "OK", "State": "Enabled" Change-Id: I8ca47bd6c7dedf5d0685886e2e45e6f964f69060 Signed-off-by: Gunnar Mills <gmills@us.ibm.com>
* bmcweb: Clear up event log entry class namesAnthony Wilson2019-07-032-5/+6
| | | | | | | | | | | | | It wasn't immediately clear what some of the classes did without digging through the implementation. This should clear up any confusion between the Journal and DBus implementations of the event log entry classes. Tested: Verified changes were present in both implementations of event log enttry. Change-Id: Id0d6bad5c73feb93608ac1ad457235a1d31fe018 Signed-off-by: Anthony Wilson <wilsonan@us.ibm.com>
* redfish: Give DBus event logging its own classesAnthony Wilson2019-07-032-17/+49
| | | | | | | | | | | | Since the DBus implementation of event logging is completely different than the journal implementation, moved it to its own class to be consistent. Tested: Verified both implementations work the same as before the class split. Change-Id: I95e3b837f9d99b78034695545ab5791386d94a13 Signed-off-by: Anthony Wilson <wilsonan@us.ibm.com>
* Redfish(Network): Add support for IPv4StaticAddressesRavi Teja2019-07-031-42/+97
| | | | | | | | | | | | | | | | | Added GET and PATCH support for IPv4StaticAddresses and modified IPv4Addresses as read-only property Tested by: GET PATCH -D patch.txt -d '{"IPv4StaticAddresses": [{},{},{"Address": "10.7.8.7","SubnetMask": "255.255.0.0","Gateway":"10.7.8.1"}]}' PATCH -D patch.txt -d '{"IPv4StaticAddresses": [{},{"Address": "10.7.7.8","SubnetMask": "255.255.0.0","Gateway":"10.7.7.1"}]}' PATCH -D patch.txt -d '{"IPv4StaticAddresses": [null,{},{"Address": "10.7.7.9","SubnetMask": "255.255.0.0","Gateway":"10.7.7.1"}]}']}' PATCH -D patch.txt -d '{"IPv4StaticAddresses": [{},{"Address": "10.8.8.9"}]}' Tested with validator and no errors. Signed-off-by: Ravi Teja <raviteja28031990@gmail.com> Change-Id: I580787933f1d93d0734e32f71ac9fc80dc108247
* Redfish: Add support to upload/replace/view LDAP CertificateMarri Devender Rao2019-07-033-290/+327
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Implements CertificateCollection schema to upload/list existing LDAP certificates Implements Certificate schema to view existing LDAP certificate Implements ReplaceCertificate action to replace existing LDAP certificate. Tested: 1. Tested schema with validator and no issues 2. Privilege map for certificate service is not yet pubished 3. POST on /redfish/v1/AccountService/LDAP/Certificates curl -c cjar -b cjar -k -H "X-Auth-Token: $bmc_token" -H "Content-Type: application/octet-stream" -X POST -T testcert.pem https://${bmc}/redfish/v1/AccountServie/LDAP/Certificates { "@odata.context": "/redfish/v1/$metadata#Certificate.Certificate", "@odata.id": "/redfish/v1/AccountService/LDAP/Certificates/1", "@odata.type": "#Certificate.v1_0_0.Certificate", "CertificateString": "-----BEGIN CERTIFICATE---------END CERTIFICATE-----\n", "Description": "LDAP Certificate", "Id": "1", "Issuer": { "City": "SomeCity", "CommonName": "www.company.com", "Country": "US", "Organization": "MyCompany", "State": "VA", "organizationUnit": "MyDivision" }, "KeyUsage": [ "KeyAgreement", "ServerAuthentication" ], "Name": "LDAP Certificate", "Subject": { "City": "SomeCity", "CommonName": "www.company.com", "Organization": "MyCompany", "State": "VA", "organizationUnit": "MyDivision" }, "ValidNotAfter": "2029-03-14T02:11:02+00:00", "ValidNotBefore": "2019-03-17T02:11:02+00:00" } 4. GET on /redfish/v1/AccountService/LDAP/Certificates/ { "@odata.context": "/redfish/v1/$metadata#CertificateCollection.CertificateCollection", "@odata.id": "/redfish/v1/AccountService/LDAP/Certificates", "@odata.type": "#CertificateCollection.CertificatesCollection", "Description": "A Collection of LDAP certificate instances", "Members": [ { "@odata.id": "/redfish/v1/AccountService/LDAP/Certificates/1" } ], "Members@odata.count": 1, "Name": "LDAP Certificate Collection" } 5.GET on /redfish/v1/CertificateService/CertificateLocations/ { "@odata.context": "/redfish/v1/$metadata#CertificateLocations.CertificateLocations", "@odata.id": "/redfish/v1/CertificateService/CertificateLocations", "@odata.type": "#CertificateLocations.v1_0_0.CertificateLocations", "Description": "Defines a resource that an administrator can use in order to locate all certificates installed on a given service", "Id": "CertificateLocations", "Links": { "Certificates": [ { "@odata.id": "/redfish/v1/Managers/bmc/NetworkProtocol/HTTPS/Certificates/1" }, { "@odata.id": "/redfish/v1/AccountService/LDAP/Certificates/1" } ], "Certificates@odata.count": 2 }, "Name": "Certificate Locations" } 6.GET on /redfish/v1/AccountService/LDAP/Certificates/1 { "@odata.context": "/redfish/v1/$metadata#Certificate.Certificate", "@odata.id": "/redfish/v1/AccountService/LDAP/Certificates/1", "@odata.type": "#Certificate.v1_0_0.Certificate", "CertificateString": "-----BEGINCERTIFICATE-----\n ... -----ENDCERTIFICATE-----\n", "CertificateType": "PEM", "Description": "LDAP Certificate", "Id": "1", "Issuer": { "CommonName": "localhost", "Organization": "openbmc-project.xyz" }, "KeyUsage": [], "Name": "LDAP Certificate", "Subject": { "CommonName": "localhost" } 7.Replace certificate POST on /redfish/v1/CertificateService/Actions/CertificateService.ReplaceCertificate/ { "@odata.context": "/redfish/v1/$metadata#Certificate.Certificate", "@odata.id": "/redfish/v1/AccountService/LDAP/Certificates/1", "@odata.type": "#Certificate.v1_0_0.Certificate", ... } 8.GET on AccountService curl -k -H "X-Auth-Token: $bmc_token" -X GET https://${bmc}/redfish/v1/AccountService { "@odata.context": "/redfish/v1/$metadata#AccountService.AccountService", "@odata.id": "/redfish/v1/AccountService", "@odata.type": "#AccountService.v1_4_0.AccountService", "Id": "AccountService", "LDAP": { "AccountProviderType": "LDAPService", "Certificates": { "@odata.id": "/redfish/v1/AccountService/LDAP/Certificates" }, Change-Id: I056a4cea8b0377e156b660984857cdfadbfe1b2c Signed-off-by: Marri Devender Rao <devenrao@in.ibm.com>
* Return error on invalid swIdAndrew Geissler2019-07-031-0/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Tested: Before: curl -k -H "X-Auth-Token: $TOKEN" -X GET https://${BMC_IP}/redfish/v1/UpdateService/FirmwareInventory/invalidSwId { "@odata.context": "/redfish/v1/$metadata#SoftwareInventory.SoftwareInventory", "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/invalidSwId", "@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory", "Name": "Software Inventory", "Status": { "Health": "OK", "HealthRollup": "OK", "State": "Enabled" }, "Updateable": false } After: curl -k -H "X-Auth-Token: $TOKEN" -X GET https://${BMC_IP}/redfish/v1/UpdateService/FirmwareInventory/invalidSwId { "@odata.context": "/redfish/v1/$metadata#SoftwareInventory.SoftwareInventory", "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/invalidSwId", "@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory", "Name": "Software Inventory", "Status": { "Health": "OK", "HealthRollup": "OK", "State": "Enabled" }, "Updateable": false, "error": { "@Message.ExtendedInfo": [ { "@odata.type": "/redfish/v1/$metadata#Message.v1_0_0.Message", "Message": "The resource at the URI /redfish/v1/UpdateService/FirmwareInventory/invalidSwId was not found.", "MessageArgs": [ "/redfish/v1/UpdateService/FirmwareInventory/invalidSwId" ], "MessageId": "Base.1.4.0.ResourceMissingAtURI", "Resolution": "Place a valid resource at the URI or correct the URI and resubmit the request.", "Severity": "Critical" } ], "code": "Base.1.4.0.ResourceMissingAtURI", "message": "The resource at the URI /redfish/v1/UpdateService/FirmwareInventory/invalidSwId was not found." } } Change-Id: I4dbf535301d55ffff8f2a652d112e08db040d1b1 Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
* fwstatus: Enhance state of firmware inventoryAndrew Geissler2019-07-022-53/+94
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently there is no mechanism for a user to know the status of their firmware update over redfish. The primary focus of this commit is to provide status of a firmware update. There is still some ongoing discussion on using the Health field to better explain error conditions. A forum post with DMTF has been opened for clarification in this area but this commit does get things going in the right direction. It provides a user with the status of their update and gives them a simple Enabled/Disabled to know if it worked. Tested: - Firmware update in progress curl -k -H "X-Auth-Token: $TOKEN" -X GET https://${BMC_IP}/redfish/v1/UpdateService/FirmwareInventory/92e57fc7 { "@odata.context": "/redfish/v1/$metadata#SoftwareInventory.SoftwareInventory", "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/92e57fc7", "@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory", "Description": "BMC update", "Id": "92e57fc7", "Members@odata.count": 1, "Name": "Software Inventory", "RelatedItem": [ { "@odata.id": "/redfish/v1/Managers/bmc" } ], "Status": { "Health": "OK", "HealthRollup": "OK", "State": "Updating" }, "Updateable": false, "Version": "2.7.0-dev-926-g79ca37b3d" } - Firmware update complete curl -k -H "X-Auth-Token: $TOKEN" -X GET https://${BMC_IP}/redfish/v1/UpdateService/FirmwareInventory/92e57fc7 { "@odata.context": "/redfish/v1/$metadata#SoftwareInventory.SoftwareInventory", "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/92e57fc7", "@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory", "Description": "BMC update", "Id": "92e57fc7", "Members@odata.count": 1, "Name": "Software Inventory", "RelatedItem": [ { "@odata.id": "/redfish/v1/Managers/bmc" } ], "Status": { "Health": "OK", "HealthRollup": "OK", "State": "Enabled" }, "Updateable": false, "Version": "2.7.0-dev-926-g79ca37b3d" } - Firmware update failed (xyz.openbmc_project.Software.Activation.Activations.Failed) curl -k -H "X-Auth-Token: $TOKEN" -X GET https://${BMC_IP}/redfish/v1/UpdateService/FirmwareInventory/3d02a163 { "@odata.context": "/redfish/v1/$metadata#SoftwareInventory.SoftwareInventory", "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/3d02a163", "@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory", "Description": "BMC update", "Id": "3d02a163", "Members@odata.count": 1, "Name": "Software Inventory", "RelatedItem": [ { "@odata.id": "/redfish/v1/Managers/bmc" } ], "Status": { "Health": "OK", "HealthRollup": "OK", "State": "Disabled" }, "Updateable": false, "Version": "2.7.0-dev-940-geb79ec582" } - Firmware update status of Host curl -k -H "X-Auth-Token: $TOKEN" -X GET https://${BMC_IP}/redfish/v1/UpdateService/FirmwareInventory/9a8028ec { "@odata.context": "/redfish/v1/$metadata#SoftwareInventory.SoftwareInventory", "@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/9a8028ec", "@odata.type": "#SoftwareInventory.v1_1_0.SoftwareInventory", "Description": "Host update", "Id": "9a8028ec", "Name": "Software Inventory", "Status": { "Health": "OK", "HealthRollup": "OK", "State": "Enabled" }, "Updateable": false, "Version": "IBM-witherspoon-OP9-v2.0.14-2.6" } Redfish validator had no additional errors Change-Id: I26273227448cab1a20a20a7edd9d85d223727bb8 Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
* Fix variable name case style for CI warningJason M. Bills2019-06-281-10/+10
| | | | | | | | CI gives a warning for invalid case style in variable names. This fixes the warnings that show up so far. Change-Id: I2a8706d3283bdc685dc026391de715accea7b86e Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com>
* Fix initialier_list issuesEd Tanous2019-06-273-6/+5
| | | | | | | | | | | This is a warning that the clang analyser seems to pop up with. For whatever reason, GCC is just fine with it. Tested: Not yet tested. Change-Id: I5d665e23011806f51d1ef4c5b1e8b887bdb456eb Signed-off-by: Ed Tanous <ed.tanous@intel.com>
* Refish:Memory - Populate missing propertiesManojkiran Eda2019-06-271-0/+12
| | | | | | | | | | | | | | | | | | With this commit the GET request on any dimm object returns few additional properties.The following are the properties that are added as a part of this commit. - PartNumber - SerialNumber - Manufacturer Tested by: 1. Redfish-Service-Validator - Pass 2. GET https://<ip:port>/redfish/v1/Systems/system/Memory/dimm<number> Change-Id: I75ad8188e53dc8e08add6f5c7bebb6a5056afd35 Signed-off-by: Manojkiran Eda <manojkiran.eda@gmail.com>
* Fix parsing of Redfish messages with empty MessageArgsJason M. Bills2019-06-261-12/+22
| | | | | | | | | | | | | | | | | | | The current parsing shows an empty string as a MessageArg for messages that have no arguments. This fixes it to correctly display an empty MessageArgs. It also fixes a parsing range check error for the case when a message without MessageArgs is not terminated with a comma. Tested: Verified that messages show without args show in Redfish with an empty MessageArgs. Injected a message without a terminating comma and confirmed that it is correctly parsed and displayed. Change-Id: I896554941d2d239afa889d41edef1f1f71b59906 Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com>
* Health / Rollup SupportJames Feist2019-06-264-1/+248
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Look for associations for inventory and compare the inventory warning / critical and global warning / critical to get HealthRollup and Health respectively. Tested: Used sensor override to set BMC temp to Upper critical and saw: { "@odata.context": "/redfish/v1/$metadata#Chassis.Chassis", "@odata.id": "/redfish/v1/Chassis/WFP_Baseboard", "@odata.type": "#Chassis.v1_4_0.Chassis", "ChassisType": "RackMount", "Id": "WFP_Baseboard", "Links": { "ComputerSystems": [ { "@odata.id": "/redfish/v1/Systems/system" } ], "ManagedBy": [ { "@odata.id": "/redfish/v1/Managers/bmc" } ] }, "Manufacturer": "Intel Corporation", "Model": "S2600WFT", "Name": "WFP_Baseboard", "PartNumber": "123456789", "Power": { "@odata.id": "/redfish/v1/Chassis/WFP_Baseboard/Power" }, "PowerState": "Off", "SerialNumber": "123454321", "Status": { "Health": "Warning", "HealthRollup": "Critical", "State": "StandbyOffline" }, "Thermal": { "@odata.id": "/redfish/v1/Chassis/WFP_Baseboard/Thermal" } } Change-Id: Idd9e832db18bb4769f1452fe243d68339a6f844d Signed-off-by: James Feist <james.feist@linux.intel.com>
* Fix redudancy for association changeJames Feist2019-06-261-1/+1
| | | | | | | | | | | s/inventory/chassis according to https://gerrit.openbmc-project.xyz/c/openbmc/docs/+/22976 Tested: Redundancy still worked with according change in sensor repo Change-Id: Id0e517e09908a44fa983a6934b8c4c39d5db4dd6 Signed-off-by: James Feist <james.feist@linux.intel.com>
* Redfish: Check inventory item for sensor statusShawn McCarney2019-06-261-34/+501
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Added support to find the inventory item (if any) associated with a sensor. Checks whether the inventory item is not present or not functional. If so, updates the sensor status. Uses the standard D-Bus Inventory.Item and OperationalStatus interfaces to obtain the Present and Functional properties for the inventory item. These checks are in addition to the sensor threshold checks. The two approaches are complementary. Some functional problems and missing hardware are not detectable via thresholds depending on how the system is implemented. Uses an ObjectMapper association named "inventory" to find the inventory item associated with a sensor. For example: /xyz/openbmc_project/sensors/power/ps0_input_power/inventory -> /xyz/openbmc_project/inventory/system/chassis/motherboard/powersupply0 This support could be used in the future to obtain VPD data such as Model and PartNumber for PowerSupply sensors. VPD data is associated with the inventory item on D-Bus. Also changed the association name used to find all sensors in a chassis from "sensors" to "all_sensors". Test Plan: https://gist.github.com/smccarney/accc500b58fed80b711c65520cc7aafc Tested: Verified Power and Thermal output on a Witherspoon system. Tested where inventory item associated with sensor was present/not present and function/not functional. Ran Redfish Service Validator. Change-Id: Ibcdc515eb6b52ef43f05f98f36b8f0849fe1f25b Signed-off-by: Shawn McCarney <shawnmm@us.ibm.com>
* simpleupdate: Basic support of SimpleUpdateAndrew Geissler2019-06-262-11/+176
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is TFTP only since that is all the OpenBMC back end currently supports Design Doc Ref: https://gerrit.openbmc-project.xyz/c/openbmc/docs/+/20700 Tested: 1) Verified BMC image update via new SimpleUpdate interface worked curl -k -H "X-Auth-Token: $TOKEN" -d '{"ImageURI":"XXX.XX.X.X/obmc-phosphor-image-witherspoon.ubi.mtd.tar","TransferProtocol":"TFTP"}' -X POST https://${BMC_IP}/redfish/v1/UpdateService/Actions/UpdateService.SimpleUpdate { "@Message.ExtendedInfo": [ { "@odata.type": "/redfish/v1/$metadata#Message.v1_0_0.Message", "Message": "Successfully Completed Request", "MessageArgs": [], "MessageId": "Base.1.4.0.Success", "Resolution": "None", "Severity": "OK" } ] } 2) Verified encoding the protocol in ImageURI worked curl -k -H "X-Auth-Token: $TOKEN" -X POST https://${BMC_IP}/redfish/v1/UpdateService/Actions/UpdateService.SimpleUpdate -d '{"ImageURI":"tftp://${TFTP_IP}/obmc-phosphor-image-witherspoon.ubi.mtd.tar"}' { "@Message.ExtendedInfo": [ { "@odata.type": "/redfish/v1/$metadata#Message.v1_0_0.Message", "Message": "Successfully Completed Request", "MessageArgs": [], "MessageId": "Base.1.4.0.Success", "Resolution": "None", "Severity": "OK" } ] } Jun 12 20:52:20 witherspoon bmcweb[2470]: (2019-06-12 20:52:20) [DEBUG ] Enter UpdateService.SimpleUpdate doPost Jun 12 20:52:20 witherspoon bmcweb[2470]: (2019-06-12 20:52:20) [DEBUG ] Encoded transfer protocol tftp Jun 12 20:52:20 witherspoon bmcweb[2470]: (2019-06-12 20:52:20) [DEBUG ] Adjusted imageUri ${BMC_IP}/obmc-phosphor-image-witherspoon.ubi.mtd.tar Jun 12 20:52:20 witherspoon bmcweb[2470]: (2019-06-12 20:52:20) [DEBUG ] Server: ${TFTP_IP} File: obmc-phosphor-image-witherspoon.ubi.mtd.tar Jun 12 20:52:20 witherspoon bmcweb[2470]: (2019-06-12 20:52:20) [DEBUG ] Exit UpdateService.SimpleUpdate doPost 3) Verified if no transfer protocol, error returned curl -k -H "X-Auth-Token: $TOKEN" -X POST https://${BMC_IP}/redfish/v1/UpdateService/Actions/UpdateService.SimpleUpdate -d '{"ImageURI":”${TFTP_IP}/obmc-phosphor-image-witherspoon.ubi.mtd.tar"}' { "error": { "@Message.ExtendedInfo": [ { "@odata.type": "/redfish/v1/$metadata#Message.v1_0_0.Message", "Message": "The value ${TFTP_IP}/obmc-phosphor-image-witherspoon.ubi.mtd.tar for the parameter ImageURI in the action UpdateService.SimpleUpdate is of a different type than the parameter can accept.", "MessageArgs": [ “${TFTP_IP}/obmc-phosphor-image-witherspoon.ubi.mtd.tar", "ImageURI", "UpdateService.SimpleUpdate" ], "MessageId": "Base.1.4.0.ActionParameterValueTypeError", "Resolution": "Correct the value for the parameter in the request body and resubmit the request if the operation failed.", "Severity": "Warning" } ], "code": "Base.1.4.0.ActionParameterValueTypeError", "message": "The value ${TFTP_IP}/obmc-phosphor-image-witherspoon.ubi.mtd.tar for the parameter ImageURI in the action UpdateService.SimpleUpdate is of a different type than the parameter can accept." } } 4) Verified no new error in Redfish Validator 5) Verified error return when parameter missing: curl -k -H "X-Auth-Token: $TOKEN" -d '{"TransferProtocol":"TFTP"}' -X POST https://${BMC_IP}/redfish/v1/UpdateService/Actions/UpdateService.SimpleUpdate { "ImageURI@Message.ExtendedInfo": [ { "@odata.type": "/redfish/v1/$metadata#Message.v1_0_0.Message", "Message": "The property ImageURI is a required property and must be included in the request.", "MessageArgs": [ "ImageURI" ], "MessageId": "Base.1.4.0.PropertyMissing", "Resolution": "Ensure that the property is in the request body and has a valid value and resubmit the request if the operation failed.", "Severity": "Warning" } ] } 6) Verified that by default, the new Action is not available Change-Id: I67ea91e181380e6da7ff63a37f02408a318602b7 Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
* Systems: Add AssetTag SupportJames Feist2019-06-241-3/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We can get this item from the AssetTag interface. Tested: { "@odata.context": "/redfish/v1/$metadata#ComputerSystem.ComputerSystem", "@odata.id": "/redfish/v1/Systems/system", "@odata.type": "#ComputerSystem.v1_6_0.ComputerSystem", "Actions": { "#ComputerSystem.Reset": { "ResetType@Redfish.AllowableValues": [ "On", "ForceOff", "ForceOn", "ForceRestart", "GracefulRestart", "GracefulShutdown", "PowerCycle" ], "target": "/redfish/v1/Systems/system/Actions/ComputerSystem.Reset" } }, "AssetTag": "abc", "Description": "Computer System", "Id": null, .... Change-Id: I1c92b001cc08bd0661368d28d9fb8ae56c122d1e Signed-off-by: James Feist <james.feist@linux.intel.com>
* Redfish: Implement PATCH operation for ActiveDirectory property in ↵Ratan Gupta2019-06-241-11/+30
| | | | | | | | | | | | | | | | | | | | | | | | | AccountService With this commit PATCH operation on the ActiveDirectory property would configure the ActiveDirectory on the OpenBMC. If one of the config is enabled, user needs to disable the other config. eg: If LDAP is enabled and user tries to enable the Active Diretory user will get the error and user need to disable the LDAP first. TestedBy: Enable the LDAP service: PASS Login through LDAP credentials : PASS Enable the AD service throws error as LDAP is already enabled: PASS Disable the LDAP service : PASS Enable the AD service : PASS Login through AD credentials: PASS Login through LDAP credentials, should not be allowed: PASS Detailed test results are at following location. https://pastebin.com/ibX5nyAc Change-Id: I36d17757db1542604dbf5215728ac30f4e91f610 Signed-off-by: Ratan Gupta <ratagupt@linux.vnet.ibm.com>
* Redfish: Populate the ActiveDirectory property in AccountService schemaRatan Gupta2019-06-241-134/+180
| | | | | | | | | | | | | | | | | | With this commit get request on account service gets the LDAP/AD configuration. TestedBy: 1) Run the redfish - validator => when there is no configuration => After LDAP Configuration. => After ActiveDirectory Configuration. 2) GET request through redfish /redfish/v1/AccountService Gets both LDAP and ActiveDirectory properties. Detailed test results are at following location. https://pastebin.com/ibX5nyAc Change-Id: I0d6cdc2039eecffe96b6a27f3d65905ceb92d9b9 Signed-off-by: Ratan Gupta <ratagupt@linux.vnet.ibm.com>
* Remove pulling BiosID for the system schemaEd Tanous2019-06-201-21/+0
| | | | | | | | | | | This is causing 500 errors on POWER platforms, given that (shocker) they don't have a BIOS! In practice, this isn't even the right way to grab the version information, we should be grabbing it over the software version interface https://github.com/openbmc/phosphor-dbus-interfaces /blob/master/xyz/openbmc_project/Software/Version.interface.yaml Signed-off-by: Ed Tanous <ed.tanous@intel.com> Change-Id: I45704b879a57d152c898594770e8d3729ad9e72e
* Add sensor health supportJames Feist2019-06-191-1/+81
| | | | | | | | | | | Read through the thresolds and determine if any are crossed. If so, change the status of the sensor. Tested: Used sensor override to modify a sensor value, asserting the threshold. Change-Id: Id56e036449ca019a5e9563df68af0f590c693045 Signed-off-by: James Feist <james.feist@linux.intel.com>
* Redfish: ApplyTime property patch supportJayashankar Padath2019-06-141-0/+53
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This change is to set the ApplyTime property using the UpdateServce redfish schema before initiating the BMC image upload and activation. Verified sequence flow: 1. The user sets the desired ApplyTime value (OnReset/Immediate) using the PATCH request 2. Execute "POST -T ./obmc-phosphor-image-witherspoon-20190522045427.ubi.mtd.tar https://${bmc}/redfish/v1/UpdateService" 3. During the end of activation, if the ApplyTime value is Immediate, force-reboot.service gets called which reboots the BMC. If the ApplyTime value is OnReset, no force reboot will be triggered and the new BMC image will be functional when the user decideds to reboot the BMC manually. Tested: PATCH -d '{ "ApplyTime":"OnReset"}' https://${bmc}/redfish/v1/UpdateServce { "@Message.ExtendedInfo": [ { "@odata.type": "/redfish/v1/$metadata#Message.v1_0_0.Message", "Message": "Successfully Completed Request", "MessageArgs": [], "MessageId": "Base.1.4.0.Success", "Resolution": "None", "Severity": "OK" } ] } PATCH -d '{ "ApplyTime":"OnRset"}' https://${bmc}/redfish/v1/UpdateServie { "ApplyTime@Message.ExtendedInfo": [ { "@odata.type": "/redfish/v1/$metadata#Message.v1_0_0.Message", "Message": "The value OnRset for the property ApplyTime is not in the list of acceptable values.", "MessageArgs": [ "OnRset", "ApplyTime" ], "MessageId": "Base.1.4.0.PropertyValueNotInList", "Resolution": "Choose a value from the enumeration list that the implementation can support and resubmit the request if the operation failed.", "Severity": "Warning" } ] } Signed-off-by: Jayashankar Padath <jayashankar.padath@in.ibm.com> Change-Id: If79934f7db450c2ad3bea60307419b17981e4dfe
* Fix errors introduced in Message RegistriesEd Tanous2019-06-142-132/+87
| | | | | | | | | | | | | | | A recent commit introduced Service Validator regressions in the Registries that we use. This was largely because the commits were structured in a way that was hard to review. This commit Resolves that, and structures the data memebers in a more readable way. Tested: ran service validator, observed no failures on Registries. Signed-off-by: Ed Tanous <ed.tanous@intel.com> Change-Id: I7e15899187e333f843e5571ac9908b22624c16e9
* managers: allow starting stateJames Feist2019-06-141-0/+34
| | | | | | | | | | | | | Query d-bus broker, and if the state is less than 100%, set the bmc state to "Starting". Tested: Had application that was failing on system, queried broker and saw Progres was set to 0.97, bmcweb reported "State": "Starting". Disabled that app, and state went to "Enabled". Change-Id: I4123d2f4a6388aff6891a5a02aa98b7a89777d5f Signed-off-by: James Feist <james.feist@linux.intel.com>
* Remove AllowableValues for read-only LDAP valuesEd Tanous2019-06-131-4/+0
| | | | | | | | | | | | | | Given that today LDAP doesn't support modification of the AccountProviderType, and AuthenticationType parameters, providing AllowableValues is a bit of a misnomer, and a waste. Tested: Work in progress. Would like to get concensus on this, then will verify correct responses and error codes Signed-off-by: Ed Tanous <ed.tanous@intel.com> Change-Id: I6d2d38b581ce5a9f7b4106582aeb4ec3fc9c424a
* [Redfish] Add FQDN and IPv6Address in NetworkProtocol and EthernetInterfaceJennifer Lee2019-06-132-16/+58
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | FQDN and IPv6Address are mandatory properties in OCP profile. Tested: GET /redfish/v1/Managers/bmc/NetworkProtocol HTTP/1.1 Response: { "@odata.context": "/redfish/v1/$metadata#ManagerNetworkProtocol.ManagerNetworkProtocol", "@odata.id": "/redfish/v1/Managers/bmc/NetworkProtocol", "@odata.type": "#ManagerNetworkProtocol.v1_4_0.ManagerNetworkProtocol", "Description": "Manager Network Service", "FQDN": <host name>.<domain name>, "HTTPS": { "Port": 443, "ProtocolEnabled": true }, "HostName": <host name>, ... } GET /redfish/v1/Managers/bmc/EthernetInterfaces/eth0 HTTP/1.1 Response: { "@odata.context": "/redfish/v1/$metadata#EthernetInterface.EthernetInterface", "@odata.id": "/redfish/v1/Managers/bmc/EthernetInterfaces/eth0", "@odata.type": "#EthernetInterface.v1_4_1.EthernetInterface", ... "FQDN": <host name>.<domain name>, "HostName": <host name>, ... "IPv6Addresses": [], ... } Signed-off-by: Jennifer Lee <jennifer1.lee@intel.com> Change-Id: I0ca8f98523cbcfc935e0ac3bbf93f87762ff183b
* Redfish: Added OCP mandatory propertiesJennifer Lee2019-06-134-14/+120
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Manager: Added SerialConsole, Links/ManagerForChassis and Links/ManagerForChassis@odata.count - System: Added Links/Chassis, Links/ManagedBy, Status, BiosVersion - Power: Added placeholder for PowerControl Tested: GET /redfish/v1/Systems/system HTTP/1.1 Response: { "@odata.context": "/redfish/v1/$metadata#ComputerSystem.ComputerSystem", "@odata.id": "/redfish/v1/Systems/system", "@odata.type": "#ComputerSystem.v1_6_0.ComputerSystem", ...... "BiosVersion": "SE5C620.86B.01.00.0361.120520162351", ...... "Description": "Computer System", "Id": "system", "IndicatorLED": "Off", "Links": { "Chassis": [ { "@odata.id": "/redfish/v1/Chassis/R1000_Chassis" } ], "ManagedBy": [ { "@odata.id": "/redfish/v1/Managers/bmc" } ] }, ...... "Processors": { "@odata.id": "/redfish/v1/Systems/system/Processors" }, "Status": { "Health": "OK", "State": "Enabled" }, "SystemType": "Physical", "UUID": "13876882-7708-4200-bcf2-2c5681218bc8" } GET /redfish/v1/Managers/bmc HTTP/1.1 Response: { "@odata.context": "/redfish/v1/$metadata#Manager.Manager", "@odata.id": "/redfish/v1/Managers/bmc", "@odata.type": "#Manager.v1_3_0.Manager", ...... "Description": "Baseboard Management Controller", "Linkn"fces": { "@odata.id": "/redfish/v1/Managers/bmc/EthernetInterfaces" }, "FirmwareVersion": "2.7.0-dev-266-g111d297-d14e857", "Id": "bmc", Links: { "ManagerForChassis": [ { "@odata.id": "/redfish/v1/Chassis/R1000_Chassis" } ], "ManagerForChassis@odata.count": 1, "ManagerForServers": [ { "@odata.id": "/redfish/v1/Systems/system" } ], "ManagerForServers@odata.count": 1 }, ...... "SerialConsole": { "ConnectTypesSupported": [ "IPMI", "SSH" ], "ServiceEnabled": true }, "Status": { "Health": "OK", "State": "Enabled" }, "UUID": "067b4e8d-6c29-475c-92a1-6590d4e5818c" } GET /redfish/v1/Chassis/R1000_Chassis/Power HTTP/1.1 Response: { "@odata.context": "/redfish/v1/$metadata#Power.Power", "@odata.id": "/redfish/v1/Chassis/R1000_Chassis/Power", "@odata.type": "#Power.v1_2_1.Power", "Id": "Power", "Name": "Power", "PowerControl": [] } Signed-off-by: Jennifer Lee <jennifer1.lee@intel.com> Change-Id: I61d8ba493ad689d7062e1f8bfd26d9a0d80230da
* Redfish: Remove "state" response content from PATCH commandsJohnathan Mantey2019-06-131-131/+49
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A PATCH command should not return any JSON content for the NICs. PATCH commands should only return success or failure responses. Reporting state based upon the input to the command is, in most instances, going to be incorrect in comparison to the actual state of the HW. For example: moving from static addresses to a DHCP assigned address cannot be predicted based upon the input. It also takes several seconds for a DHCP transaction to complete, which creates a significant temporal lag between what was sent and what will be. Tested: Performed the following tests: For IPv4: "IPv4Addresses": [ {}, { "Address": "192.168.20.12", "SubnetMask": "255.255.255.0", "Gateway": "192.168.20.1" } ] For IPv6: "IPv6StaticAddresses": [ { "Address": "2001::5:4:3:4", "PrefixLength": 64 } ] Both tests complete without emitting any JSON content. Change-Id: Ic7eb824eb6d996d85d52a3b7c855e9825f4a0d87 Signed-off-by: Johnathan Mantey <johnathanx.mantey@intel.com>
* Redfish: Remove the IPv4 AddressOrigin read-only elementJohnathan Mantey2019-06-131-88/+2
| | | | | | | | | | | | The AddressOrigin entry in the IPv4Addresses schema is read-only. It is not permitted to PATCH the AddressOrigin. Tested: Added the "AddressOrigin": "DHCP" to an IPv4Addresses PATCH command. The JSON response is "property is not in the list of valid properties". Change-Id: Id7d41e9f1b393738e20725495b3821dd2f9f69d0 Signed-off-by: Johnathan Mantey <johnathanx.mantey@intel.com>
* Redfish: Correctly identify IPv4 LinkLocal vs. LinkGlobalJohnathan Mantey2019-06-131-2/+2
| | | | | | | | | Self assigned IPv4 addresses must be flagged as LinkLocal, not LinkGlobal. Likewise global IPv4 addresses must be flagged as LinkGlobal. Change-Id: I9f6f0ceb3d312dd0198cb54c59c579ed96fbc38a Signed-off-by: Johnathan Mantey <johnathanx.mantey@intel.com>
* Updating Roles to version 1.2.1 to be in compliance with PSMEv2.4 specification.Zbigniew Kurzynski2019-06-131-1/+2
| | | | | | | | RedfishServiceValiddator passed with success on this service. Signed-off-by: Zbigniew Kurzynski <zbigniew.kurzynski@intel.com> Change-Id: I9161984c51037ebb7f34fdb36bee34026d28be03 Signed-off-by: Zbigniew Kurzynski <zbigniew.kurzynski@intel.com>
* Redfish: Add certificate service to manage HTTPS certificatesMarri Devender Rao2019-06-124-4/+817
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Implements CertificateService schema to list the actions available. Implements CertificateLocations schema to list the certificates present in the system. Implements CertificateCollection schema to upload/list existing HTTPS certificates Implements Certificate schema to view existing HTTPS certificate Cater for reloading the SSL context after a certificate is uploaded. Fix Certificate signature validation failure At present bmcweb uses the certificate from "/home/root/server.pem" the same is modified to "/etc/ssl/certs/https/server.pem" as phosphor-certificate-manager uses the specified path to install/replace certificates. Bmcweb creates a self-signed certificate when certificate is not present. Catered for creating "/etc/ssl/certs/https/" direcotry structure so that self signed certificate is created in the path. Implements ReplaceCertificate action of Certificate Service for replacing existing HTTPS certificates Cleanup of older self-signed certificate at /home/root/server.pem 1. Tested schema with validator and no issues 2. Privilege map for certificate service is not yet pubished 2. GET on /redfish/v1/CertificateService/ "CertificateService": { "@odata.id": "/redfish/v1/CertificateService" }, 3. GET on /redfish/v1/CertificateService/CertificateLocations/ "@odata.context": "/redfish/v1/$metadata#CertificateLocations.CertificateLocations", "@odata.id": "/redfish/v1/CertificateService/CertificateLocations", "@odata.type": "#CertificateLocations.v1_0_0.CertificateLocations", "Description": "Defines a resource that an administrator can use in order to locate all certificates installed on a given service", "Id": "CertificateLocations", "Name": "Certificate Locations" 4.POST on /redfish/v1/Managers/bmc/NetworkProtocol/HTTPS/Certificates { Returns contents of certificate "@odata.context": "/redfish/v1/$metadata#Certificate.Certificate", "@odata.id": "/redfish/v1/AccountService/LDAP/Certificates/1", "@odata.type": "#Certificate.v1A_0_0.Certificate", "Id": "1", "Issuer": { ... ... } 5.GET on /redfish/v1/Managers/bmc/NetworkProtocol/HTTPS/Certificates/ { "@odata.context": "/redfish/v1/$metadata#CertificateCollection.CertificateCollection", "@odata.id": "/redfish/v1/Managers/bmc/NetworkProtocol/HTTPS/Certificates", "@odata.type": "#CertificateCollection.CertificatesCollection", "Description": "A Collection of HTTPS certificate instances", "Members": [ { "@odata.id": "/redfish/v1/Managers/bmc/NetworkProtocol/HTTPS/Certificates/1" } ], "Members@odata.count": 1, "Name": "HTTPS Certificate Collection" } 6.GET on /redfish/v1/CertificateService/CertificateLocations/ { "@odata.context": "/redfish/v1/$metadata#CertificateLocations.CertificateLocations", "@odata.id": "/redfish/v1/CertificateService/CertificateLocations", "@odata.type": "#CertificateLocations.v1_0_0.CertificateLocations", "Description": "Defines a resource that an administrator can use in order to locate all certificates installed on a given service", "Id": "CertificateLocations", "Links": { "Certificates": [ { "@odata.id": "/redfish/v1/Managers/bmc/NetworkProtocol/HTTPS/Certificates/1" } ], "Certificates@odata.count": 1 }, "Name": "Certificate Locations" } 7.GET on /redfish/v1/Managers/bmc/NetworkProtocol/HTTPS/Certificates/1 { "@odata.context": "/redfish/v1/$metadata#Certificate.Certificate", "@odata.id": "/redfish/v1/Managers/bmc/NetworkProtocol/HTTPS/Certificates/1", "@odata.type": "#Certificate.v1_0_0.Certificate", "CertificateString": "-----BEGINCERTIFICATE-----\n....\n-----ENDCERTIFICATE-----\n", "CertificateType": "PEM", "Description": "HTTPS Certificate", "Id": "1", "Issuer": { } 8. Verified SSL context is reloaded after a certificate is installed. 9.curl -c cjar -b cjar -k -H "X-Auth-Token: $bmc_token" -X POST https://${bmc}/redfish/v1/CertificateService/Actions/CertificateService.ReplaceCertificate/ -d @data_https.json { "@odata.context": "/redfish/v1/$metadata#Certificate.Certificate", "@odata.id": "/redfish/v1/Managers/bmc/NetworkProtocol/HTTPS/Certificates/1", "@odata.type": "#Certificate.v1_0_0.Certificate", "CertificateString": "-----BEGIN CERTIFICATE----END CERTIFICATE-----\n", "Description": "HTTPS certificate", "Id": "1", "Issuer": { } 4. data_https.json file contents { "CertificateString": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDClW1COSab2O0W\nW0SgTzLxQ1Igl4EpbEmTK8CAQ+wI7loTDZ7sZwYdf6yc9TAs/yNKjlJljgedGszv\nbC7sPNpH4FA63kaM6TbBBKTRshwZ3myXiBOOkOBs6w6V7+c7uEPcMFge6/4W1VXD\nReMi016cnPWZsmQyGzpmPM49YNEDZBfdKZ/pLuCYc9L9t706U7FrUSGfM7swB+mC\n8NH9qMixMuWAV9SBvzUWI6p4OCmN8a/F+4lOdbPMVEUqQ0hCBCjGM4qmiy/5Ng6y\n6rKeJlUdmOSTk8ojrNGcOXKh0nRafNEQFkIuoPHt8k5B/Yw2CX6s2BoGwvF+hS03\n+z3qVSw3AgMBAAECggEBAKpe92kybRGr3/rhMrdCYRJJpZEP1nGUdN89QbGMxxAS\n0h84n9vRYNNXRKWxMNtVEWtoLdDpiNUP8Dv59yO1LFIen2DL2e3rDJv4Gu/YCS7F\nR0NuS+FaDIaRURYLFeV+MzyJv75jVvhbFlqByJxngcGS1KAcSApvOLTnrJSlPpy9\n8ec5gnDhdOUND9PaQt8xCqMs1RPpjqvrgRzMEodZoqT5v+b0K1GmsAdbSHNP2mLM\nrqtpFDefiM1YfsTHUtxQykxG2Ipd2jzJ0a8O0qmVqdXcP9J9aqLcmD/2/r96GEV6\n/5qvIBj3SRFobxCiCwfys2XOXfjz2J+BUZzGoZvKeRECgYEA518hT6mn46LhwrTI\nW+Qpi7iTJgOfeLC+Ng855VHVQFED1P3T2lfyfGDyqKI/wV1DJIJmO8iOXerSPnhi\nb7reQkyHj6ERUtuE+6BQ9oTw2QD3EEvzOK2PEH5UipbhVTDnC3fT62Vz2yb3tR8D\n2h0XVJkj/dng9p1Td5aDGMriRRMCgYEA10vTyYqBPjDIEYw/Sc9aQk2kT6x3hrRQ\ngR4xyuI31RTCRD/KpLh/7z4s11Wkr+F9CyASeLbqu6zymlLOlS5p7IUkJ/x2X027\nJWVY1SR+oF3iF3SHiP4XkOVvWOKwIVUhgTjK1+Di6i3AlwIeAOS7VCCP6W0gbnwJ\nyyAAHZ30NM0CgYAqTur4dj2NEqvVvtkkdIRkWEwQF3mByE//8qjTljM4n5fjysaC\nlrJwrAmzbHfcFAHDG1U2eWYPJnFrmvflFnauCPCBAyL308xtdtNXQNgJ1nNXN4wy\nQQp4KaGr9gseWOLm5fKKiPK2kFmbdSBvMgKiJZ6/PKg2cG5i39L5JaBaoQKBgApw\nqOJ7Du1fHDSNonwHzA6vCSq76Efl8olwV2XJNn/ks87vcPov4DRPxYjjpErLGm8x\nrPOhmxxitJj7Lv1Y9NX9VtWBjpPshwi3M2mSjXllVBNjGTdxat8h4RZkV7omEKvd\nfyicxSQp987a0W2lqdfYhGIDYrE43pi1AoxtHmx5AoGBAJSoRy62oZbW6vjfdkuf\nvVnjNfFZwuiPV/X2NT+BhNPe5ZKFtC6gGedHLaIBBD3ItRhGuHZxgWXccPjGHofi\n6DlPdp2NePJgDT2maSjGSiAcHxyXdmW+Ev27NblvAxktoTUcVqSENrKFb+Fh4FXN\nlXiJzOEwAXiP2ZFbMRyNF/MI\n-----END PRIVATE KEY-----\n-----BEGIN CERTIFICATE-----\nMIIDNzCCAh+gAwIBAgIJAI1Wr/fK5F0GMA0GCSqGSIb3DQEBCwUAMDIxHDAaBgNV\nBAoME29wZW5ibWMtcHJvamVjdC54eXoxEjAQBgNVBAMMCWxvY2FsaG9zdDAeFw0x\nOTAyMDExMzIyMDhaFw0yOTAxMjkxMzIyMDhaMDIxHDAaBgNVBAoME29wZW5ibWMt\ncHJvamVjdC54eXoxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEB\nBQADggEPADCCAQoCggEBAMKVbUI5JpvY7RZbRKBPMvFDUiCXgSlsSZMrwIBD7Aju\nWhMNnuxnBh1/rJz1MCz/I0qOUmWOB50azO9sLuw82kfgUDreRozpNsEEpNGyHBne\nbJeIE46Q4GzrDpXv5zu4Q9wwWB7r/hbVVcNF4yLTXpyc9ZmyZDIbOmY8zj1g0QNk\nF90pn+ku4Jhz0v23vTpTsWtRIZ8zuzAH6YLw0f2oyLEy5YBX1IG/NRYjqng4KY3x\nr8X7iU51s8xURSpDSEIEKMYziqaLL/k2DrLqsp4mVR2Y5JOTyiOs0Zw5cqHSdFp8\n0RAWQi6g8e3yTkH9jDYJfqzYGgbC8X6FLTf7PepVLDcCAwEAAaNQME4wHQYDVR0O\nBBYEFDDohRZ1+QlC3WdIkOAdBHXVyW/SMB8GA1UdIwQYMBaAFDDohRZ1+QlC3WdI\nkOAdBHXVyW/SMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFN0DWy6\nYPXHzidWMKKyQiJ5diqUv6LbujKOHUk+/LGSoCqcUp8NvmFDKWYP9MxjOAi9TVbs\nRGlIHBl38oSwKUayXBTY/vVeSLls90giUAOjswoRbBBQZvKyfEuFpc1zUsrhGLDC\n/6DuRt9l0DWcMcmP6Yh3jePIIwTr3bpxBGrwNLly8fPf16q4bWRIAcI3ZgLOhsrN\nLfD2kf56oYViM44d54Wa0qjuCfeTnJ46x/lo6w2kB9IzF7lwpipMU7+AG8ijDdaQ\nn8t0nADpv6tNNargLcOTTfJ0/P2PaKxwA1B88NhjlymBnNbz4epIn4T3KyysgS62\nzwqs66LPWoDerzc=\n-----END CERTIFICATE-----", "CertificateType": "PEM", "CertificateUri": { "@odata.id": "/redfish/v1/Managers/bmc/NetworkProtocol/HTTPS/Certificates/1" } } Change-Id: I2acbf8afa06bbf7d029d4971f7ab3b3988f5f060 Signed-off-by: Marri Devender Rao <devenrao@in.ibm.com> Signed-off-by: Ed Tanous <ed.tanous@intel.com>
* Update supported ResetTypes and actionsJason M. Bills2019-06-121-45/+79
| | | | | | | | | | | | | | | | | | | | | | This updates the supported ResetType options and triggers the corresponding state change request on DBus. Tested: Used Postman to send POST commands with various ResetType values and confirmed the appropriate response: ForceOff: System forced off ForceOn: System powered-on ForceRestart: System reset forced GracefulRestart: System gracefully shut down followed by a power-on GracefulShutdown: System gracefully shut down Nmi: Not supported: On: System powered-on PowerCycle: System forced off followed by a power-on PushPowerButton: Not supported Change-Id: Id672b154968fa46c540272c1af6709b04770a849 Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com>
* Redfish: Correct PATCH for IPv6 static addressesJohnathan Mantey2019-06-101-12/+4
| | | | | | | | | Manipulating IPv6 static addresses works the same way as IPv4 static addresses. Keep the IPv6StaticAddresses collection, and remove write access from the read-only IPv6Addresses collection. Change-Id: If58c858c676f7ae843e0642800a4083c5df79d1d Signed-off-by: Johnathan Mantey <johnathanx.mantey@intel.com>
* Support Processors and its collection for ProcessorType AcceleratorAlpana Kumari2019-06-061-13/+91
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Interface- phosphor-dbus-interfaces/blob/master/xyz/openbmc_project/ Inventory/Item/Accelerator.interface.yaml Redfish schema Status/state is mapped to two properties- Functional and Present xyz.openbmc_project.State.Decorator.OperationalStatus xyz.openbmc_project.Inventory.Item Tested: -- ran Redfish-Service-Validator, All 6 GPUs shows Success -- ran GET on Processors Collection curl -k -H "X-Auth-Token: $bmc_token" -X GET https://${bmc}/redfish/v1/Systems/system/Processors { "@odata.context": "/redfish/v1/$metadata#ProcessorCollection.ProcessorCollection", "@odata.id": "/redfish/v1/Systems/system/Processors/", "@odata.type": "#ProcessorCollection.ProcessorCollection", "Members": [ { "@odata.id": "/redfish/v1/Systems/system/Processors/cpu0" }, { "@odata.id": "/redfish/v1/Systems/system/Processors/cpu1" }, { "@odata.id": "/redfish/v1/Systems/system/Processors/gv100card0" }, { "@odata.id": "/redfish/v1/Systems/system/Processors/gv100card1" }, { "@odata.id": "/redfish/v1/Systems/system/Processors/gv100card2" }, { "@odata.id": "/redfish/v1/Systems/system/Processors/gv100card3" }, { "@odata.id": "/redfish/v1/Systems/system/Processors/gv100card4" }, { "@odata.id": "/redfish/v1/Systems/system/Processors/gv100card5" } ], "Members@odata.count": 8, "Name": "Processor Collection" curl -k -H "X-Auth-Token: $bmc_token" -X GET https://${bmc}/redfish/v1/Systems/system/Processors/gv100card0 { "@odata.context": "/redfish/v1/$metadata#Processor.Processor", "@odata.id": "/redfish/v1/Systems/system/Processors/gv100card0", "@odata.type": "#Processor.v1_3_1.Processor", "Id": "gv100card0", "Name": "Processor", "ProcessorType": "Accelerator", "Status": { "Health": "OK", "State": "Absent" } Change-Id: I5315df80d88d3a04de4b62435a200a718a10cd4c Signed-off-by: Alpana Kumari <alpankum@in.ibm.com>
* Redfish(Network): Add support for IPv6Addresses and IPv6StaticAddressesRavi Teja2019-06-061-60/+445
| | | | | | | | | | | | | | | | | | | Added GET support for IPv6Addresses Added GET and PATCH support for IPv6StaticAddresses Tested by: GET PATCH -D patch.txt -d '{"IPv6StaticAddresses": [{"Address": "2002:905:150e:301:72e2:84ff:fe14:222","PrefixLength": 64}]}' PATCH -D patch.txt -d '{"IPv6StaticAddresses": [{},{"Address": "2002:905:150e:301:72e2:84ff:fe14:333","PrefixLength": 64}]}' PATCH -D patch.txt -d '{"IPv6StaticAddresses": [null,{},{"Address": "2002:905:150e:301:72e2:84ff:fe14:444","PrefixLength": 64}]}' PATCH -D patch.txt -d '{"IPv6StaticAddresses": [{"Address": "2002:905:150e:301:72e2:84ff:fe14:555","PrefixLength": 64},{}]}' PATCH -D patch.txt -d '{"IPv6StaticAddresses": [{},{"Address": "2002:905:150e:301:72e2:84ff:fe14:666"}]}' PATCH -D patch.txt -d '{"IPv6StaticAddresses": [{},{"PrefixLength": 64}]}' Tested with validator and no errors. Change-Id: I7d1314a0c7843aae8425d66119f0d205a5cfac55 Signed-off-by: Ravi Teja <raviteja28031990@gmail.com>
* bmcweb: Fix sensor name identification methodRichard Marian Thomaiyar2019-06-061-7/+5
| | | | | | | | | | | | | Sensor name was calculated based on 5th elemennt is not applicable any more. Get the last token in the path, which is the sensor name, which is used as member_id. Tested: 1. Verified the PATCH method for thermal & power overriding, temperatures, fans & voltages. Overriding works as expected. Change-Id: I08291171496a979f120a57ac0802733007e11871 Signed-off-by: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>
* Add inventory added and removed to registryJames Feist2019-06-051-0/+34
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Add registry entries to aid parsing logs. Tested: Removed entity manager persistence file and got logs like the following: { "@odata.context": "/redfish/v1/$metadata#LogEntry.LogEntry", "@odata.id": "/redfish/v1/Systems/system/LogServices/EventLog/Entries/#1557855925", "@odata.type": "#LogEntry.v1_4_0.LogEntry", "Created": "2019-05-14T17:45:25+00:00", "EntryType": "Event", "Id": "1557855925", "Message": "F1UL16RISER1 Board with serial number BQWK63400247 was installed.", "MessageArgs": [ "F1UL16RISER1", "Board", "BQWK63400247" ], "MessageId": "OpenBMC.0.1.InventoryAdded", "Name": "System Event Log Entry", "Severity": "OK" } Change-Id: Id111872121b47395335d8c9e118dc6809a1b7574 Signed-off-by: James Feist <james.feist@linux.intel.com>
* Add basic PowerControl and PowerLimit propertiesEddie James2019-06-052-4/+175
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add code in the power-specific response handler to fetch the Power Limit value for the chassis that implements the Chassis inventory item. Add a special case to the generic sensor handling code to place the total_power value into the PowerControl PowerConsumedWatts field. curl -k https://${bmc}/redfish/v1/Chassis/chassis/Power { "@odata.context": "/redfish/v1/$metadata#Power.Power", "@odata.id": "/redfish/v1/Chassis/chassis/Power", "@odata.type": "#Power.v1_5_2.Power", "Id": "Power", "Name": "Power", "PowerControl": [ { "@odata.id": "/redfish/v1/Chassis/chassis/Power#/PowerControl/", "MemberId": "total_power", "Name": "total power", "PowerConsumedWatts": 269.0, "Status": { "Health": "OK", "State": "Enabled" } } ], "PowerLimit": [ { "LimitInWatts": null } ], Signed-off-by: Eddie James <eajames@linux.ibm.com> Change-Id: I447de59fb44a4ecbe7b47610d915ac22aef90250
* Update fan added / removed to use stringJames Feist2019-05-301-5/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fan names aren't always fan %d, sometimes there are numbers too, or identifiers like CPU Fan 1. Change the argument to a string. Tested: Launched bmcweb and saw: { "@odata.context": "/redfish/v1/$metadata#LogEntry.LogEntry", "@odata.id": "/redfish/v1/Systems/system/LogServices/EventLog/Entries/#1556037042", "@odata.type": "#LogEntry.v1_4_0.LogEntry", "Created": "2019-04-23T16:30:42+00:00", "EntryType": "Event", "Id": "1556037042", "Message": "Fan 1 removed.", "MessageArgs": [ "Fan 1" ], "MessageId": "OpenBMC.0.1.FanRemoved", "Name": "System Event Log Entry", "Severity": "OK" }, { "@odata.context": "/redfish/v1/$metadata#LogEntry.LogEntry", "@odata.id": "/redfish/v1/Systems/system/LogServices/EventLog/Entries/#1556037055", "@odata.type": "#LogEntry.v1_4_0.LogEntry", "Created": "2019-04-23T16:30:55+00:00", "EntryType": "Event", "Id": "1556037055", "Message": "Fan 1 inserted.", "MessageArgs": [ "Fan 1" ], "MessageId": "OpenBMC.0.1.FanInserted", "Name": "System Event Log Entry", "Severity": "OK" }, Change-Id: Ic0d07ea1c96ee6a61caa912ecd091c2783f1d963 Signed-off-by: James Feist <james.feist@linux.intel.com>
* Fix DBUS Name For BootSource CdSantosh Puranik2019-05-301-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Commit 9f16b2c1b6b6884482bca304fcaa573caf91d0d6 changed the mapping for redfish boot source 'Cd' to 'xyz.openbmc_project.Control.Boot.Source.Sources.DVD'. However, that mapping does not match what we have in phosphor-dbus-interfaces: 'xyz.openbmc_project.Control.Boot.Source.Sources.ExternalMedia' This commit reverts that mapping back to ExternalMedia. Tested: -- Ran redfish service validator - no errors seen. -- Tested PATCH on BootSourceOverrideTarget with value "Cd" curl -k -H "X-Auth-Token: $bmc_token" -X PATCH https://${bmc}:${port}/redfish/v1/Systems/system -d '{"Boot": {"BootSourceOverrideEnabled": "Continuous", "BootSourceOverrideTarget": "Cd"}}' { "@Message.ExtendedInfo": [ { "@odata.type": "/redfish/v1/$metadata#Message.v1_0_0.Message", "Message": "Successfully Completed Request", "MessageArgs": [], "MessageId": "Base.1.4.0.Success", "Resolution": "None", "Severity": "OK" } ] curl -k -H "X-Auth-Token: $bmc_token" -X GET https://${bmc}:${port}/redfish/v1/Systems/system { "@odata.context": "/redfish/v1/$metadata#ComputerSystem.ComputerSystem", "@odata.id": "/redfish/v1/Systems/system", .... .... .... "Boot": { "BootSourceOverrideEnabled": "Continuous", "BootSourceOverrideMode": "Legacy", "BootSourceOverrideTarget": "Cd", "BootSourceOverrideTarget@Redfish.AllowableValues": [ "None", "Pxe", "Hdd", "Cd", "Diags", "BiosSetup" ] }, Change-Id: Ibd1fe3bc2c98dc97422b8dd71f9f95f6e9e25285 Signed-off-by: Santosh Puranik <santosh.puranik@in.ibm.com>
* [Redfish] Fixed PATCH behavior of IndicatorLED in ComputerSystemJennifer Lee2019-05-301-6/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Patching IndicatorLED to "Lit" was not working. Also modified the response code to 204 no-content for successful PATCH request. Tested: PATCH /redfish/v1/Systems/system HTTP/1.1 { "IndicatorLED": "Lit" } Response: 204 No Content GET /redfish/v1/Systems/system HTTP/1.1 Response: { "@odata.context": "/redfish/v1/$metadata#ComputerSystem.ComputerSystem", "@odata.id": "/redfish/v1/Systems/system", "@odata.type": "#ComputerSystem.v1_6_0.ComputerSystem", "Actions": { "#ComputerSystem.Reset": { "ResetType@Redfish.AllowableValues": [ "On", "ForceOff", "GracefulRestart", "GracefulShutdown" ], "target": "/redfish/v1/Systems/system/Actions/ComputerSystem.Reset" } }, "Boot": { "BootSourceOverrideEnabled": "Disabled", "BootSourceOverrideMode": "Legacy", "BootSourceOverrideTarget": "None", "BootSourceOverrideTarget@Redfish.AllowableValues": [ "None", "Pxe", "Hdd", "Cd", "Diags", "BiosSetup" ] }, "Description": "Computer System", "Id": "system", "IndicatorLED": "Lit", "LogServices": { "@odata.id": "/redfish/v1/Systems/system/LogServices" }, "Memory": { "@odata.id": "/redfish/v1/Systems/system/Memory" }, "MemorySummary": { "Status": { "State": "Disabled" }, "TotalSystemMemoryGiB": 0 }, "Name": "Computer System", "PowerState": "On", "ProcessorSummary": { "Count": 4, "Model": "Intel Xeon processor", "Status": { "State": "Enabled" } }, "Processors": { "@odata.id": "/redfish/v1/Systems/system/Processors" }, "Status": { "State": "Enabled" }, "SystemType": "Physical", "UUID": "13876882-7708-4200-bcf2-2c5681218bc8" } Signed-off-by: Jennifer Lee <jennifer1.lee@intel.com> Change-Id: I8ae152190ee9f122e8580903a9d5e687b2fd9e13
* [Redfish] Enable PATCH for DHCPv4 properties in EthernetInterface schemaJennifer Lee2019-05-291-1/+86
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | DHCPv4 were read-only properties, this code change make following properties to be PATCHable: - DHCPEnabled - UseDNSServers - UseDomainName - UseNTPServers Tested: 1. Check DHCPv4 properties value GET /redfish/v1/Managers/bmc/EthernetInterfaces/<ethID> HTTP/1.1 Response: { ...... "DHCPv4": { "DHCPEnabled": true, "UseDNSServers": true, "UseDomainName": true, "UseNTPServers": true }, ...... } 2. PATCH DHCPv4 PATCH /redfish/v1/Managers/bmc/EthernetInterfaces/eth1 HTTP/1.1 { "DHCPv4": { "DHCPEnabled":false, "UseDNSServers": false, "UseDomainName": false, "UseNTPServers": false } } 3. Check whether DHCPv4 properties are set GET /redfish/v1/Managers/bmc/EthernetInterfaces/<ethID> HTTP/1.1 Response: { ...... "DHCPv4": { "DHCPEnabled": false, "UseDNSServers": false, "UseDomainName": false, "UseNTPServers": false }, ...... } Signed-off-by: Jennifer Lee <jennifer1.lee@intel.com> Change-Id: I125029ae4cdef329edabd18f6aa6a16db6e27d3d
* Add ClearLog support for the Redfish Event Log ServiceJason M. Bills2019-05-292-0/+56
| | | | | | | | | | | | | | | | This change adds support for the LogService.ClearLog action to clear the Redfish Event Log. Tested: 1. Added entries to the EventLog 2. Sent the ClearLog action using Postman: /redfish/v1/Systems/system/LogServices/EventLog/Actions/LogService.ClearLog 3. Confirmed that the EventLog was empty 4. Added entries to the EventLog 5. Confirmed that the new entries logged successfully Change-Id: I6ac4ea4aff8d7defbea693a2c8a755a712fb39a6 Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com>
* Fix a trailing slash on LogServicesEd Tanous2019-05-291-2/+2
| | | | | | | | | | | | | Redfish takes a not-so-strong opinion on trailing slashes, and while they're kind of allowed, the validator does mention them. This fixes the URI endpoint to not contain a slash. Tested: Ran redfish service validator, and observed no new errors. Signed-off-by: Ed Tanous <ed.tanous@intel.com> Change-Id: I697f99e17fd4564f5f9648b972a1168de78c271d
* Set GraphicalConsole to enabledSantosh Puranik2019-05-291-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit sets GraphicalConsole's ServiceEnabled property to true. The ConnectTypesSupported is set to KVMIP. Tested: -- Ran redfish service validator. No errors seen. Manager.v1_0_0.Manager:GraphicalConsole value: OrderedDict([('ConnectTypesSupported', ['KVMIP']), ('ServiceEnabled', True)]) <class 'collections.OrderedDict'> has Type: Manager.v1_0_0.GraphicalConsole complex is Optional ***going into Complex Manager.v1_0_0.GraphicalConsole:ConnectTypesSupported value: ['KVMIP'] <class 'list'> has Type: Collection(Manager.v1_0_0.GraphicalConnectTypesSupported) enum is Optional permission OData.Permission/Read is Collection Success -- GET on the manager shows the newly added properties. curl -k -H "X-Auth-Token: $bmc_token" -X GET https://${bmc}:${port}/redfish/v1/Managers/bmc { "@odata.context": "/redfish/v1/$metadata#Manager.Manager", "@odata.id": "/redfish/v1/Managers/bmc", .... .... "GraphicalConsole": { "ConnectTypesSupported": [ "KVMIP" ], "ServiceEnabled": true } .... .... Change-Id: I169b581b7dd6b2cef96a2a3eb5f2ce3b1089c8b4 Signed-off-by: Santosh Puranik <santosh.puranik@in.ibm.com>
* Redfish: Move checkDbusPathExist function to dbus utilityRatan Gupta2019-05-231-18/+1
| | | | | | | | | | This function is a utility function which would be needed by other files. TestedBy: ran the redfish validator: PASS Change-Id: I2a0d07f264952f47a724da11f72b15ca5e019d62 Signed-off-by: Ratan Gupta <ratagupt@linux.vnet.ibm.com>
OpenPOWER on IntegriCloud