Example #1
0
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;
}
Example #2
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;
	/* 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;
}
Example #4
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);
}
Example #5
0
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;

}