Use host state object to check if host is on

The code was using pgood to determine if host is on or off. Now we have
host state object, which is a more appropriate way to check host on/off.
So change pgood related code to use host state object.

Change-Id: I553c1a40922ca2e8bc6904688c55e85971bd4720
Signed-off-by: Lei YU <mine260309@gmail.com>
6 files changed
tree: d591f7fd56911eee9579918303f141f20d84392f
  1. test/
  2. xyz/
  3. .gitignore
  4. bmc_epoch.cpp
  5. bmc_epoch.hpp
  6. bmc_time_change_listener.hpp
  7. bootstrap.sh
  8. configure.ac
  9. elog-errors.hpp
  10. epoch_base.cpp
  11. epoch_base.hpp
  12. host_epoch.cpp
  13. host_epoch.hpp
  14. LICENSE
  15. main.cpp
  16. Makefile.am
  17. manager.cpp
  18. manager.hpp
  19. property_change_listener.hpp
  20. README.md
  21. settings.cpp
  22. settings.hpp
  23. types.hpp
  24. utils.cpp
  25. utils.hpp
README.md

Introduction

phosphor-time-manager is the time manager service that implements dbus interface xyz/openbmc_project/Time/EpochTime.interface.yaml. User can get or set the BMC's or HOST's time via this interface.

General usage

The service xyz.openbmc_project.Time.Manager provides two objects on dbus:

  • /xyz/openbmc_project/time/bmc
  • /xyz/openbmc_project/time/host

where each object implements interface xyz.openbmc_project.Time.EpochTime.

User can directly get or set the property Elasped of the objects to get or set the time. For example on an authenticated session:

  • To get BMC's time:
    ### 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
    
  • To set HOST's time:
    ### 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
    

Time settings

Getting BMC or HOST time is always allowed, but setting the time may not be allowed depending on below two settings in settings manager.

  • TimeSyncMethod
    • NTP: Time is set via NTP server.
    • MANUAL: Time is set manually.
  • TimeOwner
    • BMC: BMC owns the time and can set the time.
    • HOST: Host owns the time and can set the time.
    • SPLIT: BMC and Host owns separate time.
    • BOTH: Both BMC and Host can set the time.

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

Special note on host on

When 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 host is off, the saved mode/owner are read from persistent storage and are applied.

Note: user can set the time mode and owner in settings daemon at any time, but time manager applying them is governed by the above condition.