Beispiel #1
0
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);

	}
}
Beispiel #2
0
/* 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);
}
Beispiel #3
0
/* 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);
	    }
    }
}
Beispiel #4
0
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);	
}
Beispiel #5
0
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?!");
	}

}
Beispiel #6
0
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?!");
    }

}