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; }
/* * 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; }