#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) |
|
||||||||||||
|
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 }
|
|
||||||||||||||||
|
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 }
|