static void entity_change(enum ipmi_update_e op, ipmi_domain_t *domain, ipmi_entity_t *entity, void *cb_data) { int ret; zbx_ipmi_host_t *h = cb_data; zabbix_log(LOG_LEVEL_DEBUG, "In entity_change()"); if (op == IPMI_ADDED) { if (0 != (ret = ipmi_entity_add_sensor_update_handler(entity, sensor_change, h))) zabbix_log(LOG_LEVEL_DEBUG, "ipmi_entity_set_sensor_update_handler() return error: 0x%x", ret); if (0 != (ret = ipmi_entity_add_control_update_handler(entity, control_change, h))) zabbix_log(LOG_LEVEL_DEBUG, "ipmi_entity_add_control_update_handler() return error: 0x%x", ret); } }
/* callback function invoked from OpenIPMI */ static void entity_change(enum ipmi_update_e op, ipmi_domain_t *domain, ipmi_entity_t *entity, void *cb_data) { const char *__function_name = "entity_change"; int ret; zbx_ipmi_host_t *h = cb_data; zabbix_log(LOG_LEVEL_DEBUG, "In %s() phost:%p host:'[%s]:%d'", __function_name, h, h->ip, h->port); if (op == IPMI_ADDED) { if (0 != (ret = ipmi_entity_add_sensor_update_handler(entity, sensor_change, h))) zabbix_log(LOG_LEVEL_DEBUG, "ipmi_entity_set_sensor_update_handler() return error: 0x%x", ret); if (0 != (ret = ipmi_entity_add_control_update_handler(entity, control_change, h))) zabbix_log(LOG_LEVEL_DEBUG, "ipmi_entity_add_control_update_handler() return error: 0x%x", ret); } zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __function_name); }
/* Whenever the status of an entity changes, the function is called When a new entity is created, we search all sensors that belong to the entity */ static void entity_change(enum ipmi_update_e op, ipmi_domain_t *domain, ipmi_entity_t *entity, void *cb_data) { int rv; char name[50]; ipmi_entity_get_name(entity, name, sizeof(name)); if (op == IPMI_ADDED) { printf("Entity added: %s\n", name); /* Register callback so that when the status of a sensor changes, sensor_change is called */ rv = ipmi_entity_add_sensor_update_handler(entity, sensor_change, NULL); if (rv) { printf("ipmi_entity_set_sensor_update_handler: 0x%x", rv); exit(1); } } }
void ohoi_entity_event(enum ipmi_update_e op, ipmi_domain_t *domain, ipmi_entity_t *entity, void *cb_data) { struct oh_handler_state *handler = cb_data; struct ohoi_handler *ipmi_handler = handler->data; int rv; int inst=0; inst=ipmi_entity_get_entity_instance(entity); if(inst >=96) { inst = inst - 96; } g_static_rec_mutex_lock(&ipmi_handler->ohoih_lock); switch (op) { case IPMI_ADDED: add_entity_event(domain, entity, handler); trace_ipmi_entity("ADDED", inst, entity); /* entity presence overall */ rv = ipmi_entity_add_presence_handler(entity, entity_presence, handler); if (rv) dbg("ipmi_entity_set_presence_handler: %#x", rv); /* hotswap handler */ rv = ipmi_entity_add_hot_swap_handler(entity, ohoi_hot_swap_cb, cb_data); if(rv) dbg("Failed to set entity hot swap handler"); /* sensors */ rv= ipmi_entity_add_sensor_update_handler(entity, ohoi_sensor_event, handler); if (rv) { dbg("ipmi_entity_set_sensor_update_handler: %#x", rv); break; } /* controls */ rv = ipmi_entity_add_control_update_handler(entity, ohoi_control_event, handler); if (rv) { dbg("ipmi_entity_set_control_update_handler: %#x", rv); return; } /* inventory (a.k.a FRU) */ rv = ipmi_entity_add_fru_update_handler(entity, ohoi_inventory_event, handler); if (rv) { dbg("ipmi_entity_set_fru_update_handler: %#x", rv); break; } break; case IPMI_DELETED: delete_entity(handler, entity); trace_ipmi_entity("DELETED", inst, entity); break; case IPMI_CHANGED: change_entity(handler, entity); trace_ipmi_entity("CHANGED", inst, entity); break; default: dbg("Entity: Unknow change?!"); } g_static_rec_mutex_unlock(&ipmi_handler->ohoih_lock); }
void ohoi_entity_event(enum ipmi_update_e op, ipmi_domain_t *domain, ipmi_entity_t *entity, void *cb_data) { struct oh_handler_state *handler = cb_data; int rv; switch (op) { case IPMI_ADDED: add_entity_event(entity, handler); dbg("Entity added: %d.%d (%s)", ipmi_entity_get_entity_id(entity), ipmi_entity_get_entity_instance(entity), ipmi_entity_get_entity_id_string(entity)); /* entity presence overall */ rv = ipmi_entity_add_presence_handler(entity, entity_presence, handler); if (rv) dbg("ipmi_entity_set_presence_handler: %#x", rv); /* hotswap handler */ rv = ipmi_entity_add_hot_swap_handler(entity, ohoi_hot_swap_cb, cb_data); if(rv) dbg("Failed to set entity hot swap handler"); /* sensors */ rv= ipmi_entity_add_sensor_update_handler(entity, ohoi_sensor_event, handler); if (rv) { dbg("ipmi_entity_set_sensor_update_handler: %#x", rv); return; } /* controls */ rv = ipmi_entity_add_control_update_handler(entity, ohoi_control_event, handler); if (rv) { dbg("ipmi_entity_set_control_update_handler: %#x", rv); return; } /* inventory (a.k.a FRU) */ rv = ipmi_entity_add_fru_update_handler(entity, ohoi_inventory_event, handler); if (rv) { dbg("ipmi_entity_set_fru_update_handler: %#x", rv); return; } break; case IPMI_DELETED: return; /* we need to remove_entity */ dbg("Entity deleted: %d.%d", ipmi_entity_get_entity_id(entity), ipmi_entity_get_entity_instance(entity)); break; case IPMI_CHANGED: add_entity_event(entity, handler); dbg("Entity changed: %d.%d", ipmi_entity_get_entity_id(entity), ipmi_entity_get_entity_instance(entity)); break; default: dbg("Entity: Unknow change?!"); } }
void ohoi_entity_event(enum ipmi_update_e op, ipmi_domain_t *domain, ipmi_entity_t *entity, void *cb_data) { struct oh_handler_state *handler = cb_data; struct ohoi_handler *ipmi_handler = handler->data; int rv; int inst=0; switch (op) { case IPMI_ADDED: g_static_rec_mutex_lock(&ipmi_handler->ohoih_lock); if ((ipmi_entity_get_entity_id(entity) == 3) && (ipmi_entity_get_entity_instance(entity) >= 96)) { dbg("We got a processor"); ipmi_entity_iterate_parents(entity, add_processor_event, handler); } else add_entity_event(entity, handler); inst=ipmi_entity_get_entity_instance(entity); if(inst >=96) { inst = inst - 96; } trace_ipmi("Entity added: %d.%d (%s)", ipmi_entity_get_entity_id(entity), inst, ipmi_entity_get_entity_id_string(entity)); /* entity presence overall */ rv = ipmi_entity_add_presence_handler(entity, entity_presence, handler); if (rv) dbg("ipmi_entity_set_presence_handler: %#x", rv); /* hotswap handler */ rv = ipmi_entity_add_hot_swap_handler(entity, ohoi_hot_swap_cb, cb_data); if(rv) dbg("Failed to set entity hot swap handler"); /* sensors */ rv= ipmi_entity_add_sensor_update_handler(entity, ohoi_sensor_event, handler); if (rv) { dbg("ipmi_entity_set_sensor_update_handler: %#x", rv); return; } /* inventory (a.k.a FRU) */ rv = ipmi_entity_add_fru_update_handler(entity, ohoi_inventory_event, handler); if (rv) { dbg("ipmi_entity_set_fru_update_handler: %#x", rv); return; } g_static_rec_mutex_unlock(&ipmi_handler->ohoih_lock); break; case IPMI_DELETED: return; /* we need to remove_entity */ dbg("Entity deleted: %d.%d", ipmi_entity_get_entity_id(entity), ipmi_entity_get_entity_instance(entity)); break; case IPMI_CHANGED: g_static_rec_mutex_lock(&ipmi_handler->ohoih_lock); //add_entity_event(entity, handler); inst = 0; inst=ipmi_entity_get_entity_instance(entity); if(inst >=96) { inst = inst - 96; } trace_ipmi("***Entity changed: %d.%d", ipmi_entity_get_entity_id(entity), inst); g_static_rec_mutex_unlock(&ipmi_handler->ohoih_lock); break; default: dbg("Entity: Unknow change?!"); } }