⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snmp_bc_sensor.c

📁 HIP 硬件设备管理标准接口
💻 C
📖 第 1 页 / 共 3 页
字号:
 	snprintf(buffer.Data, SAHPI_MAX_TEXT_BUFFER_LENGTH, "%'+3.2f", tmp_num);	/* Copy string to SNMP structure */	set_value.type = ASN_OCTET_STR;	strncpy(set_value.string, buffer.Data, buffer.DataLength);	/* Normalize and read sensor's raw SNMP OID */	oid = oh_derive_string(&(rdr->Entity), raw_oid);	if (oid == NULL) {		dbg("NULL SNMP OID returned for %s", raw_oid);		return(SA_ERR_HPI_INTERNAL_ERROR);	}	err = snmp_bc_snmp_set(custom_handle, oid, set_value);	if (err) {		dbg("SNMP cannot set sensor OID=%s.", oid);		g_free(oid);		if (err == SA_ERR_HPI_BUSY) return(err);		else return(SA_ERR_HPI_NO_RESPONSE);	}	g_free(oid);			return(SA_OK);}/** * snmp_bc_get_sensor_enable: * @hnd: Handler data pointer. * @rid: Resource ID. * @sid: Sensor ID. * @enable: Location to store sensor's enablement boolean. * * Retrieves a sensor's boolean enablement status. * * Return values: * SA_OK - Normal case. * SA_ERR_HPI_INVALID_PARAMS - @enable is NULL. * SA_ERR_HPI_CAPABILITY - Resource doesn't have SAHPI_CAPABILITY_SENSOR. * SA_ERR_HPI_NOT_PRESENT - Sensor doesn't exist. **/SaErrorT snmp_bc_get_sensor_enable(void *hnd,				   SaHpiResourceIdT rid,				   SaHpiSensorNumT sid,				   SaHpiBoolT *enable){	struct oh_handler_state *handle = (struct oh_handler_state *)hnd;	struct SensorInfo *sinfo;	if (!hnd || !enable) {		dbg("Invalid parameter");		return(SA_ERR_HPI_INVALID_PARAMS);	}	/* Check if resource exists and has sensor capabilities */	SaHpiRptEntryT *rpt = oh_get_resource_by_id(handle->rptcache, rid);        if (!rpt) return(SA_ERR_HPI_INVALID_RESOURCE);        if (!(rpt->ResourceCapabilities & SAHPI_CAPABILITY_SENSOR)) return(SA_ERR_HPI_CAPABILITY);	/* Check if sensor exists and return enablement status */        SaHpiRdrT *rdr = oh_get_rdr_by_type(handle->rptcache, rid, SAHPI_SENSOR_RDR, sid);	if (rdr == NULL) return(SA_ERR_HPI_NOT_PRESENT);	sinfo = (struct SensorInfo *)oh_get_rdr_data(handle->rptcache, rid, rdr->RecordId); 	if (sinfo == NULL) {		dbg("No sensor data. Sensor=%s", rdr->IdString.Data);		return(SA_ERR_HPI_INTERNAL_ERROR);	}       		*enable = sinfo->sensor_enabled;	return(SA_OK);}/** * snmp_bc_set_sensor_enable: * @hnd: Handler data pointer. * @rid: Resource ID. * @sid: Sensor ID. * @enable: Enable/disable sensor. * * Sets a sensor's boolean enablement status. * * Return values: * SA_OK - Normal case. * SA_ERR_HPI_CAPABILITY - Resource doesn't have SAHPI_CAPABILITY_SENSOR. * SA_ERR_HPI_NOT_PRESENT - Sensor doesn't exist. **/SaErrorT snmp_bc_set_sensor_enable(void *hnd,				   SaHpiResourceIdT rid,				   SaHpiSensorNumT sid,				   const SaHpiBoolT enable){	if (!hnd ) {		dbg("Invalid parameter.");		return(SA_ERR_HPI_INVALID_PARAMS);	}	struct oh_handler_state *handle = (struct oh_handler_state *)hnd;	/* Check if resource exists and has sensor capabilities */	SaHpiRptEntryT *rpt = oh_get_resource_by_id(handle->rptcache, rid);        if (!rpt) return(SA_ERR_HPI_INVALID_RESOURCE);        if (!(rpt->ResourceCapabilities & SAHPI_CAPABILITY_SENSOR)) return(SA_ERR_HPI_CAPABILITY);	/* Check if sensor exists and if it supports setting of sensor enablement */        SaHpiRdrT *rdr = oh_get_rdr_by_type(handle->rptcache, rid, SAHPI_SENSOR_RDR, sid);	if (rdr == NULL) return(SA_ERR_HPI_NOT_PRESENT);	if (rdr->RdrTypeUnion.SensorRec.EnableCtrl == SAHPI_TRUE) {		dbg("BladeCenter/RSA do not support snmp_bc_set_sensor_enable");		struct SensorInfo *sinfo;		sinfo = (struct SensorInfo *)oh_get_rdr_data(handle->rptcache, rid, rdr->RecordId);		if (sinfo == NULL) {			dbg("No sensor data. Sensor=%s", rdr->IdString.Data);			return(SA_ERR_HPI_INTERNAL_ERROR);		}		if (sinfo->sensor_enabled != enable) {			/* Probably need to drive an OID, if hardware supported it */			sinfo->sensor_enabled = enable;			/* FIXME:: Add SAHPI_ET_SENSOR_ENABLE_CHANGE event on IF event Q */		}	}	else {		return(SA_ERR_HPI_READ_ONLY);	}	return(SA_OK);}/** * snmp_bc_get_sensor_event_enable: * @hnd: Handler data pointer. * @rid: Resource ID. * @sid: Sensor ID. * @enable: Location to store sensor event enablement boolean. * * Retrieves a sensor's boolean event enablement status. * * Return values: * SA_OK - Normal case. * SA_ERR_HPI_CAPABILITY - Resource doesn't have SAHPI_CAPABILITY_SENSOR. * SA_ERR_HPI_NOT_PRESENT - Sensor doesn't exist. **/SaErrorT snmp_bc_get_sensor_event_enable(void *hnd,					 SaHpiResourceIdT rid,					 SaHpiSensorNumT sid,					 SaHpiBoolT *enable){	struct oh_handler_state *handle = (struct oh_handler_state *)hnd;	struct SensorInfo *sinfo;	if (!enable) {		dbg("Invalid parameter");		return(SA_ERR_HPI_INVALID_PARAMS);	}	/* Check if resource exists and has sensor capabilities */	SaHpiRptEntryT *rpt = oh_get_resource_by_id(handle->rptcache, rid);        if (!rpt) return(SA_ERR_HPI_INVALID_RESOURCE);        if (!(rpt->ResourceCapabilities & SAHPI_CAPABILITY_SENSOR)) return(SA_ERR_HPI_CAPABILITY);	/* Check if sensor exists and return enablement status */        SaHpiRdrT *rdr = oh_get_rdr_by_type(handle->rptcache, rid, SAHPI_SENSOR_RDR, sid);	if (rdr == NULL) return(SA_ERR_HPI_NOT_PRESENT);	sinfo = (struct SensorInfo *)oh_get_rdr_data(handle->rptcache, rid, rdr->RecordId); 	if (sinfo == NULL) {		dbg("No sensor data. Sensor=%s", rdr->IdString.Data);		return(SA_ERR_HPI_INTERNAL_ERROR);	}       		*enable = sinfo->events_enabled;        return(SA_OK);}/** * snmp_bc_set_sensor_event_enable: * @hnd: Handler data pointer. * @rid: Resource ID. * @sid: Sensor ID. * @enable: Enable/disable sensor. * * Sets a sensor's boolean event enablement status. * * Return values: * SA_OK - Normal case. * SA_ERR_HPI_CAPABILITY - Resource doesn't have SAHPI_CAPABILITY_SENSOR. * SA_ERR_HPI_NOT_PRESENT - Sensor doesn't exist. **/SaErrorT snmp_bc_set_sensor_event_enable(void *hnd,					 SaHpiResourceIdT rid,					 SaHpiSensorNumT sid,					 const SaHpiBoolT enable){	struct oh_handler_state *handle = (struct oh_handler_state *)hnd;	if (!hnd ) {		dbg("Invalid parameter.");		return(SA_ERR_HPI_INVALID_PARAMS);	}	/* Check if resource exists and has sensor capabilities */	SaHpiRptEntryT *rpt = oh_get_resource_by_id(handle->rptcache, rid);        if (!rpt) return(SA_ERR_HPI_INVALID_RESOURCE);        if (!(rpt->ResourceCapabilities & SAHPI_CAPABILITY_SENSOR)) return(SA_ERR_HPI_CAPABILITY);	/* Check if sensor exists and if it supports setting of sensor event enablement */        SaHpiRdrT *rdr = oh_get_rdr_by_type(handle->rptcache, rid, SAHPI_SENSOR_RDR, sid);	if (rdr == NULL) return(SA_ERR_HPI_NOT_PRESENT);	if (rdr->RdrTypeUnion.SensorRec.EventCtrl == SAHPI_SEC_PER_EVENT ||	    rdr->RdrTypeUnion.SensorRec.EventCtrl == SAHPI_SEC_READ_ONLY_MASKS) {		dbg("BladeCenter/RSA do not support snmp_bc_set_sensor_event_enable\n");    		struct SensorInfo *sinfo;		sinfo = (struct SensorInfo *)oh_get_rdr_data(handle->rptcache, rid, rdr->RecordId);		if (sinfo == NULL) {			dbg("No sensor data. Sensor=%s", rdr->IdString.Data);			return(SA_ERR_HPI_INTERNAL_ERROR);		}				if (sinfo->events_enabled != enable) {			/* Probably need to drive an OID, if hardware supported it */			sinfo->events_enabled = enable;			/* FIXME:: Add SAHPI_ET_SENSOR_ENABLE_CHANGE event on IF event Q */		}	}	else {		return(SA_ERR_HPI_READ_ONLY);	}	return(SA_OK);}/** * snmp_bc_get_sensor_event_masks: * @hnd: Handler data pointer. * @rid: Resource ID. * @sid: Sensor ID. * @AssertEventMask: Location to store sensor's assert event mask. * @DeassertEventMask: Location to store sensor's deassert event mask. * * Retrieves a sensor's assert and deassert event masks. * * Return values: * SA_OK - Normal case. * SA_ERR_HPI_CAPABILITY - Resource doesn't have SAHPI_CAPABILITY_SENSOR. * SA_ERR_HPI_NOT_PRESENT - Sensor doesn't exist. **/SaErrorT snmp_bc_get_sensor_event_masks(void *hnd,					SaHpiResourceIdT rid,					SaHpiSensorNumT sid,					SaHpiEventStateT *AssertEventMask,					SaHpiEventStateT *DeassertEventMask){	struct oh_handler_state *handle = (struct oh_handler_state *)hnd;	struct SensorInfo *sinfo;	if (!hnd ) {		dbg("Invalid parameter.");		return(SA_ERR_HPI_INVALID_PARAMS);	}	if (!AssertEventMask || !DeassertEventMask) {		dbg("Invalid parameter");		return(SA_ERR_HPI_INVALID_PARAMS);	}	/* Check if resource exists and has sensor capabilities */	SaHpiRptEntryT *rpt = oh_get_resource_by_id(handle->rptcache, rid);        if (!rpt) return(SA_ERR_HPI_INVALID_RESOURCE);        if (!(rpt->ResourceCapabilities & SAHPI_CAPABILITY_SENSOR)) return(SA_ERR_HPI_CAPABILITY);	/* Check if sensor exists and return enablement status */        SaHpiRdrT *rdr = oh_get_rdr_by_type(handle->rptcache, rid, SAHPI_SENSOR_RDR, sid);	if (rdr == NULL) return(SA_ERR_HPI_NOT_PRESENT);	sinfo = (struct SensorInfo *)oh_get_rdr_data(handle->rptcache, rid, rdr->RecordId); 	if (sinfo == NULL) {		dbg("No sensor data. Sensor=%s", rdr->IdString.Data);		return(SA_ERR_HPI_INTERNAL_ERROR);	}       	*AssertEventMask = sinfo->assert_mask;	if (rpt->ResourceCapabilities & SAHPI_CAPABILITY_EVT_DEASSERTS) {		*DeassertEventMask = sinfo->assert_mask;	}	else {		*DeassertEventMask = sinfo->deassert_mask;		}        return(SA_OK);}/** * snmp_bc_set_sensor_event_masks: * @hnd: Handler data pointer. * @rid: Resource ID. * @sid: Sensor ID. * @act: Add/Remove action to perform on event masks. * @AssertEventMask: Sensor's assert event mask. * @DeassertEventMask: sensor's deassert event mask. * * Sets a sensor's assert and deassert event masks. * * Return values: * SA_OK - Normal case. * SA_ERR_HPI_CAPABILITY - Resource doesn't have SAHPI_CAPABILITY_SENSOR. * SA_ERR_HPI_INVALID_DATA - @act not valid or @AssertEventMask/@DeassertEventMask *                           contain events not supported by sensor.  * SA_ERR_HPI_NOT_PRESENT - Sensor doesn't exist. **/SaErrorT snmp_bc_set_sensor_event_masks(void *hnd,					SaHpiResourceIdT rid,					SaHpiSensorNumT sid,					SaHpiSensorEventMaskActionT act,					const SaHpiEventStateT AssertEventMask,					const SaHpiEventStateT DeassertEventMask){	struct oh_handler_state *handle = (struct oh_handler_state *)hnd;	if (!hnd ) {		dbg("Invalid parameter.");		return(SA_ERR_HPI_INVALID_PARAMS);	}	if (oh_lookup_sensoreventmaskaction(act) == NULL) {		return(SA_ERR_HPI_INVALID_DATA);	}	/* Check if resource exists and has sensor capabilities */	SaHpiRptEntryT *rpt = oh_get_resource_by_id(handle->rptcache, rid);        if (!rpt) return(SA_ERR_HPI_INVALID_RESOURCE);        if (!(rpt->ResourceCapabilities & SAHPI_CAPABILITY_SENSOR)) return(SA_ERR_HPI_CAPABILITY);	/* Check if sensor exists and if it supports setting of sensor event masks */        SaHpiRdrT *rdr = oh_get_rdr_by_type(handle->rptcache, rid, SAHPI_SENSOR_RDR, sid);	if (rdr == NULL) return(SA_ERR_HPI_NOT_PRESENT);	if (rdr->RdrTypeUnion.SensorRec.EventCtrl == SAHPI_SEC_PER_EVENT) {		dbg("BladeCenter/RSA do not support snmp_bc_set_sensor_event_masks");                /* Probably need to drive an OID, if hardware supported it */		struct SensorInfo *sinfo;		sinfo = (struct SensorInfo *)oh_get_rdr_data(handle->rptcache, rid, rdr->RecordId);		if (sinfo == NULL) {			dbg("No sensor data. Sensor=%s", rdr->IdString.Data);			return(SA_ERR_HPI_INTERNAL_ERROR);		}		SaHpiEventStateT orig_assert_mask = sinfo->assert_mask;		SaHpiEventStateT orig_deassert_mask = sinfo->deassert_mask;		/* Check for invalid data in user masks */		if ( (AssertEventMask != SAHPI_ALL_EVENT_STATES) &&		     (AssertEventMask & ~(rdr->RdrTypeUnion.SensorRec.Events)) ) return(SA_ERR_HPI_INVALID_DATA);		if (!(rpt->ResourceCapabilities & SAHPI_CAPABILITY_EVT_DEASSERTS)) {			if  ( (DeassertEventMask != SAHPI_ALL_EVENT_STATES) &&				(DeassertEventMask & ~(rdr->RdrTypeUnion.SensorRec.Events)) ) {				return(SA_ERR_HPI_INVALID_DATA);			}		}		/* Add to event masks */		if (act == SAHPI_SENS_ADD_EVENTS_TO_MASKS) {			if (AssertEventMask == SAHPI_ALL_EVENT_STATES) {				sinfo->assert_mask = rdr->RdrTypeUnion.SensorRec.Events;			}			else {				sinfo->assert_mask = sinfo->assert_mask | AssertEventMask;			}			if (!(rpt->ResourceCapabilities & SAHPI_CAPABILITY_EVT_DEASSERTS)) {				if (DeassertEventMask == SAHPI_ALL_EVENT_STATES) {					sinfo->deassert_mask = rdr->RdrTypeUnion.SensorRec.Events;				}				else {					sinfo->deassert_mask = sinfo->deassert_mask | DeassertEventMask;				}			}		}		else { /* Remove from event masks */			if (AssertEventMask == SAHPI_ALL_EVENT_STATES) {				sinfo->assert_mask = 0;			}			else {				sinfo->assert_mask = sinfo->assert_mask & ~AssertEventMask;			}			if (!(rpt->ResourceCapabilities & SAHPI_CAPABILITY_EVT_DEASSERTS)) {				if (DeassertEventMask == SAHPI_ALL_EVENT_STATES) {					sinfo->deassert_mask = 0;				}				else {					sinfo->deassert_mask = sinfo->deassert_mask & ~DeassertEventMask;				}			}		}				/* Generate event, if needed */		if (sinfo->assert_mask != orig_assert_mask) {			/* FIXME:: Add SAHPI_ET_SENSOR_ENABLE_CHANGE event on IF event Q */		}		else {			if (!(rpt->ResourceCapabilities & SAHPI_CAPABILITY_EVT_DEASSERTS) &&			    sinfo->deassert_mask != orig_deassert_mask) {				/* FIXME:: Add SAHPI_ET_SENSOR_ENABLE_CHANGE event on IF event Q */			}		}	}	else {		return(SA_ERR_HPI_READ_ONLY);	}	return(SA_OK);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -