ClRcT clLoadEnvVars() { ClRcT rc = CL_OK; ClCharT missing[512]; ClCharT * temp=NULL; ClInt32T i = 0; missing[0] = 0; clEoWithOutCpm = clParseEnvBoolean("ASP_WITHOUT_CPM"); if (1) /* Required environment variables */ { const ClCharT* envvars[] = { "ASP_NODENAME", "ASP_COMPNAME", "ASP_RUNDIR", "ASP_LOGDIR", "ASP_BINDIR", "ASP_CONFIG", "ASP_DBDIR", 0 }; ClCharT* storage[] = { ASP_NODENAME , ASP_COMPNAME , ASP_RUNDIR , ASP_LOGDIR , ASP_BINDIR , ASP_CONFIG , ASP_DBDIR, 0 }; for (i=0; envvars[i] != 0; i++) { temp = getenv(envvars[i]); if (temp) strncpy(storage[i],temp,CL_MAX_NAME_LENGTH-1); else { strcat(missing,envvars[i]); strcat(missing," "); } } } if (1) /* Optional environment variables */ { const ClCharT* envvars[] = { "ASP_APP_BINDIR", 0 }; /* This won't be defined if the AMF is run */ ClCharT* storage[] = { ASP_APP_BINDIR, 0 }; for (i=0; envvars[i] != 0; i++) { temp = getenv(envvars[i]); if (temp) strncpy(storage[i],temp,CL_MAX_NAME_LENGTH-1); } } strcpy(CL_APP_BINDIR,ASP_APP_BINDIR); temp = getenv("ASP_NODEADDR"); if (temp) ASP_NODEADDR = atoi(temp); else strcat(missing,"ASP_NODEADDR "); SYSTEM_CONTROLLER = clParseEnvBoolean("SYSTEM_CONTROLLER"); ASP_SC_PROMOTE = clParseEnvBoolean("ASP_SC_PROMOTE"); if (missing[0]) { clLog(CL_LOG_SEV_CRITICAL, CL_LOG_AREA, CL_LOG_CTXT_INI, "The following required environment variables are not set: %s.", missing); rc = CL_ERR_DOESNT_EXIST; } if (1) { ClCharT *iocAddressStr; iocAddressStr = getenv("ASP_NODEADDR"); if (iocAddressStr != NULL) { clAspLocalId = atoi(iocAddressStr); /* Deprecated */ ASP_NODEADDR = atoi(iocAddressStr); } else { clLog(CL_LOG_SEV_CRITICAL, CL_LOG_AREA, CL_LOG_CTXT_INI, "ASP_NODEADDR environment variable not set."); rc = CL_ERR_DOESNT_EXIST; } } return rc; }
static ClRcT cdbGDBMOpen(ClDBFileT dbFile, ClDBNameT dbName, ClDBFlagT dbFlag, ClUint32T maxKeySize, ClUint32T maxRecordSize, ClDBHandleT* pDBHandle) { ClRcT errorCode = CL_OK; GDBMHandle_t* pGDBMHandle = NULL; ClUint32T read_write = 0; ClDBTypeT dbType = CL_DB_TYPE_BTREE; CL_FUNC_ENTER(); NULL_CHECK(pDBHandle); NULL_CHECK(dbName); /* Validate the flag */ if(dbFlag >= CL_DB_MAX_FLAG) { errorCode = CL_DBAL_RC(CL_ERR_INVALID_PARAMETER); CL_DEBUG_PRINT (CL_DEBUG_WARN,("Invalid Flag")); CL_FUNC_EXIT(); return(errorCode); } /* Validate database type */ if(dbType >= CL_DB_MAX_TYPE) { errorCode = CL_DBAL_RC(CL_ERR_INVALID_PARAMETER); CL_DEBUG_PRINT (CL_DEBUG_WARN,("Invalid DB Type")); CL_FUNC_EXIT(); return(errorCode); } pGDBMHandle = (GDBMHandle_t*)clHeapCalloc(1,sizeof(GDBMHandle_t)); if(NULL == pGDBMHandle) { errorCode = CL_DBAL_RC(CL_ERR_NO_MEMORY); CL_DEBUG_PRINT (CL_DEBUG_TRACE,("Memory allocation failed.")); CL_FUNC_EXIT(); return(errorCode); } pGDBMHandle->syncMode = CL_FALSE; if(CL_DB_SYNC & dbFlag) { dbFlag &= ~(CL_DB_SYNC); pGDBMHandle->syncMode = CL_TRUE; } /* Let the env variable override the coded behaviour */ if (getenv("ASP_DB_SYNC")) { if (clParseEnvBoolean("ASP_DB_SYNC") == CL_TRUE) { pGDBMHandle->syncMode = CL_TRUE; } else { pGDBMHandle->syncMode = CL_FALSE; } } if(CL_DB_CREAT == dbFlag) { read_write = GDBM_NEWDB | GDBM_NOLOCK; } else { pGDBMHandle->gdbmInstance = gdbm_open((ClCharT*)dbName, CL_GDBM_BLOCK_SIZE, GDBM_READER, CL_GDBM_FILE_MODE, NULL); if ((NULL == pGDBMHandle->gdbmInstance) && (CL_DB_APPEND != dbFlag)) { clHeapFree(pGDBMHandle); errorCode = CL_DBAL_RC(CL_ERR_NOT_EXIST); CL_DEBUG_PRINT ( CL_DEBUG_WARN,("\nGDBM Open failed.")); CL_FUNC_EXIT(); return(errorCode); } if (NULL != pGDBMHandle->gdbmInstance) gdbm_close(pGDBMHandle->gdbmInstance); if (CL_DB_OPEN == dbFlag) read_write = GDBM_WRITER; else if (CL_DB_APPEND == dbFlag) read_write = GDBM_WRCREAT; else { clHeapFree(pGDBMHandle); errorCode = CL_DBAL_RC(CL_ERR_BAD_FLAG); CL_DEBUG_PRINT (CL_DEBUG_WARN,("\nInvalid DB flag. GDBM open failed.")); CL_FUNC_EXIT(); return(errorCode); } } if(CL_TRUE == pGDBMHandle->syncMode) { read_write |= GDBM_SYNC; } /* Create/Open the GDBM database */ pGDBMHandle->gdbmInstance = gdbm_open((ClCharT*)dbName, CL_GDBM_BLOCK_SIZE, read_write, CL_GDBM_FILE_MODE, NULL); if(NULL == (pGDBMHandle->gdbmInstance)) { /* if the creation failed, return error */ clHeapFree(pGDBMHandle); errorCode = CL_DBAL_RC(CL_DBAL_ERR_DB_ERROR); CL_DEBUG_PRINT ( CL_DEBUG_WARN,("\nGDBM Open failed.")); CL_FUNC_EXIT(); return(errorCode); } pGDBMHandle->deleteRecCnt = 0; /* Return the handle to the created/opened database */ *pDBHandle = (ClDBHandleT)pGDBMHandle; CL_FUNC_EXIT(); return(CL_OK); }
static ClRcT _clPluginHelperGetIpNodeAddress(const ClCharT *xportType, const ClCharT *devIf, ClCharT *hostAddress, ClCharT *networkMask, ClCharT *broadcast, ClUint32T *ipAddressMask, ClCharT *xportSubnetPrefix) { ClCharT envSubNetType[CL_MAX_FIELD_LENGTH] = { 0 }; ClCharT xportSubnet[CL_MAX_FIELD_LENGTH] = { 0 }; ClCharT *subnetMask = NULL; ClCharT *subnetPrefix = NULL; ClUint32T CIDR, ipMask, ip, mask; ClRcT rc; if (!xportType) { return CL_ERR_INVALID_PARAMETER; } else { snprintf(envSubNetType, CL_MAX_FIELD_LENGTH, "ASP_%s_SUBNET", xportType); subnetMask = getenv(envSubNetType); if (subnetMask == NULL) { subnetMask = ASP_PLUGIN_SUBNET_DEFAULT; } subnetPrefix = strrchr(subnetMask, '/'); if(!subnetPrefix) { subnetPrefix = ASP_PLUGIN_SUBNET_PREFIX_DEFAULT; } else { ++subnetPrefix; } if(! (CIDR = atoi(subnetPrefix) ) ) { clLogInfo("IOC", CL_LOG_PLUGIN_HELPER_AREA, "%s", subnetMask); return CL_ERR_INVALID_PARAMETER; } xportSubnetPrefix[0] = 0; strncat(xportSubnetPrefix, subnetPrefix, CL_MAX_FIELD_LENGTH-1); snprintf(xportSubnet, sizeof(xportSubnet), "%s", subnetMask); mask = _clPluginHelperBitFillRShift(CIDR); _clPluginHelperConvertInternetToHostAddress(&ip, xportSubnet); /* network address */ ipMask = (ip & mask); /* Try to get address from devif */ rc = CL_OK+1; /* start with any error condition, so the if below this one will be taken */ if (clParseEnvBoolean("ASP_UDP_USE_EXISTING_IP")) { rc = _clPluginHelperDevToIpAddress(devIf, hostAddress); if (rc == CL_OK) clLogInfo("IOC",CL_LOG_PLUGIN_HELPER_AREA,"Use existing IP address [%s] as this nodes transport address.", hostAddress); else clLogError("IOC",CL_LOG_PLUGIN_HELPER_AREA,"Configured to use an existing IP address for message transport. But address lookup failed on device [%s] error [0x%x]", devIf, rc); } if (rc != CL_OK) { /* Automatic assignment of IP address */ _clPluginHelperConvertHostToInternetAddress(ipMask + gIocLocalBladeAddress, hostAddress); } _clPluginHelperConvertHostToInternetAddress(mask, networkMask); _clPluginHelperConvertHostToInternetAddress(ip | ~mask, broadcast); *ipAddressMask = ipMask; } return CL_OK; }
ClRcT clNodeCacheInitialize(ClBoolT createFlag) { ClRcT rc = CL_OK; ClUint32T capability = 0; SaNameT nodeName = {0}; if(gpClNodeCache) goto out; gClAspNativeLeaderElection = !clParseEnvBoolean("CL_ASP_OPENAIS_LEADER_ELECTION"); snprintf(gClNodeCacheSegment, sizeof(gClNodeCacheSegment)-1, "%s_%d", CL_NODE_CACHE_SEGMENT, clIocLocalAddressGet()); if(createFlag == CL_TRUE) { rc = clNodeCacheCreate(); } else { rc = clNodeCacheOpen(); } if(rc != CL_OK) { clLogError("NODE", "CACHE", "Segment initialize returned [%#x]", rc); goto out; } CL_ASSERT(gpClNodeCache != NULL); if(!createFlag) { goto out; } CL_NODE_CACHE_HEADER_BASE(gpClNodeCache)->maxNodes = CL_IOC_MAX_NODES; CL_NODE_CACHE_HEADER_BASE(gpClNodeCache)->currentNodes = 0; memset(CL_NODE_CACHE_HEADER_BASE(gpClNodeCache)->nodeMap, 0, sizeof(CL_NODE_CACHE_HEADER_BASE(gpClNodeCache)->nodeMap)); if(clCpmIsSC()) { CL_NODE_CACHE_SC_CAPABILITY_SET(capability); CL_NODE_CACHE_SC_PROMOTE_CAPABILITY_SET(capability); } else if(clCpmIsSCCapable()) { CL_NODE_CACHE_SC_PROMOTE_CAPABILITY_SET(capability); CL_NODE_CACHE_PL_CAPABILITY_SET(capability); } else { CL_NODE_CACHE_PL_CAPABILITY_SET(capability); } clCpmLocalNodeNameGet(&nodeName); clNodeCacheUpdate(clIocLocalAddressGet(),CL_VERSION_CURRENT, capability, &nodeName); rc = clOsalMsync(gpClNodeCache, CL_NODE_CACHE_SEGMENT_SIZE, MS_ASYNC); if(rc != CL_OK) { clLogError("NODE", "CACHE", "Node cache segment msync returned [%#x]", rc); goto out; } gClNodeCacheOwner = CL_TRUE; out: return rc; }