Esempio n. 1
0
static void add_control_event_rdr(ipmi_control_t		*control, 
				 SaHpiRdrT		*rdr,
				 SaHpiEntityPathT	parent_ep,
				 SaHpiResourceIdT	res_id)
{
	char	name[32];
	//SaHpiEntityPathT rdr_ep;

	memset(name,'\0',32);
	rdr->RecordId = 0;
	rdr->RdrType = SAHPI_CTRL_RDR;
	//rdr->Entity.Entry[0].EntityType = (SaHpiEntityTypeT)id;
	//rdr->Entity.Entry[0].EntityLocation = (SaHpiEntityLocationT)instance;
	//rdr->Entity.Entry[1].EntityType = 0;
	//rdr->Entity.Entry[1].EntityLocation = 0;
	rdr->Entity = parent_ep;

	/* append ep */
	//oh_encode_entitypath(entity_root, &rdr_ep);

	//oh_concat_ep (&rdr->Entity, &rdr_ep);

	add_control_event_control_rec(control, &rdr->RdrTypeUnion.CtrlRec);

	ipmi_control_get_id(control, name, 32);
	rdr->IdString.DataType = SAHPI_TL_TYPE_ASCII6;
	rdr->IdString.Language = SAHPI_LANG_ENGLISH;
	rdr->IdString.DataLength = 32;

	memcpy(rdr->IdString.Data,name, strlen(name) + 1);
}
Esempio n. 2
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;
}
Esempio n. 3
0
static void set_idstring(ipmi_control_t *control,
                         SaHpiRdrT		*rdr)
{
    char		name[SAHPI_MAX_TEXT_BUFFER_LENGTH];
    SaHpiTextTypeT	data_type;
    int		name_len;

    memset(name, '\0' ,SAHPI_MAX_TEXT_BUFFER_LENGTH);
    ipmi_control_get_id(control, name, SAHPI_MAX_TEXT_BUFFER_LENGTH);
    name_len = ipmi_control_get_id_length(control);
    if (name_len >= SAHPI_MAX_TEXT_BUFFER_LENGTH)
        name_len = SAHPI_MAX_TEXT_BUFFER_LENGTH - 1;
    data_type = convert_to_hpi_data_type(ipmi_control_get_id_type(control));
    rdr->IdString.DataType = data_type;
    rdr->IdString.Language = SAHPI_LANG_ENGLISH;
    rdr->IdString.DataLength = name_len;

    memset(rdr->IdString.Data, 0, SAHPI_MAX_TEXT_BUFFER_LENGTH);
    memcpy(rdr->IdString.Data, name, name_len);
}
Esempio n. 4
0
static void add_control_event_rdr(ipmi_control_t		*control, 
				 SaHpiRdrT		*rdr,
				 SaHpiEntityPathT	parent_ep,
				 SaHpiResourceIdT	res_id)
{
	char		name[SAHPI_MAX_TEXT_BUFFER_LENGTH];
	SaHpiTextTypeT	data_type;
	int		name_len;

	memset(name, '\0' ,SAHPI_MAX_TEXT_BUFFER_LENGTH);
	rdr->RecordId = 0;
	rdr->RdrType = SAHPI_CTRL_RDR;
	//rdr->Entity.Entry[0].EntityType = (SaHpiEntityTypeT)id;
	//rdr->Entity.Entry[0].EntityLocation = (SaHpiEntityLocationT)instance;
	//rdr->Entity.Entry[1].EntityType = 0;
	//rdr->Entity.Entry[1].EntityLocation = 0;
	rdr->Entity = parent_ep;

	/* append ep */
	//oh_encode_entitypath(entity_root, &rdr_ep);

	//oh_concat_ep (&rdr->Entity, &rdr_ep);

	add_control_event_control_rec(control, &rdr->RdrTypeUnion.CtrlRec);

	ipmi_control_get_id(control, name, SAHPI_MAX_TEXT_BUFFER_LENGTH);
	name_len = ipmi_control_get_id_length(control);
	if (name_len >= SAHPI_MAX_TEXT_BUFFER_LENGTH)
		name_len = SAHPI_MAX_TEXT_BUFFER_LENGTH - 1;
	data_type = convert_to_hpi_data_type(ipmi_control_get_id_type(control));
	rdr->IdString.DataType = data_type;
	rdr->IdString.Language = SAHPI_LANG_ENGLISH;
	rdr->IdString.DataLength = name_len;

	memset(rdr->IdString.Data, 0, SAHPI_MAX_TEXT_BUFFER_LENGTH);
	memcpy(rdr->IdString.Data, name, name_len);
}
Esempio n. 5
0
static void trace_ipmi_control(char *str,
                               ipmi_control_t *control,
                               SaHpiRptEntryT *rpt)
{
    if (!getenv("OHOI_TRACE_CONTROL") && !IHOI_TRACE_ALL) {
        return;
    }
    char strtype[24];
    char name[24];

    ipmi_control_get_id(control, name, 24);
    switch (ipmi_control_get_type(control)) {
    case IPMI_CONTROL_ONE_SHOT_RESET:
        strncpy(strtype,"reset", 24);
        break;
    case IPMI_CONTROL_POWER:
        strncpy(strtype,"power", 24);
        break;
    case IPMI_CONTROL_ALARM:
        strncpy(strtype,"alarm", 24);
        break;
    case IPMI_CONTROL_IDENTIFIER:
        strncpy(strtype,"address", 24);
        break;
    case IPMI_CONTROL_LIGHT:
        strncpy(strtype,"LED", 24);
        break;
    default:
        snprintf(strtype, 24, "unknown(%d)",
                 ipmi_control_get_type(control));
        break;
    }

    fprintf(stderr, "   *** CONTROL %s. type %s (%s). RPT %d(%s)\n",
            str, strtype, name, rpt->ResourceId, rpt->ResourceTag.Data);
}
Esempio n. 6
0
void ohoi_control_event(enum ipmi_update_e op,
                        ipmi_entity_t      *ent,
                        ipmi_control_t     *control,
                        void               *cb_data)
{
    struct oh_handler_state *handler = cb_data;
    struct ohoi_handler *ipmi_handler = handler->data;
    struct ohoi_resource_info *ohoi_res_info;
    int ctrl_type = ipmi_control_get_type(control);
    ipmi_control_id_t cid = ipmi_control_convert_to_id(control);


    ipmi_entity_id_t	entity_id;
    SaHpiRptEntryT		*rpt_entry;
    char str[24];
    int rv;

    entity_id = ipmi_entity_convert_to_id(ent);
    rpt_entry = ohoi_get_resource_by_entityid(handler->rptcache,
                &entity_id);

    if (!rpt_entry) {
        dump_entity_id("Control with RPT Entry?!", entity_id);
        return;
    }

    g_static_rec_mutex_lock(&ipmi_handler->ohoih_lock);
    ohoi_res_info = oh_get_resource_data(handler->rptcache,
                                         rpt_entry->ResourceId);

    if (op == IPMI_ADDED) {
        trace_ipmi_control("ADD", control, rpt_entry);
        /* attach power and reset to chassis entity since
           IPMI provides them as such */
        switch (ctrl_type) {
        case IPMI_CONTROL_ONE_SHOT_RESET:
            ohoi_res_info->reset_ctrl = cid;
            rpt_entry->ResourceCapabilities |=
                SAHPI_CAPABILITY_RESET;
            break;
        case IPMI_CONTROL_POWER:
            if ((ipmi_handler->d_type == IPMI_DOMAIN_TYPE_ATCA) &&
                    (ipmi_entity_get_entity_id(ent) ==
                     SAHPI_ENT_SYSTEM_CHASSIS)) {
                // never power off ATCA chassis
                break;
            }
            ohoi_res_info->power_ctrl = cid;
            rpt_entry->ResourceCapabilities |=
                SAHPI_CAPABILITY_POWER;
            break;
        case IPMI_CONTROL_ALARM:
            rv = add_alarm_rdrs(handler,rpt_entry,control);
            if (rv) {
                dbg("add_alarms_rdrs failed");
                break;
            }
            rpt_entry->ResourceCapabilities |=
                SAHPI_CAPABILITY_CONTROL |
                SAHPI_CAPABILITY_RDR;
            break;
        case IPMI_CONTROL_IDENTIFIER:
#if 0
            rv = address_control_get(control,handler, ent, rpt_entry);
            if (rv) {
                dbg("address_control_get failed");
                break;
            }
            rpt_entry->ResourceCapabilities |=
                SAHPI_CAPABILITY_CONTROL |
                SAHPI_CAPABILITY_RDR;
#endif
            break;
        case IPMI_CONTROL_LIGHT:
            ipmi_control_get_id(control, str, 24);
            if (add_led_control_event(ent, control, handler, rpt_entry)) {
                break;
            }
            rpt_entry->ResourceCapabilities |=
                SAHPI_CAPABILITY_CONTROL |
                SAHPI_CAPABILITY_RDR;
            break;
        default:
            if (SA_OK != add_control_event(ent, control, handler,
                                           rpt_entry->ResourceEntity,
                                           rpt_entry->ResourceId)) {
                break;
            }
            rpt_entry->ResourceCapabilities |=
                SAHPI_CAPABILITY_CONTROL |
                SAHPI_CAPABILITY_RDR;
            break;
        }
    } else if (op == IPMI_DELETED) {
        trace_ipmi_control("DELETE", control, rpt_entry);
        switch (ctrl_type) {
        case IPMI_CONTROL_ONE_SHOT_RESET:
            ipmi_control_id_set_invalid(
                &ohoi_res_info->reset_ctrl);
            rpt_entry->ResourceCapabilities &=
                ~SAHPI_CAPABILITY_RESET;
            break;
        case IPMI_CONTROL_POWER:
            ipmi_control_id_set_invalid(
                &ohoi_res_info->power_ctrl);
            rpt_entry->ResourceCapabilities &=
                ~SAHPI_CAPABILITY_POWER;
            break;
        default:
            if (ohoi_delete_orig_control_rdr(handler,
                                             rpt_entry, &cid)) {
                // no more controlss for rpt
                rpt_entry->ResourceCapabilities &=
                    ~SAHPI_CAPABILITY_CONTROL;
                ohoi_res_info->ctrl_count = 0;
            }
            break;
        }
        if ((oh_get_rdr_next(handler->rptcache, rpt_entry->ResourceId,
                             SAHPI_FIRST_ENTRY) == NULL) &&
                (ohoi_res_info->fru == NULL)) {
            // no more rdrs for rpt
            rpt_entry->ResourceCapabilities &=
                ~SAHPI_CAPABILITY_RDR;
        }
    }
    trace_ipmi("Set updated for res_info %p(%d). Control", ohoi_res_info, rpt_entry->ResourceId);
    entity_rpt_set_updated(ohoi_res_info, ipmi_handler);
    g_static_rec_mutex_unlock(&ipmi_handler->ohoih_lock);
}