diff --git a/ipmitool/include/ipmitool/ipmi_intf.h b/ipmitool/include/ipmitool/ipmi_intf.h index 2e5a0c7..a815576 100644 --- a/ipmitool/include/ipmitool/ipmi_intf.h +++ b/ipmitool/include/ipmitool/ipmi_intf.h @@ -39,6 +39,18 @@ #include +#define IPMI_SESSION_AUTHTYPE_NONE 0x0 +#define IPMI_SESSION_AUTHTYPE_MD2 0x1 +#define IPMI_SESSION_AUTHTYPE_MD5 0x2 +#define IPMI_SESSION_AUTHTYPE_KEY 0x4 +#define IPMI_SESSION_AUTHTYPE_OEM 0x5 + +#define IPMI_SESSION_PRIV_CALLBACK 0x1 +#define IPMI_SESSION_PRIV_USER 0x2 +#define IPMI_SESSION_PRIV_OPERATOR 0x3 +#define IPMI_SESSION_PRIV_ADMIN 0x4 +#define IPMI_SESSION_PRIV_OEM 0x5 + struct ipmi_session { unsigned char hostname[64]; unsigned char username[16]; diff --git a/ipmitool/include/ipmitool/ipmi_lanp.h b/ipmitool/include/ipmitool/ipmi_lanp.h index 83717c5..8e8d282 100644 --- a/ipmitool/include/ipmitool/ipmi_lanp.h +++ b/ipmitool/include/ipmitool/ipmi_lanp.h @@ -46,18 +46,6 @@ # define IPMI_LAN_SUSPEND_ARP_GRAT (1) #define IPMI_LAN_GET_STAT 0x04 -#define IPMI_SESSION_AUTHTYPE_NONE 0x0 -#define IPMI_SESSION_AUTHTYPE_MD2 0x1 -#define IPMI_SESSION_AUTHTYPE_MD5 0x2 -#define IPMI_SESSION_AUTHTYPE_KEY 0x4 -#define IPMI_SESSION_AUTHTYPE_OEM 0x5 - -#define IPMI_SESSION_PRIV_CALLBACK 0x1 -#define IPMI_SESSION_PRIV_USER 0x2 -#define IPMI_SESSION_PRIV_OPERATOR 0x3 -#define IPMI_SESSION_PRIV_ADMIN 0x4 -#define IPMI_SESSION_PRIV_OEM 0x5 - extern const struct valstr ipmi_privlvl_vals[]; extern const struct valstr ipmi_authtype_vals[]; diff --git a/ipmitool/lib/ipmi_chassis.c b/ipmitool/lib/ipmi_chassis.c index d605c88..cfd86b3 100644 --- a/ipmitool/lib/ipmi_chassis.c +++ b/ipmitool/lib/ipmi_chassis.c @@ -78,19 +78,27 @@ static const struct valstr ipmi_chassis_power_control_vals[] = { static void ipmi_chassis_power_control(struct ipmi_intf * intf, unsigned char ctl) { + struct ipmi_rs * rsp; struct ipmi_rq req; + ipmi_intf_session_set_privlvl(intf, IPMI_SESSION_PRIV_ADMIN); + memset(&req, 0, sizeof(req)); req.msg.netfn = IPMI_NETFN_CHASSIS; req.msg.cmd = 0x2; req.msg.data = &ctl; req.msg.data_len = 1; - printf("Chassis Power Control: %s\n", - val2str(ctl, ipmi_chassis_power_control_vals)); + rsp = intf->sendrecv(intf, &req); - intf->sendrecv(intf, &req); - intf->abort = 1; + if (!rsp || rsp->ccode) { + printf("Unable to set Chassis Power Control to %s\n", + val2str(ctl, ipmi_chassis_power_control_vals)); + } else { + printf("Chassis Power Control: %s\n", + val2str(ctl, ipmi_chassis_power_control_vals)); + intf->abort = 1; + } } static void ipmi_chassis_identify(struct ipmi_intf * intf, char * arg)