commit | fa0248805651d63d7975147c821ad288fa03f3d5 | [log] [tgz] |
---|---|---|
author | Lei YU <mine260309@gmail.com> | Thu Nov 09 10:49:26 2017 +0800 |
committer | Lei YU <mine260309@gmail.com> | Fri Nov 10 21:33:54 2017 +0800 |
tree | ea10c2817915dc9cbd4611584047297f0b8ad370 | |
parent | 47263808f5237da331397cd588e91a1ed97405e2 [diff] |
Fix incorrect host time after setting BMC time in NTP/Split The time tests find an issue that after NTP/BMC is changed to NTP/Split, setting BMC time will cause host time change. The root cause is that it fails to set BMC time (which is expected) but still invokes notifyBmcTimeChange(), which cause host to re-calculate the offset. The fix is to not invoke notifyBmcTimeChange() on failure to set BMC time. Change-Id: Id13b5fa8ba7def764eab8afad23661f9b0be37ce Signed-off-by: Lei YU <mine260309@gmail.com>
phosphor-time-manager
is the time manager service that implements D-Bus interface xyz/openbmc_project/Time/EpochTime.interface.yaml
. The user can get or set the BMC's or HOST's time via this interface.
The service xyz.openbmc_project.Time.Manager
provides two objects on D-Bus:
where each object implements interface xyz.openbmc_project.Time.EpochTime
.
The user can directly get or set the property Elapsed
of the objects to get or set the time. For example on an authenticated session:
### With busctl on BMC busctl get-property xyz.openbmc_project.Time.Manager \ /xyz/openbmc_project/time/bmc xyz.openbmc_project.Time.EpochTime Elapsed ### With REST API on remote host curl -b cjar -k https://bmc-ip/xyz/openbmc_project/time/bmc
### With busctl on BMC busctl set-property xyz.openbmc_project.Time.Manager \ /xyz/openbmc_project/time/host xyz.openbmc_project.Time.EpochTime \ Elapsed t <value-in-microseconds> ### With REST API on remote host curl -b cjar -k -H "Content-Type: application/json" -X PUT \ -d '{"data": 1487304700000000}' \ https://bmc-ip/xyz/openbmc_project/time/host/attr/Elapsed
Getting BMC or HOST time is always allowed, but setting the time may not be allowed depending on the below two settings in the settings manager.
A summary of which cases the time can be set on BMC or HOST:
Mode | Owner | Set BMC Time | Set Host Time |
---|---|---|---|
NTP | BMC | Fail to set | Not allowed |
NTP | HOST | Not allowed | Not allowed |
NTP | SPLIT | Fail to set | OK |
NTP | BOTH | Fail to set | Not allowed |
MANUAL | BMC | OK | Not allowed |
MANUAL | HOST | Not allowed | OK |
MANUAL | SPLIT | OK | OK |
MANUAL | BOTH | OK | OK |
When the host is on, the changes of the above time mode/owner are not applied but deferred. The changes of the mode/owner are saved to persistent storage.
When the host is off, the saved mode/owner are read from persistent storage and are applied.
Note: A user can set the time mode and owner in the settings daemon at any time, but the time manager applying them is governed by the above condition.