Main Page | Class List | Directories | File List | Class Members | File Members

out_fru.c File Reference

#include <errno.h>
#include <string.h>
#include <values.h>
#include <OpenIPMI/ipmi_bits.h>
#include <OpenIPMI/ipmi_fru.h>
#include <OpenIPMI/ipmi_cmdlang.h>
#include <OpenIPMI/internal/ipmi_malloc.h>

Go to the source code of this file.

Functions

static int traverse_fru_node_tree (ipmi_cmd_info_t *cmd_info, ipmi_fru_node_t *node, int length)
void ipmi_cmdlang_dump_fru_info (ipmi_cmd_info_t *cmd_info, ipmi_fru_t *fru)


Function Documentation

void ipmi_cmdlang_dump_fru_info ipmi_cmd_info_t cmd_info,
ipmi_fru_t fru
 

Definition at line 144 of file out_fru.c.

References cmdlang, ipmi_cmdlang_s::err, ipmi_cmdlang_s::errstr, ipmi_cmdinfo_get_cmdlang(), ipmi_cmdlang_down(), ipmi_cmdlang_out(), ipmi_cmdlang_up(), ipmi_fru_get_name(), ipmi_fru_get_root_node(), IPMI_FRU_NAME_LEN, ipmi_cmdlang_s::location, and traverse_fru_node_tree().

00145 {
00146     ipmi_cmdlang_t            *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info);
00147     int                       rv;
00148     char                      fru_name[IPMI_FRU_NAME_LEN];
00149     ipmi_fru_node_t           *node;
00150     const char                *type;
00151 
00152     ipmi_cmdlang_out(cmd_info, "FRU", NULL);
00153     ipmi_cmdlang_down(cmd_info);
00154     ipmi_fru_get_name(fru, fru_name, sizeof(fru_name));
00155     ipmi_cmdlang_out(cmd_info, "Name", fru_name);
00156 
00157     rv = ipmi_fru_get_root_node(fru, &type, &node);
00158     if (!rv) {
00159         ipmi_cmdlang_out(cmd_info, "Type", type);
00160         rv = traverse_fru_node_tree(cmd_info, node, MAXINT);
00161         if (rv)
00162             cmdlang->errstr = "Error traversing FRU node tree";
00163     } else {
00164         cmdlang->errstr = "Error getting root node of FRU";
00165     }
00166 
00167     ipmi_cmdlang_up(cmd_info);
00168     if (rv) {
00169         cmdlang->err = rv;
00170         cmdlang->location = "cmd_domain.c(dump_fru_info)";
00171     }
00172 }

static int traverse_fru_node_tree ipmi_cmd_info_t cmd_info,
ipmi_fru_node_t node,
int  length
[static]
 

Definition at line 45 of file out_fru.c.

References i, ipmi_cmdlang_down(), ipmi_cmdlang_out(), ipmi_cmdlang_out_binary(), ipmi_cmdlang_out_bool(), ipmi_cmdlang_out_double(), ipmi_cmdlang_out_int(), ipmi_cmdlang_out_long(), ipmi_cmdlang_out_unicode(), ipmi_cmdlang_up(), IPMI_FRU_DATA_ASCII, IPMI_FRU_DATA_BINARY, IPMI_FRU_DATA_BOOLEAN, IPMI_FRU_DATA_FLOAT, ipmi_fru_data_free(), IPMI_FRU_DATA_INT, IPMI_FRU_DATA_SUB_NODE, IPMI_FRU_DATA_TIME, IPMI_FRU_DATA_UNICODE, ipmi_fru_node_get_field(), ipmi_fru_put_node(), and name.

Referenced by fru_change(), ipmi_cmdlang_dump_fru_info(), and traverse_fru_node_tree().

00048 {
00049     const char                *name;
00050     unsigned int              i;
00051     enum ipmi_fru_data_type_e dtype;
00052     int                       intval, rv;
00053     time_t                    time;
00054     double                    floatval;
00055     char                      *data;
00056     unsigned int              data_len;
00057     ipmi_fru_node_t           *sub_node;
00058     
00059     for (i=0; i<length; i++) {
00060         data = NULL;
00061         rv = ipmi_fru_node_get_field(node, i, &name, &dtype, &intval, &time,
00062                                      &floatval, &data, &data_len, &sub_node);
00063         if (rv == EINVAL)
00064             break;
00065         else if (rv)
00066             continue;
00067 
00068         if (name) {
00069             ipmi_cmdlang_out(cmd_info, "Field", NULL);
00070             ipmi_cmdlang_down(cmd_info);
00071             ipmi_cmdlang_out(cmd_info, "Name", name);
00072         } else {
00073             ipmi_cmdlang_out(cmd_info, "Element", NULL);
00074             ipmi_cmdlang_down(cmd_info);
00075             ipmi_cmdlang_out_int(cmd_info, "Index", i);
00076         }
00077 
00078         switch (dtype) {
00079         case IPMI_FRU_DATA_INT:
00080             ipmi_cmdlang_out(cmd_info, "Type", "integer");
00081             ipmi_cmdlang_out_int(cmd_info, "Data", intval);
00082             break;
00083 
00084         case IPMI_FRU_DATA_TIME:
00085             ipmi_cmdlang_out(cmd_info, "Type", "integer");
00086             ipmi_cmdlang_out_long(cmd_info, "Data", (long) time);
00087             break;
00088 
00089         case IPMI_FRU_DATA_BINARY:
00090             ipmi_cmdlang_out(cmd_info, "Type", "binary");
00091             ipmi_cmdlang_out_binary(cmd_info, "Data", data, data_len);
00092             break;
00093 
00094         case IPMI_FRU_DATA_UNICODE:
00095             ipmi_cmdlang_out(cmd_info, "Type", "unicode");
00096             ipmi_cmdlang_out_unicode(cmd_info, "Data", data, data_len);
00097             break;
00098 
00099         case IPMI_FRU_DATA_ASCII:
00100             ipmi_cmdlang_out(cmd_info, "Type", "ascii");
00101             ipmi_cmdlang_out(cmd_info, "Data", data);
00102             break;
00103 
00104         case IPMI_FRU_DATA_BOOLEAN:
00105             ipmi_cmdlang_out(cmd_info, "Type", "boolean");
00106             ipmi_cmdlang_out_bool(cmd_info, "Data", intval);
00107             break;
00108 
00109         case IPMI_FRU_DATA_FLOAT:
00110             ipmi_cmdlang_out(cmd_info, "Type", "float");
00111             ipmi_cmdlang_out_double(cmd_info, "Data", floatval);
00112             break;
00113 
00114         case IPMI_FRU_DATA_SUB_NODE:
00115             if (intval == -1)
00116                 ipmi_cmdlang_out(cmd_info, "Record", NULL);
00117             else
00118                 ipmi_cmdlang_out(cmd_info, "Array", NULL);
00119             ipmi_cmdlang_down(cmd_info);
00120             if (intval != -1)
00121                 ipmi_cmdlang_out_int(cmd_info, "Element Count", intval);
00122             else
00123                 intval = MAXINT;
00124             traverse_fru_node_tree(cmd_info, sub_node, MAXINT);
00125             ipmi_cmdlang_up(cmd_info);
00126             break;
00127             
00128         default:
00129             ipmi_cmdlang_out(cmd_info, "Type", "unknown");
00130             break;
00131         }
00132 
00133         ipmi_cmdlang_up(cmd_info);
00134         if (data)
00135             ipmi_fru_data_free(data);
00136     }
00137     
00138     ipmi_fru_put_node(node);
00139 
00140     return 0;
00141 }


© sourcejam.com 2005-2008