xref: /openbmc/ipmitool/src/ipmitool.c (revision c18ec02f3304ce2a889a50e378f07a4168af3884)
1*c18ec02fSPetter Reinholdtsen /*
2*c18ec02fSPetter Reinholdtsen  * Copyright (c) 2005 Sun Microsystems, Inc.  All Rights Reserved.
3*c18ec02fSPetter Reinholdtsen  * Use is subject to license terms.
4*c18ec02fSPetter Reinholdtsen  */
5*c18ec02fSPetter Reinholdtsen 
6*c18ec02fSPetter Reinholdtsen /*
7*c18ec02fSPetter Reinholdtsen  * Redistribution and use in source and binary forms, with or without
8*c18ec02fSPetter Reinholdtsen  * modification, are permitted provided that the following conditions
9*c18ec02fSPetter Reinholdtsen  * are met:
10*c18ec02fSPetter Reinholdtsen  *
11*c18ec02fSPetter Reinholdtsen  * Redistribution of source code must retain the above copyright
12*c18ec02fSPetter Reinholdtsen  * notice, this list of conditions and the following disclaimer.
13*c18ec02fSPetter Reinholdtsen  *
14*c18ec02fSPetter Reinholdtsen  * Redistribution in binary form must reproduce the above copyright
15*c18ec02fSPetter Reinholdtsen  * notice, this list of conditions and the following disclaimer in the
16*c18ec02fSPetter Reinholdtsen  * documentation and/or other materials provided with the distribution.
17*c18ec02fSPetter Reinholdtsen  *
18*c18ec02fSPetter Reinholdtsen  * Neither the name of Sun Microsystems, Inc. or the names of
19*c18ec02fSPetter Reinholdtsen  * contributors may be used to endorse or promote products derived
20*c18ec02fSPetter Reinholdtsen  * from this software without specific prior written permission.
21*c18ec02fSPetter Reinholdtsen  *
22*c18ec02fSPetter Reinholdtsen  * This software is provided "AS IS," without a warranty of any kind.
23*c18ec02fSPetter Reinholdtsen  * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
24*c18ec02fSPetter Reinholdtsen  * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
25*c18ec02fSPetter Reinholdtsen  * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
26*c18ec02fSPetter Reinholdtsen  * SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE
27*c18ec02fSPetter Reinholdtsen  * FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
28*c18ec02fSPetter Reinholdtsen  * OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.  IN NO EVENT WILL
29*c18ec02fSPetter Reinholdtsen  * SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
30*c18ec02fSPetter Reinholdtsen  * OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
31*c18ec02fSPetter Reinholdtsen  * PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
32*c18ec02fSPetter Reinholdtsen  * LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
33*c18ec02fSPetter Reinholdtsen  * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
34*c18ec02fSPetter Reinholdtsen  */
35*c18ec02fSPetter Reinholdtsen 
36*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi.h>
37*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_intf.h>
38*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_main.h>
39*c18ec02fSPetter Reinholdtsen 
40*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_sdr.h>
41*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_gendev.h>
42*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_sel.h>
43*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_fru.h>
44*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_sol.h>
45*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_isol.h>
46*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_tsol.h>
47*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_lanp.h>
48*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_chassis.h>
49*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_mc.h>
50*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_sensor.h>
51*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_channel.h>
52*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_session.h>
53*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_event.h>
54*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_user.h>
55*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_raw.h>
56*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_pef.h>
57*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_oem.h>
58*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_sunoem.h>
59*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_fwum.h>
60*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_picmg.h>
61*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_kontronoem.h>
62*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_firewall.h>
63*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_hpmfwupg.h>
64*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_delloem.h>
65*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_ekanalyzer.h>
66*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_ime.h>
67*c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_dcmi.h>
68*c18ec02fSPetter Reinholdtsen 
69*c18ec02fSPetter Reinholdtsen #ifdef HAVE_CONFIG_H
70*c18ec02fSPetter Reinholdtsen # include <config.h>
71*c18ec02fSPetter Reinholdtsen #endif
72*c18ec02fSPetter Reinholdtsen 
73*c18ec02fSPetter Reinholdtsen #ifdef HAVE_READLINE
74*c18ec02fSPetter Reinholdtsen extern int ipmi_shell_main(struct ipmi_intf * intf, int argc, char ** argv);
75*c18ec02fSPetter Reinholdtsen #endif
76*c18ec02fSPetter Reinholdtsen extern int ipmi_echo_main(struct ipmi_intf * intf, int argc, char ** argv);
77*c18ec02fSPetter Reinholdtsen extern int ipmi_set_main(struct ipmi_intf * intf, int argc, char ** argv);
78*c18ec02fSPetter Reinholdtsen extern int ipmi_exec_main(struct ipmi_intf * intf, int argc, char ** argv);
79*c18ec02fSPetter Reinholdtsen 
80*c18ec02fSPetter Reinholdtsen 
81*c18ec02fSPetter Reinholdtsen int csv_output = 0;
82*c18ec02fSPetter Reinholdtsen int verbose = 0;
83*c18ec02fSPetter Reinholdtsen 
84*c18ec02fSPetter Reinholdtsen struct ipmi_cmd ipmitool_cmd_list[] = {
85*c18ec02fSPetter Reinholdtsen 	{ ipmi_raw_main,     "raw",     "Send a RAW IPMI request and print response" },
86*c18ec02fSPetter Reinholdtsen 	{ ipmi_rawi2c_main,  "i2c",     "Send an I2C Master Write-Read command and print response" },
87*c18ec02fSPetter Reinholdtsen 	{ ipmi_rawspd_main,  "spd",     "Print SPD info from remote I2C device" },
88*c18ec02fSPetter Reinholdtsen 	{ ipmi_lanp_main,    "lan",     "Configure LAN Channels" },
89*c18ec02fSPetter Reinholdtsen 	{ ipmi_chassis_main, "chassis", "Get chassis status and set power state" },
90*c18ec02fSPetter Reinholdtsen 	{ ipmi_power_main,   "power",   "Shortcut to chassis power commands" },
91*c18ec02fSPetter Reinholdtsen 	{ ipmi_event_main,   "event",   "Send pre-defined events to MC" },
92*c18ec02fSPetter Reinholdtsen 	{ ipmi_mc_main,      "mc",      "Management Controller status and global enables" },
93*c18ec02fSPetter Reinholdtsen 	{ ipmi_mc_main,      "bmc",     NULL },	/* for backwards compatibility */
94*c18ec02fSPetter Reinholdtsen 	{ ipmi_sdr_main,     "sdr",     "Print Sensor Data Repository entries and readings" },
95*c18ec02fSPetter Reinholdtsen 	{ ipmi_sensor_main,  "sensor",  "Print detailed sensor information" },
96*c18ec02fSPetter Reinholdtsen 	{ ipmi_fru_main,     "fru",     "Print built-in FRU and scan SDR for FRU locators" },
97*c18ec02fSPetter Reinholdtsen 	{ ipmi_gendev_main,  "gendev",  "Read/Write Device associated with Generic Device locators sdr" },
98*c18ec02fSPetter Reinholdtsen 	{ ipmi_sel_main,     "sel",     "Print System Event Log (SEL)" },
99*c18ec02fSPetter Reinholdtsen 	{ ipmi_pef_main,     "pef",     "Configure Platform Event Filtering (PEF)" },
100*c18ec02fSPetter Reinholdtsen 	{ ipmi_sol_main,     "sol",     "Configure and connect IPMIv2.0 Serial-over-LAN" },
101*c18ec02fSPetter Reinholdtsen 	{ ipmi_tsol_main,    "tsol",    "Configure and connect with Tyan IPMIv1.5 Serial-over-LAN" },
102*c18ec02fSPetter Reinholdtsen 	{ ipmi_isol_main,    "isol",    "Configure IPMIv1.5 Serial-over-LAN" },
103*c18ec02fSPetter Reinholdtsen 	{ ipmi_user_main,    "user",    "Configure Management Controller users" },
104*c18ec02fSPetter Reinholdtsen 	{ ipmi_channel_main, "channel", "Configure Management Controller channels" },
105*c18ec02fSPetter Reinholdtsen 	{ ipmi_session_main, "session", "Print session information" },
106*c18ec02fSPetter Reinholdtsen     { ipmi_dcmi_main,    "dcmi",    "Data Center Management Interface"},
107*c18ec02fSPetter Reinholdtsen 	{ ipmi_sunoem_main,  "sunoem",  "OEM Commands for Sun servers" },
108*c18ec02fSPetter Reinholdtsen 	{ ipmi_kontronoem_main, "kontronoem", "OEM Commands for Kontron devices"},
109*c18ec02fSPetter Reinholdtsen 	{ ipmi_picmg_main,   "picmg",   "Run a PICMG/ATCA extended cmd"},
110*c18ec02fSPetter Reinholdtsen 	{ ipmi_fwum_main,    "fwum",	"Update IPMC using Kontron OEM Firmware Update Manager" },
111*c18ec02fSPetter Reinholdtsen 	{ ipmi_firewall_main,"firewall","Configure Firmware Firewall" },
112*c18ec02fSPetter Reinholdtsen 	{ ipmi_delloem_main, "delloem", "OEM Commands for Dell systems" },
113*c18ec02fSPetter Reinholdtsen #ifdef HAVE_READLINE
114*c18ec02fSPetter Reinholdtsen 	{ ipmi_shell_main,   "shell",   "Launch interactive IPMI shell" },
115*c18ec02fSPetter Reinholdtsen #endif
116*c18ec02fSPetter Reinholdtsen 	{ ipmi_exec_main,    "exec",    "Run list of commands from file" },
117*c18ec02fSPetter Reinholdtsen 	{ ipmi_set_main,     "set",     "Set runtime variable for shell and exec" },
118*c18ec02fSPetter Reinholdtsen 	{ ipmi_echo_main,    "echo",    NULL }, /* for echoing lines to stdout in scripts */
119*c18ec02fSPetter Reinholdtsen 	{ ipmi_hpmfwupg_main,"hpm", "Update HPM components using PICMG HPM.1 file"},
120*c18ec02fSPetter Reinholdtsen 	{ ipmi_ekanalyzer_main,"ekanalyzer", "run FRU-Ekeying analyzer using FRU files"},
121*c18ec02fSPetter Reinholdtsen 	{ ipmi_ime_main,          "ime", "Update Intel Manageability Engine Firmware"},
122*c18ec02fSPetter Reinholdtsen 	{ NULL },
123*c18ec02fSPetter Reinholdtsen };
124*c18ec02fSPetter Reinholdtsen 
125*c18ec02fSPetter Reinholdtsen int
126*c18ec02fSPetter Reinholdtsen main(int argc, char ** argv)
127*c18ec02fSPetter Reinholdtsen {
128*c18ec02fSPetter Reinholdtsen 	int rc;
129*c18ec02fSPetter Reinholdtsen 
130*c18ec02fSPetter Reinholdtsen 	rc = ipmi_main(argc, argv, ipmitool_cmd_list, NULL);
131*c18ec02fSPetter Reinholdtsen 
132*c18ec02fSPetter Reinholdtsen 	if (rc < 0)
133*c18ec02fSPetter Reinholdtsen 		exit(EXIT_FAILURE);
134*c18ec02fSPetter Reinholdtsen 	else
135*c18ec02fSPetter Reinholdtsen 		exit(EXIT_SUCCESS);
136*c18ec02fSPetter Reinholdtsen }
137