ClRcT clCorAmfMoIdGet(const ClCharT *name,
                      ClAmsEntityTypeT type,
                      ClCorMOIdT *pMoId)
{
    ClAmsEntityT entity = {0};
    ClBufferHandleT msg = 0;
    ClRcT rc = CL_OK;
    ClVersionT version = {'B', 0x1, 0x1};
    ClCharT *data = NULL;
    ClUint32T dataLen = 0;
    ClCorObjectHandleT objHandle;

    if(!name || !pMoId) return CL_COR_SET_RC(CL_ERR_INVALID_PARAMETER);

    if(!mgmtHandle)
    {
        rc = clAmsMgmtInitialize(&mgmtHandle, NULL, &version);
        if(rc != CL_OK) return rc;
    }

    entity.type = type;
    clNameSet(&entity.name, name);
    ++entity.name.length;
    rc = clAmsMgmtEntityUserDataGetKey(mgmtHandle, &entity, &entity.name, &data, &dataLen);
    if(rc != CL_OK)
    {
        clLogError("FLT", "REPAIR", "Entity data get for [%s] returned [%#x]",
                   entity.name.value, rc);
        goto out_free;
    }
    rc = clBufferCreate(&msg);
    CL_ASSERT(rc == CL_OK);
    rc = clBufferNBytesWrite(msg, (ClUint8T*)data, dataLen);
    CL_ASSERT(rc == CL_OK);
    
    rc = VDECL_VER(clXdrUnmarshallClCorMOIdT, 4, 0, 0)(msg, pMoId);
    CL_ASSERT(rc == CL_OK);
    
    clBufferDelete(&msg);

    clLogNotice("COR", "AMF", "MOID for faulty entity [%s] ", entity.name.value);
    clCorMoIdShow(pMoId);
    
    /*
     * Validating moid
     */
    rc = clCorObjectHandleGet(pMoId, &objHandle);
    CL_ASSERT(rc == CL_OK);

    out_free:
    if(msg) clBufferDelete(&msg);
    if(data) clHeapFree(data);

    return rc;
}
コード例 #2
0
/* 
 * this api is used for generating the fault
 * from the cli.
 */
ClRcT
clFaultCliDebugGenerateFault(ClUint32T argc, 
                             ClCharT **argv, 
                             ClCharT** ret)
{
	ClRcT               rc = CL_OK;
    SaNameT             moIdName = {0};
	ClCorMOIdT          moid;
	ClFaultRecordT*     fRecord;
	ClCorObjectHandleT  hMSOObj;

	if ( argc != 7 )
    {
		clFaultCliStrPrint(ret, 
                "\nUsage : generateFault <Moid#>"
                " <Category#> <SpecificProblem#> <Severity#> <Cause#> <alarmState>\n"
                "\tMoid [STRING]    : This is the absolute path of the MOID"
                "Ex:- \\Class_Chassis:0\\Class_GigeBlade:1 \n"
                "\tCategory [DEC]   : Category of the fault\n"
                "\tValid values are : 1 for COMMUNICATIONS, 2 for QUALITY OF SERVICE,\n\t\t\t   3 for PROCESSING ERROR, 4 for EQUIPMENT,\n\t\t\t   5 for ENVIRONMENTAL\n\n"
                "\tSpecProb [DEC]   : Specific problem of the fault\n"
                "\tSeverity [DEC]   : Severity of the fault\n"
                "\tValid values are : 1 for CRITICAL, 2 for MAJOR,\n\t\t\t   3 for MINOR, 4 for WARNING,\n\t\t\t   5 for INTERMEDIATE, 6 for CLEAR\n\n"
                "\tCause [DEC]      : Cause of the fault\n"
                "\tValid values are : 1 to 57. Refer ClAlarmProbableCauseT for more description\n"
                "\tAlarm State [DEC]: State of the fault\n"
                "\tValid values are : 0 for CLEAR, 1 for ASSERT\n");
		return CL_OK;
    }
//	rc = clFaultXlateMOPath (argv[1], &moid );
    strcpy(moIdName.value, argv[1]);
    moIdName.length = strlen(argv[1]);
    rc = clCorMoIdNameToMoIdGet(&moIdName, &moid);
	if ( CL_OK == rc)
    {
		fRecord =(ClFaultRecordT*)clHeapAllocate(sizeof(ClFaultRecordT));
		if(fRecord == NULL)
		{
            clFaultCliStrPrint(ret,
                    "Heap allocation error. Error in generating fault\n");
			return CL_FAULT_RC(CL_ERR_NO_MEMORY);
		}
		
        clCorMoIdShow(&moid);
		rc = clCorObjectHandleGet(&moid, &hMSOObj);
		if (CL_OK != rc)
		{
			clFaultCliStrPrint(ret,
                    "clCorObjectHandleGet for MOId [%s] failed with error [0x%x]. Error in generating fault\n", 
                    moIdName.value, rc);
			clHeapFree(fRecord);
            return rc;
		}
		(fRecord->event).category = atoi(argv[2]);
        (fRecord->event).specificProblem = atoi(argv[3]);
        (fRecord->event).severity = atoi(argv[4]);
        (fRecord->event).cause = atoi(argv[5]);
        if((fRecord->event).cause < CL_ALARM_PROB_CAUSE_LOSS_OF_SIGNAL 
                        ||
           (fRecord->event).cause > CL_ALARM_PROB_CAUSE_ENCLOSURE_DOOR_OPEN)
        {
            clFaultCliStrPrint(ret, 
                    "Invalid probable cause [%s] supplied. Please see usage for the valid range of values\n");
            return CL_FAULT_ERR_INVLD_VAL;
        }
        (fRecord->event).alarmState = atoi(argv[6]);
		(fRecord->event).moId = moid;	

		rc = clFaultValidateCategory((fRecord->event).category);
        if (CL_OK != rc)
        {
			clHeapFree(fRecord);
	        clFaultCliStrPrint(ret, 
                    "Invalid Category [%s] of Alarm. Please see usage for the valid range of values\n",
                    argv[2]);
            return rc;
        }

		rc = clFaultValidateSeverity((fRecord->event).severity);
        if (CL_OK != rc)
        {
			clHeapFree(fRecord);
	        clFaultCliStrPrint(ret,
                    "Invalid Severity [%s] of Alarm. Please use usage for the valid range of values\n",
                    argv[4]);
            return rc;
        }

		if((fRecord->event).alarmState == 1 ||
			(fRecord->event).alarmState == 0)
		{
								
			(fRecord->event).category=
				clFaultCategory2InternalTranslate((fRecord->event).category);
			(fRecord->event).severity=
				clFaultSeverity2InternalTranslate((fRecord->event.severity));
			rc = clFaultRepairProcess(fRecord);
            if(CL_OK != rc)
            {
                clFaultCliStrPrint(ret, 
                        "Error in generating fault error[0x%x]\n");
                clHeapFree(fRecord);
                return rc;
            }
			clHeapFree(fRecord);	
            clFaultCliStrPrint(ret, 
                    "Successfully generated fault\n");
            return CL_OK;
		}
		else
        {
			clFaultCliStrPrint(ret, 
                    " Invalid Alarm State. Error in generating fault \n");
            clHeapFree(fRecord);
            return rc;
        }
    }
	else
    {
		clLogError(CL_FAULT_SERVER_LIB,CL_LOG_CONTEXT_UNSPECIFIED,
                           "MOId name to MOId conversion failed. Error in generating fault\n");
        clFaultCliStrPrint(ret,
                "Name to MOId conversion failed for MOId[%s], error [0x%x]\n", 
                moIdName.value, rc);
    }

	return rc;
}