Exemplo n.º 1
0
struct oh_event * snmp_bc_discover_chassis(struct oh_handler_state *handle, char *blade_vector, SaHpiEntityPathT *ep) 
{
	int len;
        struct oh_event working;
        struct oh_event *e = NULL;

        memset(&working, 0, sizeof(struct oh_event));
         
        if (blade_vector != NULL) {
                working.type = OH_ET_RESOURCE;
                working.u.res_event.entry = snmp_rpt_array[BC_RPT_ENTRY_CHASSIS].rpt;

		working.u.res_event.entry.ResourceTag.DataType = SAHPI_TL_TYPE_LANGUAGE;
		working.u.res_event.entry.ResourceTag.Language = SAHPI_LANG_ENGLISH;
		len = strlen(snmp_rpt_array[BC_RPT_ENTRY_CHASSIS].comment);
		if (len <= SAHPI_MAX_TEXT_BUFFER_LENGTH) {
			working.u.res_event.entry.ResourceTag.DataLength = (SaHpiUint8T)len;
			strcpy(working.u.res_event.entry.ResourceTag.Data,
			       snmp_rpt_array[BC_RPT_ENTRY_CHASSIS].comment);
		} else {
			dbg("Comment string too long - %s\n",snmp_rpt_array[BC_RPT_ENTRY_CHASSIS].comment);
		}

                working.u.res_event.entry.ResourceId = oh_uid_from_entity_path(ep);
                working.u.res_event.entry.ResourceEntity = *ep;
                e = eventdup(&working);
		
		find_res_events(handle,ep, &snmp_rpt_array[BC_RPT_ENTRY_CHASSIS].bc_res_info);
        }
 
	return e;
}
Exemplo n.º 2
0
/**
 * snmp_bc_discover_sensors: Discover all available sensors for a resource
 * @ss: handle to snmp connection for this instance
 * @parent_ep: Entity path of RDR's parent resource
 * @parent_id: ID of RDR's parent resource
 * @control: Pointer to RDR's static control definition (SaHpiSensorRecT)
 * Return value: Pointer to Plugin Event, if success, NULL, if error or sensor does not exist
 **/
