<feed xmlns='http://www.w3.org/2005/Atom'>
<title>BMC/OpenBmc/bmcweb.git/docs, branch master</title>
<subtitle>A do everything Redfish, KVM, GUI, and DBus webserver for OpenBMC (mirror)</subtitle>
<id>https://git.radix-linux.su/BMC/OpenBmc/bmcweb.git/atom?h=master</id>
<link rel='self' href='https://git.radix-linux.su/BMC/OpenBmc/bmcweb.git/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/bmcweb.git/'/>
<updated>2026-09-17T21:04:52+00:00</updated>
<entry>
<title>subprocessor: Add Status.State/Health to cores</title>
<updated>2026-09-17T21:04:52+00:00</updated>
<author>
<name>George Liu</name>
<email>liuxiwei@inspur.com</email>
</author>
<published>2023-07-14T06:57:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/bmcweb.git/commit/?id=58f34b5f9133c3a302acbf517aefefde2b9746cd'/>
<id>urn:sha1:58f34b5f9133c3a302acbf517aefefde2b9746cd</id>
<content type='text'>
Populate Redfish Status.Health and Status.State for processor core
resources

resource_utils::getResourceState() and getResourceHealth() are extended
to accept MapperServiceMap and use the first service implementing the
required interface. This avoids duplicate requests when multiple
services advertise the same interface for a core object

This commit also changes the iterator name in HEAD and GET path from
`it` to `coreIt` for better readability as well as passing coreId by
reference to avoid copies

Tested:

```
curl -k -X GET https://${bmc}/redfish/v1/Systems/system/Processors/cpu0/SubProcessors/core0
{
  ...
  "Status": {
    "Health": "OK",
    "State": "Enabled"
  }
}
```
- Where "State" can be "Present", "Available", "Enabled"

- Redfish Validator Passed

Change-Id: I5833541dceb9627b56b96e8235afcde78a09081f
Signed-off-by: Myung Bae &lt;myungbae@us.ibm.com&gt;
Signed-off-by: Justin Nguyen &lt;justinnanguyen@gmail.com&gt;
</content>
</entry>
<entry>
<title>bmcweb: add PowerState to Fabric Switch GET</title>
<updated>2026-09-03T02:27:27+00:00</updated>
<author>
<name>JY Voon</name>
<email>jvoon@nvidia.com</email>
</author>
<published>2026-05-13T04:42:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/bmcweb.git/commit/?id=1ba8629de92bfb7f0504c5a0e00abc437f1fccb4'/>
<id>urn:sha1:1ba8629de92bfb7f0504c5a0e00abc437f1fccb4</id>
<content type='text'>
Extend handleFabricSwitchPathSwitchGet() in fabric.hpp to read
xyz.openbmc_project.State.Decorator.PowerState from the resolved Switch
D-Bus path and surface the value as the Redfish PowerState property on
/redfish/v1/Fabrics/{FabricId}/Switches/{SwitchId}.

Tested: Build an image for nvl32-obmc machine with the following
patches cherry-picked:

1. Align with upstream u-boot dts tree:
   https://gerrit.openbmc.org/c/openbmc/openbmc/+/89932
2. mctpd configuration:
   https://gerrit.openbmc.org/c/openbmc/openbmc/+/87390
3. Enable nvidia-gpu sensor:
   https://gerrit.openbmc.org/c/openbmc/openbmc/+/89933
