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 to for querying the entire fault * history from the cli. */ ClRcT clFaultCliDebugCompleteHistoryShow( ClUint32T argc, ClCharT **argv, ClCharT** ret) { ClRcT rc = CL_OK; SaNameT moIdName = {0}; ClCorMOIdT moid; ClCorObjectHandleT hMSOObj; if ( argc != 2 ) { clFaultCliStrPrint(ret, "\nUsage : queryCompleteFaultHistory <Moid>\n" "\tMoid [STRING] : This is the absolute path of the MOID" "i.e \\Class_Chassis:0\\Class_GigeBlade:1 \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) { rc = clCorObjectHandleGet(&moid, &hMSOObj); if (CL_OK != rc) { clFaultCliStrPrint(ret, "clCorObjectHandleGet failed w/rc :%x \n", rc); return rc; } rc = clFaultHistoryShow(&moid); if(CL_OK != rc) { clFaultCliStrPrint(ret, "Error in fault history show, rc [0x%x]", rc); return rc; } clFaultCliStrPrint(ret, gHistoryString); clHeapFree(gHistoryString); } else clFaultCliStrPrint(ret, " MOId name to MOId conversion failed ..... \n"); return CL_OK; }
ClRcT clSnmpclockTableInstXlator (CL_IN const struct ClMedAgentId *pAgntId, CL_IN ClCorMOIdPtrT hmoId, CL_IN ClCorAttrPathPtrT containedPath, CL_OUT void** pRetInstData, CL_OUT ClUint32T *pInstLen, CL_OUT ClPtrT pCorAttrValueDescList, CL_IN ClMedInstXlationOpEnumT instXlnOp, CL_IN ClPtrT cookie) { ClRcT rc = CL_OK; /* Return code */ ClUint32T len = 0; ClSNMPRequestInfoT *pInst = NULL; clLog(CL_LOG_DEBUG, CL_SNMP_AREA, CL_SNMP_GEN_XLA_COTX, "Instant Xlation for MOID : "); CL_MED_COR_STR_MOID_PRINT(hmoId); if(!pAgntId || !pRetInstData || !pInstLen) { clLog(CL_LOG_ERROR, CL_SNMP_AREA, CL_SNMP_GEN_XLA_COTX, "clSnmpclockTableInstXlator received NULL arguments!"); return CL_ERR_NULL_POINTER; } pInst = (ClSNMPRequestInfoT*)*pRetInstData; if (pInst == NULL) { pInst = (ClSNMPRequestInfoT *) clHeapAllocate (sizeof (ClSNMPRequestInfoT)); if (pInst == NULL) { clLog(CL_LOG_CRITICAL, CL_SNMP_AREA, CL_SNMP_GEN_XLA_COTX, "clSnmpocTrainDefaultInstXlator Unable to allocate memory for the instance translation!"); return (CL_ERR_NO_MEMORY); } *pInstLen = sizeof (ClSNMPRequestInfoT); memset(pInst, 0, *pInstLen); *pRetInstData = (void**)pInst; } for(len = 0; len < pAgntId->len; len++) { pInst->oid[len] = pAgntId->id[len]; } pInst->tableType = CL_CLOCKTABLE; if (CL_MED_CREATION_BY_OI == instXlnOp) { ClCorObjectHandleT objHdl; ClUint32T attrSize = 0; clLog(CL_LOG_INFO, CL_SNMP_AREA, CL_SNMP_GEN_XLA_COTX, "clSnmpclockTableInstXlator: Translating hmoId to Index for SNMP table clockTable"); /* USER_CODE_MODIFICATION_NEEDS_TO_BE_PERFORMED * User should supply the logic to translate hmoId * to index value in pInst->index.clockTableInfo */ rc = clCorMoIdServiceSet(hmoId, CL_COR_SVC_ID_PROVISIONING_MANAGEMENT); if (rc != CL_OK) { clLog(CL_LOG_ERROR, CL_SNMP_AREA, CL_SNMP_GEN_XLA_COTX, "clCorMoIdServiceSet returned error rc : [0x%x]!", rc); return rc; } rc = clCorObjectHandleGet(hmoId, &objHdl); if(rc != CL_OK) { clLog(CL_LOG_ERROR, CL_SNMP_AREA, CL_SNMP_GEN_XLA_COTX, "clSnmpfileTableInstXlator: clCorObjectHandleGet returned error rc : [0x%x]!", rc); return rc; } if(clockTableIndexCorAttrIdList[0].attrId <= 0) { ClUint8T * indexOidList[] = { (ClUint8T *) "1.3.6.1.4.1.103.2.1.1.1", NULL /* End of Index OID List */ }; ClRcT rc = CL_OK; rc = clSnmpTableIndexCorAttrIdInit(1, indexOidList, clockTableIndexCorAttrIdList); if(rc != CL_OK) { clLog(CL_LOG_ERROR, CL_SNMP_AREA, CL_SNMP_GEN_XLA_COTX, "clSnmpTableIndexCorAttrIdInit returned error rc : [0x%x]", rc); } } attrSize = sizeof(pInst->index.clockTableInfo.clockRow); clLog(CL_LOG_DEBUG, CL_SNMP_AREA, CL_SNMP_GEN_XLA_COTX, "Getting attribute value for AttrId : [%d] Attr Len : [%d]", clockTableIndexCorAttrIdList[0].attrId, attrSize); rc = clCorObjectAttributeGet(objHdl, NULL, clockTableIndexCorAttrIdList[0].attrId, -1, &pInst->index.clockTableInfo.clockRow, &attrSize); if(rc != CL_OK) { clLog(CL_LOG_ERROR, CL_SNMP_AREA, CL_SNMP_GEN_XLA_COTX, "Failed to get attribute information : [0x%x]", rc); return rc; } } *pRetInstData = (void**)pInst; 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; }
/* * this api is used to for querying the fault history * for a particular set of attributes from the cli. */ ClRcT clFaultCliDebugHistoryShow( ClUint32T argc, ClCharT **argv, ClCharT** ret) { ClRcT rc = CL_OK; SaNameT moIdName = {0}; ClUint8T catIndex, sevIndex; ClUint8T recordFound = 0; ClCorMOIdT moid; ClFaultRecordT* fRecord; ClFaultRecordPtr historyRec; ClCorObjectHandleT hMSOObj; if ( argc != 6 ) { clFaultCliStrPrint(ret, "\nUsage : queryFaulthistory <Moid>" " <Category#> <SpecificProblem#> <Severity#> <Cause#>\n" "\tMoid [STRING] : This is the absolute path of the MOID" "i.e \\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" "\tSpecProblem[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"); 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)); historyRec = (ClFaultRecordPtr)clHeapAllocate(sizeof(ClFaultRecordT)); if(fRecord == NULL || historyRec == NULL) { clLogWrite(CL_LOG_HANDLE_SYS, CL_LOG_SEV_CRITICAL, CL_FAULT_SERVER_LIB, CL_LOG_MESSAGE_0_MEMORY_ALLOCATION_FAILED); return CL_FAULT_RC(CL_ERR_NO_MEMORY); } rc = clCorObjectHandleGet(&moid, &hMSOObj); if (CL_OK != rc) { clFaultCliStrPrint(ret, " Invalid MoId passed..... \n"); clHeapFree(fRecord); clHeapFree(historyRec); 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).moId = moid; (fRecord->event).category= clFaultCategory2InternalTranslate((fRecord->event).category); (fRecord->event).severity= clFaultSeverity2InternalTranslate((fRecord->event.severity)); if ( (rc = clFaultCategory2IndexTranslate( (fRecord->event).category, &catIndex)) != CL_OK ) { clFaultCliStrPrint(ret, "\nFM REPAIR, Invalid CATEGORY. CANNOT PROCESS QUERY\n"); clHeapFree(fRecord); clHeapFree(historyRec); return CL_OK; } if( (rc = clFaultSeverity2IndexTranslate( (fRecord->event).severity, &sevIndex)) != CL_OK ) { clFaultCliStrPrint(ret, "\nFM REPAIR, Invalid SEVERITY. CANNOT PROCESS QUERY\n"); clHeapFree(fRecord); clHeapFree(historyRec); return rc; } rc = clFaultHistoryDataLock(); if (rc != CL_OK) { clFaultCliStrPrint(ret, " REPAIR: Not able to get history data lock rc [0x%x]\n", rc); clHeapFree(fRecord); clHeapFree(historyRec); return rc; } rc = clFaultProcessFaultRecordQuery(&(fRecord->event.moId), (fRecord->event).category, (fRecord->event).severity, (fRecord->event).specificProblem, (fRecord->event).cause, CL_ALL_BUCKETS,historyRec, &recordFound); if(!recordFound) { /* record not found */ fRecord->seqNum = 0; } else { /* record found */ fRecord->seqNum = historyRec->seqNum; } rc = clFaultHistoryDataUnLock(); if (rc != CL_OK) { clFaultCliStrPrint(ret, "REPAIR: Not able to get history data lock rc:0x%x \n", rc); clHeapFree(fRecord); clHeapFree(historyRec); return rc; } clFaultRecordPack(fRecord,ret); clHeapFree(fRecord); clHeapFree(historyRec); } else clFaultCliStrPrint(ret, " MOId name to MOId conversion failed ..... \n"); return CL_OK; }
ClRcT clProvObjectDelete(ClCorObjectHandleT pHandle) { ClRcT rc = CL_OK; ClCorTxnSessionIdT tid = 0; ClCorMOIdPtrT pMoId = NULL; ClCorObjectHandleT objHandle = NULL; ClCorServiceIdT svcId = 0; ClUint32T i = 0; CL_FUNC_ENTER(); rc = clCorMoIdAlloc(&pMoId); if (rc != CL_OK) { CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Failed to allocate MoId. rc [0x%x]", rc)); CL_FUNC_EXIT(); return rc; } rc = clCorObjectHandleToMoIdGet(pHandle, pMoId, &svcId); if (rc != CL_OK) { CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Failed to get the MoId from object handle. rc [0x%x]", rc)); clCorMoIdFree(pMoId); CL_FUNC_EXIT(); return rc; } for (i = CL_COR_SVC_ID_DEFAULT + 1; i < CL_COR_SVC_ID_MAX; i++) { rc = clCorMoIdServiceSet(pMoId, (ClCorMOServiceIdT) i); if (rc != CL_OK) { CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Failed to set the service Id in the MoId. rc [0x%x]", rc)); clCorMoIdFree(pMoId); CL_FUNC_EXIT(); return rc; } rc = clCorObjectHandleGet(pMoId, &objHandle); if ((rc == CL_OK) && (CL_COR_SVC_ID_PROVISIONING_MANAGEMENT != i)) { /* Some other mso object exists. * Delete the provisioning mso and exit. */ /* Free the object handle */ clCorObjectHandleFree(&objHandle); rc = clCorMoIdServiceSet(pMoId, (ClCorMOServiceIdT) CL_COR_SVC_ID_PROVISIONING_MANAGEMENT); if (rc != CL_OK) { CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Failed to set the service Id in the MoId. rc [0x%x]", rc)); clCorMoIdFree(pMoId); CL_FUNC_EXIT(); return rc; } rc = clCorObjectHandleGet(pMoId, &objHandle); if (rc == CL_OK) { rc = clCorObjectDelete(CL_COR_SIMPLE_TXN, objHandle); if (rc != CL_OK) { CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Failed to delete the MSo object. rc [0x%x]", rc)); clCorMoIdFree(pMoId); CL_FUNC_EXIT(); return rc; } } clCorMoIdFree(pMoId); CL_FUNC_EXIT(); return CL_OK; } } tid = 0; rc = clCorMoIdServiceSet(pMoId, (ClCorMOServiceIdT) CL_COR_SVC_ID_PROVISIONING_MANAGEMENT); if (rc != CL_OK) { CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Failed to set the service Id in the MoId. rc [0x%x]", rc)); clCorMoIdFree(pMoId); CL_FUNC_EXIT(); return rc; } rc = clCorObjectHandleGet(pMoId, &objHandle); if (rc == CL_OK) { rc = clCorObjectDelete(&tid, objHandle); if (rc != CL_OK) { CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Failed delete the prov MSO object. rc [0x%x]\n", rc)); clCorMoIdFree(pMoId); CL_FUNC_EXIT(); return rc; } } rc = clCorMoIdServiceSet(pMoId, CL_COR_INVALID_SRVC_ID); if (rc != CL_OK) { CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Failed to set the svc id. rc [0x%x]", rc)); clCorMoIdFree(pMoId); clCorTxnSessionFinalize(tid); CL_FUNC_EXIT(); return rc; } rc = clCorObjectHandleGet(pMoId, &objHandle); if (rc == CL_OK) { rc = clCorObjectDelete(&tid, objHandle); if (rc != CL_OK) { CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Failed to delete the object. rc [0x%x]", rc)); clCorMoIdFree(pMoId); clCorTxnSessionFinalize(tid); CL_FUNC_EXIT(); return rc; } } rc = clCorTxnSessionCommit(tid); if (rc != CL_OK) { CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Failed to commit the transaction. rc [0x%x]", rc)); clCorMoIdFree(pMoId); clCorTxnSessionFinalize(tid); CL_FUNC_EXIT(); return rc; } /* Free the handle given by the user */ clCorObjectHandleFree(&pHandle); clCorMoIdFree(pMoId); CL_FUNC_EXIT(); return CL_OK; }
ClRcT clProvObjectCreate(ClCorMOIdPtrT pMoId, ClCorAttributeValueListPtrT attrList, ClCorObjectHandleT* pHandle) { ClRcT rc = CL_OK; ClCorMOIdPtrT pTempMoId = NULL; ClCorObjectHandleT moHandle = NULL; ClCorObjectHandleT msoHandle = NULL; ClCorTxnSessionIdT tid = 0; ClCorAddrT provAddr = {0}; CL_FUNC_ENTER(); /* Create the MO object */ if(NULL == pMoId) { CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("\nNULL parameter passed\n")); CL_FUNC_EXIT(); return CL_COR_SET_RC(CL_COR_ERR_NULL_PTR); } rc = clCorMoIdClone(pMoId, &pTempMoId); if(CL_OK != rc) { CL_DEBUG_PRINT(CL_DEBUG_ERROR,("Failed while cloning the MoId. rc[0x%x]", rc)); CL_FUNC_EXIT(); return rc; } rc = clCorMoIdServiceSet(pTempMoId, CL_COR_INVALID_SRVC_ID); if (rc != CL_OK) { CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Failed to set the service id of the MoId. rc [0x%x]", rc)); clCorMoIdFree(pTempMoId); CL_FUNC_EXIT(); return rc; } tid = 0; if (CL_OK != clCorObjectHandleGet(pTempMoId, &moHandle)) { rc = clCorObjectCreate(&tid, pTempMoId, NULL); if (rc != CL_OK) { CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Failed to add MO object creation in txn. rc [0x%x]", rc)); clCorMoIdFree(pTempMoId); CL_FUNC_EXIT(); return rc; } } else clCorObjectHandleFree(&moHandle); rc = clCorMoIdServiceSet(pTempMoId, CL_COR_SVC_ID_PROVISIONING_MANAGEMENT); if (rc != CL_OK) { CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Failed to set the service id of the MoId. rc [0x%x]\n", rc)); clCorMoIdFree(pTempMoId); clCorTxnSessionFinalize(tid); CL_FUNC_EXIT(); return rc; } if (CL_OK != clCorObjectHandleGet(pTempMoId, &msoHandle)) { rc = clCorObjectCreateAndSet(&tid, pTempMoId, attrList, &msoHandle); if (rc != CL_OK) { CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Failed to add create and set for the MSO object in txn. rc [0x%x]", rc)); clCorMoIdFree(pTempMoId); clCorTxnSessionFinalize(tid); CL_FUNC_EXIT(); return (rc); } rc = clCorTxnSessionCommit(tid); if (rc != CL_OK) { CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Failed to commit the transaction. rc [0x%x]", rc)); clCorObjectHandleFree(&msoHandle); clCorMoIdFree(pTempMoId); clCorTxnSessionFinalize(tid); CL_FUNC_EXIT(); return rc; } provAddr.nodeAddress = clIocLocalAddressGet(); rc = clEoMyEoIocPortGet(&provAddr.portId); if (rc != CL_OK) { CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Failed to get the IOC port. rc [0x%x]", rc)); clCorObjectHandleFree(&msoHandle); clCorMoIdFree(pTempMoId); CL_FUNC_EXIT(); return rc; } rc = clCorOIRegister(pTempMoId, &provAddr); if (rc != CL_OK) { CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Failed to register the OI with COR. rc [0x%x]", rc)); clCorObjectHandleFree(&msoHandle); clCorMoIdFree(pTempMoId); CL_FUNC_EXIT(); return rc; } } clCorMoIdFree(pTempMoId); /* Assign the prov mso handle */ *pHandle = msoHandle; CL_FUNC_EXIT(); return (CL_OK); }
/* This function is called when the resource object not precreated by component is comming up. * 1. Register with COR to know any change in the object. */ ClRcT clProvIfCreateFlagIsFalse( ClCorMOIdPtrT pFullMoId, ClCorAddrT* pProvAddr, ClUint32T primaryOIFlag ) { ClRcT rc = CL_OK, ret = CL_OK; ClCorObjectHandleT corObjHandle = NULL; ClCorMOIdT tempMoId; CL_FUNC_ENTER(); ( void )clCorMoIdInitialize( &tempMoId ); memcpy( &tempMoId, pFullMoId, sizeof( ClCorMOIdT ) ); ( void )clCorMoIdServiceSet( &tempMoId, CL_COR_SVC_ID_PROVISIONING_MANAGEMENT ); /* * If we expect object will be created by default then of the object is not created then return error. */ rc = clCorObjectHandleGet( pFullMoId, &corObjHandle ); if ( CL_OK != rc ) { ret = CL_PROV_RC(CL_PROV_INTERNAL_ERROR); goto handleError; } else clCorObjectHandleFree(&corObjHandle); ( void )clCorMoIdServiceSet( pFullMoId, CL_COR_SVC_ID_PROVISIONING_MANAGEMENT ); /* * If we expect object will be created by default then of the object is not created then return error. */ rc = clCorObjectHandleGet( pFullMoId, &corObjHandle ); if(CL_OK != rc) { ret = CL_PROV_RC(CL_PROV_INTERNAL_ERROR); goto handleError; } else clCorObjectHandleFree(&corObjHandle); rc = clProvOmObjectPrepare( pFullMoId ); handleError: /* * Add this rule so that if the object is created later, component will get the notification. */ rc = clProvRuleAdd( &tempMoId, pProvAddr ); if(CL_OK != rc) { clLogError("PRV", "PRE", "Failed to register for the MO as the OI. rc [0x%x]", rc); return rc; } /* Register the primary OI. */ if( CL_TRUE == primaryOIFlag) { CL_DEBUG_PRINT(CL_DEBUG_TRACE,("Is PriamryOI flag is %d, addr [0x%x: 0x%x] ", primaryOIFlag, pProvAddr->nodeAddress, pProvAddr->portId)); rc = clCorPrimaryOISet(&tempMoId, pProvAddr); if ( CL_OK != rc ) { clLogError("PRV", "PRE", "Primary-OI set failed. rc [0x%x]", rc); return rc; } } CL_FUNC_EXIT(); return ret; }
/* This function is called when the resource object needs to be precreated by component is comming up. * 1. Find out if the object is already created. (This can be created by North bound or componet which already * Instanciated) * 2. If the object is already created then do nothing, simply return CL_OK. * 3. If it is not create then create the object for provisoning. * 4. Register with COR to know any change in the object. */ ClRcT clProvIfCreateFlagIsTrue( ClCorMOIdPtrT pFullMoId, ClCorAddrT* pProvAddr , ClUint32T primaryOIFlag, ClBoolT autoCreateFlag) { ClRcT rc = CL_OK; ClCorObjectHandleT corObjHandle = NULL; CL_FUNC_ENTER(); if (!autoCreateFlag) { rc = clCorObjectHandleGet(pFullMoId, &corObjHandle); if (rc != CL_OK) { rc = clCorObjectCreate( NULL, pFullMoId, NULL); if ((rc != CL_OK) && (CL_GET_ERROR_CODE(rc) != CL_COR_INST_ERR_MO_ALREADY_PRESENT)) { clLogError("PRV", CL_LOG_CONTEXT_UNSPECIFIED, (ClCharT *) CL_PROV_LOG_1_CREATING_OBJECT, rc); CL_FUNC_EXIT(); return CL_PROV_RC(CL_PROV_INTERNAL_ERROR); } } else clCorObjectHandleFree(&corObjHandle); } rc = clCorMoIdServiceSet( pFullMoId, CL_COR_SVC_ID_PROVISIONING_MANAGEMENT ); CL_PROV_CHECK_RC1_LOG1( rc, CL_OK, rc, CL_LOG_ERROR, CL_PROV_LOG_1_SERVICE_SET, rc ); if (!autoCreateFlag) { rc = clCorObjectHandleGet(pFullMoId, &corObjHandle); if (rc != CL_OK) { rc = clCorObjectCreate( NULL, pFullMoId, NULL ); if ((rc != CL_OK) && (CL_GET_ERROR_CODE(rc) != CL_COR_INST_ERR_MSO_ALREADY_PRESENT)) { clLogError("PRV", CL_LOG_CONTEXT_UNSPECIFIED, (ClCharT *) CL_PROV_LOG_1_CREATING_OBJECT, rc); CL_FUNC_EXIT(); return CL_PROV_RC(CL_PROV_INTERNAL_ERROR); } } else clCorObjectHandleFree(&corObjHandle); } rc = clProvOmObjectPrepare( pFullMoId ); /* * This should not called before creating MSO. In that case, if the application has only one thred it * will time out. Because clcorobjectcreate function will do sync RMD to cor. then cor will initiate the * transation */ rc = clProvRuleAdd( pFullMoId, pProvAddr ); if ( CL_OK != rc ) { clLogError("PRV", "PRE", "Failed to register for the MO as the OI. rc [0x%x]", rc); return rc; } /* Register the primary OI. */ if( CL_TRUE == primaryOIFlag) { CL_DEBUG_PRINT(CL_DEBUG_TRACE,("Is primaryOI flag is %d, addr [0x%x: 0x%x] ", primaryOIFlag, pProvAddr->nodeAddress, pProvAddr->portId)); rc = clCorPrimaryOISet(pFullMoId, pProvAddr); if(CL_OK != rc) { clLogError("PRV", "PRE", "Primary OI registration failed. rc [0x%x]", rc); return rc; } } CL_FUNC_EXIT(); return CL_OK; }