blob: 26fd7603c9bba1f6b0bdf9e06435d38ae314b0d2 [file] [log] [blame]
Anthony Wilson79f697e2018-09-13 13:48:52 -05001#!/bin/sh -e
2
3set -euo pipefail
4
Anthony Wilson3ae0a352018-09-13 14:47:56 -05005OPTS="bmcstate,bootprogress,chassisoff,chassison,chassisstate,hoststate,\
6power,poweroff,poweron,state,status"
Anthony Wilson0f359832018-09-13 14:28:07 -05007
Anthony Wilsonf3f16fa2018-09-13 14:10:52 -05008USAGE="Usage: obmcutil [-h]
Anthony Wilson0f359832018-09-13 14:28:07 -05009 {$OPTS}"
Anthony Wilson79f697e2018-09-13 13:48:52 -050010
11INTERFACE_ROOT=xyz.openbmc_project
12STATE_INTERFACE=$INTERFACE_ROOT.State
13
14OBJECT_ROOT=/xyz/openbmc_project
15STATE_OBJECT=$OBJECT_ROOT/state
16
Anthony Wilsonf3f16fa2018-09-13 14:10:52 -050017print_help ()
18{
19 echo "$USAGE"
20 echo ""
21 echo "positional arguments:"
Anthony Wilson0f359832018-09-13 14:28:07 -050022 echo " {$OPTS}"
Anthony Wilsonf3f16fa2018-09-13 14:10:52 -050023 echo ""
24 echo "optional arguments:"
25 echo " -h, --help show this help message and exit"
26 exit 0
27}
28
Anthony Wilson3ae0a352018-09-13 14:47:56 -050029set_property ()
30{
31 busctl set-property "$@"
32}
33
Anthony Wilson79f697e2018-09-13 13:48:52 -050034get_property ()
35{
36 busctl get-property "$@"
37}
38
39state_query ()
40{
41 local state=$(get_property "$@" | cut -d '"' -f2)
42 printf "%-20s: %s\n" $4 $state
43}
44
Anthony Wilsonea87db42018-09-26 16:06:38 -050045print_usage_err ()
46{
47 echo "ERROR: $1" >&2
48 echo "$USAGE"
49 exit 1
50}
51
Anthony Wilson79f697e2018-09-13 13:48:52 -050052handle_cmd ()
53{
54 case "$1" in
Anthony Wilson3ae0a352018-09-13 14:47:56 -050055 chassisoff)
56 OBJECT=$STATE_OBJECT/chassis0
57 SERVICE=$(mapper get-service $OBJECT)
58 INTERFACE=$STATE_INTERFACE.Chassis
59 PROPERTY=RequestedPowerTransition
60 VALUE=$INTERFACE.Transition.Off
61 set_property $SERVICE $OBJECT $INTERFACE $PROPERTY "s" $VALUE
62 ;;
63 chassison)
64 OBJECT=$STATE_OBJECT/chassis0
65 SERVICE=$(mapper get-service $OBJECT)
66 INTERFACE=$STATE_INTERFACE.Chassis
67 PROPERTY=RequestedPowerTransition
68 VALUE=$INTERFACE.Transition.On
69 set_property $SERVICE $OBJECT $INTERFACE $PROPERTY "s" $VALUE
70 ;;
71 poweroff)
72 OBJECT=$STATE_OBJECT/host0
73 SERVICE=$(mapper get-service $OBJECT)
74 INTERFACE=$STATE_INTERFACE.Host
75 PROPERTY=RequestedHostTransition
76 VALUE=$INTERFACE.Transition.Off
77 set_property $SERVICE $OBJECT $INTERFACE $PROPERTY "s" $VALUE
78 ;;
79 poweron)
80 OBJECT=$STATE_OBJECT/host0
81 SERVICE=$(mapper get-service $OBJECT)
82 INTERFACE=$STATE_INTERFACE.Host
83 PROPERTY=RequestedHostTransition
84 VALUE=$INTERFACE.Transition.On
85 set_property $SERVICE $OBJECT $INTERFACE $PROPERTY "s" $VALUE
86 ;;
Anthony Wilson79f697e2018-09-13 13:48:52 -050087 bmcstate)
88 OBJECT=$STATE_OBJECT/bmc0
89 SERVICE=$(mapper get-service $OBJECT)
90 INTERFACE=$STATE_INTERFACE.BMC
91 PROPERTY=CurrentBMCState
92 state_query $SERVICE $OBJECT $INTERFACE $PROPERTY
93 ;;
94 chassisstate)
95 OBJECT=$STATE_OBJECT/chassis0
96 SERVICE=$(mapper get-service $OBJECT)
97 INTERFACE=$STATE_INTERFACE.Chassis
98 PROPERTY=CurrentPowerState
99 state_query $SERVICE $OBJECT $INTERFACE $PROPERTY
100 ;;
101 hoststate)
102 OBJECT=$STATE_OBJECT/host0
103 SERVICE=$(mapper get-service $OBJECT)
104 INTERFACE=$STATE_INTERFACE.Host
105 PROPERTY=CurrentHostState
106 state_query $SERVICE $OBJECT $INTERFACE $PROPERTY
107 ;;
108 state|status)
109 for query in bmcstate chassisstate hoststate
110 do
111 handle_cmd $query
112 done
113 ;;
Anthony Wilson50c5f882018-09-13 14:19:37 -0500114 bootprogress)
115 OBJECT=$STATE_OBJECT/host0
116 SERVICE=$(mapper get-service $OBJECT)
117 INTERFACE=$STATE_INTERFACE.Boot.Progress
118 PROPERTY=BootProgress
119 state_query $SERVICE $OBJECT $INTERFACE $PROPERTY
120 ;;
Anthony Wilson0f359832018-09-13 14:28:07 -0500121 power)
122 OBJECT=/org/openbmc/control/power0
123 SERVICE=$(mapper get-service $OBJECT)
124 INTERFACE=org.openbmc.control.Power
125 for property in pgood state pgood_timeout
126 do
127 # get_property can potentially return several
128 # different formats of values, so we do the parsing outside
129 # of get_property depending on the query. These queries
130 # return 'i VALUE' formatted strings.
131 STATE=$(get_property $SERVICE $OBJECT $INTERFACE $property \
132 | sed 's/i[ ^I]*//')
133 printf "%s = %s\n" $property $STATE
134 done
135 ;;
Anthony Wilson79f697e2018-09-13 13:48:52 -0500136 *)
Anthony Wilsonea87db42018-09-26 16:06:38 -0500137 print_usage_err "Invalid command '$1'"
Anthony Wilson79f697e2018-09-13 13:48:52 -0500138 ;;
139 esac
140}
141
Anthony Wilsonea87db42018-09-26 16:06:38 -0500142for arg in "$@"; do
143 case $arg in
144 -h|--help)
145 print_help
146 ;;
147 -*)
148 print_usage_err "Unknown option: $arg"
149 ;;
150 *)
151 handle_cmd $arg
152 break
153 ;;
154 esac
155done