struct oh_event * snmp_bc_discover_sensors(struct oh_handler_state *handle,
                                           SaHpiEntityPathT parent_ep,                                           
                                           const struct snmp_bc_sensor *sensor)
{
	gchar *oid=NULL;
	int len, sensor_event_only=0;
        struct oh_event working;
        struct oh_event *e = NULL;
	struct snmp_bc_hnd *custom_handle = (struct snmp_bc_hnd *)handle->data;
	struct snmp_session *ss = custom_handle->ss;

        memset(&working, 0, sizeof(struct oh_event));
	
	/* Check for Event-only sensor - no OID */
	if ((sensor->bc_sensor_info.mib.oid == NULL) &&
	    (sensor->sensor.DataFormat.ReadingFormats & SAHPI_SRF_EVENT_STATE)) {
		sensor_event_only = 1;
	}

	if ((sensor->bc_sensor_info.mib.oid == NULL) &&
	    !(sensor->sensor.DataFormat.ReadingFormats & SAHPI_SRF_EVENT_STATE)) {
	 	dbg("Sensor %s cannot be read and is NOT event-only", sensor->comment);
		return e;
	}

	if (!sensor_event_only) { 
		oid = snmp_derive_objid(parent_ep, sensor->bc_sensor_info.mib.oid);
		if (oid == NULL) {
			dbg("NULL SNMP OID returned\n");
			return e;
		}
	}

	if (sensor_event_only ||
	    rdr_exists(ss, oid, sensor->bc_sensor_info.mib.not_avail_indicator_num,sensor->bc_sensor_info.mib.write_only)) {
		working.type = OH_ET_RDR;
		working.u.rdr_event.rdr.RdrType = SAHPI_SENSOR_RDR;
		working.u.rdr_event.rdr.Entity = parent_ep;
		working.u.rdr_event.rdr.RdrTypeUnion.SensorRec = sensor->sensor;

		working.u.rdr_event.rdr.IdString.DataType = SAHPI_TL_TYPE_LANGUAGE;
		working.u.rdr_event.rdr.IdString.Language = SAHPI_LANG_ENGLISH;
		len = strlen(sensor->comment);
		if (len <= SAHPI_MAX_TEXT_BUFFER_LENGTH) {
			working.u.rdr_event.rdr.IdString.DataLength = (SaHpiUint8T)len;
			strcpy(working.u.rdr_event.rdr.IdString.Data,sensor->comment);
		} else {
			dbg("Comment string too long - %s\n",sensor->comment);
		}
		e = eventdup(&working);

		find_sensor_events(handle, &parent_ep, sensor->sensor.Num, sensor);
	}

	g_free(oid);
	return e;
}
Exemplo n.º 3
0
int eventq_event_add(struct oh_handler_state *oh_hnd)
{
	struct oh_event event;
	SaHpiRptEntryT *rpt_entry;
	SaHpiRdrT      *rdr_entry;

	/* get the first rpt entry */
	
	rpt_entry = oh_get_resource_next(oh_hnd->rptcache, RPT_ENTRY_BEGIN);
	
	while (rpt_entry) {
		memset(&event, 0, sizeof(event));
		event.type = OH_ET_RESOURCE;
		memcpy(&event.u.res_event.entry, rpt_entry, sizeof(SaHpiRptEntryT));
		oh_hnd->eventq = g_slist_append(oh_hnd->eventq, eventdup(&event) );
	
	
		/* get every resource rdr's */
		rdr_entry = oh_get_rdr_next(oh_hnd->rptcache, 
					    rpt_entry->ResourceId, 
					    RDR_BEGIN);
		while (rdr_entry) {
			memset(&event, 0, sizeof(event));
			event.type = OH_ET_RDR;
			memcpy(&event.u.rdr_event.rdr, rdr_entry, sizeof(SaHpiRdrT));
			oh_hnd->eventq = g_slist_append(oh_hnd->eventq, eventdup(&event));
			rdr_entry = oh_get_rdr_next(oh_hnd->rptcache, 
						    rpt_entry->ResourceId, 
						    rdr_entry->RecordId);
		}
		/* get any resource rdr's end */
	
	
		rpt_entry = oh_get_resource_next(oh_hnd->rptcache, rpt_entry->ResourceId);
	}

	
	return SA_OK;
}
Exemplo n.º 4
0
struct oh_event * snmp_bc_discover_inventories(struct oh_handler_state *handle,
                                            SaHpiEntityPathT parent_ep,
                                            const struct snmp_bc_inventory *inventory)
{
        gchar *oid;
        int len;
        struct oh_event working;
        struct oh_event *e = NULL;
	struct snmp_bc_hnd *custom_handle = (struct snmp_bc_hnd *)handle->data;
	struct snmp_session *ss = custom_handle->ss;

        memset(&working, 0, sizeof(struct oh_event));

        oid = snmp_derive_objid(parent_ep, inventory->bc_inventory_info.mib.oid.OidManufacturer);
        if (oid == NULL) {
                dbg("NULL SNMP OID returned.\n");
                return e;
        }


        if (rdr_exists(ss, oid, 0, 0)) {
                working.type = OH_ET_RDR;
                working.u.rdr_event.rdr.RdrType = SAHPI_INVENTORY_RDR;
                working.u.rdr_event.rdr.Entity = parent_ep;
                working.u.rdr_event.rdr.RdrTypeUnion.InventoryRec = inventory->inventory;

                working.u.rdr_event.rdr.IdString.DataType = SAHPI_TL_TYPE_LANGUAGE;
                working.u.rdr_event.rdr.IdString.Language = SAHPI_LANG_ENGLISH;
                len = strlen(inventory->comment);
                if (len <= SAHPI_MAX_TEXT_BUFFER_LENGTH) {
                        working.u.rdr_event.rdr.IdString.DataLength = (SaHpiUint8T)len;
                        strcpy(working.u.rdr_event.rdr.IdString.Data,inventory->comment);
                } else {
                        dbg("Comment string too long - %s\n",inventory->comment);
                }

                e = eventdup(&working);
        }

        g_free(oid);
        return e;
}
Exemplo n.º 5
0
struct oh_event * snmp_bc_discover_controls(struct oh_handler_state *handle,
					    SaHpiEntityPathT parent_ep,
					    const struct snmp_bc_control *control)
{
	gchar *oid;
	int len;
        struct oh_event working;
        struct oh_event *e = NULL;
	struct snmp_bc_hnd *custom_handle = (struct snmp_bc_hnd *)handle->data;
	struct snmp_session *ss = custom_handle->ss;

        memset(&working, 0, sizeof(struct oh_event));

	oid = snmp_derive_objid(parent_ep, control->bc_control_info.mib.oid);
	if (oid == NULL) {
		dbg("NULL SNMP OID returned\n");
		return e;
	}

	if (rdr_exists(ss, oid, control->bc_control_info.mib.not_avail_indicator_num,control->bc_control_info.mib.write_only)) {
		working.type = OH_ET_RDR;
		working.u.rdr_event.rdr.RdrType = SAHPI_CTRL_RDR;
		working.u.rdr_event.rdr.Entity = parent_ep;
		working.u.rdr_event.rdr.RdrTypeUnion.CtrlRec = control->control;

		working.u.rdr_event.rdr.IdString.DataType = SAHPI_TL_TYPE_LANGUAGE;
		working.u.rdr_event.rdr.IdString.Language = SAHPI_LANG_ENGLISH;
		len = strlen(control->comment);
		if (len <= SAHPI_MAX_TEXT_BUFFER_LENGTH) {
			working.u.rdr_event.rdr.IdString.DataLength = (SaHpiUint8T)len;
			strcpy(working.u.rdr_event.rdr.IdString.Data,control->comment);
		} else {
			dbg("Comment string too long - %s\n",control->comment);
		}

		e = eventdup(&working);
	}

	g_free(oid);
	return e;
}
Exemplo n.º 6
0
struct oh_event * snmp_bc_discover_blade(struct oh_handler_state *handle, char *blade_vector, SaHpiEntityPathT *ep, int bladenum) 
{
	int len;
        struct oh_event working;
        struct oh_event *e = NULL;

