SaErrorT snmp_bc_set_power_state(void *hnd, SaHpiResourceIdT id, SaHpiHsPowerStateT state) { gchar *oid; int rtn_code = SA_OK; struct snmp_value set_value; struct oh_handler_state *handle = (struct oh_handler_state *)hnd; struct snmp_bc_hnd *custom_handle = (struct snmp_bc_hnd *)handle->data; SaHpiRptEntryT *res = oh_get_resource_by_id(handle->rptcache, id); if(res == NULL) { return SA_ERR_HPI_NOT_PRESENT; } struct BC_ResourceInfo *s = (struct BC_ResourceInfo *)oh_get_resource_data(handle->rptcache, id); if(s == NULL) { return -1; } if(s->mib.OidPowerOnOff == NULL) { return SA_ERR_HPI_INVALID_CMD; } oid = snmp_derive_objid(res->ResourceEntity, s->mib.OidPowerOnOff); if(oid == NULL) { dbg("NULL SNMP OID returned for %s\n",s->mib.OidPowerOnOff); return -1; } set_value.type = ASN_INTEGER; switch (state) { case SAHPI_HS_POWER_OFF: set_value.integer = 0; if((snmp_set(custom_handle->ss, oid, set_value) != 0)) { dbg("SNMP could not set %s; Type=%d.\n",s->mib.OidPowerOnOff,set_value.type); rtn_code = SA_ERR_HPI_NO_RESPONSE; } break; case SAHPI_HS_POWER_ON: set_value.integer = 1; if((snmp_set(custom_handle->ss, oid, set_value) != 0)) { dbg("SNMP could not set %s; Type=%d.\n",s->mib.OidPowerOnOff,set_value.type); rtn_code = SA_ERR_HPI_NO_RESPONSE; } break; case SAHPI_HS_POWER_CYCLE: { SaHpiResetActionT act = SAHPI_COLD_RESET; rtn_code=snmp_bc_set_reset_state(hnd, id, act); } break; default: dbg("Invalid Power Action Type - %d\n", state); rtn_code = SA_ERR_HPI_INVALID_PARAMS; } g_free(oid); return rtn_code; }
int main(int argc, char **argv) { struct snmp_bc_hnd snmp_handle; struct oh_handler_state hnd = { .rptcache = (RPTable *)&test_rpt, .eventq = NULL, .config = NULL, .data = (void *)&snmp_handle, }; #if 0 /* Fill in RPT Entry */ test_rpt.rpt.ResourceTag.DataType = SAHPI_TL_TYPE_LANGUAGE; test_rpt.rpt.ResourceTag.Language = SAHPI_LANG_ENGLISH; test_rpt.rpt.ResourceTag.DataLength = strlen(test_rpt.comment); strcpy(test_rpt.rpt.ResourceTag.Data, test_rpt.comment); #endif SaHpiResourceIdT id = 1; SaHpiResetActionT act; SaErrorT err; /* SaHpiResetActionT expected_value; */ /********************************* * Set SAHPI_RESET_ASSERT TestCase *********************************/ act = SAHPI_RESET_ASSERT; err = snmp_bc_set_reset_state((void *)&hnd, id, act); if (err != SA_ERR_HPI_INVALID_CMD) { printf("Error! Set SAHPI_RESET_ASSERT TestCase\n"); printf("Error! snmp_bc_set_reset_state returned err=%d\n", err); return -1; } /*********************************** * Set SAHPI_RESET_DEASSERT TestCase ***********************************/ act = SAHPI_RESET_DEASSERT; err = snmp_bc_set_reset_state((void *)&hnd, id, act); if (err != SA_ERR_HPI_INVALID_CMD) { printf("Error! Set SAHPI_RESET_DEASSERT TestCase\n"); printf("Error! snmp_bc_set_reset_state returned err=%d\n", err); return -1; } /*********************************** * Set SAHPI_COLD_RESET TestCase ***********************************/ act = SAHPI_COLD_RESET; err = snmp_bc_set_reset_state((void *)&hnd, id, act); if (err) { printf("Error! Set SAHPI_COLD_RESET TestCase\n"); printf("Error! snmp_bc_set_reset_state returned err=%d\n", err); return -1; } /*********************************** * Set SAHPI_WARM_RESET TestCase ***********************************/ act = SAHPI_WARM_RESET; err = snmp_bc_set_reset_state((void *)&hnd, id, act); if (err) { printf("Error! Set SAHPI_WARM_RESET TestCase\n"); printf("Error! snmp_bc_set_reset_state returned err=%d\n", err); return -1; } return 0; }
int main(int argc, char **argv) { struct snmp_bc_hnd snmp_handle; struct oh_handler_state hnd = { .rptcache = (RPTable *)&test_rpt, .eventq = NULL, .config = NULL, .data = (void *)&snmp_handle, }; #if 0 /* Fill in RPT Entry */ test_rpt.rpt.ResourceTag.DataType = SAHPI_TL_TYPE_LANGUAGE; test_rpt.rpt.ResourceTag.Language = SAHPI_LANG_ENGLISH; test_rpt.rpt.ResourceTag.DataLength = strlen(test_rpt.comment); strcpy(test_rpt.rpt.ResourceTag.Data, test_rpt.comment); #endif SaHpiResourceIdT id = 1; SaHpiResetActionT act; SaErrorT err; /***************************** * Get Resource Error TestCase *****************************/ act = SAHPI_COLD_RESET; ifobj_force_error = 1; err = snmp_bc_set_reset_state((void *)&hnd, id, act); if (err != SA_ERR_HPI_NOT_PRESENT) { printf("Error! Get Resource Error TestCase\n"); printf("Error! snmp_bc_set_reset_state returned err=%d\n", err); return -1; } ifobj_force_error = 0; /********************************** * Get Resource Data Error TestCase **********************************/ act = SAHPI_COLD_RESET; ifobj_data_force_error = 1; err = snmp_bc_set_reset_state((void *)&hnd, id, act); if (err != -1) { printf("Error! Get Resource Data Error TestCase\n"); printf("Error! snmp_bc_set_reset_state returned err=%d\n", err); return -1; } ifobj_data_force_error = 0; /******************************** * No Hot Swap ResetOID TestCase ********************************/ act = SAHPI_COLD_RESET; test_rpt.res_info.mib.OidReset = '\0'; err = snmp_bc_set_reset_state((void *)&hnd, id, act); if (err != SA_ERR_HPI_INVALID_CMD) { printf("Error! No Hot Swap ResetOID TestCase\n"); printf("Error! snmp_bc_set_reset_state returned err=%d\n", err); return -1; } test_rpt.res_info.mib.OidReset = ".1.3.6.1.4.1.2.3.51.2.22.3.1.1.1.8.x"; /********************* * SNMP Error TestCase *********************/ snmp_force_error = 1; act = SAHPI_COLD_RESET; err = snmp_bc_set_reset_state((void *)&hnd, id, act); if (err == 0) { printf("Error! SNMP Error TestCase\n"); printf("Error! snmp_bc_set_reset_state returned err=%d\n", err); return -1; } snmp_force_error = 0; /*************************** * Derive OID Error TestCase ***************************/ act = SAHPI_COLD_RESET; test_rpt.rpt.ResourceEntity.Entry[0].EntityType = 0; err = snmp_bc_set_reset_state((void *)&hnd, id, act); if (err == 0) { printf("Error! Derive OID Error TestCase\n"); printf("Error! snmp_bc_set_reset_state returned err=%d\n", err); return -1; } test_rpt.rpt.ResourceEntity.Entry[0].EntityType = SAHPI_ENT_SBC_BLADE; /************************************ * Unrecognized Reset Action TestCase ************************************/ act = -1; err = snmp_bc_set_reset_state((void *)&hnd, id, act); if (err != SA_ERR_HPI_INVALID_PARAMS) { printf("Error! Unrecognized Reset Action TestCase\n"); printf("Error! snmp_bc_set_reset_state returned err=%d\n", err); return -1; } return 0; }
/** * snmp_bc_set_power_state: * @hnd: Handler data pointer. * @rid: Resource ID. * @state: Resource's power state to set. * * Sets a resource's power state. * * Return values: * SA_OK - Normal case. * SA_ERR_HPI_CAPABILITY - Resource doesn't have SAHPI_CAPABILITY_POWER. * SA_ERR_HPI_INVALID_RESOURCE - Resource doesn't exist. * SA_ERR_HPI_INVALID_PARAMS - Pointer parameter(s) are NULL; @state invalid. **/ SaErrorT snmp_bc_set_power_state(void *hnd, SaHpiResourceIdT rid, SaHpiPowerStateT state) { SaErrorT err = SA_OK; struct ResourceInfo *resinfo; struct snmp_value set_value; if (!hnd || NULL == oh_lookup_powerstate(state)) { dbg("Invalid parameter."); return(SA_ERR_HPI_INVALID_PARAMS); } struct oh_handler_state *handle = (struct oh_handler_state *)hnd; struct snmp_bc_hnd *custom_handle = (struct snmp_bc_hnd *)handle->data; if (!custom_handle) { dbg("Invalid parameter."); return(SA_ERR_HPI_INVALID_PARAMS); } /* Check if resource exists and has power capabilities */ SaHpiRptEntryT *rpt = oh_get_resource_by_id(handle->rptcache, rid); if (!rpt) return(SA_ERR_HPI_INVALID_RESOURCE); if (!(rpt->ResourceCapabilities & SAHPI_CAPABILITY_POWER)) return(SA_ERR_HPI_CAPABILITY); resinfo = (struct ResourceInfo *)oh_get_resource_data(handle->rptcache, rid); if (resinfo == NULL) { dbg("No resource data. Resource=%s", rpt->ResourceTag.Data); return(SA_ERR_HPI_INTERNAL_ERROR); } if (resinfo->mib.OidPowerOnOff == NULL) { dbg("No Power OnOff OID."); return(SA_ERR_HPI_INTERNAL_ERROR); } /* Set power on/off */ set_value.type = ASN_INTEGER; set_value.str_len = 1; switch (state) { case SAHPI_POWER_OFF: set_value.integer = 0; err = snmp_bc_oid_snmp_set(custom_handle, &(rpt->ResourceEntity), resinfo->mib.OidPowerOnOff, set_value); if (err) { dbg("Cannot set SNMP OID=%s; Type=%d.", resinfo->mib.OidPowerOnOff, set_value.type); if (err != SA_ERR_HPI_BUSY) err = SA_ERR_HPI_NO_RESPONSE; } break; case SAHPI_POWER_ON: set_value.integer = 1; err = snmp_bc_oid_snmp_set(custom_handle, &(rpt->ResourceEntity), resinfo->mib.OidPowerOnOff, set_value); if (err) { dbg("Cannot set SNMP OID=%s; Type=%d.", resinfo->mib.OidPowerOnOff, set_value.type); if (err != SA_ERR_HPI_BUSY) err = SA_ERR_HPI_NO_RESPONSE; } break; case SAHPI_POWER_CYCLE: { SaHpiResetActionT act = SAHPI_COLD_RESET; err = snmp_bc_set_reset_state(hnd, rid, act); } break; default: dbg("Invalid Power Action Type=%d.", state); err = SA_ERR_HPI_INTERNAL_ERROR; } return(err); }
int main(int argc, char **argv) { /* ************************ * Local variables * ***********************/ int testfail = 0; SaErrorT err; SaErrorT expected_err; SaHpiRptEntryT rptentry; SaHpiResourceIdT id = 0; SaHpiSessionIdT sessionid; SaHpiResetActionT act = 0; struct oh_handler_state l_handle; memset(&l_handle, 0, sizeof(struct oh_handler_state)); /* ************************************* * Find a resource with Power capability * ************************************* */ err = tsetup(&sessionid); if (err != SA_OK) { printf("Error! Can not open session for test environment\n"); printf(" File=%s, Line=%d\n", __FILE__, __LINE__); return -1; } err = tfind_resource(&sessionid, SAHPI_CAPABILITY_POWER, SAHPI_FIRST_ENTRY, &rptentry, SAHPI_TRUE); if (err != SA_OK) { printf("Can not find a Power resource for test environment\n"); printf(" File=%s, Line=%d\n", __FILE__, __LINE__); err = tcleanup(&sessionid); return SA_OK; } id = rptentry.ResourceId; /************************** * Test: Invalid handler **************************/ expected_err = SA_ERR_HPI_INVALID_PARAMS; err = snmp_bc_set_reset_state(NULL, id, act); checkstatus(err, expected_err, testfail); /************************** * Test: invalid action **************************/ expected_err = SA_ERR_HPI_INVALID_PARAMS; act = 0xFF; err = saHpiResourceResetStateSet(sessionid, id, act); checkstatus(err, expected_err, testfail); /************************** * Test : **************************/ expected_err = SA_ERR_HPI_INVALID_RESOURCE; act = SAHPI_WARM_RESET; err = saHpiResourceResetStateSet(sessionid, 5000, act); checkstatus(err, expected_err, testfail); /**************************&* * Cleanup after all tests ***************************/ err = tcleanup(&sessionid); return testfail; }