00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef __IPMI_CMDLANG_H
00035 #define __IPMI_CMDLANG_H
00036
00037 #include <OpenIPMI/selector.h>
00038
00039 #ifdef __cplusplus
00040 extern "C" {
00041 #endif
00042
00043
00044 typedef struct ipmi_cmd_info_s ipmi_cmd_info_t;
00045
00046
00047
00048
00049
00050
00051 typedef struct ipmi_cmdlang_s ipmi_cmdlang_t;
00052
00053
00054
00055 typedef void (*cmd_out_cb)(ipmi_cmdlang_t *info,
00056 const char *name,
00057 const char *value);
00058 typedef void (*cmd_out_b_cb)(ipmi_cmdlang_t *info,
00059 const char *name,
00060 const char *value,
00061 unsigned int len);
00062
00063
00064 typedef void (*cmd_info_cb)(ipmi_cmdlang_t *info);
00065
00066
00067
00068 struct ipmi_cmdlang_s
00069 {
00070 cmd_out_cb out;
00071 cmd_info_cb down;
00072
00073 cmd_info_cb up;
00074
00075 cmd_info_cb done;
00076
00077
00078 cmd_out_b_cb out_binary;
00079 cmd_out_b_cb out_unicode;
00080
00081
00082
00083
00084 os_handler_t *os_hnd;
00085
00086
00087 int help;
00088
00089
00090
00091
00092 int err;
00093
00094
00095
00096
00097
00098 char *errstr;
00099 int errstr_dynalloc;
00100
00101
00102
00103
00104
00105 char *objstr;
00106 int objstr_len;
00107
00108
00109 char *location;
00110
00111
00112 void *user_data;
00113 };
00114
00115
00116
00117 void ipmi_cmdlang_handle(ipmi_cmdlang_t *cmdlang, char *str);
00118
00119
00120
00121 void ipmi_cmdlang_set_evinfo(int evinfo);
00122 int ipmi_cmdlang_get_evinfo(void);
00123
00124
00125
00126
00127 typedef struct ipmi_cmdlang_cmd_s ipmi_cmdlang_cmd_t;
00128
00129 typedef void (*ipmi_cmdlang_handler_cb)(ipmi_cmd_info_t *cmd_info);
00130 typedef void (*ipmi_help_finisher_cb)(ipmi_cmdlang_t *cmdlang);
00131
00132
00133
00134
00135
00136
00137
00138
00139 int ipmi_cmdlang_reg_cmd(ipmi_cmdlang_cmd_t *parent,
00140 char *name,
00141 char *help,
00142 ipmi_cmdlang_handler_cb handler,
00143 void *handler_data,
00144 ipmi_help_finisher_cb help_finish,
00145 ipmi_cmdlang_cmd_t **rv);
00146
00147
00148 typedef struct ipmi_cmdlang_init_s
00149 {
00150 char *name;
00151 ipmi_cmdlang_cmd_t **parent;
00152 char *help;
00153 ipmi_cmdlang_handler_cb handler;
00154 void *cb_data;
00155 ipmi_cmdlang_cmd_t **new_val;
00156 ipmi_help_finisher_cb help_finish;
00157 } ipmi_cmdlang_init_t;
00158 int ipmi_cmdlang_reg_table(ipmi_cmdlang_init_t *table, int len);
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181 void ipmi_cmdlang_domain_handler(ipmi_cmd_info_t *cmd_info);
00182
00183
00184 void ipmi_cmdlang_entity_handler(ipmi_cmd_info_t *cmd_info);
00185
00186
00187 void ipmi_cmdlang_sensor_handler(ipmi_cmd_info_t *cmd_info);
00188
00189
00190 void ipmi_cmdlang_control_handler(ipmi_cmd_info_t *cmd_info);
00191
00192
00193 void ipmi_cmdlang_mc_handler(ipmi_cmd_info_t *cmd_info);
00194
00195
00196 void ipmi_cmdlang_connection_handler(ipmi_cmd_info_t *cmd_info);
00197
00198
00199 void ipmi_cmdlang_pet_handler(ipmi_cmd_info_t *cmd_info);
00200
00201
00202 void ipmi_cmdlang_lanparm_handler(ipmi_cmd_info_t *cmd_info);
00203
00204
00205 void ipmi_cmdlang_solparm_handler(ipmi_cmd_info_t *cmd_info);
00206
00207
00208 void ipmi_cmdlang_fru_handler(ipmi_cmd_info_t *cmd_info);
00209
00210
00211 void ipmi_cmdlang_pef_handler(ipmi_cmd_info_t *cmd_info);
00212
00213
00214
00215
00216 void ipmi_cmdlang_out(ipmi_cmd_info_t *info,
00217 const char *name,
00218 const char *value);
00219 void ipmi_cmdlang_out_int(ipmi_cmd_info_t *info,
00220 const char *name,
00221 int value);
00222 void ipmi_cmdlang_out_double(ipmi_cmd_info_t *info,
00223 const char *name,
00224 double value);
00225 void ipmi_cmdlang_out_hex(ipmi_cmd_info_t *info,
00226 const char *name,
00227 int value);
00228 void ipmi_cmdlang_out_long(ipmi_cmd_info_t *info,
00229 const char *name,
00230 long value);
00231 void ipmi_cmdlang_out_binary(ipmi_cmd_info_t *info,
00232 const char *name,
00233 const char *value,
00234 unsigned int len);
00235 void ipmi_cmdlang_out_unicode(ipmi_cmd_info_t *info,
00236 const char *name,
00237 const char *value,
00238 unsigned int len);
00239 void ipmi_cmdlang_out_type(ipmi_cmd_info_t *info,
00240 char *name,
00241 enum ipmi_str_type_e type,
00242 const char *value,
00243 unsigned int len);
00244 void ipmi_cmdlang_out_ip(ipmi_cmd_info_t *info,
00245 const char *name,
00246 struct in_addr *ip_addr);
00247 void ipmi_cmdlang_out_mac(ipmi_cmd_info_t *info,
00248 const char *name,
00249 unsigned char mac_addr[6]);
00250 void ipmi_cmdlang_out_bool(ipmi_cmd_info_t *info,
00251 const char *name,
00252 int value);
00253 void ipmi_cmdlang_out_time(ipmi_cmd_info_t *info,
00254 const char *name,
00255 ipmi_time_t value);
00256 void ipmi_cmdlang_out_timeout(ipmi_cmd_info_t *info,
00257 const char *name,
00258 ipmi_timeout_t value);
00259
00260
00261 void ipmi_cmdlang_event_out(ipmi_event_t *event,
00262 ipmi_cmd_info_t *cmd_info);
00263
00264
00265
00266
00267
00268 void ipmi_cmdlang_down(ipmi_cmd_info_t *info);
00269 void ipmi_cmdlang_up(ipmi_cmd_info_t *info);
00270
00271
00272
00273
00274 void ipmi_cmdlang_cmd_info_get(ipmi_cmd_info_t *info);
00275 void ipmi_cmdlang_cmd_info_put(ipmi_cmd_info_t *info);
00276
00277
00278 void ipmi_cmdlang_get_int(char *str, int *val, ipmi_cmd_info_t *info);
00279 void ipmi_cmdlang_get_double(char *str, double *val, ipmi_cmd_info_t *info);
00280 void ipmi_cmdlang_get_uchar(char *str, unsigned char *val,
00281 ipmi_cmd_info_t *info);
00282 void ipmi_cmdlang_get_user(char *str, int *val, ipmi_cmd_info_t *info);
00283 void ipmi_cmdlang_get_time(char *str, ipmi_time_t *val, ipmi_cmd_info_t *info);
00284 void ipmi_cmdlang_get_timeout(char *str, ipmi_timeout_t *val,
00285 ipmi_cmd_info_t *info);
00286 void ipmi_cmdlang_get_bool(char *str, int *val, ipmi_cmd_info_t *info);
00287 void ipmi_cmdlang_get_ip(char *str, struct in_addr *val,
00288 ipmi_cmd_info_t *info);
00289 void ipmi_cmdlang_get_mac(char *str, unsigned char val[6],
00290 ipmi_cmd_info_t *info);
00291 void ipmi_cmdlang_get_color(char *str, int *val, ipmi_cmd_info_t *info);
00292 void ipmi_cmdlang_get_threshold_ev(char *str,
00293 enum ipmi_thresh_e *rthresh,
00294 enum ipmi_event_value_dir_e *rvalue_dir,
00295 enum ipmi_event_dir_e *rdir,
00296 ipmi_cmd_info_t *info);
00297 void ipmi_cmdlang_get_discrete_ev(char *str,
00298 int *roffset,
00299 enum ipmi_event_dir_e *rdir,
00300 ipmi_cmd_info_t *info);
00301 void ipmi_cmdlang_get_threshold(char *str,
00302 enum ipmi_thresh_e *rthresh,
00303 ipmi_cmd_info_t *info);
00304
00305
00306
00307
00308 int ipmi_cmdlang_init(os_handler_t *os_hnd);
00309 void ipmi_cmdlang_cleanup(void);
00310
00311
00312
00313
00314
00315
00316
00317 ipmi_cmd_info_t *ipmi_cmdlang_alloc_event_info(void);
00318
00319 typedef struct ipmi_cmdlang_event_s ipmi_cmdlang_event_t;
00320
00321
00322 void ipmi_cmdlang_event_restart(ipmi_cmdlang_event_t *event);
00323
00324 enum ipmi_cmdlang_out_types {
00325 IPMI_CMDLANG_STRING,
00326 IPMI_CMDLANG_BINARY,
00327 IPMI_CMDLANG_UNICODE
00328 };
00329
00330
00331 int ipmi_cmdlang_event_next_field(ipmi_cmdlang_event_t *event,
00332 unsigned int *level,
00333 enum ipmi_cmdlang_out_types *type,
00334 char **name,
00335 unsigned int *len,
00336 char **value);
00337
00338
00339
00340
00341
00342
00343
00344 void ipmi_cmdlang_global_err(char *objstr,
00345 char *location,
00346 char *errstr,
00347 int errval);
00348
00349
00350 void ipmi_cmdlang_report_event(ipmi_cmdlang_event_t *event);
00351
00352
00353 void ipmi_cmdlang_lock(ipmi_cmd_info_t *info);
00354 void ipmi_cmdlang_unlock(ipmi_cmd_info_t *info);
00355
00356 int ipmi_cmdlang_get_argc(ipmi_cmd_info_t *info);
00357 char **ipmi_cmdlang_get_argv(ipmi_cmd_info_t *info);
00358 int ipmi_cmdlang_get_curr_arg(ipmi_cmd_info_t *info);
00359 ipmi_cmdlang_t *ipmi_cmdinfo_get_cmdlang(ipmi_cmd_info_t *info);
00360
00361 #ifdef __cplusplus
00362 }
00363 #endif
00364
00365 #endif