1#!/bin/sh -e 2 3set -euo pipefail 4 5OPTS="bmcstate,bootprogress,chassisoff,chassison,chassisstate,hoststate,\ 6power,poweroff,poweron,state,status" 7 8USAGE="Usage: obmcutil [-h] 9 {$OPTS}" 10 11INTERFACE_ROOT=xyz.openbmc_project 12STATE_INTERFACE=$INTERFACE_ROOT.State 13 14OBJECT_ROOT=/xyz/openbmc_project 15STATE_OBJECT=$OBJECT_ROOT/state 16 17print_help () 18{ 19 echo "$USAGE" 20 echo "" 21 echo "positional arguments:" 22 echo " {$OPTS}" 23 echo "" 24 echo "optional arguments:" 25 echo " -h, --help show this help message and exit" 26 exit 0 27} 28 29set_property () 30{ 31 busctl set-property "$@" 32} 33 34get_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 45handle_cmd () 46{ 47 case "$1" in 48 chassisoff) 49 OBJECT=$STATE_OBJECT/chassis0 50 SERVICE=$(mapper get-service $OBJECT) 51 INTERFACE=$STATE_INTERFACE.Chassis 52 PROPERTY=RequestedPowerTransition 53 VALUE=$INTERFACE.Transition.Off 54 set_property $SERVICE $OBJECT $INTERFACE $PROPERTY "s" $VALUE 55 ;; 56 chassison) 57 OBJECT=$STATE_OBJECT/chassis0 58 SERVICE=$(mapper get-service $OBJECT) 59 INTERFACE=$STATE_INTERFACE.Chassis 60 PROPERTY=RequestedPowerTransition 61 VALUE=$INTERFACE.Transition.On 62 set_property $SERVICE $OBJECT $INTERFACE $PROPERTY "s" $VALUE 63 ;; 64 poweroff) 65 OBJECT=$STATE_OBJECT/host0 66 SERVICE=$(mapper get-service $OBJECT) 67 INTERFACE=$STATE_INTERFACE.Host 68 PROPERTY=RequestedHostTransition 69 VALUE=$INTERFACE.Transition.Off 70 set_property $SERVICE $OBJECT $INTERFACE $PROPERTY "s" $VALUE 71 ;; 72 poweron) 73 OBJECT=$STATE_OBJECT/host0 74 SERVICE=$(mapper get-service $OBJECT) 75 INTERFACE=$STATE_INTERFACE.Host 76 PROPERTY=RequestedHostTransition 77 VALUE=$INTERFACE.Transition.On 78 set_property $SERVICE $OBJECT $INTERFACE $PROPERTY "s" $VALUE 79 ;; 80 bmcstate) 81 OBJECT=$STATE_OBJECT/bmc0 82 SERVICE=$(mapper get-service $OBJECT) 83 INTERFACE=$STATE_INTERFACE.BMC 84 PROPERTY=CurrentBMCState 85 state_query $SERVICE $OBJECT $INTERFACE $PROPERTY 86 ;; 87 chassisstate) 88 OBJECT=$STATE_OBJECT/chassis0 89 SERVICE=$(mapper get-service $OBJECT) 90 INTERFACE=$STATE_INTERFACE.Chassis 91 PROPERTY=CurrentPowerState 92 state_query $SERVICE $OBJECT $INTERFACE $PROPERTY 93 ;; 94 hoststate) 95 OBJECT=$STATE_OBJECT/host0 96 SERVICE=$(mapper get-service $OBJECT) 97 INTERFACE=$STATE_INTERFACE.Host 98 PROPERTY=CurrentHostState 99 state_query $SERVICE $OBJECT $INTERFACE $PROPERTY 100 ;; 101 state|status) 102 for query in bmcstate chassisstate hoststate 103 do 104 handle_cmd $query 105 done 106 ;; 107 bootprogress) 108 OBJECT=$STATE_OBJECT/host0 109 SERVICE=$(mapper get-service $OBJECT) 110 INTERFACE=$STATE_INTERFACE.Boot.Progress 111 PROPERTY=BootProgress 112 state_query $SERVICE $OBJECT $INTERFACE $PROPERTY 113 ;; 114 power) 115 OBJECT=/org/openbmc/control/power0 116 SERVICE=$(mapper get-service $OBJECT) 117 INTERFACE=org.openbmc.control.Power 118 for property in pgood state pgood_timeout 119 do 120 # get_property can potentially return several 121 # different formats of values, so we do the parsing outside 122 # of get_property depending on the query. These queries 123 # return 'i VALUE' formatted strings. 124 STATE=$(get_property $SERVICE $OBJECT $INTERFACE $property \ 125 | sed 's/i[ ^I]*//') 126 printf "%s = %s\n" $property $STATE 127 done 128 ;; 129 -h|--help) 130 print_help 131 ;; 132 *) 133 echo "ERROR: Invalid Choice: '$1'" 134 echo "$USAGE" 135 ;; 136 esac 137} 138 139handle_cmd $1 140