4. nvidia-gpu: add PowerState on ConnectX PCIeDevice:
   https://gerrit.openbmc.org/c/openbmc/dbus-sensors/+/90170

  $ curl -sk https://{BMC_IP}/redfish/v1/Fabrics/fabric/Switches/\
  Nvidia_ConnectX_24_PCIe
  {
    "@odata.id":
      "/redfish/v1/Fabrics/fabric/Switches/Nvidia_ConnectX_24_PCIe",
    "@odata.type": "#Switch.v1_7_0.Switch",
    "Id": "Nvidia_ConnectX_24_PCIe",
    "Name": "Nvidia_ConnectX_24_PCIe",
    "Ports": {
      "@odata.id":
        ".../Switches/Nvidia_ConnectX_24_PCIe/Ports"
    },
    "PowerState": "On",
    "Status": {
      "Health": "OK",
      "State": "Enabled"
    }
  }

  $ busctl get-property xyz.openbmc_project.GpuSensor \
      /xyz/openbmc_project/inventory/Nvidia_ConnectX_24_PCIe \
      xyz.openbmc_project.State.Decorator.PowerState PowerState
  s "xyz.openbmc_project.State.Decorator.PowerState.State.On"

```
  Redfish Service Validator:
    Summary - PASS: 9752, WARN: 373, FAIL: 0, NOT TESTED: 13355
    Validating /redfish/v1/Fabrics/fabric/Switches/Nvidia_ConnectX_24_PCIe...
      - Pass: 9, Warn: 0, Fail: 0, Skip: 32
    Validating /redfish/v1/Fabrics/fabric/Switches/Terminus_18_PCIeSwitch_1_100...
      - Pass: 8, Warn: 0, Fail: 0, Skip: 33
```

Change-Id: I4bc636664ae74280b72eab13219e5bf5b1e79a85
Signed-off-by: JY Voon &lt;jvoon@nvidia.com&gt;
</content>
</entry>
<entry>
<title>bmcweb: add PCIeDevice UUID property</title>
<updated>2026-09-01T15:34:47+00:00</updated>
<author>
<name>JY Voon</name>
<email>jvoon@nvidia.com</email>
</author>
<published>2026-05-13T03:04:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/bmcweb.git/commit/?id=f8a4e247a82f71e80613a035c78316f9a8c9088c'/>
<id>urn:sha1:f8a4e247a82f71e80613a035c78316f9a8c9088c</id>
<content type='text'>
Add optional support for UUID property for PCIeDevice.

Tested: Build an image for nvl32-obmc machine with the following patch
cherry picked.
```
1. Align with upstream u-boot dts tree:
   https://gerrit.openbmc.org/c/openbmc/openbmc/+/89932
2. mctpd configuration:
   https://gerrit.openbmc.org/c/openbmc/openbmc/+/87390
3. Enable nvidia-gpu sensor:
   https://gerrit.openbmc.org/c/openbmc/openbmc/+/89933
```

PCIeDevice with Common.UUID published (GPU path):

$ busctl get-property xyz.openbmc_project.GpuSensor \
  /xyz/openbmc_project/inventory/Nvidia_GPU_10 \
  xyz.openbmc_project.Common.UUID UUID
s "68174e99-daf4-02d1-ba39-4ed2bf8a0f21"

$ curl -sk https://{BMC_IP}/redfish/v1/Systems/system/\
PCIeDevices/Nvidia_GPU_10

{
  "@odata.id": "/redfish/v1/Systems/system/PCIeDevices/Nvidia_GPU_10",
  "@odata.type": "#PCIeDevice.v1_19_0.PCIeDevice",
  "Id": "Nvidia_GPU_10",
  "Manufacturer": "NVIDIA",
  "Model": "RTXPRO6000BlackwellDC",
  "Name": "PCIe Device",
  "PartNumber": "900-2G153-0000-000",
  "SerialNumber": "1792425045093",
  "Status": {
    "Health": "OK",
    "State": "Enabled"
  },
  "UUID": "68174e99-daf4-02d1-ba39-4ed2bf8a0f21"
}

PCIeDevice without Common.UUID published (ConnectX path):

$ busctl get-property xyz.openbmc_project.GpuSensor \
  /xyz/openbmc_project/inventory/Nvidia_ConnectX_24_PCIe \
  xyz.openbmc_project.Common.UUID UUID
Failed to get property UUID on interface
xyz.openbmc_project.Common.UUID: Unknown interface
xyz.openbmc_project.Common.UUID or property UUID.

