commit | 4e84539349dac086ce2a58e5b9900ed4e40a2eaf | [log] [tgz] |
---|---|---|
author | Brad Bishop <bradleyb@fuzziesquirrel.com> | Tue Dec 18 18:13:12 2018 -0500 |
committer | Brad Bishop <bradleyb@fuzziesquirrel.com> | Wed Dec 19 13:38:46 2018 +0000 |
tree | 1b5f3655927b8c5c1685179acddbe82927ac3980 | |
parent | 37539dcc2b8c735d03a7c2840ad9ae04180da142 [diff] |
Use a single dbus connection object Starting with sdbusplus 8ca6025, calling bus_new_default multiple times doesn't seem to work - making calls that generate dbus traffic on one of the objects results in something like: sd_bus_call: System.Error.ENOTCONN: Transport endpoint is not connected This wasn't ideal anyway - move to a single object, shared application-wide. Tested: Booted a witherspoon QEMU image and there were no coredumps Change-Id: I804a1b1438b22f48e45b26d395135e401ca98a06 Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.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 |
To set an NTP server:
### With busctl on BMC busctl set-property xyz.openbmc_project.Network \ /xyz/openbmc_project/network/eth0 \ xyz.openbmc_project.Network.EthernetInterface NTPServers \ as 1 "<ntp_server>" ### With REST API on remote host curl -c cjar -b cjar -k -H "Content-Type: application/json" -X PUT -d \ '{"data": ["<ntp_server>"] }' \ https://${BMC_IP}/xyz/openbmc_project/network/eth0/attr/NTPServers
To go into NTP mode
### With busctl on BMC busctl set-property xyz.openbmc_project.Settings \ /xyz/openbmc_project/time/sync_method xyz.openbmc_project.Time.Synchronization \ TimeSyncMethod s "xyz.openbmc_project.Time.Synchronization.Method.NTP" ### With REST API on remote host curl -c cjar -b cjar -k -H "Content-Type: application/json" -X PUT -d \ '{"data": "xyz.openbmc_project.Time.Synchronization.Method.NTP" }' \ https://${BMC_IP}/xyz/openbmc_project/time/sync_method/attr/TimeSyncMethod
To change owner
### With busctl on BMC busctl set-property xyz.openbmc_project.Settings \ /xyz/openbmc_project/time/owner xyz.openbmc_project.Time.Owner \ TimeOwner s xyz.openbmc_project.Time.Owner.Owners.BMC ### With REST API on remote host curl -c cjar -b cjar -k -H "Content-Type: application/json" -X PUT -d \ '{"data": "xyz.openbmc_project.Time.Owner.Owners.BMC" }' \ https://${BMC_IP}/xyz/openbmc_project/time/owner/attr/TimeOwner
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.