        memset(&working, 0, sizeof(struct oh_event));

        if (blade_vector[bladenum] == '1') {
		
                working.type = OH_ET_RESOURCE;
                working.u.res_event.entry = snmp_rpt_array[BC_RPT_ENTRY_BLADE].rpt;

		working.u.res_event.entry.ResourceTag.DataType = SAHPI_TL_TYPE_LANGUAGE;
		working.u.res_event.entry.ResourceTag.Language = SAHPI_LANG_ENGLISH;
		len = strlen(snmp_rpt_array[BC_RPT_ENTRY_BLADE].comment);
		if (len <= SAHPI_MAX_TEXT_BUFFER_LENGTH) {
			working.u.res_event.entry.ResourceTag.DataLength = (SaHpiUint8T)len;
			strcpy(working.u.res_event.entry.ResourceTag.Data,
			       snmp_rpt_array[BC_RPT_ENTRY_BLADE].comment);
		} else {
			dbg("Comment string too long - %s\n",snmp_rpt_array[BC_RPT_ENTRY_BLADE].comment);
		}

                ep_concat(&working.u.res_event.entry.ResourceEntity, ep);

                set_ep_instance(&(working.u.res_event.entry.ResourceEntity),
                                   SAHPI_ENT_SBC_BLADE,bladenum+BC_HPI_INSTANCE_BASE);
                working.u.res_event.entry.ResourceId =
                        oh_uid_from_entity_path(&(working.u.res_event.entry.ResourceEntity));
                e = eventdup(&working);

		find_res_events(handle, &working.u.res_event.entry.ResourceEntity, 
				&snmp_rpt_array[BC_RPT_ENTRY_BLADE].bc_res_info);
        }

	return e;
}
Exemplo n.º 7
0
struct oh_event * snmp_bc_discover_mgmnt(struct oh_handler_state *handle, char *mm_vector, SaHpiEntityPathT *ep, int mmnum)
{
	int len;
        struct oh_event working;
        struct oh_event *e = NULL;

        memset(&working, 0, sizeof(struct oh_event));

        if (mm_vector != NULL) {
                working.type = OH_ET_RESOURCE;
                working.u.res_event.entry = snmp_rpt_array[BC_RPT_ENTRY_MGMNT_MODULE].rpt;

		working.u.res_event.entry.ResourceTag.DataType = SAHPI_TL_TYPE_LANGUAGE;
		working.u.res_event.entry.ResourceTag.Language = SAHPI_LANG_ENGLISH;
		len = strlen(snmp_rpt_array[BC_RPT_ENTRY_MGMNT_MODULE].comment);
		if (len <= SAHPI_MAX_TEXT_BUFFER_LENGTH) {
			working.u.res_event.entry.ResourceTag.DataLength = (SaHpiUint8T)len;
			strcpy(working.u.res_event.entry.ResourceTag.Data,
			       snmp_rpt_array[BC_RPT_ENTRY_MGMNT_MODULE].comment);
		} else {
			dbg("Comment string too long - %s\n",snmp_rpt_array[BC_RPT_ENTRY_MGMNT_MODULE].comment);
		}

                ep_concat(&working.u.res_event.entry.ResourceEntity, ep);

		/* ???? Should we also set to index of active MM ???? */
                set_ep_instance(&(working.u.res_event.entry.ResourceEntity),
                                   SAHPI_ENT_SYS_MGMNT_MODULE, mmnum+BC_HPI_INSTANCE_BASE);
                working.u.res_event.entry.ResourceId =
                        oh_uid_from_entity_path(&(working.u.res_event.entry.ResourceEntity));
                e = eventdup(&working);

		find_res_events(handle, &working.u.res_event.entry.ResourceEntity, 
				&snmp_rpt_array[BC_RPT_ENTRY_MGMNT_MODULE].bc_res_info);
        }
         
