/* * 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; }
/** * This function is used to un-register for all the MOs for which the registration was happened * during initialization phase. It will un-register for all the resource entires of the resource * table (rt) xml file. */ ClRcT _clProvOIUnregister() { ClRcT rc = CL_OK; ClCorAddrT provAddr = {0}; ClCorMOIdT moId ; ClUint32T index = 0; ClOampRtResourceArrayT resourcesArray = {0}; rc = clMsoConfigResourceInfoGet( &provAddr, &resourcesArray ); if (CL_OK != rc) { clLogError("PRV","URG", "Failed while getting the resource information. rc[0x%x] ", rc); return rc; } for (index = 0; index < resourcesArray.noOfResources ; index++) { clCorMoIdInitialize(&moId); rc = clCorMoIdNameToMoIdGet(&(resourcesArray.pResources[index].resourceName), &moId); if (CL_OK != rc) { clLogError("PRV", "URG", "Failed to get the MOID from the give moid name[%s]. rc[0x%x]", resourcesArray.pResources[index].resourceName.value, rc); continue; } clCorMoIdServiceSet(&moId, CL_COR_SVC_ID_PROVISIONING_MANAGEMENT); rc = clCorOIUnregister(&moId, &provAddr); if (CL_OK != rc) { clLogError("PRV", "URG", "Failed while unregistering the route entry for resource [%s], rc[0x%x]", resourcesArray.pResources[index].resourceName.value, rc); continue; } } if (resourcesArray.noOfResources != 0) clHeapFree(resourcesArray.pResources); return rc; }
ClRcT corAmfMibTreeInitialize(void) { ClRcT rc = CL_OK; ClVersionT version = {'B', 0x1 , 0x1}; ClCorMOIdT moId; ClCorMOIdT chassisMoid; ClAmsEntityBufferT nodeList = {0}; ClAmsEntityBufferT suList = {0}; ClAmsEntityBufferT compList = {0}; ClAmsEntityBufferT sgList = {0}; ClAmsEntityBufferT siList = {0}; ClAmsEntityBufferT csiList = {0}; ClCorClassTypeT classIds[CL_AMS_ENTITY_TYPE_MAX+2] = {0}; ClInt32T chassisId = 0; ClNameT entityName = {0}; ClUint32T i = 0; static ClUint32T extendedIndexTable[CL_AMS_MGMT_OI_EXTENDED_CLASS_MAX]; rc = corAmfEntityInitialize(); if(rc != CL_OK) goto out; rc = clAmsMgmtInitialize(&mgmtHandle, NULL, &version); if(rc != CL_OK) { clLogError("COR", "AMF", "Mgmt initialize returned [%#x]", rc); goto out; } snprintf(entityName.value, sizeof(entityName.value), "%s:%d", "\\Chassis", chassisId); entityName.length = strlen(entityName.value); rc = clCorMoIdNameToMoIdGet(&entityName, &chassisMoid); if(rc != CL_OK) { clLogError("COR", "AMF", "Cor moid get returned [%#x] for name [%s]", rc, entityName.value); goto out; } for(i = 0; i <= CL_AMS_ENTITY_TYPE_MAX; ++i) { rc = corAmfEntityClassGet(i, classIds + i); if(rc != CL_OK) { clLogError("COR", "AMF", "Entity class for [%s] not found", CL_AMS_STRING_ENTITY_TYPE(i)); goto out; } } if( (rc = clAmsMgmtGetNodeList(mgmtHandle, &nodeList)) != CL_OK) { clLogError("COR", "AMF", "Node list returned [%#x]", rc); goto out; } /* * Create objects for nodes/sus/comps/sgs/sis/csis */ for(i = 0; i < nodeList.count; ++i) { memcpy(&moId, &chassisMoid, sizeof(moId)); clCorMoIdAppend(&moId, classIds[CL_AMS_ENTITY_TYPE_NODE], i); rc = corAmfObjectCreate(i, &nodeList.entity[i], &moId); if(rc != CL_OK) goto out; } rc = clAmsMgmtGetSUList(mgmtHandle, &suList); if(rc != CL_OK) { clLogError("COR", "AMF", "SU list get returned [%#x]", rc); goto out; } for(i = 0; i < suList.count; ++i) { memcpy(&moId, &chassisMoid, sizeof(moId)); rc = clCorMoIdAppend(&moId, classIds[CL_AMS_ENTITY_TYPE_SU], i); CL_ASSERT(rc == CL_OK); rc = corAmfObjectCreate(i, &suList.entity[i], &moId); if(rc != CL_OK) goto out; } rc = clAmsMgmtGetCompList(mgmtHandle, &compList); if(rc != CL_OK) { clLogError("COR", "AMF", "Comp list get returned [%#x]", rc); goto out; } for(i = 0; i < compList.count; ++i) { memcpy(&moId, &chassisMoid, sizeof(moId)); rc = clCorMoIdAppend(&moId, classIds[CL_AMS_ENTITY_TYPE_COMP], i); CL_ASSERT(rc == CL_OK); rc = corAmfObjectCreate(i, &compList.entity[i], &moId); if(rc != CL_OK) goto out; } rc = clAmsMgmtGetSGList(mgmtHandle, &sgList); if(rc != CL_OK) { clLogError("COR", "AMF", "SG list returned [%#x]", rc); goto out; } for(i = 0; i < sgList.count; ++i) { ClAmsEntityBufferT rankList = {0}; memcpy(&moId, &chassisMoid, sizeof(moId)); rc = clCorMoIdAppend(&moId, classIds[CL_AMS_ENTITY_TYPE_SG], i); CL_ASSERT(rc == CL_OK); rc = corAmfObjectCreate(i, &sgList.entity[i], &moId); if(rc != CL_OK) goto out; rc = clAmsMgmtGetSGSIList(mgmtHandle, &sgList.entity[i], &rankList); if(rc != CL_OK) { clLogError("COR", "AMF", "SG [%s] si list returned [%#x]", sgList.entity[i].name.value, rc); goto out; } rc = corAmfExtendedClassObjectCreate("saAmfSGSIRankTable", &sgList.entity[i], &chassisMoid, rankList.count, &extendedIndexTable[CL_AMS_MGMT_OI_SGSIRANK], &i); if(rankList.entity) { clHeapFree(rankList.entity); rankList.entity = NULL; rankList.count = 0; } rc = clAmsMgmtGetSGSUList(mgmtHandle, &sgList.entity[i], &rankList); if(rc != CL_OK) { clLogError("COR", "AMF", "SG [%s] su list returned [%#x]", sgList.entity[i].name.value, rc); goto out; } rc = corAmfExtendedClassObjectCreate("saAmfSGSURankTable", &sgList.entity[i], &chassisMoid, rankList.count, &extendedIndexTable[CL_AMS_MGMT_OI_SGSURANK], &i); if(rankList.entity) { clHeapFree(rankList.entity); rankList.count = 0; } } rc = clAmsMgmtGetSIList(mgmtHandle, &siList); if(rc != CL_OK) { clLogError("COR", "AMF", "SI list get returned [%#x]", rc); goto out; } for(i = 0; i < siList.count; ++i) { ClAmsEntityBufferT list = {0}; memcpy(&moId, &chassisMoid, sizeof(moId)); rc = clCorMoIdAppend(&moId, classIds[CL_AMS_ENTITY_TYPE_SI], i); CL_ASSERT(rc == CL_OK); rc = corAmfObjectCreate(i, &siList.entity[i], &moId); if(rc != CL_OK) goto out; rc = clAmsMgmtGetSIDependenciesList(mgmtHandle, &siList.entity[i], &list); if(rc != CL_OK) { clLogError("COR", "AMF", "SI [%s] dependencies list returned [%#x]", siList.entity[i].name.value, rc); goto out; } if(list.count) { rc = corAmfExtendedClassObjectCreate("saAmfSISIDepTable", &siList.entity[i], &chassisMoid, list.count, &extendedIndexTable[CL_AMS_MGMT_OI_SISIDEP], &i); } if(list.entity) { clHeapFree(list.entity); list.count = 0; } rc = clAmsMgmtGetSISURankList(mgmtHandle, &siList.entity[i], &list); if(rc != CL_OK) { clLogError("COR", "AMF", "SI [%s] su rank list returned [%#x]", siList.entity[i].name.value, rc); goto out; } if(list.count) { rc = corAmfExtendedClassObjectCreate("saAmfSUsperSIRankTable", &siList.entity[i], &chassisMoid, list.count, &extendedIndexTable[CL_AMS_MGMT_OI_SUSPERSIRANK], &i); } if(list.entity) { list.count = 0; clHeapFree(list.entity); } } rc = clAmsMgmtGetCSIList(mgmtHandle, &csiList); if(rc != CL_OK) { clLogError("COR", "AMF", "CSI list get returned [%#x]", rc); goto out; } for(i = 0; i < csiList.count; ++i) { ClAmsCSINVPBufferT buffer = {0}; ClAmsEntityBufferT list = {0}; memcpy(&moId, &chassisMoid, sizeof(moId)); rc = clCorMoIdAppend(&moId, classIds[CL_AMS_ENTITY_TYPE_CSI], i); CL_ASSERT(rc == CL_OK); rc = corAmfObjectCreate(i, &csiList.entity[i], &moId); if(rc != CL_OK) goto out; rc = clAmsMgmtGetCSINVPList(mgmtHandle, &csiList.entity[i], &buffer); if(rc != CL_OK) { clLogError("COR", "AMF", "CSI [%s] nvp list returned [%#x]", csiList.entity[i].name.value, rc); goto out; } rc = corAmfExtendedClassObjectCreate("saAmfCSINameValueTable", &csiList.entity[i], &chassisMoid, buffer.count, &extendedIndexTable[CL_AMS_MGMT_OI_CSINAMEVALUE], &i); if(buffer.nvp) { clHeapFree(buffer.nvp); } rc = clAmsMgmtGetCSIDependenciesList(mgmtHandle, &csiList.entity[i], &list); if(rc != CL_OK) { clLogError("COR", "AMF", "CSI [%s] dependencies list returned [%#x]", csiList.entity[i].name.value, rc); goto out; } rc = corAmfExtendedClassObjectCreate("saAmfCSICSIDepTable", &csiList.entity[i], &chassisMoid, list.count, &extendedIndexTable[CL_AMS_MGMT_OI_CSICSIDEP], &i); if(list.entity) { clHeapFree(list.entity); } } /* * We are here when the objects are all created. Do a commit */ rc = corAmfObjectCommit(); if(rc != CL_OK) { clLogError("COR", "AMF", "Object commit returned [%#x]", rc); goto out; } clLogNotice("COR", "AMF", "COR AMF tree successfully initialized"); out: if(nodeList.entity) clHeapFree(nodeList.entity); if(suList.entity) clHeapFree(suList.entity); if(compList.entity) clHeapFree(compList.entity); if(sgList.entity) clHeapFree(sgList.entity); if(siList.entity) clHeapFree(siList.entity); if(csiList.entity) clHeapFree(csiList.entity); return rc; }
ClRcT clAmsMgmtOIInitialize(ClAmsMgmtHandleT *pHandle, ClRcT (*pClAmsMgmtOIConfigAttributesGet) (ClAmsEntityConfigT*, ClCorAttributeValueListPtrT pAttrList), ClRcT (*pClAmsMgmtOIExtendedConfigAttributesGet) (ClAmsMgmtOIExtendedClassTypeT type, ClAmsMgmtOIExtendedEntityConfigT *pConfig, ClCorClassTypeT *pClassType, ClCorAttributeValueListT *pAttrList)) { ClRcT rc = CL_OK; ClAmsMgmtHandleT handle = 0; ClAmsEntityBufferT buffer[CL_AMS_ENTITY_TYPE_MAX+2] = {{0}}; ClVersionT version = {'B', 0x1, 0x1}; ClCorTxnSessionIdT txnSession = 0; ClUint32T i; ClCorAddrT appAddress = {0}; SaNameT chassisInstance = {0}; ClUint32T chassisId = 0; if(!pClAmsMgmtOIConfigAttributesGet) return CL_AMS_RC(CL_ERR_INVALID_PARAMETER); rc = clOsalMutexInit(&gClAmsMgmtOICacheMutex); CL_ASSERT(rc == CL_OK); rc = clEoMyEoIocPortGet(&appAddress.portId); if(rc != CL_OK) return rc; appAddress.nodeAddress = clIocLocalAddressGet(); rc = clAmsMgmtInitialize(&handle, NULL, &version); if(rc != CL_OK) { return rc; } snprintf(chassisInstance.value, sizeof(chassisInstance.value), "%s:%d", "\\Chassis", chassisId); chassisInstance.length = strlen(chassisInstance.value); rc = clCorMoIdNameToMoIdGet(&chassisInstance, &gClChassisMoid); if(rc != CL_OK) { clLogError("AMF", "MGMT", "COR moid get for [%s] returned [%#x]", chassisInstance.value, rc); goto out_free; } rc = clAmsMgmtGetSGList(handle, &buffer[CL_AMS_ENTITY_TYPE_SG]); if(rc != CL_OK) { clLogError("AMF", "MGMT", "Get SG list returned [%#x]", rc); goto out_free; } rc = clAmsMgmtGetSIList(handle, &buffer[CL_AMS_ENTITY_TYPE_SI]); if(rc != CL_OK) { clLogError("AMF", "MGMT", "Get SI list returned [%#x]", rc); goto out_free; } rc = clAmsMgmtGetCSIList(handle, &buffer[CL_AMS_ENTITY_TYPE_CSI]); if(rc != CL_OK) { clLogError("AMF", "MGMT", "Get CSI list returned [%#x]", rc); goto out_free; } rc = clAmsMgmtGetNodeList(handle, &buffer[CL_AMS_ENTITY_TYPE_NODE]); if(rc != CL_OK) { clLogError("AMF", "MGMT", "Get NODE list returned [%#x]", rc); goto out_free; } rc = clAmsMgmtGetSUList(handle, &buffer[CL_AMS_ENTITY_TYPE_SU]); if(rc != CL_OK) { clLogError("AMF", "MGMT", "Get SU list returned [%#x]", rc); goto out_free; } rc = clAmsMgmtGetCompList(handle, &buffer[CL_AMS_ENTITY_TYPE_COMP]); if(rc != CL_OK) { clLogError("AMF", "MGMT", "Get COMP list returned [%#x]", rc); goto out_free; } /* * Now fetch the moid for each of the entities and build the cache. */ for(i = 0; i <= CL_AMS_ENTITY_TYPE_MAX; ++i) { ClAmsEntityBufferT *pBuffer = &buffer[i]; ClUint32T j; if(!pBuffer->count || !pBuffer->entity) continue; gClAmsMgmtOIIndexTable[i] = pBuffer->count; for(j = 0; j < pBuffer->count; ++j) { ClCorMOIdT moid = {{{0}}}; rc = clAmsMgmtOIMoIdGet(handle, pBuffer->entity+j, &moid); if(rc != CL_OK) { continue; } clAmsMgmtOICacheAdd(clCorMoIdToInstanceGet(&moid), pBuffer->entity+j); /* * Required for instances exceeding the pre-configured limit. */ rc = clCorOIRegister(&moid, &appAddress); if(rc != CL_OK) { continue; } rc = clCorPrimaryOISet(&moid, &appAddress); if(rc != CL_OK) { /* * Ignore as it could be already set by the active. */ continue; } clAmsMgmtOIConfigAttributeSet(handle, &txnSession, &moid, pBuffer->entity+j, pClAmsMgmtOIConfigAttributesGet); clAmsMgmtOIExtendedConfigAttributeSet(handle, &txnSession, pBuffer->entity+j, pClAmsMgmtOIExtendedConfigAttributesGet); } } rc = clCorTxnSessionCommit(txnSession); if(rc != CL_OK) { clLogError("AMF", "MGMT", "AMF OI config commit returned [%#x]", rc); } else { clLogNotice("AMF", "MGMT", "Entity cache successfully initialized"); gClAmsMgmtOIInitialized = CL_TRUE; } out_free: for(i = 0; i <= CL_AMS_ENTITY_TYPE_MAX; ++i) { if(buffer[i].entity) clHeapFree(buffer[i].entity); if(rc != CL_OK) clAmsMgmtOICacheDestroy(i); } if(rc != CL_OK) { for(i = 0; i < CL_AMS_MGMT_OI_EXTENDED_CLASS_MAX; ++i) clAmsMgmtOIExtendedCacheDestroy(i); } if(rc == CL_OK && pHandle) *pHandle = handle; else clAmsMgmtFinalize(handle); return rc; }
ClRcT clComponentCallBack(void *arg) { ClRcT rc = CL_OK; struct timeval alarmTime; ClAlarmHandleT alarmHandle; ClNameT moidName = {strlen("\\Chassis:0\\GigeBlade:0"), "\\Chassis:0\\GigeBlade:0"}; ClNameT moidName2 = {strlen("\\Chassis:0\\GigeBlade:0\\GigePort:0"), "\\Chassis:0\\GigeBlade:0\\GigePort:0"}; ClAlarmInfoT *pAlarmInfo; ClCorMOIdT moId; ClNameT moIdName = {0}; pAlarmInfo = clHeapAllocate(sizeof(ClAlarmInfoT)+strlen("HelloHelloHelloHelloHelloHelloHelloHello")+1); if(pAlarmInfo == NULL) { clOsalPrintf("Failed while allocating the memory for the alamr information."); return CL_ALARM_RC(CL_ERR_NO_MEMORY); } clCpmComponentNameGet(0,&(pAlarmInfo->compName)); CL_DEBUG_PRINT(CL_DEBUG_ERROR, (" CompName : %s\n", pAlarmInfo->compName.value)); clCorMoIdNameToMoIdGet(&moidName,&(pAlarmInfo->moId)); pAlarmInfo->alarmState = CL_ALARM_STATE_ASSERT; pAlarmInfo->category = CL_ALARM_CATEGORY_QUALITY_OF_SERVICE; pAlarmInfo->specificProblem = 0; pAlarmInfo->severity = CL_ALARM_SEVERITY_CRITICAL; gettimeofday(&alarmTime,NULL); pAlarmInfo->eventTime = alarmTime.tv_sec; pAlarmInfo->len = strlen("HelloHelloHelloHelloHelloHelloHelloHello")+1; memcpy(pAlarmInfo->buff,"HelloHelloHelloHelloHelloHelloHelloHello",pAlarmInfo->len); ClEoExecutionObjT* peoObj=(ClEoExecutionObjT *)arg; if ( (rc = clEoMyEoObjectSet(peoObj)) != CL_OK) { CL_DEBUG_PRINT(CL_DEBUG_ERROR, (" clEoMyEoObjectSet failed, rc:0x%x \n", rc)); return rc; } /** * Raising alarm for : * MOId - /Chassis:0/GigeBlade:0 * Category - CL_ALARM_CATEGORY_QUALITY_OF_SERVICE * Probable Cause - CL_ALARM_PROB_CAUSE_BANDWIDTH_REDUCED */ CL_DEBUG_PRINT(CL_DEBUG_ERROR,("Raising alarm for [%s] and the probable cause\ [%d]", moidName.value, CL_ALARM_PROB_CAUSE_LOSS_OF_FRAME)); pAlarmInfo->probCause = CL_ALARM_PROB_CAUSE_BANDWIDTH_REDUCED; rc = clAlarmRaise(pAlarmInfo,&alarmHandle); /** * Raising alarm for : * MOId - /Chassis:0/GigeBlade:0 * Category - CL_ALARM_CATEGORY_QUALITY_OF_SERVICE * Probable Cause - CL_ALARM_PROB_CAUSE_RESPONSE_TIME_EXCESSIVE */ pAlarmInfo->probCause = CL_ALARM_PROB_CAUSE_RESPONSE_TIME_EXCESSIVE; CL_DEBUG_PRINT(CL_DEBUG_ERROR,("Raising alarm for [%s] and the probable \ cause [%d]", moidName.value, CL_ALARM_PROB_CAUSE_RESPONSE_TIME_EXCESSIVE)); rc = clAlarmRaise(pAlarmInfo,&alarmHandle); CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Alarm Category : %d \n",pAlarmInfo->category )); CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Alarm severity: %d \n",pAlarmInfo->severity)); rc = clAlarmClientResourceInfoGet(alarmHandle, &moId); if ( CL_OK != rc) { clOsalPrintf("Failed while asking the moid for the alarm handle [%d]. rc[0x%x] \n", alarmHandle, rc); return rc; } rc = clCorMoIdToMoIdNameGet(&moId, &moIdName); if(CL_OK != rc) { clOsalPrintf("Failed while getting the mOId name from moid . rc[0x%x]", rc) ; return rc; } clOsalPrintf("The MOID for the alarm handle is [%d] is [%s]\n", alarmHandle, moIdName.value); /** * Raising alarm for : * MOId - /Chassis:0/GigeBlade:0/GigePort:0 * Category - CL_ALARM_CATEGORY_QUALITY_OF_SERVICE * Probable Cause - CL_ALARM_PROB_CAUSE_LOSS_OF_FRAME */ CL_DEBUG_PRINT(CL_DEBUG_ERROR,("Raising alarm for [%s] and the probable \ cause [%d]", moidName2.value, CL_ALARM_PROB_CAUSE_LOSS_OF_FRAME)); pAlarmInfo->probCause = CL_ALARM_PROB_CAUSE_LOSS_OF_FRAME; clCorMoIdNameToMoIdGet(&moidName2,&(pAlarmInfo->moId)); rc = clAlarmRaise(pAlarmInfo,&alarmHandle); CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Alarm Category : %d \n",pAlarmInfo->category )); CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Alarm severity: %d \n",pAlarmInfo->severity)); rc = clAlarmClientResourceInfoGet(alarmHandle, &moId); if ( CL_OK != rc) { clOsalPrintf("Failed while asking the moid for the alarm handle [%d]. rc[0x%x] \n", alarmHandle, rc); return rc; } rc = clCorMoIdToMoIdNameGet(&moId, &moIdName); if(CL_OK != rc) { clOsalPrintf("Failed while getting the mOId name from moid . rc[0x%x]", rc) ; return rc; } clOsalPrintf("The MOID for the alarm handle is [%d] is [%s]\n", alarmHandle, moIdName.value); /** * Raising alarm for : * MOId - /Chassis:0/GigeBlade:0/GigePort:0 * Category - CL_ALARM_CATEGORY_QUALITY_OF_SERVICE * Probable Cause - CL_ALARM_PROB_CAUSE_MULTIPLEXER_PROBLEM */ CL_DEBUG_PRINT(CL_DEBUG_ERROR,("Raising alarm for [%s] and the probable \ cause [%d]", moidName2.value, CL_ALARM_PROB_CAUSE_MULTIPLEXER_PROBLEM)); pAlarmInfo->probCause = CL_ALARM_PROB_CAUSE_MULTIPLEXER_PROBLEM; clCorMoIdNameToMoIdGet(&moidName2,&(pAlarmInfo->moId)); rc = clAlarmRaise(pAlarmInfo,&alarmHandle); CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Alarm Category : %d \n",pAlarmInfo->category )); CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Alarm severity: %d \n",pAlarmInfo->severity)); /** * Clearing alarm for : * MOId - /Chassis:0/GigeBlade:0/GigePort:0 * Category - CL_ALARM_CATEGORY_QUALITY_OF_SERVICE * Probable Cause - CL_ALARM_PROB_CAUSE_MULTIPLEXER_PROBLEM */ CL_DEBUG_PRINT(CL_DEBUG_ERROR,("Clearing alarm for [%s] and the probable \ cause [%d]", moidName.value, CL_ALARM_PROB_CAUSE_MULTIPLEXER_PROBLEM)); pAlarmInfo->alarmState = CL_ALARM_STATE_CLEAR; clCorMoIdNameToMoIdGet(&moidName2,&(pAlarmInfo->moId)); rc = clAlarmRaise(pAlarmInfo,&alarmHandle); CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Alarm Category : %d \n",pAlarmInfo->category )); CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Alarm severity: %d \n",pAlarmInfo->severity)); /** * Clearing alarm for : * MOId - /Chassis:0/GigeBlade:0/GigePort:0 * Category - CL_ALARM_CATEGORY_QUALITY_OF_SERVICE * Probable Cause - CL_ALARM_PROB_CAUSE_LOSS_OF_FRAME */ CL_DEBUG_PRINT(CL_DEBUG_ERROR,("Raising alarm for [%s] and the probable \ cause [%d]", moidName.value, CL_ALARM_PROB_CAUSE_LOSS_OF_FRAME)); pAlarmInfo->probCause = CL_ALARM_PROB_CAUSE_LOSS_OF_FRAME; rc = clAlarmRaise(pAlarmInfo,&alarmHandle); CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Alarm Category : %d \n",pAlarmInfo->category )); CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Alarm severity: %d \n",pAlarmInfo->severity)); 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 clProvProvisionOmCreateAndRuleAdd( SaNameT* pResourceStringMoId, ClCorMOIdPtrT pFullMoId, ClCorAddrT* pProvAddr, ClUint32T createFlag, ClBoolT autoCreateFlag, ClUint32T primaryOIFlag, ClUint32T wildCardFlag ) { ClRcT rc = CL_OK; ClCorMOClassPathT moPath; CL_FUNC_ENTER(); rc = clCorMoIdNameToMoIdGet( pResourceStringMoId, pFullMoId ); CL_PROV_CHECK_RC1_LOG1( rc, CL_OK, CL_PROV_RC(CL_PROV_INTERNAL_ERROR), CL_LOG_ERROR, CL_PROV_LOG_1_MOID_STRING_MOID, rc ); /* * If given Prov MSO is not associated for given resource then don't add the rule * silently supperss the information. * Some case alarm is associated with some resource but for the same resource prov may not * be associated. In this case prov should not register for those resource with COR. */ rc = clCorMoIdToMoClassPathGet( pFullMoId, &moPath ); rc = clCorMSOClassExist( &moPath, CL_COR_SVC_ID_PROVISIONING_MANAGEMENT ); if ( CL_OK != rc ) { return rc; } /* * Add to prov resource list */ memcpy(&pProvMoIdList->moId[pProvMoIdList->moIdCnt], pFullMoId, sizeof(ClCorMOIdT)); clCorMoIdServiceSet(&pProvMoIdList->moId[pProvMoIdList->moIdCnt], CL_COR_SVC_ID_PROVISIONING_MANAGEMENT); pProvMoIdList->moIdCnt++; if ( CL_TRUE == wildCardFlag ) { return CL_OK; } if ( CL_FALSE == createFlag ) { rc = clProvIfCreateFlagIsFalse( pFullMoId, pProvAddr, primaryOIFlag ); if ( CL_OK != rc ) { return rc; } } else { rc = clProvIfCreateFlagIsTrue( pFullMoId, pProvAddr, primaryOIFlag, autoCreateFlag ); if ( CL_OK != rc ) { return rc; } } CL_FUNC_EXIT(); return rc; }
ClRcT clCpmSlotInfoGet(ClCpmSlotInfoFieldIdT flag, ClCpmSlotInfoT *slotInfo) { ClRcT rc = CL_OK; ClIocNodeAddressT masterIocAddress = 0; ClCpmSlotInfoRecvT slotInfoRecv = { CL_CPM_SLOT_ID}; ClUint32T bufSize = 0; /* make a SYNC RMD to CPM/G master */ rc = clCpmMasterAddressGet(&masterIocAddress); if (rc != CL_OK) goto failure; slotInfoRecv.flag = flag; switch(slotInfoRecv.flag) { case CL_CPM_SLOT_ID: { slotInfoRecv.slotId = slotInfo->slotId; break; } case CL_CPM_IOC_ADDRESS: { slotInfoRecv.nodeIocAddress = slotInfo->nodeIocAddress; break; } #ifdef USE_COR case CL_CPM_NODE_MOID: { slotInfoRecv.nodeMoIdStr.length = 0; slotInfoRecv.nodeMoIdStr.value[0] = 0; rc = clCorMoIdToMoIdNameGet(&slotInfo->nodeMoId, &slotInfoRecv.nodeMoIdStr); CPM_CLIENT_CHECK(CL_LOG_SEV_ERROR,("MoIdToMoIdNameGet Failed, rc=[0x%x]\n", rc), rc); break; } #endif case CL_CPM_NODENAME: { memcpy(&slotInfoRecv.nodeName, &slotInfo->nodeName, sizeof(SaNameT)); break; } default: { rc = CL_CPM_RC(CL_ERR_INVALID_PARAMETER); clLogError(CPM_LOG_AREA_CPM,CL_LOG_CONTEXT_UNSPECIFIED, "Invalid flag passed, rc=[0x%x]\n", rc); goto failure; break; } } rc = clCpmClientRMDSyncNew(masterIocAddress, CPM_SLOT_INFO_GET, (ClUint8T *) &slotInfoRecv, sizeof(ClUint32T), (ClUint8T *) &slotInfoRecv, &bufSize, CL_RMD_CALL_NEED_REPLY, 0, 0, 0, MARSHALL_FN(ClCpmSlotInfoRecvT, 4, 0, 0), UNMARSHALL_FN(ClCpmSlotInfoRecvT, 4, 0, 0)); CPM_CLIENT_CHECK(CL_LOG_SEV_ERROR, ("Unable to find information about given entity, rc=[0x%x]\n", rc), rc); switch(slotInfoRecv.flag) { case CL_CPM_SLOT_ID: { slotInfo->nodeIocAddress = slotInfoRecv.nodeIocAddress; #ifdef USE_COR rc = clCorMoIdNameToMoIdGet(&slotInfoRecv.nodeMoIdStr, &slotInfo->nodeMoId); CPM_CLIENT_CHECK(CL_LOG_SEV_ERROR, ("MoIdNameToMoIdGet Failed, rc=[0x%x]\n", rc), rc); #endif memcpy(&slotInfo->nodeName, &slotInfoRecv.nodeName, sizeof(SaNameT)); break; } case CL_CPM_IOC_ADDRESS: { slotInfo->slotId = slotInfoRecv.slotId; #ifdef USE_COR rc = clCorMoIdNameToMoIdGet(&slotInfoRecv.nodeMoIdStr, &slotInfo->nodeMoId); CPM_CLIENT_CHECK(CL_LOG_SEV_ERROR, ("MoIdNameToMoIdGet Failed, rc=[0x%x]\n", rc), rc); #endif memcpy(&slotInfo->nodeName, &slotInfoRecv.nodeName, sizeof(SaNameT)); break; } case CL_CPM_NODE_MOID: { slotInfo->slotId = slotInfoRecv.slotId; slotInfo->nodeIocAddress = slotInfoRecv.nodeIocAddress; memcpy(&slotInfo->nodeName, &slotInfoRecv.nodeName, sizeof(SaNameT)); break; } case CL_CPM_NODENAME: { slotInfo->slotId = slotInfoRecv.slotId; slotInfo->nodeIocAddress = slotInfoRecv.nodeIocAddress; #ifdef USE_COR rc = clCorMoIdNameToMoIdGet(&slotInfoRecv.nodeMoIdStr, &slotInfo->nodeMoId); CPM_CLIENT_CHECK(CL_LOG_SEV_ERROR, ("MoIdNameToMoIdGet Failed, rc=[0x%x]\n", rc), rc); #endif break; } default: { rc = CL_CPM_RC(CL_ERR_INVALID_PARAMETER); clLogError(CPM_LOG_AREA_CPM,CL_LOG_CONTEXT_UNSPECIFIED, "Invalid flag passed, rc=[0x%x]\n", rc); goto failure; break; } } return rc; failure: return rc; }