$ curl -sk https://{BMC_IP}/redfish/v1/Systems/system/\
PCIeDevices/Nvidia_ConnectX_24_PCIe | jq 'has("UUID")'

false

Change-Id: I38cf972f03f0dd0299b708ea8203872c73c8e224
Signed-off-by: JY Voon &lt;jvoon@nvidia.com&gt;
</content>
</entry>
<entry>
<title>Cable: Add Available state and Status.Health</title>
<updated>2026-08-31T18:42:02+00:00</updated>
<author>
<name>Akshay Gaitonde</name>
<email>a.g@utexas.edu</email>
</author>
<published>2026-08-03T23:31:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/bmcweb.git/commit/?id=e76fecea5cbd0d8f2ac9ac16a77a88f516c341c4'/>
<id>urn:sha1:e76fecea5cbd0d8f2ac9ac16a77a88f516c341c4</id>
<content type='text'>
Extended Cable's Status.State to use Available mapping and added
Status.Health to Cable which it did not have before

Utilize resource_util's getResourceHealth and getResourceState to
standardize Redfish Status.State and Status.Health

Tested: on QEMU, which has no host and so no real cable inventory, with
a cable object injected into phosphor-inventory-manager.

  Functional true  -&gt; "Health": "OK", "State": "Enabled"
  Functional false -&gt; "Health": "Critical", "State": "Enabled"

Where State can be "Enabled", "Absent", and "UnavailableOffline" if the
xyz.openbmc_project.State.Decorator.Availability interface is
implemented

Change-Id: I9f99f7cfe348545506753cc4eedd81570fbf3fba
Signed-off-by: Akshay Gaitonde &lt;a.g@utexas.edu&gt;
Signed-off-by: Justin Nguyen &lt;justinnanguyen@gmail.com&gt;
</content>
</entry>
<entry>
<title>Implement SubProcessors core for processor</title>
<updated>2026-08-01T17:45:42+00:00</updated>
<author>
<name>George Liu</name>
<email>liuxiwei@inspur.com</email>
</author>
<published>2023-07-14T06:57:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/bmcweb.git/commit/?id=9e59f0a176aac9dfa7f029370ea03c25a088d9a2'/>
<id>urn:sha1:9e59f0a176aac9dfa7f029370ea03c25a088d9a2</id>
<content type='text'>
The SubProcessors core is a collection under the processor
schema. The association objects, (containing, contained_by), are used
to link the processor core.

The association between processor and core have been documented in
phosphor-dbus-interfaces [1]

[1] https://github.com/openbmc/phosphor-dbus-interfaces/commit/8c79b1dc0270d01c0b713a345c8ec39533c542e4

Tested: Redfish Validator Passed

```
curl -k -X GET https://${bmc}/redfish/v1/Systems/system/Processors/cpu0/SubProcessors/core0
{
  "@odata.id": "/redfish/v1/Systems/system/Processors/cpu0/SubProcessors/core0",
  "@odata.type": "#Processor.v1_18_0.Processor",
  "Id": "core0",
  "Name": "SubProcessor",
  "ProcessorType": "Core"
}
```

Verified that below return a link header
```
- GET /redfish/v1/Systems/system/Processors/cpu0/SubProcessors/core0
- HEAD /redfish/v1/Systems/system/Processors/cpu0/SubProcessors/core0
```

Change-Id: I8cee9909ce20fc0bfdd56fb4fc992163546be180
Signed-off-by: George Liu &lt;liuxiwei@inspur.com&gt;
Signed-off-by: Myung Bae &lt;myungbae@us.ibm.com&gt;
</content>
</entry>
<entry>
<title>Implement SubProcessors for processor collection</title>
<updated>2026-08-01T17:45:42+00:00</updated>
<author>
<name>George Liu</name>
<email>liuxiwei@inspur.com</email>
</author>
<published>2023-07-20T01:52:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/bmcweb.git/commit/?id=625222aca8b622a42c8aa1039aa8ec77ee540f81'/>
<id>urn:sha1:625222aca8b622a42c8aa1039aa8ec77ee540f81</id>
<content type='text'>
The SubProcessors is a collection under the processor collection
schema. The association objects, (containing, contained_by), are
used to link the processor.

