Added the readraw and writeraw subcommands. These will allow the user

to save and view binary versions of the SEL.  The readraw subcommand is
being added to aid the Newisys troubleshooting facility, and the writeraw
subcommand is being added for parity.
This commit is contained in:
Jeremy Ellington 2005-05-23 18:31:53 +00:00
parent 8e77031a97
commit b42902f880

View File

@ -1,4 +1,4 @@
/*
/* -*-mode: C; indent-tabs-mode: t; -*-
* Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -702,7 +702,8 @@ ipmi_sel_print_extended_entry_verbose(struct ipmi_intf * intf, struct sel_event_
}
static int
__ipmi_sel_savelist_entries(struct ipmi_intf * intf, int count, const char * savefile)
__ipmi_sel_savelist_entries(struct ipmi_intf * intf, int count, const char * savefile,
int binary)
{
struct ipmi_rs * rsp;
struct ipmi_rq req;
@ -805,7 +806,10 @@ __ipmi_sel_savelist_entries(struct ipmi_intf * intf, int count, const char * sav
ipmi_sel_print_std_entry(intf, &evt);
if (fp != NULL) {
ipmi_sel_print_event_file(intf, &evt, fp);
if (binary)
fwrite(&evt, 1, 16, fp);
else
ipmi_sel_print_event_file(intf, &evt, fp);
}
if (++n == count) {
@ -822,16 +826,69 @@ __ipmi_sel_savelist_entries(struct ipmi_intf * intf, int count, const char * sav
static int
ipmi_sel_list_entries(struct ipmi_intf * intf, int count)
{
return __ipmi_sel_savelist_entries(intf, count, NULL);
return __ipmi_sel_savelist_entries(intf, count, NULL, 0);
}
static int
ipmi_sel_save_entries(struct ipmi_intf * intf, int count, const char * savefile)
{
return __ipmi_sel_savelist_entries(intf, count, savefile);
return __ipmi_sel_savelist_entries(intf, count, savefile, 0);
}
static int
ipmi_sel_writeraw(struct ipmi_intf * intf, const char * savefile)
{
return __ipmi_sel_savelist_entries(intf, 0, savefile, 1);
}
static int
ipmi_sel_readraw(struct ipmi_intf * intf, const char * inputfile)
{
struct sel_event_record evt;
int ret = 0;
FILE* fp = 0;
printf("inside ipmi_sel_readraw\n");
fp = ipmi_open_file(inputfile, 0);
if (fp)
{
size_t bytesRead;
do {
if ((bytesRead = fread(&evt, 1, 16, fp)) == 16)
{
if (verbose)
ipmi_sel_print_std_entry_verbose(intf, &evt);
else
ipmi_sel_print_std_entry(intf, &evt);
}
else
{
if (bytesRead != 0)
{
lprintf(LOG_ERR, "ipmitool: incomplete record found in file.");
ret = -1;
}
break;
}
} while (1);
fclose(fp);
}
else
{
lprintf(LOG_ERR, "ipmitool: could not open input file.");
ret = -1;
}
return ret;
}
static uint16_t
ipmi_sel_reserve(struct ipmi_intf * intf)
{
@ -1157,7 +1214,8 @@ int ipmi_sel_main(struct ipmi_intf * intf, int argc, char ** argv)
if (argc == 0)
rc = ipmi_sel_get_info(intf);
else if (strncmp(argv[0], "help", 4) == 0)
lprintf(LOG_ERR, "SEL Commands: info clear delete list elist get time save");
lprintf(LOG_ERR, "SEL Commands: "
"info clear delete list elist get time save readraw writeraw");
else if (strncmp(argv[0], "info", 4) == 0)
rc = ipmi_sel_get_info(intf);
else if (strncmp(argv[0], "save", 4) == 0) {
@ -1167,6 +1225,20 @@ int ipmi_sel_main(struct ipmi_intf * intf, int argc, char ** argv)
}
rc = ipmi_sel_save_entries(intf, 0, argv[1]);
}
else if (strncmp(argv[0], "writeraw", 8) == 0) {
if (argc < 2) {
lprintf(LOG_NOTICE, "usage: sel writeraw <filename>");
return 0;
}
rc = ipmi_sel_writeraw(intf, argv[1]);
}
else if (strncmp(argv[0], "readraw", 7) == 0) {
if (argc < 2) {
lprintf(LOG_NOTICE, "usage: sel readraw <filename>");
return 0;
}
rc = ipmi_sel_readraw(intf, argv[1]);
}
else if (strncmp(argv[0], "list", 4) == 0 ||
strncmp(argv[0], "elist", 5) == 0) {
/*