       return e;
}
Exemplo n.º 8
0
struct oh_event * snmp_bc_discover_blade_addin(struct oh_handler_state *handle,
						char *blade_vector,
                                               	SaHpiEntityPathT *ep, int bladenum)
{
	gchar bladenum_str[2]; /* Implies max number of blades is 99 */
	gchar *oid = NULL; 
	gchar *oidtmp = NULL;
	gchar **oidparts = NULL;
	int len, err;
        struct oh_event working;
        struct oh_event *e = NULL;
	struct snmp_bc_hnd *custom_handle = (struct snmp_bc_hnd *)handle->data;
	struct snmp_session *ss = custom_handle->ss;
	struct snmp_value get_value;

        memset(&working, 0, sizeof(struct oh_event));

        if (blade_vector[bladenum] == '1') {
		/* Assumming one 'x' at end of SNMP_BC_BLADE_ADDIN_VECTOR */
		oidtmp = g_strdup(SNMP_BC_BLADE_ADDIN_VECTOR);
                if (!oidtmp) {
			dbg("Out of memory");
			goto CLEANUP;
		}
		oidparts = g_strsplit(oidtmp, OID_BLANK_STR, -1);
                if (!oidparts) {
			dbg("Could not split blade add-in oid");
			goto CLEANUP;
		}
                if (oidparts[1] != NULL && oidparts[1] != '\0') {
			dbg("More than one expansion character in OID string\n");
			goto CLEANUP;
		}
		sprintf(bladenum_str, "%d", bladenum+BC_HPI_INSTANCE_BASE);
		oid = g_strconcat(oidparts[0], bladenum_str, NULL);
                if (!oid) {
			dbg("Could not concatenate blade add-in oid"); 
			goto CLEANUP;
		}
		
		err = snmp_get(ss, oid, &get_value);
		if (!(err || get_value.integer == 0)) {
 			
			working.type = OH_ET_RESOURCE;
			working.u.res_event.entry = snmp_rpt_array[BC_RPT_ENTRY_BLADE_ADDIN_CARD].rpt;

			working.u.res_event.entry.ResourceTag.DataType = SAHPI_TL_TYPE_LANGUAGE;
			working.u.res_event.entry.ResourceTag.Language = SAHPI_LANG_ENGLISH;
			len = strlen(snmp_rpt_array[BC_RPT_ENTRY_BLADE_ADDIN_CARD].comment);
			if (len <= SAHPI_MAX_TEXT_BUFFER_LENGTH) {
				working.u.res_event.entry.ResourceTag.DataLength = (SaHpiUint8T)len;
				strcpy(working.u.res_event.entry.ResourceTag.Data,
				       snmp_rpt_array[BC_RPT_ENTRY_BLADE_ADDIN_CARD].comment);
			} else {
				dbg("Comment string too long - %s\n",
				    snmp_rpt_array[BC_RPT_ENTRY_BLADE_ADDIN_CARD].comment);
			}

                        ep_concat(&working.u.res_event.entry.ResourceEntity, ep);

			set_ep_instance(&(working.u.res_event.entry.ResourceEntity),
                                           SAHPI_ENT_SBC_BLADE,bladenum+BC_HPI_INSTANCE_BASE);
                        /* Add-in cards have same number as parent blade
			 * This will be a problem if one can have multiple addins/blade.
                         * If this happens, need better SNMP support, since the current
			 * blade based DASD1 temp vector will not normalize properly
                         * if addin card numbers don't agree with parent blade number.
			 */
                        set_ep_instance(&(working.u.res_event.entry.ResourceEntity),
                                           SAHPI_ENT_ADD_IN_CARD,bladenum+BC_HPI_INSTANCE_BASE);
                        working.u.res_event.entry.ResourceId =
                                oh_uid_from_entity_path(&(working.u.res_event.entry.ResourceEntity));
			e = eventdup(&working);

			find_res_events(handle, &working.u.res_event.entry.ResourceEntity, 
					&snmp_rpt_array[BC_RPT_ENTRY_BLADE_ADDIN_CARD].bc_res_info);
		}		
        }

CLEANUP:
        g_free(oid);
	g_free(oidtmp);
	g_strfreev(oidparts);
        return e;
}