The association between processor and core have been documented in
phosphor-dbus-interfaces [1]

[1] https://github.com/openbmc/phosphor-dbus-interfaces/commit/8c79b1dc0270d01c0b713a345c8ec39533c542e4

Tested:

- GET cpu and cpu subprocessors
```
curl -k -X GET https://${bmc}/redfish/v1/Systems/system/Processors/cpu0
{
  "@odata.id": "/redfish/v1/Systems/system/Processors/cpu0",
  "@odata.type": "#Processor.v1_18_0.Processor",
  "Id": "cpu0",
 ...
  "SubProcessors": {
    "@odata.id": "/redfish/v1/Systems/system/Processors/cpu0/SubProcessors"
  },
  ...
}
```

```
curl -k -X GET https://${bmc}/redfish/v1/Systems/system/Processors/cpu0/SubProcessors
{
  "@odata.id": "/redfish/v1/Systems/system/Processors/cpu0/SubProcessors",
  "@odata.type": "#ProcessorCollection.ProcessorCollection",
  "Members": [
    {
      "@odata.id": "/redfish/v1/Systems/system/Processors/cpu0/SubProcessors/core0"
    },
    {
      "@odata.id": "/redfish/v1/Systems/system/Processors/cpu0/SubProcessors/core1"
    },
    ...
  ],
  "Members@odata.count": 4,
  "Name": "SubProcessor Collection"
}
```

- Verified that below return a link header
- GET /redfish/v1/Systems/system/Processors/cpu0/SubProcessors
- HEAD /redfish/v1/Systems/system/Processors/cpu0/SubProcessors
- Redfish Validator Passed

Change-Id: If155b97b0c782d82541c00ecf5ee70cb0180f71f
Signed-off-by: George Liu &lt;liuxiwei@ieisystem.com&gt;
Signed-off-by: Nikhil Namjoshi &lt;nikhilnamjoshi@google.com&gt;
Signed-off-by: Myung Bae &lt;myungbae@us.ibm.com&gt;
</content>
</entry>
<entry>
<title>bmcweb: add Chassis Links/Processors support</title>
<updated>2026-07-28T02:51:31+00:00</updated>
<author>
<name>Jacky Huang</name>
<email>jackyhuang@nvidia.com</email>
</author>
<published>2026-04-15T09:04:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/bmcweb.git/commit/?id=8f680d8456c9e834f871fffa630043811597c3f8'/>
<id>urn:sha1:8f680d8456c9e834f871fffa630043811597c3f8</id>
<content type='text'>
Implement Redfish Chassis Links/Processors property to expose the
association between a chassis and its processors. The "containing"
association from the chassis D-Bus object is traversed to discover
all associated processor objects.

Processors implementing either of the following D-Bus interfaces are
included:
- xyz.openbmc_project.Inventory.Item.Accelerator
- xyz.openbmc_project.Inventory.Item.Cpu

The following Redfish property is populated:
- Links/Processors[]/@odata.id
  (/redfish/v1/Systems/&lt;system&gt;/Processors/&lt;name&gt;)

Tested:
```
Build an image for nvl32-obmc machine with the following
patches cherry-picked:
1. platform-init enable LCLK and espiCLK:
   https://gerrit.openbmc.org/c/openbmc/platform-init/+/89900
2. mctpd configuration:
   https://gerrit.openbmc.org/c/openbmc/openbmc/+/87390
3. Enable nvidia-gpu sensor:
   https://gerrit.openbmc.org/c/openbmc/openbmc/+/89933
```
```
$ curl -sk -u \
  https://localhost/redfish/v1/Chassis/{}
  {
    ...
    "Links": {
      ...
      "Processors": [
        {
          "@odata.id": "/redfish/v1/Systems/system/Processors/GPU_*_*"
        }
      ]
    }
    ...
  }
```
```
Redfish Service Validator: PASS: 10646, WARN: 381, FAIL: 1,
NOT TESTED: 16809
The FAIL is pre-existing.
```

