#include <errno.h>#include <string.h>#include <ctype.h>#include <stdlib.h>#include <stdio.h>#include <OpenIPMI/ipmiif.h>#include <OpenIPMI/ipmi_cmdlang.h>#include <OpenIPMI/internal/ipmi_malloc.h>Go to the source code of this file.
Defines | |
| #define | CMDS_SENSOR_LEN (sizeof(cmds_sensor)/sizeof(ipmi_cmdlang_init_t)) |
Enumerations | |
| enum | ev_en_kind { ev_en_set, ev_en_enable, ev_en_disable } |
Functions | |
| static void | sensor_list_handler (ipmi_entity_t *entity, ipmi_sensor_t *sensor, void *cb_data) |
| static void | sensor_list (ipmi_entity_t *entity, void *cb_data) |
| static void | sensor_dump (ipmi_sensor_t *sensor, ipmi_cmd_info_t *cmd_info) |
| static void | sensor_info (ipmi_sensor_t *sensor, void *cb_data) |
| static void | read_sensor (ipmi_sensor_t *sensor, int err, enum ipmi_value_present_e value_present, unsigned int raw_val, double val, ipmi_states_t *states, void *cb_data) |
| static void | read_sensor_states (ipmi_sensor_t *sensor, int err, ipmi_states_t *states, void *cb_data) |
| static void | sensor_get (ipmi_sensor_t *sensor, void *cb_data) |
| static void | sensor_rearm_done (ipmi_sensor_t *sensor, int err, void *cb_data) |
| static void | sensor_rearm (ipmi_sensor_t *sensor, void *cb_data) |
| static void | sensor_get_thresholds_done (ipmi_sensor_t *sensor, int err, ipmi_thresholds_t *th, void *cb_data) |
| static void | sensor_get_thresholds (ipmi_sensor_t *sensor, void *cb_data) |
| static void | sensor_set_thresholds_done (ipmi_sensor_t *sensor, int err, void *cb_data) |
| static void | sensor_set_thresholds (ipmi_sensor_t *sensor, void *cb_data) |
| static void | sensor_get_hysteresis_done (ipmi_sensor_t *sensor, int err, unsigned int positive_hysteresis, unsigned int negative_hysteresis, void *cb_data) |
| static void | sensor_get_hysteresis (ipmi_sensor_t *sensor, void *cb_data) |
| static void | sensor_set_hysteresis_done (ipmi_sensor_t *sensor, int err, void *cb_data) |
| static void | sensor_set_hysteresis (ipmi_sensor_t *sensor, void *cb_data) |
| static void | sensor_get_event_enables_done (ipmi_sensor_t *sensor, int err, ipmi_event_state_t *states, void *cb_data) |
| static void | sensor_get_event_enables (ipmi_sensor_t *sensor, void *cb_data) |
| static void | sensor_set_event_enables_done (ipmi_sensor_t *sensor, int err, void *cb_data) |
| static void | mod_event_enables (ipmi_sensor_t *sensor, void *cb_data, enum ev_en_kind kind) |
| static void | sensor_set_event_enables (ipmi_sensor_t *sensor, void *cb_data) |
| static void | sensor_enable_events (ipmi_sensor_t *sensor, void *cb_data) |
| static void | sensor_disable_events (ipmi_sensor_t *sensor, void *cb_data) |
| static int | sensor_discrete_event_handler (ipmi_sensor_t *sensor, enum ipmi_event_dir_e dir, int offset, int severity, int prev_severity, void *cb_data, ipmi_event_t *event) |
| static int | sensor_threshold_event_handler (ipmi_sensor_t *sensor, enum ipmi_event_dir_e dir, enum ipmi_thresh_e threshold, enum ipmi_event_value_dir_e high_low, enum ipmi_value_present_e value_present, unsigned int raw_value, double value, void *cb_data, ipmi_event_t *event) |
| void | ipmi_cmdlang_sensor_change (enum ipmi_update_e op, ipmi_entity_t *entity, ipmi_sensor_t *sensor, void *cb_data) |
| int | ipmi_cmdlang_sensor_init (os_handler_t *os_hnd) |
Variables | |
| static ipmi_cmdlang_cmd_t * | sensor_cmds |
| static ipmi_cmdlang_init_t | cmds_sensor [] |
|
|
Definition at line 1462 of file cmd_sensor.c. Referenced by ipmi_cmdlang_sensor_init(). |
|
|
Definition at line 1070 of file cmd_sensor.c. 01070 { ev_en_set, ev_en_enable, ev_en_disable };
|
|
||||||||||||||||||||
|
Definition at line 1316 of file cmd_sensor.c. References IPMI_ADDED, IPMI_CHANGED, ipmi_cmdlang_alloc_event_info(), ipmi_cmdlang_cmd_info_put(), ipmi_cmdlang_get_evinfo(), ipmi_cmdlang_global_err(), ipmi_cmdlang_out(), IPMI_DELETED, IPMI_EVENT_READING_TYPE_THRESHOLD, ipmi_sensor_add_discrete_event_handler(), ipmi_sensor_add_threshold_event_handler(), ipmi_sensor_get_event_reading_type(), ipmi_sensor_get_name(), IPMI_SENSOR_NAME_LEN, sensor_discrete_event_handler(), sensor_dump(), and sensor_threshold_event_handler(). Referenced by ipmi_cmdlang_entity_change(). 01320 { 01321 char *errstr; 01322 int rv; 01323 ipmi_cmd_info_t *evi; 01324 char sensor_name[IPMI_SENSOR_NAME_LEN]; 01325 01326 ipmi_sensor_get_name(sensor, sensor_name, sizeof(sensor_name)); 01327 01328 evi = ipmi_cmdlang_alloc_event_info(); 01329 if (!evi) { 01330 rv = ENOMEM; 01331 errstr = "Out of memory"; 01332 goto out_err; 01333 } 01334 01335 ipmi_cmdlang_out(evi, "Object Type", "Sensor"); 01336 ipmi_cmdlang_out(evi, "Name", sensor_name); 01337 01338 switch (op) { 01339 case IPMI_ADDED: 01340 ipmi_cmdlang_out(evi, "Operation", "Add"); 01341 if (ipmi_cmdlang_get_evinfo()) 01342 sensor_dump(sensor, evi); 01343 01344 if (ipmi_sensor_get_event_reading_type(sensor) 01345 == IPMI_EVENT_READING_TYPE_THRESHOLD) 01346 { 01347 rv = ipmi_sensor_add_threshold_event_handler 01348 (sensor, 01349 sensor_threshold_event_handler, 01350 NULL); 01351 } else { 01352 rv = ipmi_sensor_add_discrete_event_handler 01353 (sensor, 01354 sensor_discrete_event_handler, 01355 NULL); 01356 } 01357 if (rv) { 01358 ipmi_cmdlang_global_err(sensor_name, 01359 "cmd_sensor.c(ipmi_cmdlang_sensor_change)", 01360 "Unable to set event handler for sensor", 01361 rv); 01362 } 01363 break; 01364 01365 case IPMI_DELETED: 01366 ipmi_cmdlang_out(evi, "Operation", "Delete"); 01367 break; 01368 01369 case IPMI_CHANGED: 01370 ipmi_cmdlang_out(evi, "Operation", "Change"); 01371 if (ipmi_cmdlang_get_evinfo()) 01372 sensor_dump(sensor, evi); 01373 break; 01374 } 01375 01376 ipmi_cmdlang_cmd_info_put(evi); 01377 return; 01378 01379 out_err: 01380 ipmi_cmdlang_global_err(sensor_name, 01381 "cmd_sensor.c(ipmi_cmdlang_sensor_change)", 01382 errstr, rv); 01383 if (evi) 01384 ipmi_cmdlang_cmd_info_put(evi); 01385 }
|
|
|
Definition at line 1465 of file cmd_sensor.c. References CMDS_SENSOR_LEN, and ipmi_cmdlang_reg_table(). Referenced by ipmi_cmdlang_init(). 01466 { 01467 return ipmi_cmdlang_reg_table(cmds_sensor, CMDS_SENSOR_LEN); 01468 }
|
|
||||||||||||||||
|
Definition at line 1073 of file cmd_sensor.c. References cmdlang, ipmi_cmdlang_s::err, ipmi_cmdlang_s::errstr, ev_en_disable, ev_en_enable, ev_en_set, ipmi_cmdinfo_get_cmdlang(), ipmi_cmdlang_cmd_info_get(), ipmi_cmdlang_cmd_info_put(), ipmi_cmdlang_get_argc(), ipmi_cmdlang_get_argv(), ipmi_cmdlang_get_curr_arg(), ipmi_cmdlang_get_discrete_ev(), ipmi_cmdlang_get_threshold_ev(), ipmi_discrete_event_set(), IPMI_EVENT_READING_TYPE_THRESHOLD, ipmi_event_state_init(), ipmi_event_state_set_events_enabled(), ipmi_event_state_set_scanning_enabled(), ipmi_mem_alloc(), ipmi_mem_free(), ipmi_sensor_disable_events(), ipmi_sensor_enable_events(), ipmi_sensor_get_event_reading_type(), ipmi_sensor_get_name(), ipmi_sensor_set_event_enables(), ipmi_states_size(), ipmi_threshold_event_set(), ipmi_cmdlang_s::location, ipmi_cmdlang_s::objstr, ipmi_cmdlang_s::objstr_len, s, and sensor_set_event_enables_done(). Referenced by sensor_disable_events(), sensor_enable_events(), and sensor_set_event_enables(). 01074 { 01075 ipmi_cmd_info_t *cmd_info = cb_data; 01076 ipmi_cmdlang_t *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info); 01077 int rv; 01078 int curr_arg = ipmi_cmdlang_get_curr_arg(cmd_info); 01079 int argc = ipmi_cmdlang_get_argc(cmd_info); 01080 char **argv = ipmi_cmdlang_get_argv(cmd_info); 01081 ipmi_event_state_t *s = NULL; 01082 01083 if ((argc - curr_arg) < 2) { 01084 /* Not enough parameters */ 01085 cmdlang->errstr = "Not enough parameters"; 01086 cmdlang->err = EINVAL; 01087 goto out_err; 01088 } 01089 01090 s = ipmi_mem_alloc(ipmi_states_size()); 01091 if (!s) { 01092 cmdlang->errstr = "Out of memory"; 01093 cmdlang->err = ENOMEM; 01094 goto out_err; 01095 } 01096 ipmi_event_state_init(s); 01097 01098 if (strcmp(argv[curr_arg], "msg") == 0) 01099 ipmi_event_state_set_events_enabled(s, 1); 01100 else if (strcmp(argv[curr_arg], "nomsg") == 0) 01101 ipmi_event_state_set_events_enabled(s, 0); 01102 else { 01103 cmdlang->errstr = "Invalid message enable setting"; 01104 cmdlang->err = EINVAL; 01105 goto out_err; 01106 } 01107 curr_arg++; 01108 01109 if (strcmp(argv[curr_arg], "scan") == 0) 01110 ipmi_event_state_set_scanning_enabled(s, 1); 01111 else if (strcmp(argv[curr_arg], "noscan") == 0) 01112 ipmi_event_state_set_scanning_enabled(s, 0); 01113 else { 01114 cmdlang->errstr = "Invalid scanning enable setting"; 01115 cmdlang->err = EINVAL; 01116 goto out_err; 01117 } 01118 curr_arg++; 01119 01120 if (ipmi_sensor_get_event_reading_type(sensor) 01121 == IPMI_EVENT_READING_TYPE_THRESHOLD) 01122 { 01123 while (curr_arg < argc) { 01124 enum ipmi_thresh_e thresh; 01125 enum ipmi_event_value_dir_e value_dir; 01126 enum ipmi_event_dir_e dir; 01127 01128 ipmi_cmdlang_get_threshold_ev(argv[curr_arg], &thresh, 01129 &value_dir, &dir, cmd_info); 01130 if (cmdlang->err) { 01131 goto out_err; 01132 } 01133 ipmi_threshold_event_set(s, thresh, value_dir, dir); 01134 curr_arg++; 01135 } 01136 } else { 01137 while (curr_arg < argc) { 01138 int offset; 01139 enum ipmi_event_dir_e dir; 01140 01141 ipmi_cmdlang_get_discrete_ev(argv[curr_arg], &offset, 01142 &dir, cmd_info); 01143 if (cmdlang->err) { 01144 goto out_err; 01145 } 01146 ipmi_discrete_event_set(s, offset, dir); 01147 curr_arg++; 01148 } 01149 } 01150 01151 ipmi_cmdlang_cmd_info_get(cmd_info); 01152 switch (kind) { 01153 case ev_en_set: 01154 rv = ipmi_sensor_set_event_enables(sensor, s, 01155 sensor_set_event_enables_done, 01156 cmd_info); 01157 break; 01158 case ev_en_enable: 01159 rv = ipmi_sensor_enable_events(sensor, s, 01160 sensor_set_event_enables_done, 01161 cmd_info); 01162 break; 01163 case ev_en_disable: 01164 rv = ipmi_sensor_disable_events(sensor, s, 01165 sensor_set_event_enables_done, 01166 cmd_info); 01167 break; 01168 default: 01169 rv = EINVAL; 01170 } 01171 01172 if (rv) { 01173 ipmi_cmdlang_cmd_info_put(cmd_info); 01174 cmdlang->err = rv; 01175 cmdlang->errstr = "Error setting event enables"; 01176 goto out_err; 01177 } 01178 ipmi_mem_free(s); 01179 return; 01180 01181 out_err: 01182 ipmi_sensor_get_name(sensor, cmdlang->objstr, 01183 cmdlang->objstr_len); 01184 cmdlang->location = "cmd_sensor.c(sensor_set_event_enables)"; 01185 if (s) 01186 ipmi_mem_free(s); 01187 }
|
|
||||||||||||||||||||||||||||||||
|
||||||||||||||||||||
|
Definition at line 404 of file cmd_sensor.c. References cmdlang, ipmi_cmdlang_s::err, ipmi_cmdlang_s::errstr, i, ipmi_cmdinfo_get_cmdlang(), ipmi_cmdlang_cmd_info_put(), ipmi_cmdlang_down(), ipmi_cmdlang_lock(), ipmi_cmdlang_out(), ipmi_cmdlang_out_bool(), ipmi_cmdlang_out_int(), ipmi_cmdlang_unlock(), ipmi_cmdlang_up(), ipmi_is_event_messages_enabled(), ipmi_is_initial_update_in_progress(), ipmi_is_sensor_scanning_enabled(), ipmi_is_state_set(), ipmi_sensor_discrete_event_readable(), ipmi_sensor_get_name(), IPMI_SENSOR_NAME_LEN, ipmi_sensor_reading_name_string(), ipmi_cmdlang_s::location, ipmi_cmdlang_s::objstr, and ipmi_cmdlang_s::objstr_len. Referenced by sensor_get(). 00408 { 00409 ipmi_cmd_info_t *cmd_info = cb_data; 00410 ipmi_cmdlang_t *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info); 00411 int i; 00412 char sensor_name[IPMI_SENSOR_NAME_LEN]; 00413 int rv; 00414 00415 ipmi_cmdlang_lock(cmd_info); 00416 if (err) { 00417 cmdlang->errstr = "Error reading sensor"; 00418 cmdlang->err = err; 00419 ipmi_sensor_get_name(sensor, cmdlang->objstr, 00420 cmdlang->objstr_len); 00421 cmdlang->location = "cmd_sensor.c(read_sensor_states)"; 00422 goto out; 00423 } 00424 00425 ipmi_sensor_get_name(sensor, sensor_name, sizeof(sensor_name)); 00426 00427 ipmi_cmdlang_out(cmd_info, "Sensor", NULL); 00428 ipmi_cmdlang_down(cmd_info); 00429 ipmi_cmdlang_out(cmd_info, "Name", sensor_name); 00430 00431 ipmi_cmdlang_out_bool(cmd_info, "Event Messages Enabled", 00432 ipmi_is_event_messages_enabled(states)); 00433 ipmi_cmdlang_out_bool(cmd_info, "Sensor Scanning Enabled", 00434 ipmi_is_sensor_scanning_enabled(states)); 00435 ipmi_cmdlang_out_bool(cmd_info, "Initial Update In Progress", 00436 ipmi_is_initial_update_in_progress(states)); 00437 for (i=0; i<15; i++) { 00438 int ival; 00439 const char *str; 00440 00441 rv = ipmi_sensor_discrete_event_readable(sensor, i, &ival); 00442 if ((rv) || !ival) 00443 continue; 00444 00445 ipmi_cmdlang_out(cmd_info, "Event", NULL); 00446 ipmi_cmdlang_down(cmd_info); 00447 ipmi_cmdlang_out_int(cmd_info, "Offset", i); 00448 str = ipmi_sensor_reading_name_string(sensor, i); 00449 if (strcmp(str, "unknown") != 0) 00450 ipmi_cmdlang_out(cmd_info, "Name", str); 00451 ipmi_cmdlang_out_bool(cmd_info, "Set", ipmi_is_state_set(states, i)); 00452 ipmi_cmdlang_up(cmd_info); 00453 } 00454 ipmi_cmdlang_up(cmd_info); 00455 00456 out: 00457 ipmi_cmdlang_unlock(cmd_info); 00458 ipmi_cmdlang_cmd_info_put(cmd_info); 00459 }
|
|
||||||||||||
|
Definition at line 1202 of file cmd_sensor.c. References ev_en_disable, and mod_event_enables(). 01203 { 01204 mod_event_enables(sensor, cb_data, ev_en_disable); 01205 }
|
|
||||||||||||||||||||||||||||||||
|
Definition at line 1208 of file cmd_sensor.c. References ipmi_cmdlang_alloc_event_info(), ipmi_cmdlang_cmd_info_put(), ipmi_cmdlang_down(), ipmi_cmdlang_event_out(), ipmi_cmdlang_global_err(), ipmi_cmdlang_out(), ipmi_cmdlang_out_int(), ipmi_cmdlang_up(), IPMI_EVENT_NOT_HANDLED, ipmi_get_event_dir_string(), ipmi_sensor_get_name(), and IPMI_SENSOR_NAME_LEN. Referenced by ipmi_cmdlang_sensor_change(), and sensor_change(). 01215 { 01216 ipmi_cmd_info_t *evi; 01217 char sensor_name[IPMI_SENSOR_NAME_LEN]; 01218 int rv; 01219 char *errstr; 01220 01221 ipmi_sensor_get_name(sensor, sensor_name, sizeof(sensor_name)); 01222 01223 evi = ipmi_cmdlang_alloc_event_info(); 01224 if (!evi) { 01225 rv = ENOMEM; 01226 errstr = "Out of memory"; 01227 goto out_err; 01228 } 01229 01230 ipmi_cmdlang_out(evi, "Object Type", "Sensor"); 01231 ipmi_cmdlang_out(evi, "Name", sensor_name); 01232 ipmi_cmdlang_out(evi, "Operation", "Event"); 01233 ipmi_cmdlang_out_int(evi, "Offset", offset); 01234 ipmi_cmdlang_out(evi, "Direction", ipmi_get_event_dir_string(dir)); 01235 ipmi_cmdlang_out_int(evi, "Severity", severity); 01236 ipmi_cmdlang_out_int(evi, "Previous Severity", prev_severity); 01237 if (event) { 01238 ipmi_cmdlang_out(evi, "Event", NULL); 01239 ipmi_cmdlang_down(evi); 01240 ipmi_cmdlang_event_out(event, evi); 01241 ipmi_cmdlang_up(evi); 01242 } 01243 ipmi_cmdlang_cmd_info_put(evi); 01244 return IPMI_EVENT_NOT_HANDLED; 01245 01246 out_err: 01247 ipmi_cmdlang_global_err(sensor_name, 01248 "cmd_sensor.c(sensor_discrete_event_handler)", 01249 errstr, rv); 01250 if (evi) 01251 ipmi_cmdlang_cmd_info_put(evi); 01252 return IPMI_EVENT_NOT_HANDLED; 01253 }
|
|
||||||||||||
|
||||||||||||
|
Definition at line 1196 of file cmd_sensor.c. References ev_en_enable, and mod_event_enables(). 01197 { 01198 mod_event_enables(sensor, cb_data, ev_en_enable); 01199 }
|
|
||||||||||||
|
||||||||||||
|
Definition at line 1024 of file cmd_sensor.c. References cmdlang, ipmi_cmdlang_s::err, ipmi_cmdlang_s::errstr, ipmi_cmdinfo_get_cmdlang(), ipmi_cmdlang_cmd_info_get(), ipmi_cmdlang_cmd_info_put(), ipmi_sensor_get_event_enables(), ipmi_sensor_get_name(), ipmi_cmdlang_s::location, ipmi_cmdlang_s::objstr, ipmi_cmdlang_s::objstr_len, and sensor_get_event_enables_done(). 01025 { 01026 ipmi_cmd_info_t *cmd_info = cb_data; 01027 ipmi_cmdlang_t *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info); 01028 int rv; 01029 01030 ipmi_cmdlang_cmd_info_get(cmd_info); 01031 rv = ipmi_sensor_get_event_enables(sensor, sensor_get_event_enables_done, 01032 cmd_info); 01033 if (rv) { 01034 ipmi_cmdlang_cmd_info_put(cmd_info); 01035 cmdlang->err = rv; 01036 cmdlang->errstr = "Error getting event enables"; 01037 ipmi_sensor_get_name(sensor, cmdlang->objstr, 01038 cmdlang->objstr_len); 01039 cmdlang->location = "cmd_sensor.c(sensor_get_event_enables)"; 01040 } 01041 }
|
|
||||||||||||||||||||