Ejemplo n.º 1
0
static zbx_ipmi_control_t	*allocate_ipmi_control(zbx_ipmi_host_t *h, ipmi_control_t *control)
{
	size_t			sz;
	zbx_ipmi_control_t	*c;
	char			*c_name = NULL;

	sz = (size_t)ipmi_control_get_id_length(control);
	c_name = zbx_malloc(c_name, sz + 1);
	ipmi_control_get_id(control, c_name, sz);

	zabbix_log(LOG_LEVEL_DEBUG, "In allocate_ipmi_control() %s@[%s]:%d",
			c_name, h->ip, h->port);

	h->control_count++;
	sz = h->control_count * sizeof(zbx_ipmi_control_t);

	if (NULL == h->controls)
		h->controls = zbx_malloc(h->controls, sz);
	else
		h->controls = zbx_realloc(h->controls, sz);

	c = &h->controls[h->control_count - 1];

	memset(c, 0, sizeof(zbx_ipmi_control_t));

	c->control = control;
	c->c_name = c_name;
	c->num_values = ipmi_control_get_num_vals(control);
	sz = sizeof(int) * c->num_values;
	c->val = zbx_malloc(c->val, sz);
	memset(c->val, 0, sz);

	return c;
}
Ejemplo n.º 2
0
static void __get_control_leds_state(ipmi_control_t *control,
                int err, ipmi_light_setting_t *settings, void *cb_data)
{
	struct ohoi_ctrl_info	*info = cb_data;
	int			len, res ,val;

	if (err) {
		dbg("__get_control_leds_state: err = %d", err);
		info->err = SA_ERR_HPI_INTERNAL_ERROR;
		info->done = 1;
		return;
	}
	if (info->state->Type != SAHPI_CTRL_TYPE_OEM) {
		dbg("IPMI plug-in only support OEM control now");
		info->err = SA_ERR_HPI_INTERNAL_ERROR;
		info->done = 1;
		return;
	}
			               
	if (settings == (ipmi_light_setting_t *)NULL) {
		dbg("__get_control_leds_state: settings = NULL");
		info->err = SA_ERR_HPI_INTERNAL_ERROR;
		info->done = 1;
		return;
	}
	len = ipmi_control_get_num_vals(control);
        info->state->StateUnion.Oem.BodyLength = len;
	res = ipmi_light_setting_get_color(settings, 0, &val);
        info->state->StateUnion.Oem.Body[0] = val;
        info->done = 1;
}
Ejemplo n.º 3
0
static void __get_control_state(ipmi_control_t *control,
                                int            err,
                                int            *val,
                                void           *cb_data)
{
        struct ohoi_ctrl_info *info = cb_data;

	if (err || !val) {
		dbg("__get_control_state: err = %d; val = %p", err, val);
		info->err = SA_ERR_HPI_INTERNAL_ERROR;
		info->done = 1;
		return;
	}
       if (info->state->Type != SAHPI_CTRL_TYPE_OEM) {
                dbg("IPMI plug-in only support OEM control now");
		info->err = SA_ERR_HPI_INTERNAL_ERROR;
		info->done = 1;
                return;
        }
        
	if (err || !val) {
		dbg("__get_control_state: err = %d; val = %p", err, val);
		info->err = SA_ERR_HPI_INTERNAL_ERROR;
		info->done = 1;
		return;
	}
        info->state->StateUnion.Oem.BodyLength 
                = ipmi_control_get_num_vals(control);
        memcpy(&info->state->StateUnion.Oem.Body[0],
               val,
               info->state->StateUnion.Oem.BodyLength);
        info->done = 1;
}
Ejemplo n.º 4
0
static void _set_control_state(ipmi_control_t *control,
                                void           *cb_data)
{
        struct ohoi_ctrl_info *info = cb_data;
        
        if (info->state->StateUnion.Oem.BodyLength 
                        != ipmi_control_get_num_vals(control)) {
                dbg("control number is not equal to supplied data");
                info->done = -1;
		info->err = SA_ERR_HPI_INVALID_PARAMS;
                return;
        }
                        
	if (ipmi_control_light_set_with_setting(control)) {
		ipmi_light_setting_t *setting;

		setting = ipmi_alloc_light_settings(1);
		ipmi_light_setting_set_local_control(setting, 0, 1);
		ipmi_light_setting_set_color(setting, 0,
			info->state->StateUnion.Oem.Body[0]);
		ipmi_control_set_light(control, setting,
			__set_control_state, cb_data);
		ipmi_free_light_settings(setting);
	} else {
        	ipmi_control_set_val(control, 
	/* compile error */
//                             (int *)&info->state->StateUnion.Oem.Body[0],
                             (int *)(void *)&info->state->StateUnion.Oem.Body[0],
                             __set_control_state, info);
	}
}
Ejemplo n.º 5
0
static void _set_control_state(ipmi_control_t *control,
                                void           *cb_data)
{
        struct ohoi_control_info *info = cb_data;
        
        if (info->state->StateUnion.Oem.BodyLength 
                        != ipmi_control_get_num_vals(control)) {
                dbg("control number is not equal to supplied data");
                info->done = -1;
                return;
        }
                        
        ipmi_control_set_val(control, 
                             (int *)&info->state->StateUnion.Oem.Body[0],
                             __set_control_state, info);
}
Ejemplo n.º 6
0
static void __get_control_state(ipmi_control_t *control,
                                int            err,
                                int            *val,
                                void           *cb_data)
{
        struct ohoi_control_info *info = cb_data;

        if (info->state->Type != SAHPI_CTRL_TYPE_OEM) {
                dbg("IPMI plug-in only support OEM control now");
                return;
        }
        
        info->state->StateUnion.Oem.BodyLength 
                = ipmi_control_get_num_vals(control);
        memcpy(&info->state->StateUnion.Oem.Body[0],
               val,
               info->state->StateUnion.Oem.BodyLength);
        info->done = 1;
}