Change-Id: I071ba0f7774d7c6c11f4a49fc584d50b0dfb9ca8
Signed-off-by: Jacky Huang &lt;jackyhuang@nvidia.com&gt;
</content>
</entry>
<entry>
<title>bmcweb: add FW Version and Svc Label on GPU Processor</title>
<updated>2026-07-23T02:55:57+00:00</updated>
<author>
<name>JY Voon</name>
<email>jvoon@nvidia.com</email>
</author>
<published>2026-03-30T08:39:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/bmcweb.git/commit/?id=2baff8d6daaa41a0724da9a6f0d81d0dc49209c6'/>
<id>urn:sha1:2baff8d6daaa41a0724da9a6f0d81d0dc49209c6</id>
<content type='text'>
Add FirmwareVersion and Location.PartLocation.ServiceLabel
to GPU Processor.

Tested: Build an image for nvl32-obmc machine with the following
patches cherry-picked:

1. Align with upstream u-boot dts tree:
   https://gerrit.openbmc.org/c/openbmc/openbmc/+/89932
2. mctpd configuration:
   https://gerrit.openbmc.org/c/openbmc/openbmc/+/87390
3. Enable nvidia-gpu sensor:
   https://gerrit.openbmc.org/c/openbmc/openbmc/+/89933

  $ curl -sk https://{BMC_IP}/redfish/v1/Systems/system/\
  Processors/GPU_0_0
  {
    "@odata.id": "/redfish/v1/Systems/system/Processors/GPU_0_0",
    "@odata.type": "#Processor.v1_18_0.Processor",
    "FirmwareVersion": "98.02.AF.00.01",
    "Id": "GPU_0_0",
    "Location": {
      "PartLocation": {
        "ServiceLabel": "GPU_0_0"
      }
    },
    "Manufacturer": "NVIDIA",
    "Model": "RTXPRO6000BlackwellDC",
    "Name": "Processor",
    "PartNumber": "900-2G153-0000-000",
    "ProcessorType": "Accelerator",
    "SerialNumber": "1792425045137",
    "Status": {
      "Health": "OK",
      "State": "Enabled"
    },
    "UUID": "1eca7165-20f9-9163-7281-10aeae60c883",
    "Version": "2BB5-895-A1"
  }

Depends-On: Id0c09f4ced40dbe505ca7cbd99f6de0e847afe3b
Change-Id: I04c5a82fe9a04e25dfaed341c46f06804c7000ca
Signed-off-by: JY Voon &lt;jvoon@nvidia.com&gt;
</content>
</entry>
<entry>
<title>Add PowerLimitWatts in EnvironmentMetrics</title>
<updated>2026-07-06T19:47:51+00:00</updated>
<author>
<name>Albert Zhang</name>
<email>zhanghaodi@inspur.com</email>
</author>
<published>2021-09-29T08:30:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/bmcweb.git/commit/?id=ff90bece9911be4b7b81102eb701e9b4b7ec8674'/>
<id>urn:sha1:ff90bece9911be4b7b81102eb701e9b4b7ec8674</id>
<content type='text'>
The EnvironmentMetrics schema[1] provides for efficient retrieval of
environmental metrics by separating them from performance metrics.
EnvironmentMetrics is a property of the Chassis schema since v1_15_0[2].

This commit extends the GET EnvironmentMetrics response to include
PowerLimitWatts property. PowerLimitWatts has been part of the
EnvironmentMetrics schema since v1_1_0. PowerLimitWatts is a
ControlSingleExcerpt[3].

Additionally this commit implements PATCH for the PowerLimitWatts
property of EnvironmentMetrics.

The PowerLimitWatts was added to Redfish release 2021.2 [4] to be used
instead of the deprecated Power schema.[5]

