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 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);
}
コード例 #4
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;
}
コード例 #5
0
/* 
 * 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;
}
コード例 #6
0
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;
}
コード例 #7
0
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);
}
コード例 #8
0
/* 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;
}
コード例 #9
0
/* 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;
}