Hi,
I'm planning to commit this patch unless someone objects. I'll add the
necessary make file changes and a man page update.
Thank you very much,
Carol
On Mon, 2009-03-02 at 13:10 +0100, Tim Bell wrote:
> The Peppercon BMCs as used in the Supermicro motherboards have an
> extended version string for the firmware version. This patch provides a
> peppercon OEM report which has the details of the fields of the
> firmware. This is needed to be able to find the different versions of
> code which all report the same version.release numbers to ipmitool mc info.
>
> For example,
>
> # ipmitool mc info
> Device ID : 34
> Device Revision : 1
> Firmware Revision : 1.59
>
> # ipmitool pepperconoem firmware show
> Firmware Version : 1.59.12
> Firmware Build Number : 5420
> Firmware ID : 34
> Firmware Tag : Jan-05-2008-10-15-NoWeb-NoVM
>
> I have submitted a patch for src/ipmitool.c and two new files (so it is
> consistent with other oem source)
>
> Index: src/ipmitool.c
> ===================================================================
> RCS file: /cvsroot/ipmitool/ipmitool/src/ipmitool.c,v
> retrieving revision 1.69
> diff -u -p -r1.69 ipmitool.c
> --- src/ipmitool.c 17 Sep 2008 19:58:57 -0000 1.69
> +++ src/ipmitool.c 2 Mar 2009 12:06:00 -0000
> @@ -56,6 +56,7 @@
> #include <ipmitool/ipmi_pef.h>
> #include <ipmitool/ipmi_oem.h>
> #include <ipmitool/ipmi_sunoem.h>
> +#include <ipmitool/ipmi_pepperconoem.h>
> #include <ipmitool/ipmi_fwum.h>
> #include <ipmitool/ipmi_picmg.h>
> #include <ipmitool/ipmi_kontronoem.h>
> @@ -101,6 +102,7 @@ struct ipmi_cmd ipmitool_cmd_list[] = {
> { ipmi_channel_main, "channel", "Configure Management Controller
> channels" },
> { ipmi_session_main, "session", "Print session information" },
> { ipmi_sunoem_main, "sunoem", "OEM Commands for Sun servers" },
> + { ipmi_pepperconoem_main, "pepperconoem", "OEM Commands for
> Peppercon AG BMCs" },
> { ipmi_kontronoem_main, "kontronoem", "OEM Commands for Kontron
> devices"},
> { ipmi_picmg_main, "picmg", "Run a PICMG/ATCA extended cmd"},
> { ipmi_fwum_main, "fwum", "Update IPMC using Kontron OEM
> Firmware Update Manager" },
>
> Two new files are required (I do not know how to generate these from patch)
>
> $ cat include/ipmitool/ipmi_pepperconoem.h
> #ifndef IPMI_PEPPERCONOEM_H
> #define IPMI_PEPPERCONOEM_H
>
> #if HAVE_CONFIG_H
> # include <config.h>
> #endif
> #include <ipmitool/ipmi.h>
> #include <ipmitool/ipmi_sdr.h>
>
> #define IPMI_NETFN_PEPPERCONOEM 0x3c
>
> #define IPMI_PEPPERCONOEM_FIRMWARE_SHOW 0x20
>
> int ipmi_pepperconoem_main(struct ipmi_intf *, int, char **);
>
> #endif /*IPMI_PEPPERCONOEM_H*/
>
> and
>
> cat lib/ipmi_peppercon.c
> #include <stdlib.h>
> #include <stdio.h>
> #include <string.h>
> #include <sys/types.h>
> #include <sys/socket.h>
> #include <netinet/in.h>
> #include <arpa/inet.h>
> #include <errno.h>
> #include <unistd.h>
> #include <signal.h>
> #include <ctype.h>
>
> #include <ipmitool/ipmi.h>
> #include <ipmitool/ipmi_intf.h>
> #include <ipmitool/helper.h>
> #include <ipmitool/log.h>
> #include <ipmitool/ipmi_sel.h>
> #include <ipmitool/ipmi_sdr.h>
> #include <ipmitool/ipmi_strings.h>
> #include <ipmitool/ipmi_channel.h>
> #include <ipmitool/ipmi_pepperconoem.h>
> #include <ipmitool/ipmi_raw.h>
>
> static void
> ipmi_pepperconoem_usage(void)
> {
> lprintf(LOG_NOTICE, "usage: pepperconoem <command> [option...]");
> lprintf(LOG_NOTICE, "");
> lprintf(LOG_NOTICE, " firmware show");
> lprintf(LOG_NOTICE, " Show extended version information for
> firmware level");
> lprintf(LOG_NOTICE, "");
> }
>
> /*
> * IPMI Request Data:
> *
> * None
> *
> * Returns
> *
> * (Byte 0-3) Firmware Version
> * (Byte 4-7) Firmware Minor Version
> * (Byte 8-11) Firmware Sub Version
> * (Byte 12-15) Firmware Build Number
> * (Byte 16) Hardware ID
> * (Byte 17...) Tag (null terminated)
> *
> */
>
> static uint32_t get_firmware_uint(unsigned char *data) {
> uint32_t firmware_uint=0;
> firmware_uint+=*data++;
> firmware_uint+=(*data++)<<8;
> firmware_uint+=(*data++)<<16;
> firmware_uint+=(*data++)<<24;
> return firmware_uint;
> }
>
> static int
> ipmi_pepperconoem_firmware_show(struct ipmi_intf * intf)
> {
> struct ipmi_rs * rsp;
> struct ipmi_rq req;
> int i;
>
> req.msg.netfn = IPMI_NETFN_PEPPERCONOEM;
> req.msg.cmd = IPMI_PEPPERCONOEM_FIRMWARE_SHOW;
> req.msg.data = NULL;
> req.msg.data_len = 0;
>
> rsp = intf->sendrecv(intf, &req);
> if (rsp == NULL) {
> lprintf(LOG_ERR, "Peppercon OEM show firmware command
> failed");
> return -1;
> }
> else if (rsp->ccode > 0) {
> lprintf(LOG_ERR, "Peppercon OEM show firmware command
> failed: %s",
> val2str(rsp->ccode, completion_code_vals));
> return -1;
> }
>
> if (verbose == LOG_DEBUG){
> /* print the raw response buffer */
> for (i=0; i<rsp->data_len; i++) {
> if (((i%16) == 0) && (i != 0))
> printf("\n");
> printf(" %2.2x", rsp->data[i]);
> }
> printf("\n");
> }
>
> uint32_t firmware_major_version=get_firmware_uint(&rsp->data[0]);
> uint32_t firmware_minor_version=get_firmware_uint(&rsp->data[4]);
> uint32_t firmware_sub_version =get_firmware_uint(&rsp->data[8]);
> uint32_t firmware_build_number =get_firmware_uint(&rsp->data[12]);
> uint8_t firmware_id=rsp->data[16];
> char firmware_tag[129];
> char *rsp_data_tag=&rsp->data[17];
>
> /* 0x0 terminated string with the tag */
> for (i=0;rsp_data_tag[i]!=0x0 && i<sizeof(firmware_tag)-1;++i) {
> firmware_tag[i]=rsp_data_tag[i];
> }
> firmware_tag[i]=0;
>
> printf("Firmware Version : %i.%i.%i\n",
>
> firmware_major_version,firmware_minor_version,firmware_sub_version);
> printf("Firmware Build Number : %i\n",
> firmware_build_number);
> printf("Firmware ID : %i\n",
> firmware_id);
> printf("Firmware Tag : %s\n",
> firmware_tag);
>
> return 0;
> }
>
> int
> ipmi_pepperconoem_main(struct ipmi_intf * intf, int argc, char ** argv)
> {
> int rc = 0;
>
> if (argc == 0 || strncmp(argv[0], "help", 4) == 0) {
> ipmi_pepperconoem_usage();
> return 0;
> }
>
> if (strncmp(argv[0], "firmware", 8) == 0) {
> if (argc < 2) {
> ipmi_pepperconoem_usage();
> return -1;
> }
> else if (strncmp(argv[1], "show", 4) == 0) {
> rc = ipmi_pepperconoem_firmware_show(intf);
> }
> else {
> ipmi_pepperconoem_usage();
> return -1;
> }
> }
> return rc;
> }
>
>
>
> ------------------------------------------------------------------------------
> Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
> -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
> -Strategies to boost innovation and cut costs with open source participation
> -Receive a $600 discount off the registration fee with the source code: SFAD
> http://p.sf.net/sfu/XcvMzF8H
> _______________________________________________
> Ipmitool-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/ipmitool-devel
------------------------------------------------------------------------------
OpenSolaris 2009.06 is a cutting edge operating system for enterprises
looking to deploy the next generation of Solaris that includes the latest
innovations from Sun and the OpenSource community. Download a copy and
enjoy capabilities such as Networking, Storage and Virtualization.
Go to: http://p.sf.net/sfu/opensolaris-get
_______________________________________________
Ipmitool-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ipmitool-devel