[1] https://redfish.dmtf.org/schemas/v1/EnvironmentMetrics.v1_5_0.json
[2] https://redfish.dmtf.org/schemas/v1/Chassis.v1_28_0.json
[3] https://redfish.dmtf.org/schemas/v1/Control.v1_7_0.json
[4] http://redfish.dmtf.org/schemas/Redfish_Release_History.pdf
[5] https://redfish.dmtf.org/schemas/v1/Power.v1_7_3.json

Tested:
(Used p10bmc hardware simulator with association added)

1. Redfish Service Validator passes

2.GET PowerLimitWatts in Chassis EnvironmentMetrics

```
curl -k -H "X-Auth-Token: ${token}" -X GET https://${bmc}/redfish/v1/Chassis/chassis/EnvironmentMetrics
{
  "@odata.id": "/redfish/v1/Chassis/chassis/EnvironmentMetrics",
  "@odata.type": "#EnvironmentMetrics.v1_3_0.EnvironmentMetrics",
  ...
  "PowerLimitWatts": {
    "AllowableMax": 4294967295,
    "AllowableMin": 0,
    "ControlMode": "Disabled",
    "SetPoint": 0
  }
}
```

3. GET error handling of invalid chassisId
```
curl -k -H "X-Auth-Token: ${token}" -X GET https://${bmc}/redfish/v1/Chassis/chassisERROR/EnvironmentMetrics
{
  "error": {
    "@Message.ExtendedInfo": [
      {
        "@odata.type": "#Message.v1_1_1.Message",
        "Message": "The requested resource of type Chassis named 'chassisERROR' was not found.",
        "MessageArgs": [
          "Chassis",
          "chassisERROR"
        ],
        "MessageId": "Base.1.19.ResourceNotFound",
        "MessageSeverity": "Critical",
        "Resolution": "Provide a valid resource identifier and resubmit the request."
      }
    ],
    "code": "Base.1.19.ResourceNotFound",
    "message": "The requested resource of type Chassis named 'chassisERROR' was not found."
  }
}
```

4. PATCH to set SetPoint in PowerLimitWatts
1&gt; When the value is in the allowable range, the modification succeeds.
```
curl -k -H "X-Auth-Token: $token" -H "Content-Type: application/json" -X PATCH -d'{ "PowerLimitWatts": {"SetPoint": 10}}' https://${bmc}/redfish/v1/Chassis/chassis/EnvironmentMetrics

curl -k -H "X-Auth-Token: ${token}" -X GET https://${bmc}/redfish/v1/Chassis/chassis/EnvironmentMetrics
{
  "@odata.id": "/redfish/v1/Chassis/chassis/EnvironmentMetrics",
  "@odata.type": "#EnvironmentMetrics.v1_3_0.EnvironmentMetrics",
  ...
  "PowerLimitWatts": {
    "AllowableMax": 4294967295,
    "AllowableMin": 0,
    "ControlMode": "Disabled",
    "SetPoint": 10
  }
}
```

2&gt; When the value is outside of the allowable range, the modification
fails and an error is reported.
```
curl -k -H "X-Auth-Token: $token" -H "Content-Type: application/json" -X PATCH -d '{ "PowerLimitWatts": {"SetPoint": 4294967296}}' https://${bmc}/redfish/v1/Chassis/chassis/EnvironmentMetrics
{
  "error": {
    "@Message.ExtendedInfo": [
      {
        "@odata.type": "#Message.v1_1_1.Message",
        "Message": "The value '4294967296' for the property SetPoint is not in the supported range of acceptable values.",
        "MessageArgs": [
          "4294967296",
          "SetPoint"
        ],
        "MessageId": "Base.1.19.PropertyValueOutOfRange",
        "MessageSeverity": "Warning",
        "Resolution": "Correct the value for the property in the request body and resubmit the request if the operation failed."
      }
    ],
    "code": "Base.1.19.PropertyValueOutOfRange",
    "message": "The value '4294967296' for the property SetPoint is not in the supported range of acceptable values."
  }
}
```

