📄 snmp_bc_sensor.c
字号:
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 + -