From 8a0559a6516095f07c3460ce855389b3643c322f Mon Sep 17 00:00:00 2001 From: Duncan Laurie Date: Fri, 9 Sep 2005 23:19:41 +0000 Subject: [PATCH] add top-level "power" command as shortcut to chassis power commands --- ipmitool/include/ipmitool/ipmi_chassis.h | 1 + ipmitool/lib/ipmi_chassis.c | 35 ++++++++++++++++++++++++ ipmitool/src/ipmitool.c | 1 + 3 files changed, 37 insertions(+) diff --git a/ipmitool/include/ipmitool/ipmi_chassis.h b/ipmitool/include/ipmitool/ipmi_chassis.h index 12fa876..6b572dd 100644 --- a/ipmitool/include/ipmitool/ipmi_chassis.h +++ b/ipmitool/include/ipmitool/ipmi_chassis.h @@ -54,5 +54,6 @@ int ipmi_chassis_power_status(struct ipmi_intf * intf); int ipmi_chassis_power_control(struct ipmi_intf * intf, uint8_t ctl); int ipmi_chassis_main(struct ipmi_intf * intf, int argc, char ** argv); +int ipmi_power_main(struct ipmi_intf * intf, int argc, char ** argv); #endif /*IPMI_CHASSIS_H*/ diff --git a/ipmitool/lib/ipmi_chassis.c b/ipmitool/lib/ipmi_chassis.c index 82cabf2..d7b1e15 100644 --- a/ipmitool/lib/ipmi_chassis.c +++ b/ipmitool/lib/ipmi_chassis.c @@ -610,6 +610,41 @@ ipmi_chassis_power_policy(struct ipmi_intf * intf, uint8_t policy) return 0; } +int +ipmi_power_main(struct ipmi_intf * intf, int argc, char ** argv) +{ + int rc = 0; + uint8_t ctl = 0; + + if ((argc < 1) || (strncmp(argv[0], "help", 4) == 0)) { + lprintf(LOG_NOTICE, "chassis power Commands: status, on, off, cycle, reset, diag, soft"); + return 0; + } + if (strncmp(argv[0], "status", 6) == 0) { + rc = ipmi_chassis_print_power_status(intf); + return rc; + } + if ((strncmp(argv[0], "up", 2) == 0) || (strncmp(argv[0], "on", 2) == 0)) + ctl = IPMI_CHASSIS_CTL_POWER_UP; + else if ((strncmp(argv[0], "down", 4) == 0) || (strncmp(argv[0], "off", 3) == 0)) + ctl = IPMI_CHASSIS_CTL_POWER_DOWN; + else if (strncmp(argv[0], "cycle", 5) == 0) + ctl = IPMI_CHASSIS_CTL_POWER_CYCLE; + else if (strncmp(argv[0], "reset", 5) == 0) + ctl = IPMI_CHASSIS_CTL_HARD_RESET; + else if (strncmp(argv[0], "diag", 4) == 0) + ctl = IPMI_CHASSIS_CTL_PULSE_DIAG; + else if ((strncmp(argv[0], "acpi", 4) == 0) || (strncmp(argv[0], "soft", 4) == 0)) + ctl = IPMI_CHASSIS_CTL_ACPI_SOFT; + else { + lprintf(LOG_ERR, "Invalid chassis power command: %s", argv[0]); + return -1; + } + + rc = ipmi_chassis_power_control(intf, ctl); + return rc; +} + int ipmi_chassis_main(struct ipmi_intf * intf, int argc, char ** argv) { diff --git a/ipmitool/src/ipmitool.c b/ipmitool/src/ipmitool.c index 7c76115..19c05f3 100644 --- a/ipmitool/src/ipmitool.c +++ b/ipmitool/src/ipmitool.c @@ -82,6 +82,7 @@ struct ipmi_cmd ipmitool_cmd_list[] = { { ipmi_rawi2c_main, "i2c", "Send an I2C Master Write-Read command and print response" }, { ipmi_lanp_main, "lan", "Configure LAN Channels" }, { ipmi_chassis_main, "chassis", "Get chassis status and set power state" }, + { ipmi_power_main, "power", "Shortcut to chassis power commands" }, { ipmi_event_main, "event", "Send pre-defined events to MC" }, { ipmi_mc_main, "mc", "Management Controller status and global enables" }, { ipmi_mc_main, "bmc", NULL }, /* for backwards compatibility */