5. PATCH to set ControlMode in PowerLimitWatts

1&gt;When the ControlMode is changed to Automatic, the modification
is successful.
```
curl -k -H "X-Auth-Token: $token" -H "Content-Type: application/json" -X PATCH -d'{ "PowerLimitWatts": {"ControlMode": "Automatic"}}' https://${bmc}/redfish/v1/Chassis/chassis/EnvironmentMetrics

curl -k -H "X-Auth-Token: ${token}" -X GET https://${bmc}/redfish/v1/Chassis/chassis/EnvironmentMetrics
{
  "@odata.id": "/redfish/v1/Chassis/chassis/EnvironmentMetrics",
  "@odata.type": "#EnvironmentMetrics.v1_3_0.EnvironmentMetrics",
  ...
  "PowerLimitWatts": {
    "AllowableMax": 4294967295,
    "AllowableMin": 0,
    "ControlMode": "Automatic",
    "SetPoint": 10
  }
}
```

2&gt;When the ControlMode is changed to Disabled, the modification
is successful.

```
curl -k -H "X-Auth-Token: $token" -H "Content-Type: application/json" -X PATCH -d'{ "PowerLimitWatts": {"ControlMode": "Disabled"}}' https://${bmc}/redfish/v1/Chassis/chassis/EnvironmentMetrics

curl -k -H "X-Auth-Token: ${token}" -X GET https://${bmc}/redfish/v1/Chassis/chassis/EnvironmentMetrics
{
  "@odata.id": "/redfish/v1/Chassis/chassis/EnvironmentMetrics",
  "@odata.type": "#EnvironmentMetrics.v1_3_0.EnvironmentMetrics",
  ...
  "PowerLimitWatts": {
    "AllowableMax": 4294967295,
    "AllowableMin": 0,
    "ControlMode": "Disabled",
    "SetPoint": 10
  }
}
```

3&gt;When the ControlMode is changed to other values, the modification
fails and an error is reported.

```
curl -k -H "X-Auth-Token: $token" -H "Content-Type: application/json" -X PATCH -d '{ "PowerLimitWatts": {"ControlMode": "Error"}}' https://${bmc}/redfish/v1/Chassis/chassis/EnvironmentMetrics
{
  "error": {
    "@Message.ExtendedInfo": [
      {
        "@odata.type": "#Message.v1_1_1.Message",
        "Message": "The value '\"Error\"' for the property ControlMode is not in the list of acceptable values.",
        "MessageArgs": [
          "\"Error\"",
          "ControlMode"
        ],
        "MessageId": "Base.1.19.PropertyValueNotInList",
        "MessageSeverity": "Warning",
        "Resolution": "Choose a value from the enumeration list that the implementation can support and resubmit the request if the operation failed."
      }
    ],
    "code": "Base.1.19.PropertyValueNotInList",
    "message": "The value '\"Error\"' for the property ControlMode is not in the list of acceptable values."
  }
}
```
6. PATCH to set PowerLimitWatts when no associated object
```
curl -k -H "X-Auth-Token: $token" -H "Content-Type: application/json" -X PATCH -d '{ "PowerLimitWatts":{"SetPoint":0,"ControlMode":"Automatic"}}' https://${bmc}/redfish/v1/Chassis/chassis/EnvironmentMetrics
{
  "error": {
    "@Message.ExtendedInfo": [
      {
        "@odata.type": "#Message.v1_1_1.Message",
        "Message": "The property PowerLimitWatts is not in the list of valid properties for the resource.",
        "MessageArgs": [
          "PowerLimitWatts"
        ],
        "MessageId": "Base.1.19.PropertyUnknown",
        "MessageSeverity": "Warning",
        "Resolution": "Remove the unknown property from the request body and resubmit the request if the operation failed."
      }
    ],
    "code": "Base.1.19.PropertyUnknown",
    "message": "The property PowerLimitWatts is not in the list of valid properties for the resource."
  }
}
```

Change-Id: Iacd244e537ccab6572a0a55b7f30871774e097ff
Signed-off-by: Albert Zhang &lt;zhanghaodi@inspur.com&gt;
Signed-off-by: Janet Adkins &lt;janeta@us.ibm.com&gt;
</content>
</entry>
<entry>
<title>Manage user password expiration via REST</title>
<updated>2026-06-29T19:22:47+00:00</updated>
<author>
<name>Ivan Moiseev</name>
<email>moiseev.ivan4w@yandex.com</email>
</author>
<published>2024-10-15T13:18:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/BMC/OpenBmc/bmcweb.git/commit/?id=e80fca94a0cd8c84393015c0d1df0cd5a2e27591'/>
<id>urn:sha1:e80fca94a0cd8c84393015c0d1df0cd5a2e27591</id>
<content type='text'>
This change adds user password expiration date time mgmt via REST
API provided by bmcweb. Password expiration date time is managed as
string in 'YYYY-MM-DDTHH:MM:SS±hh:mm' format and internally operates as
Epoch time. When set password expiration date time can be specified in
any format supported by 'dateStringToEpoch' function in
'redfish::time_utils'. Value 'null' is used to make password not to
expire.

Unit tests checking correct password expiration value conversion were
added.

This change depends on corresponding change in phosphor-dbus-interfaces
[1] and in phospor-user-manager [2].

Password expiration management:
- create user with password expiration
```
curl -k -X POST -H 'Content-Type: application/json' \
  "https://&lt;bmc&gt;/redfish/v1/AccountService/Accounts" \
  -d '{"UserName":"&lt;user&gt;", "Password":"&lt;password&gt;", "RoleId":"&lt;role&gt;", "PasswordExpiration": "&lt;YYYY-MM-DDTHH:MM:SS&gt;"}'
```

- modify user password expiration
```
curl -k -X PATCH -H 'Content-Type: application/json' \
  https://&lt;bmc&gt;/redfish/v1/AccountService/Accounts/&lt;user&gt; \
  -d '{"PasswordExpiration": "&lt;YYYY-MM-DDTHH:MM:SS&gt;"}'
```

- get user password expiration
```
  curl -k -X GET https://&lt;bmc&gt;/redfish/v1/AccountService/Accounts/&lt;user&gt;
```

- modify user password not to expire
```
curl -k -X PATCH -H 'Content-Type: application/json' \
  https://&lt;bmc&gt;/redfish/v1/AccountService/Accounts/&lt;user&gt; \
  -d '{"PasswordExpiration": null}'
```

Tested:
Functionality of this change was tested via curl utility. Also, it was
checked that proper value was set on dbus for'PasswordExpiration'
attribute of the specified user.
- create user account without password expiration, verify that password
  expiration is not set
- create user account with password expiration specified, verify that it
  is correct
- create user account with null password expiration which makes password
  not to expire, verify that it is correct
- try to create user account with various invalid password expiration
  values(incorrect type, invalid format), verify that user is not
  created and appropriate error is returned in response
- modify user password expiration to specific time, verify that is is
  correct
- make user password not to expiry, verify that it is correct
- try to set password expiration to an invalid value (incorrect type,
  invalid format), verify that is does not change and appropriate error
  is returned in response

Redfish service validation on /redfish/v1/AccountService/Accounts tree
containing both user accounts with and without password expiration has
passed successfully.

[1] https://gerrit.openbmc.org/c/openbmc/phosphor-dbus-interfaces/+/75236
[2] https://gerrit.openbmc.org/c/openbmc/phosphor-user-manager/+/75237

Change-Id: Idf5e4356eaa8866dd4a10664996117e2cdba0684
Signed-off-by: Ivan Moiseev &lt;moiseev.ivan4w@yandex.com&gt;
Signed-off-by: Ivan Mikhaylov &lt;fr0st61te@gmail.com&gt;
</content>
</entry>
</feed>
