diff --git a/install.py b/install.py index 769d43a0f..9a487c1df 100755 --- a/install.py +++ b/install.py @@ -106,8 +106,8 @@ def __init__(self): self.DO_SYMLINKS = True self.HOME = self.expand_path('~') self.OFFLINE = False - self.INTERNET = True - self.WITH_CM_BUILD = False + self.INTERNET = True + self.WITH_CM_BUILD = False # ------------------------------------------------------------------------------ self.NEED_TIPC_CONFIG = False self.TIPC_CONFIG_VERSION = '' @@ -125,7 +125,7 @@ def __init__(self): if (sys.argv[0].count('/') >= 2 or len(sys.argv[0]) > len('./install.py')): - self.feedback('Error: Please invoke this sript from its own directory as "./install.py"', True) + self.feedback('Error: Please invoke this script from its own directory as "./install.py"', True) # look in our VERSION file to get ASP_VERSION and ASP_REVISION try: @@ -382,13 +382,6 @@ def queueInstall(self): # do we need reinstallation? for qdep in self.installQueue: if qdep.name in ('net-snmp', 'openhpi'): - -# if not os.path.isfile('/usr/lib/libelf.so'): -# cmd = 'ln -fs /usr/lib/libelf.so.1 /usr/lib/libelf.so' -# self.debug('calling cmd: ' + cmd) -# ret_code = cli_cmd(cmd) - - self.installQueue.append(dep) continue else: @@ -406,15 +399,12 @@ def queueInstall(self): if ret_code == 1: # self.feedback('retcode = %s' %ret_code) - - #wrong cmd - #if int(syscall('uname -r').split('.')[2]) < 15: - if int((syscall('uname -r').split('.')[2]).split('-')[0]) < 15: + if self.version_compare("2.7", syscall('uname -r')): # kernel version < 2.7 # do install dep.installedver = 'None' self.installQueue.append(dep) - else : - if(self.INTERNET == False) : + else: + if(self.INTERNET == False): os.chdir(self.PRE_INSTALL_PKG) syscall('cp -f tipc.ko /lib/modules/`uname -r`/extra/') syscall('cp -f tipc.conf /etc/modprobe.d/') @@ -426,35 +416,31 @@ def queueInstall(self): if test_tipc == 1 : self.feedback('Error: cannot install tipc. Please install tipc manually.', True) else : - self.feedback('Install tipc successfully.') + self.feedback('Install tipc successfully.') syscall('cp -f %s/%s/tipc_config.h /usr/include/linux/' %((os.path.dirname(self.WORKING_DIR)),PRE_INSTALL_PKG_NAME)) syscall('cp -f %s/%s/tipc.h /usr/include/linux/' %((os.path.dirname(self.WORKING_DIR)),PRE_INSTALL_PKG_NAME)) syscall('rm -rf %s/%s'%((os.path.dirname(self.WORKING_DIR)),PRE_INSTALL_PKG_NAME)) - else : + else: dep.installedver = 'None' self.installQueue.append(dep) - self.NEED_TIPC_CONFIG = True - else: #ret_code == 0 - #assert ret_code == 0 - # self.feedback('retcode = %s' %ret_code) - self.NEED_TIPC_CONFIG = True + self.NEED_TIPC_CONFIG = True + else: + self.NEED_TIPC_CONFIG = True dep.installedver = syscall('/sbin/modinfo tipc | grep \'^version\' | tr -s " " | cut -d\ -f 2') # fixme, does this work - elif dep.name == 'tipc-config' and self.NEED_TIPC_CONFIG: cmd = 'which tipc-config 2>/dev/null' self.debug('calling cmd: ' + cmd) ret_code = cli_cmd(cmd) - + if ret_code != 0: # install tipc_config - cmd = '/sbin/modinfo tipc > /dev/null 2>&1;' self.debug('calling cmd: ' + cmd) ret_code = cli_cmd(cmd) if ret_code != 0: # no tipc module installed dep.installedver = 'None' - self.installQueue.append(dep) + self.installQueue.append(dep) continue TIPC_MODULE_VERSION = syscall('/sbin/modinfo tipc | grep \'^version\' | tr -s " " | cut -d\ -f 2') @@ -467,13 +453,13 @@ def queueInstall(self): self.TIPC_CONFIG_VERSION = dep.pkg_name self.installQueue.append(dep) continue - + if TIPC_MINOR_VERSION == 5: dep.installedver = 'Installed' continue elif TIPC_MINOR_VERSION == 6: - self.TIPC_CONFIG_VERSION = 'tipcutils-1.0.4.tar.gz' + self.TIPC_CONFIG_VERSION = 'tipcutils-1.0.4.tar.gz' dep.pkg_name = self.TIPC_CONFIG_VERSION elif TIPC_MINOR_VERSION == 7: self.TIPC_CONFIG_VERSION = 'tipcutils-1.1.9.tar.gz' @@ -486,7 +472,6 @@ def queueInstall(self): self.installQueue.append(dep) continue - else: #ret_code non zero # tipc config installed dep.installedver = 'Installed' @@ -1085,7 +1070,7 @@ def doInstallation(self): #myfile.write("CONFIG_TIPC=m\nCONFIG_TIPC_ADVANCED=y\nCONFIG_TIPC_NETID=4711\nCONFIG_TIPC_REMOTE_MNG=y\nCONFIG_TIPC_PORTS=8191\nCONFIG_TIPC_NODES=255\nCONFIG_TIPC_CLUSTERS=8\nCONFIG_TIPC_ZONES=4\nCONFIG_TIPC_REMOTES=8\nCONFIG_TIPC_PUBL=10000\nCONFIG_TIPC_SUBSCR=2000\nCONFIG_TIPC_LOG=0\nCONFIG_TIPC_UNICLUSTER_FRIENDLY=y\nCONFIG_TIPC_MULTIPLE_LINKS=y\nCONFIG_TIPC_CONFIG_SERVICE=y\nCONFIG_TIPC_SOCKET_API=y\n") #myfile.close() syscall('echo "CONFIG_TIPC=m\nCONFIG_TIPC_ADVANCED=y\nCONFIG_TIPC_NETID=4711\nCONFIG_TIPC_REMOTE_MNG=y\nCONFIG_TIPC_PORTS=8191\nCONFIG_TIPC_NODES=255\nCONFIG_TIPC_CLUSTERS=8\nCONFIG_TIPC_ZONES=4\nCONFIG_TIPC_REMOTES=8\nCONFIG_TIPC_PUBL=10000\nCONFIG_TIPC_SUBSCR=2000\nCONFIG_TIPC_LOG=0\nCONFIG_TIPC_UNICLUSTER_FRIENDLY=y\nCONFIG_TIPC_MULTIPLE_LINKS=y\nCONFIG_TIPC_CONFIG_SERVICE=y\nCONFIG_TIPC_SOCKET_API=y\nCONFIG_TIPC_SYSTEM_MSGS=y\nCONFIG_TIPC_DEBUG=y" >> .config') - self.feedback('make prepare and init module(might fail which is ok)') + self.feedback('make prepare and init module (might fail which is ok)') #syscall('make prepare') syscall('make modules_prepare 2>&1') syscall('make init 2>&1') diff --git a/src/SAFplus/components/include/ipi/clIocIpi.h b/src/SAFplus/components/include/ipi/clIocIpi.h index 073e93e7d..f2dc8fafc 100644 --- a/src/SAFplus/components/include/ipi/clIocIpi.h +++ b/src/SAFplus/components/include/ipi/clIocIpi.h @@ -817,6 +817,10 @@ ClRcT clIocCompStatusEnable(ClIocPhysicalAddressT compAddr); ClRcT clIocDispatchAsync(const ClCharT *xportType, ClIocPortT port, ClUint8T *buffer, ClUint32T bufSize); + + void __iocMessagePoolPut(ClUint8T *pBuffer); + ClUint8T *__iocMessagePoolGet(); + # ifndef __KERNEL__ # ifdef __cplusplus diff --git a/src/SAFplus/components/ioc/client/clIocUserApi.c b/src/SAFplus/components/ioc/client/clIocUserApi.c index 518815f12..be8648b5b 100644 --- a/src/SAFplus/components/ioc/client/clIocUserApi.c +++ b/src/SAFplus/components/ioc/client/clIocUserApi.c @@ -150,6 +150,8 @@ static ClIocUserObjectT userObj; static ClTimerTimeOutT userReassemblyTimerExpiry = { 0 }; ClBoolT gClIocTrafficShaper; static ClBoolT gClIocReplicast; +static ClRcT __iocMessagePoolInitialize(void); +static void __iocMessagePoolFinalize(void); typedef struct { @@ -200,22 +202,9 @@ typedef struct ClIocFragmentJob ClUint8T *buffer; ClUint32T length; ClIocPortT portId; - ClIocFragHeaderT fragHeader; + ClIocFragHeaderT *fragHeader; }ClIocFragmentJobT; -typedef struct ClIocFragmentPool -{ - ClListHeadT list; - ClUint8T *buffer; -}ClIocFragmentPoolT; - -static CL_LIST_HEAD_DECLARE(iocFragmentPool); -static ClOsalMutexT iocFragmentPoolLock; -static ClUint32T iocFragmentPoolLen; -static ClUint32T iocFragmentPoolSize = 1024*1024; -static ClUint32T iocFragmentPoolEntries; -static ClUint32T iocFragmentPoolLimit; - typedef struct ClIocLogicalAddressCtrl { ClIocCommPortT *pIocCommPort; @@ -361,100 +350,8 @@ static ClRcT internalSendReplicast(ClIocCommPortT *pIocCommPort, ClUint32T numReplicasts, ClIocFragHeaderT *userFragHeader, ClBoolT proxy); -static void __iocFragmentPoolPut(ClUint8T *pBuffer, ClUint32T len) -{ - if(len != iocFragmentPoolLen) - { - clHeapFree(pBuffer); - return; - } - if(!iocFragmentPoolLimit) - { - iocFragmentPoolLen = gClMaxPayloadSize; - CL_ASSERT(iocFragmentPoolLen != 0); - iocFragmentPoolLimit = iocFragmentPoolSize/iocFragmentPoolLen; - } - if(iocFragmentPoolEntries >= iocFragmentPoolLimit) - { - clHeapFree(pBuffer); - } - else - { - ClIocFragmentPoolT *pool = (ClIocFragmentPoolT*) clHeapCalloc(1, sizeof(*pool)); - CL_ASSERT(pool != NULL); - pool->buffer = pBuffer; - clOsalMutexLock(&iocFragmentPoolLock); - clListAddTail(&pool->list, &iocFragmentPool); - ++iocFragmentPoolEntries; - clOsalMutexUnlock(&iocFragmentPoolLock); - } -} -static ClUint8T *__iocFragmentPoolGet(ClUint8T *pBuffer, ClUint32T len) -{ - ClIocFragmentPoolT *pool = NULL; - ClListHeadT *head = NULL; - ClUint8T *buffer = NULL; - clOsalMutexLock(&iocFragmentPoolLock); - if(len != iocFragmentPoolLen - || - CL_LIST_HEAD_EMPTY(&iocFragmentPool)) - { - clOsalMutexUnlock(&iocFragmentPoolLock); - goto alloc; - } - head = iocFragmentPool.pNext; - pool = CL_LIST_ENTRY(head, ClIocFragmentPoolT, list); - clListDel(head); - --iocFragmentPoolEntries; - clLogTrace("IOC", "FRAG-POOL", "Got fragment of len [%d] from pool", len); - clOsalMutexUnlock(&iocFragmentPoolLock); - buffer = pool->buffer; - clHeapFree(pool); - return buffer; - alloc: - return (ClUint8T*)clHeapAllocate(len); -} - -static ClRcT __iocFragmentPoolInitialize(void) -{ - ClUint32T currentSize = 0; - iocFragmentPoolLen = gClMaxPayloadSize; - CL_ASSERT(iocFragmentPoolLen != 0); - clOsalMutexInit(&iocFragmentPoolLock); - while(currentSize + iocFragmentPoolLen < iocFragmentPoolSize) - { - ClIocFragmentPoolT *pool = (ClIocFragmentPoolT*) clHeapCalloc(1, sizeof(*pool)); - ClUint8T *buffer = (ClUint8T*) clHeapAllocate(iocFragmentPoolLen); - CL_ASSERT(pool != NULL); - CL_ASSERT(buffer != NULL); - currentSize += iocFragmentPoolLen; - pool->buffer = buffer; - clListAddTail(&pool->list, &iocFragmentPool); - ++iocFragmentPoolEntries; - ++iocFragmentPoolLimit; - } - return CL_OK; -} - -static void __iocFragmentPoolFinalize(void) -{ - ClIocFragmentPoolT *pool = NULL; - ClListHeadT *iter = NULL; - while(!CL_LIST_HEAD_EMPTY(&iocFragmentPool)) - { - iter = iocFragmentPool.pNext; - pool = CL_LIST_ENTRY(iter, ClIocFragmentPoolT, list); - clListDel(iter); - if(pool->buffer) - clHeapFree(pool->buffer); - clHeapFree(pool); - } - iocFragmentPoolEntries = 0; - iocFragmentPoolLimit = 0; - clOsalMutexDestroy(&iocFragmentPoolLock); -} static __inline__ ClUint32T clIocMcastHash(ClIocMulticastAddressT mcastAddress) { @@ -1071,6 +968,8 @@ static ClRcT iovecIteratorExit(IOVecIteratorT *iter) return CL_OK; } + + /* * Function : clIocSend Description : This function will take the message and * enqueue to IOC queues for transmission. @@ -2236,7 +2135,6 @@ ClRcT clIocDispatch(const ClCharT *xportType, ClIocCommPortHandleT commPort, ClI ClUint32T bufSize, ClBufferHandleT message, ClIocRecvParamT *pRecvParam) { ClRcT rc = CL_OK; - ClIocHeaderT userHeader = { 0 }; ClIocCommPortT *pIocCommPort = (ClIocCommPortT*)commPort; ClUint32T size = sizeof(ClIocHeaderT); ClUint8T *pBuffer = buffer; @@ -2286,33 +2184,32 @@ ClRcT clIocDispatch(const ClCharT *xportType, ClIocCommPortHandleT commPort, ClI goto out; } - memcpy((ClPtrT)&userHeader,(ClPtrT)buffer,sizeof(ClIocHeaderT)); - if(userHeader.version != CL_IOC_HEADER_VERSION) + if(((ClIocHeaderT*)buffer)->version != CL_IOC_HEADER_VERSION) { clLogError(IOC_LOG_AREA_IOC,IOC_LOG_CTX_RECV,"Dropping received packet of version [%d]. Supported version [%d]\n", - userHeader.version, CL_IOC_HEADER_VERSION); + ((ClIocHeaderT*)buffer)->version, CL_IOC_HEADER_VERSION); rc = CL_IOC_RC(CL_ERR_TRY_AGAIN); goto out; } - userHeader.srcAddress.iocPhyAddress.nodeAddress = ntohl(userHeader.srcAddress.iocPhyAddress.nodeAddress); - userHeader.srcAddress.iocPhyAddress.portId = ntohl(userHeader.srcAddress.iocPhyAddress.portId); - userHeader.dstAddress.iocPhyAddress.nodeAddress = ntohl(userHeader.dstAddress.iocPhyAddress.nodeAddress); - userHeader.dstAddress.iocPhyAddress.portId = ntohl(userHeader.dstAddress.iocPhyAddress.portId); + ((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.nodeAddress = ntohl(((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.nodeAddress); + ((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.portId = ntohl(((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.portId); + ((ClIocHeaderT*)buffer)->dstAddress.iocPhyAddress.nodeAddress = ntohl(((ClIocHeaderT*)buffer)->dstAddress.iocPhyAddress.nodeAddress); + ((ClIocHeaderT*)buffer)->dstAddress.iocPhyAddress.portId = ntohl(((ClIocHeaderT*)buffer)->dstAddress.iocPhyAddress.portId); /* * Check to forward this message. Switch to synchronous recvs or reassembly of fragments */ - if(CL_IOC_ADDRESS_TYPE_GET(&userHeader.dstAddress) == CL_IOC_PHYSICAL_ADDRESS_TYPE) + if(CL_IOC_ADDRESS_TYPE_GET(&((ClIocHeaderT*)buffer)->dstAddress) == CL_IOC_PHYSICAL_ADDRESS_TYPE) { - if(userHeader.dstAddress.iocPhyAddress.nodeAddress != gIocLocalBladeAddress + if(((ClIocHeaderT*)buffer)->dstAddress.iocPhyAddress.nodeAddress != gIocLocalBladeAddress && - userHeader.dstAddress.iocPhyAddress.nodeAddress != CL_IOC_RESERVED_ADDRESS) + ((ClIocHeaderT*)buffer)->dstAddress.iocPhyAddress.nodeAddress != CL_IOC_RESERVED_ADDRESS) { relay = CL_TRUE; - if(userHeader.dstAddress.iocPhyAddress.nodeAddress == CL_IOC_BROADCAST_ADDRESS) + if(((ClIocHeaderT*)buffer)->dstAddress.iocPhyAddress.nodeAddress == CL_IOC_BROADCAST_ADDRESS) { if(!clTransportBridgeEnabled(gIocLocalBladeAddress)) { @@ -2333,32 +2230,32 @@ ClRcT clIocDispatch(const ClCharT *xportType, ClIocCommPortHandleT commPort, ClI if(clEoWithOutCpm || - userHeader.srcAddress.iocPhyAddress.nodeAddress != gIocLocalBladeAddress) + ((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.nodeAddress != gIocLocalBladeAddress) { - if( (rc = clIocCompStatusSet(userHeader.srcAddress.iocPhyAddress, + if( (rc = clIocCompStatusSet(((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress, CL_IOC_NODE_UP)) != CL_OK) { ClUint32T packetSize; - packetSize = bytes - ((userHeader.flag == 0)? sizeof(ClIocHeaderT): sizeof(ClIocFragHeaderT)); + packetSize = bytes - ((((ClIocHeaderT*)buffer)->flag == 0)? sizeof(ClIocHeaderT): sizeof(ClIocFragHeaderT)); clLogCritical(IOC_LOG_AREA_IOC,IOC_LOG_CTX_RECV,"Dropping a received packet." "Failed to SET the staus of the packet-sender-component " "[node 0x%x : port 0x%x]. Packet size is %d. error code 0x%x ", - userHeader.srcAddress.iocPhyAddress.nodeAddress, - userHeader.srcAddress.iocPhyAddress.portId, + ((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.nodeAddress, + ((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.portId, packetSize, rc); rc = CL_IOC_RC(CL_ERR_TRY_AGAIN); goto out; } } - if(userHeader.flag == 0) + if(((ClIocHeaderT*)buffer)->flag == 0) { #ifdef CL_IOC_COMPRESSION ClTimeT pktRecvTime = 0; - ClUint32T compressionFlag = ntohl(userHeader.reserved); + ClUint32T compressionFlag = ntohl(((ClIocHeaderT*)buffer)->reserved); ClUint8T *decompressedStream = NULL; ClUint32T decompressedStreamLen = 0; ClUint32T sentBytes = 0; @@ -2407,7 +2304,7 @@ ClRcT clIocDispatch(const ClCharT *xportType, ClIocCommPortHandleT commPort, ClI } #ifdef CL_IOC_COMPRESSION - pktSendTime = clNtohl64(userHeader.pktTime); + pktSendTime = clNtohl64(((ClIocHeaderT*)buffer)->pktTime); if(pktSendTime) { ClTimeValT tv = {0}; @@ -2423,9 +2320,9 @@ ClRcT clIocDispatch(const ClCharT *xportType, ClIocCommPortHandleT commPort, ClI * Hoping that the notification packet will not exceed 64K packet size :-). */ if(pIocCommPort->notify == CL_IOC_NOTIFICATION_DISABLE && - (userHeader.protocolType == CL_IOC_PORT_NOTIFICATION_PROTO + (((ClIocHeaderT*)buffer)->protocolType == CL_IOC_PORT_NOTIFICATION_PROTO || - userHeader.protocolType == CL_IOC_PROTO_ARP)) + ((ClIocHeaderT*)buffer)->protocolType == CL_IOC_PROTO_ARP)) { clBufferClear(message); rc = CL_IOC_RC(CL_ERR_TRY_AGAIN); @@ -2434,44 +2331,20 @@ ClRcT clIocDispatch(const ClCharT *xportType, ClIocCommPortHandleT commPort, ClI } else { - ClIocFragHeaderT userFragHeader; - - memcpy((ClPtrT)&userFragHeader,(ClPtrT)buffer, sizeof(ClIocFragHeaderT)); - - pBuffer = buffer + sizeof(ClIocFragHeaderT); bytes -= sizeof(ClIocFragHeaderT); - - userFragHeader.msgId = ntohl(userFragHeader.msgId); - userFragHeader.fragOffset = ntohl(userFragHeader.fragOffset); - userFragHeader.fragLength = ntohl(userFragHeader.fragLength); + ((ClIocFragHeaderT*)buffer)->msgId = ntohl(((ClIocFragHeaderT*)buffer)->msgId); + ((ClIocFragHeaderT*)buffer)->fragOffset = ntohl(((ClIocFragHeaderT*)buffer)->fragOffset); + ((ClIocFragHeaderT*)buffer)->fragLength = ntohl(((ClIocFragHeaderT*)buffer)->fragLength); - userFragHeader.header.srcAddress.iocPhyAddress.nodeAddress = - ntohl(userFragHeader.header.srcAddress.iocPhyAddress.nodeAddress); - userFragHeader.header.srcAddress.iocPhyAddress.portId = - ntohl(userFragHeader.header.srcAddress.iocPhyAddress.portId); - - userFragHeader.header.dstAddress.iocPhyAddress.nodeAddress = - ntohl(userFragHeader.header.dstAddress.iocPhyAddress.nodeAddress); - userFragHeader.header.dstAddress.iocPhyAddress.portId = - ntohl(userFragHeader.header.dstAddress.iocPhyAddress.portId); - - clLogError(IOC_LOG_AREA_FRAG,IOC_LOG_CTX_RECV, - "Got these values fragid %d, frag offset %d, fraglength %d, " - "flag %x from 0x%x:0x%x at 0x%x:0x%x\n", - (userFragHeader.msgId), (userFragHeader.fragOffset), - (userFragHeader.fragLength), userFragHeader.header.flag, - userFragHeader.header.srcAddress.iocPhyAddress.nodeAddress, - userFragHeader.header.srcAddress.iocPhyAddress.portId, - gIocLocalBladeAddress, pIocCommPort->portId); /* * Will be used once fully tested as its faster than earlier method */ - if(userFragHeader.header.flag == IOC_LAST_FRAG) + if(((ClIocFragHeaderT*)buffer)->header.flag == IOC_LAST_FRAG) clLogTrace("FRAG", "RECV", "Got Last frag at offset [%d], size [%d], received [%d]", - userFragHeader.fragOffset, userFragHeader.fragLength, bytes); + ((ClIocFragHeaderT*)buffer)->fragOffset, ((ClIocFragHeaderT*)buffer)->fragLength, bytes); - rc = __iocUserFragmentReceive(xportType, pBuffer, &userFragHeader, + rc = __iocUserFragmentReceive(xportType, buffer, ((ClIocFragHeaderT*)buffer), pIocCommPort->portId, bytes, message, syncReassembly); if(rc != CL_OK) goto out; @@ -2485,14 +2358,14 @@ ClRcT clIocDispatch(const ClCharT *xportType, ClIocCommPortHandleT commPort, ClI ClIocSendOptionT sendOption; sendOption.priority = CL_IOC_HIGH_PRIORITY; sendOption.timeout = 0; - if(userHeader.dstAddress.iocPhyAddress.nodeAddress == CL_IOC_BROADCAST_ADDRESS) + if(((ClIocHeaderT*)buffer)->dstAddress.iocPhyAddress.nodeAddress == CL_IOC_BROADCAST_ADDRESS) { ClIocAddressT *bcastList = NULL; ClUint32T numBcasts = 0; /* * Check if we have a proxy broadcast list */ - if(clTransportBroadcastListGet(xportType, &userHeader.srcAddress.iocPhyAddress, + if(clTransportBroadcastListGet(xportType, &((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress, &numBcasts, &bcastList) == CL_OK) { ClUint32T i; @@ -2503,12 +2376,12 @@ ClRcT clIocDispatch(const ClCharT *xportType, ClIocCommPortHandleT commPort, ClI */ clLogDebug("PROXY", "RELAY", "Broadcast message from node [%d], port [%d] " "to node [%d], port [%d]", - userHeader.srcAddress.iocPhyAddress.nodeAddress, - userHeader.srcAddress.iocPhyAddress.portId, + ((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.nodeAddress, + ((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.portId, bcastList[i].iocPhyAddress.nodeAddress, bcastList[i].iocPhyAddress.portId); - clIocSendWithXportRelay(commPort, message, userHeader.protocolType, - &userHeader.srcAddress, &bcastList[i], + clIocSendWithXportRelay(commPort, message, ((ClIocHeaderT*)buffer)->protocolType, + &((ClIocHeaderT*)buffer)->srcAddress, &bcastList[i], &sendOption, (ClCharT*)xportType, CL_FALSE); clBufferReadOffsetSet(message, 0, CL_BUFFER_SEEK_SET); } @@ -2520,13 +2393,13 @@ ClRcT clIocDispatch(const ClCharT *xportType, ClIocCommPortHandleT commPort, ClI { clLogDebug("PROXY", "RELAY", "Forward message from node [%d], port [%d] " "to node [%d], port [%d]", - userHeader.srcAddress.iocPhyAddress.nodeAddress, - userHeader.srcAddress.iocPhyAddress.portId, - userHeader.dstAddress.iocPhyAddress.nodeAddress, - userHeader.dstAddress.iocPhyAddress.portId); + ((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.nodeAddress, + ((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.portId, + ((ClIocHeaderT*)buffer)->dstAddress.iocPhyAddress.nodeAddress, + ((ClIocHeaderT*)buffer)->dstAddress.iocPhyAddress.portId); - clIocSendWithRelay(commPort, message, userHeader.protocolType, - &userHeader.srcAddress, &userHeader.dstAddress, &sendOption); + clIocSendWithRelay(commPort, message, ((ClIocHeaderT*)buffer)->protocolType, + &((ClIocHeaderT*)buffer)->srcAddress, &((ClIocHeaderT*)buffer)->dstAddress, &sendOption); /* * Clear the message buffer for re-use. */ @@ -2539,9 +2412,9 @@ ClRcT clIocDispatch(const ClCharT *xportType, ClIocCommPortHandleT commPort, ClI /* * Got heartbeat reply from other local components */ - if (userHeader.protocolType == CL_IOC_PROTO_ICMP) + if (((ClIocHeaderT*)buffer)->protocolType == CL_IOC_PROTO_ICMP) { - clIocHearBeatHealthCheckUpdate(userHeader.srcAddress.iocPhyAddress.nodeAddress, userHeader.srcAddress.iocPhyAddress.portId, NULL); + clIocHearBeatHealthCheckUpdate(((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.nodeAddress, ((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.portId, NULL); clBufferClear(message); return CL_IOC_RC(CL_ERR_TRY_AGAIN); } @@ -2549,14 +2422,14 @@ ClRcT clIocDispatch(const ClCharT *xportType, ClIocCommPortHandleT commPort, ClI /* * Got heartbeat request from a amf component */ - if (userHeader.protocolType == CL_IOC_PROTO_HB) + if (((ClIocHeaderT*)buffer)->protocolType == CL_IOC_PROTO_HB) { /* * Reply HeartBeat message */ ClIocAddressT destAddress = { { 0 } }; destAddress.iocPhyAddress.nodeAddress = - userHeader.srcAddress.iocPhyAddress.nodeAddress; + ((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.nodeAddress; destAddress.iocPhyAddress.portId = CL_IOC_CPM_PORT; ClIocSendOptionT sendOption; @@ -2572,14 +2445,14 @@ ClRcT clIocDispatch(const ClCharT *xportType, ClIocCommPortHandleT commPort, ClI } pRecvParam->length = bytes; - pRecvParam->priority = userHeader.priority; - pRecvParam->protoType = userHeader.protocolType; - memcpy(&pRecvParam->srcAddr, &userHeader.srcAddress, sizeof(pRecvParam->srcAddr)); + pRecvParam->priority = ((ClIocHeaderT*)buffer)->priority; + pRecvParam->protoType = ((ClIocHeaderT*)buffer)->protocolType; + memcpy(&pRecvParam->srcAddr, &((ClIocHeaderT*)buffer)->srcAddress, sizeof(pRecvParam->srcAddr)); clLogTrace("XPORT", "RECV", "Received message of size [%d] and protocolType [0x%x] from node [0x%x:0x%x]", - bytes, userHeader.protocolType, userHeader.srcAddress.iocPhyAddress.nodeAddress, - userHeader.srcAddress.iocPhyAddress.portId); + bytes, ((ClIocHeaderT*)buffer)->protocolType, ((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.nodeAddress, + ((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.portId); out: return rc; @@ -2588,7 +2461,6 @@ ClRcT clIocDispatch(const ClCharT *xportType, ClIocCommPortHandleT commPort, ClI ClRcT clIocDispatchAsync(const ClCharT *xportType, ClIocPortT port, ClUint8T *buffer, ClUint32T bufSize) { ClRcT rc = CL_OK; - ClIocHeaderT userHeader = { 0 }; ClUint32T size = sizeof(ClIocHeaderT); ClUint8T *pBuffer = buffer; ClUint32T bytes = bufSize; @@ -2611,31 +2483,30 @@ ClRcT clIocDispatchAsync(const ClCharT *xportType, ClIocPortT port, ClUint8T *bu goto out; } - memcpy((ClPtrT)&userHeader,(ClPtrT)buffer,sizeof(ClIocHeaderT)); - if(userHeader.version != CL_IOC_HEADER_VERSION) + if(((ClIocHeaderT*)buffer)->version != CL_IOC_HEADER_VERSION) { clLogError(IOC_LOG_AREA_IOC,IOC_LOG_CTX_RECV,"Dropping received packet of version [%d]. Supported version [%d]\n", - userHeader.version, CL_IOC_HEADER_VERSION); + ((ClIocHeaderT*)buffer)->version, CL_IOC_HEADER_VERSION); goto out; } - userHeader.srcAddress.iocPhyAddress.nodeAddress = ntohl(userHeader.srcAddress.iocPhyAddress.nodeAddress); - userHeader.srcAddress.iocPhyAddress.portId = ntohl(userHeader.srcAddress.iocPhyAddress.portId); - userHeader.dstAddress.iocPhyAddress.nodeAddress = ntohl(userHeader.dstAddress.iocPhyAddress.nodeAddress); - userHeader.dstAddress.iocPhyAddress.portId = ntohl(userHeader.dstAddress.iocPhyAddress.portId); + ((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.nodeAddress = ntohl(((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.nodeAddress); + ((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.portId = ntohl(((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.portId); + ((ClIocHeaderT*)buffer)->dstAddress.iocPhyAddress.nodeAddress = ntohl(((ClIocHeaderT*)buffer)->dstAddress.iocPhyAddress.nodeAddress); + ((ClIocHeaderT*)buffer)->dstAddress.iocPhyAddress.portId = ntohl(((ClIocHeaderT*)buffer)->dstAddress.iocPhyAddress.portId); /* * Check to forward this message. Switch to synchronous recvs or reassembly of fragments */ - if(CL_IOC_ADDRESS_TYPE_GET(&userHeader.dstAddress) == CL_IOC_PHYSICAL_ADDRESS_TYPE) + if(CL_IOC_ADDRESS_TYPE_GET(&((ClIocHeaderT*)buffer)->dstAddress) == CL_IOC_PHYSICAL_ADDRESS_TYPE) { - if (userHeader.dstAddress.iocPhyAddress.nodeAddress != CL_IOC_RESERVED_ADDRESS + if (((ClIocHeaderT*)buffer)->dstAddress.iocPhyAddress.nodeAddress != CL_IOC_RESERVED_ADDRESS && - userHeader.dstAddress.iocPhyAddress.nodeAddress != gIocLocalBladeAddress) + ((ClIocHeaderT*)buffer)->dstAddress.iocPhyAddress.nodeAddress != gIocLocalBladeAddress) { relay = CL_TRUE; - if(userHeader.dstAddress.iocPhyAddress.nodeAddress == CL_IOC_BROADCAST_ADDRESS + if(((ClIocHeaderT*)buffer)->dstAddress.iocPhyAddress.nodeAddress == CL_IOC_BROADCAST_ADDRESS && !clTransportBridgeEnabled(gIocLocalBladeAddress)) { @@ -2646,31 +2517,31 @@ ClRcT clIocDispatchAsync(const ClCharT *xportType, ClIocPortT port, ClUint8T *bu if(clEoWithOutCpm || - userHeader.srcAddress.iocPhyAddress.nodeAddress != gIocLocalBladeAddress) + ((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.nodeAddress != gIocLocalBladeAddress) { - if( (rc = clIocCompStatusSet(userHeader.srcAddress.iocPhyAddress, + if( (rc = clIocCompStatusSet(((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress, CL_IOC_NODE_UP)) != CL_OK) { ClUint32T packetSize; - packetSize = bytes - ((userHeader.flag == 0)? sizeof(ClIocHeaderT): sizeof(ClIocFragHeaderT)); + packetSize = bytes - ((((ClIocHeaderT*)buffer)->flag == 0)? sizeof(ClIocHeaderT): sizeof(ClIocFragHeaderT)); clLogCritical(IOC_LOG_AREA_IOC,IOC_LOG_CTX_RECV,"Dropping a received packet." "Failed to SET the staus of the packet-sender-component " "[node 0x%x : port 0x%x]. Packet size is %d. error code 0x%x ", - userHeader.srcAddress.iocPhyAddress.nodeAddress, - userHeader.srcAddress.iocPhyAddress.portId, + ((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.nodeAddress, + ((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.portId, packetSize, rc); goto out; } } - if(userHeader.flag == 0) + if(((ClIocHeaderT*)buffer)->flag == 0) { #ifdef CL_IOC_COMPRESSION ClTimeT pktRecvTime = 0; - ClUint32T compressionFlag = ntohl(userHeader.reserved); + ClUint32T compressionFlag = ntohl(((ClIocHeaderT*)buffer)->reserved); ClUint8T *decompressedStream = NULL; ClUint32T decompressedStreamLen = 0; ClUint32T sentBytes = 0; @@ -2708,7 +2579,7 @@ ClRcT clIocDispatchAsync(const ClCharT *xportType, ClIocPortT port, ClUint8T *bu } #ifdef CL_IOC_COMPRESSION - pktSendTime = clNtohl64(userHeader.pktTime); + pktSendTime = clNtohl64(((ClIocHeaderT*)buffer)->pktTime); if(pktSendTime) { ClTimeValT tv = {0}; @@ -2722,44 +2593,29 @@ ClRcT clIocDispatchAsync(const ClCharT *xportType, ClIocPortT port, ClUint8T *bu } else { - ClIocFragHeaderT userFragHeader; - - memcpy((ClPtrT)&userFragHeader,(ClPtrT)buffer, sizeof(ClIocFragHeaderT)); - - pBuffer = buffer + sizeof(ClIocFragHeaderT); bytes -= sizeof(ClIocFragHeaderT); - userFragHeader.msgId = ntohl(userFragHeader.msgId); - userFragHeader.fragOffset = ntohl(userFragHeader.fragOffset); - userFragHeader.fragLength = ntohl(userFragHeader.fragLength); + ((ClIocFragHeaderT*)buffer)->msgId = ntohl(((ClIocFragHeaderT*)buffer)->msgId); + ((ClIocFragHeaderT*)buffer)->fragOffset = ntohl(((ClIocFragHeaderT*)buffer)->fragOffset); + ((ClIocFragHeaderT*)buffer)->fragLength = ntohl(((ClIocFragHeaderT*)buffer)->fragLength); - userFragHeader.header.srcAddress.iocPhyAddress.nodeAddress = - ntohl(userFragHeader.header.srcAddress.iocPhyAddress.nodeAddress); - userFragHeader.header.srcAddress.iocPhyAddress.portId = - ntohl(userFragHeader.header.srcAddress.iocPhyAddress.portId); - - userFragHeader.header.dstAddress.iocPhyAddress.nodeAddress = - ntohl(userFragHeader.header.dstAddress.iocPhyAddress.nodeAddress); - userFragHeader.header.dstAddress.iocPhyAddress.portId = - ntohl(userFragHeader.header.dstAddress.iocPhyAddress.portId); - clLogTrace(IOC_LOG_AREA_FRAG,IOC_LOG_CTX_RECV, "Got these values fragid %d, frag offset %d, fraglength %d, " "flag %x from 0x%x:0x%x at 0x%x:0x%x\n", - (userFragHeader.msgId), (userFragHeader.fragOffset), - (userFragHeader.fragLength), userFragHeader.header.flag, - userFragHeader.header.srcAddress.iocPhyAddress.nodeAddress, - userFragHeader.header.srcAddress.iocPhyAddress.portId, + (((ClIocFragHeaderT*)buffer)->msgId), (((ClIocFragHeaderT*)buffer)->fragOffset), + (((ClIocFragHeaderT*)buffer)->fragLength), ((ClIocFragHeaderT*)buffer)->header.flag, + ((ClIocFragHeaderT*)buffer)->header.srcAddress.iocPhyAddress.nodeAddress, + ((ClIocFragHeaderT*)buffer)->header.srcAddress.iocPhyAddress.portId, gIocLocalBladeAddress, port); /* * Will be used once fully tested as its faster than earlier method */ - if(userFragHeader.header.flag == IOC_LAST_FRAG) + if(((ClIocFragHeaderT*)buffer)->header.flag == IOC_LAST_FRAG) clLogTrace("FRAG", "RECV", "Got Last frag at offset [%d], size [%d], received [%d]", - userFragHeader.fragOffset, userFragHeader.fragLength, bytes); + ((ClIocFragHeaderT*)buffer)->fragOffset, ((ClIocFragHeaderT*)buffer)->fragLength, bytes); - rc = __iocUserFragmentReceive(xportType, pBuffer, &userFragHeader, + rc = __iocUserFragmentReceive(xportType, buffer, (ClIocFragHeaderT*)buffer, port, bytes, message, CL_FALSE); /* * recalculate timeouts @@ -2789,14 +2645,14 @@ ClRcT clIocDispatchAsync(const ClCharT *xportType, ClIocPortT port, ClUint8T *bu ClIocCommPortT *commPort = clIocGetPort(port); if (commPort) { - if(userHeader.dstAddress.iocPhyAddress.nodeAddress == CL_IOC_BROADCAST_ADDRESS) + if(((ClIocHeaderT*)buffer)->dstAddress.iocPhyAddress.nodeAddress == CL_IOC_BROADCAST_ADDRESS) { ClIocAddressT *bcastList = NULL; ClUint32T numBcasts = 0; /* * Check if we have a proxy broadcast list */ - if(clTransportBroadcastListGet(xportType, &userHeader.srcAddress.iocPhyAddress, + if(clTransportBroadcastListGet(xportType, &((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress, &numBcasts, &bcastList) == CL_OK) { ClUint32T i; @@ -2807,12 +2663,12 @@ ClRcT clIocDispatchAsync(const ClCharT *xportType, ClIocPortT port, ClUint8T *bu */ clLogDebug("PROXY", "RELAY", "Broadcast message from node [%d], port [%d] " "to node [%d], port [%d], xport [%s]", - userHeader.srcAddress.iocPhyAddress.nodeAddress, - userHeader.srcAddress.iocPhyAddress.portId, + ((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.nodeAddress, + ((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.portId, bcastList[i].iocPhyAddress.nodeAddress, bcastList[i].iocPhyAddress.portId, xportType); - clIocSendWithXportRelay((ClIocCommPortHandleT)commPort, message, userHeader.protocolType, - &userHeader.srcAddress, &bcastList[i], + clIocSendWithXportRelay((ClIocCommPortHandleT)commPort, message, ((ClIocHeaderT*)buffer)->protocolType, + &((ClIocHeaderT*)buffer)->srcAddress, &bcastList[i], &sendOption, (ClCharT*)xportType, CL_FALSE); clBufferReadOffsetSet(message, 0, CL_BUFFER_SEEK_SET); } @@ -2825,12 +2681,12 @@ ClRcT clIocDispatchAsync(const ClCharT *xportType, ClIocPortT port, ClUint8T *bu { clLogDebug("PROXY", "RELAY", "Forward message from node [%d], port [%d] " "to node [%d], port [%d]", - userHeader.srcAddress.iocPhyAddress.nodeAddress, - userHeader.srcAddress.iocPhyAddress.portId, - userHeader.dstAddress.iocPhyAddress.nodeAddress, - userHeader.dstAddress.iocPhyAddress.portId); - clIocSendWithRelay((ClIocCommPortHandleT)commPort, message, userHeader.protocolType, - &userHeader.srcAddress, &userHeader.dstAddress, &sendOption); + ((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.nodeAddress, + ((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.portId, + ((ClIocHeaderT*)buffer)->dstAddress.iocPhyAddress.nodeAddress, + ((ClIocHeaderT*)buffer)->dstAddress.iocPhyAddress.portId); + clIocSendWithRelay((ClIocCommPortHandleT)commPort, message, ((ClIocHeaderT*)buffer)->protocolType, + &((ClIocHeaderT*)buffer)->srcAddress, &((ClIocHeaderT*)buffer)->dstAddress, &sendOption); } } else @@ -2846,9 +2702,9 @@ ClRcT clIocDispatchAsync(const ClCharT *xportType, ClIocPortT port, ClUint8T *bu /* * Got heartbeat reply from other local components */ - if (userHeader.protocolType == CL_IOC_PROTO_ICMP) + if (((ClIocHeaderT*)buffer)->protocolType == CL_IOC_PROTO_ICMP) { - clIocHearBeatHealthCheckUpdate(userHeader.srcAddress.iocPhyAddress.nodeAddress, userHeader.srcAddress.iocPhyAddress.portId, NULL); + clIocHearBeatHealthCheckUpdate(((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.nodeAddress, ((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.portId, NULL); rc = CL_IOC_RC(CL_ERR_TRY_AGAIN); goto out; } @@ -2856,14 +2712,14 @@ ClRcT clIocDispatchAsync(const ClCharT *xportType, ClIocPortT port, ClUint8T *bu /* * Got heartbeat request from a amf component */ - if (userHeader.protocolType == CL_IOC_PROTO_HB) + if (((ClIocHeaderT*)buffer)->protocolType == CL_IOC_PROTO_HB) { /* * Reply HeartBeat message */ ClIocAddressT destAddress = { { 0 } }; destAddress.iocPhyAddress.nodeAddress = - userHeader.srcAddress.iocPhyAddress.nodeAddress; + ((ClIocHeaderT*)buffer)->srcAddress.iocPhyAddress.nodeAddress; destAddress.iocPhyAddress.portId = CL_IOC_CPM_PORT; ClIocSendOptionT sendOption = { CL_IOC_HIGH_PRIORITY,0,0,CL_IOC_PERSISTENT_MSG,200 }; @@ -2878,11 +2734,11 @@ ClRcT clIocDispatchAsync(const ClCharT *xportType, ClIocPortT port, ClUint8T *bu } recvParam.length = bytes; - recvParam.priority = userHeader.priority; - recvParam.protoType = userHeader.protocolType; - memcpy(&recvParam.srcAddr, &userHeader.srcAddress, sizeof(recvParam.srcAddr)); + recvParam.priority = ((ClIocHeaderT*)buffer)->priority; + recvParam.protoType = ((ClIocHeaderT*)buffer)->protocolType; + memcpy(&recvParam.srcAddr, &((ClIocHeaderT*)buffer)->srcAddress, sizeof(recvParam.srcAddr)); clLogTrace( "XPORT", "RECV", - "Received message of size [%d] and protocolType [0x%x] from node [0x%x:0x%x]", bytes, userHeader.protocolType, recvParam.srcAddr.iocPhyAddress.nodeAddress, recvParam.srcAddr.iocPhyAddress.portId); + "Received message of size [%d] and protocolType [0x%x] from node [0x%x:0x%x]", bytes, ((ClIocHeaderT*)buffer)->protocolType, recvParam.srcAddr.iocPhyAddress.nodeAddress, recvParam.srcAddr.iocPhyAddress.portId); clEoEnqueueReassembleJob(message, &recvParam); message = 0; @@ -2956,7 +2812,7 @@ ClRcT clIocLibFinalize() clTransportFinalize(NULL, gIsNodeRepresentative); clNodeCacheFinalize(); clIocNeighCompsFinalize(); - __iocFragmentPoolFinalize(); + __iocMessagePoolFinalize(); clTransportLayerFinalize(); clOsalMutexDelete(gClIocFragMutex); return CL_OK; @@ -3076,7 +2932,6 @@ ClRcT clIocConfigInitialize(ClIocLibConfigT *pConf) { goto error_3; } - clIocHeartBeatInitialize(gIsNodeRepresentative); gIocInit = CL_TRUE; @@ -3121,7 +2976,7 @@ ClRcT clIocLibInitialize(ClPtrT pConfig) CL_ASSERT(rc == CL_OK); rc = clJobQueueInit(&iocFragmentJobQueue, 0, 1); CL_ASSERT(rc == CL_OK); - rc = __iocFragmentPoolInitialize(); + rc = __iocMessagePoolInitialize(); CL_ASSERT(rc == CL_OK); /*Add ourselves into the neighbor table*/ gClIocNeighborList.numEntries = 0; @@ -3259,7 +3114,7 @@ static ClRcT __iocReassembleTimer(void *key) { ClIocFragmentNodeT *fragNode = CL_RBTREE_ENTRY(fragHead, ClIocFragmentNodeT, tree); clRbTreeDelete(&node->reassembleTree, fragHead); - __iocFragmentPoolPut(fragNode->fragBuffer, fragNode->fragLength); + __iocMessagePoolPut(fragNode->fragBuffer); clHeapFree(fragNode); } hashDel(&node->hash); @@ -3302,11 +3157,13 @@ static ClRcT __iocReassembleDispatch(const ClCharT *xportType, ClIocReassembleNo } while( (iter = clRbTreeMin(&node->reassembleTree)) ) { + ClIocFragmentNodeT *fragNode = CL_RBTREE_ENTRY(iter, ClIocFragmentNodeT, tree); - if(clBufferAppendHeap(msg, fragNode->fragBuffer, fragNode->fragLength) != CL_OK) + ClUint8T *pFragBuffer = fragNode->fragBuffer + sizeof(ClIocFragHeaderT); + if(clBufferAppendHeap(msg, pFragBuffer, fragNode->fragLength) != CL_OK) { - rc = clBufferNBytesWrite(msg, fragNode->fragBuffer, fragNode->fragLength); - __iocFragmentPoolPut(fragNode->fragBuffer, fragNode->fragLength); + rc = clBufferNBytesWrite(msg, pFragBuffer , fragNode->fragLength); + __iocMessagePoolPut(fragNode->fragBuffer); } else { @@ -3468,23 +3325,23 @@ static ClRcT __iocFragmentCallback(ClPtrT job, ClBufferHandleT message, ClBoolT ClRcT rc = CL_OK; ClRcT retCode = CL_IOC_RC(IOC_MSG_QUEUED); - flag = fragmentJob->fragHeader.header.flag; - key.fragId = fragmentJob->fragHeader.msgId; + flag = fragmentJob->fragHeader->header.flag; + key.fragId = fragmentJob->fragHeader->msgId; key.destAddr.nodeAddress = gIocLocalBladeAddress; key.destAddr.portId = fragmentJob->portId; /* * Could be a relay packet. */ - if(CL_IOC_ADDRESS_TYPE_GET(&fragmentJob->fragHeader.header.dstAddress) == CL_IOC_PHYSICAL_ADDRESS_TYPE + if(CL_IOC_ADDRESS_TYPE_GET(&fragmentJob->fragHeader->header.dstAddress) == CL_IOC_PHYSICAL_ADDRESS_TYPE && - fragmentJob->fragHeader.header.dstAddress.iocPhyAddress.nodeAddress != CL_IOC_RESERVED_ADDRESS + fragmentJob->fragHeader->header.dstAddress.iocPhyAddress.nodeAddress != CL_IOC_RESERVED_ADDRESS && - fragmentJob->fragHeader.header.dstAddress.iocPhyAddress.nodeAddress != CL_IOC_BROADCAST_ADDRESS) + fragmentJob->fragHeader->header.dstAddress.iocPhyAddress.nodeAddress != CL_IOC_BROADCAST_ADDRESS) { - key.destAddr.nodeAddress = fragmentJob->fragHeader.header.dstAddress.iocPhyAddress.nodeAddress; - key.destAddr.portId = fragmentJob->fragHeader.header.dstAddress.iocPhyAddress.portId; + key.destAddr.nodeAddress = fragmentJob->fragHeader->header.dstAddress.iocPhyAddress.nodeAddress; + key.destAddr.portId = fragmentJob->fragHeader->header.dstAddress.iocPhyAddress.portId; } - key.sendAddr = fragmentJob->fragHeader.header.srcAddress.iocPhyAddress; + key.sendAddr = fragmentJob->fragHeader->header.srcAddress.iocPhyAddress; node = __iocReassembleNodeFind(&key, 0); if(!node) { @@ -3514,8 +3371,9 @@ static ClRcT __iocFragmentCallback(ClPtrT job, ClBufferHandleT message, ClBoolT } fragmentNode = (ClIocFragmentNodeT*) clHeapCalloc(1, sizeof(*fragmentNode)); CL_ASSERT(fragmentNode != NULL); - fragmentNode->fragOffset = fragmentJob->fragHeader.fragOffset; - fragmentNode->fragLength = fragmentJob->fragHeader.fragLength; + fragmentNode->fragOffset = fragmentJob->fragHeader->fragOffset; + fragmentNode->fragLength = fragmentJob->fragHeader->fragLength; + fragmentNode->fragBuffer = fragmentJob->buffer; node->currentLength += fragmentNode->fragLength; ++node->numFragments; @@ -3526,7 +3384,7 @@ static ClRcT __iocFragmentCallback(ClPtrT job, ClBufferHandleT message, ClBoolT { retCode = __iocReassembleDispatch(fragmentJob->xportType[0] ? fragmentJob->xportType : NULL, - node, &fragmentJob->fragHeader, message, sync); + node,fragmentJob->fragHeader, message, sync); } else { @@ -3543,7 +3401,7 @@ static ClRcT __iocFragmentCallback(ClPtrT job, ClBufferHandleT message, ClBoolT { retCode = __iocReassembleDispatch(fragmentJob->xportType[0] ? fragmentJob->xportType : NULL, - node, &fragmentJob->fragHeader, message, sync); + node, fragmentJob->fragHeader, message, sync); } else { @@ -3585,10 +3443,8 @@ ClRcT __iocUserFragmentReceive(const ClCharT *xportType, ClRcT rc = CL_OK; CL_ASSERT(job != NULL); CL_ASSERT(length == userHdr->fragLength); - buffer = __iocFragmentPoolGet(pBuffer, length); - memcpy(buffer, pBuffer, length); - job->buffer = buffer; - memcpy(&job->fragHeader, userHdr, sizeof(job->fragHeader)); + job->buffer = pBuffer; + job->fragHeader = userHdr; job->portId = portId; job->length = length; job->xportType[0] = 0; @@ -4393,3 +4249,105 @@ ClRcT clIocLowestNodeAddressGet(ClIocNodeAddressT *pNodeAddress) NULL_CHECK(pNodeAddress); return clIocRangeNodeAddressGet(pNodeAddress, 0, CL_IOC_MAX_NODE_ADDRESS); } + +typedef struct ClIocMessagePool +{ + ClListHeadT list; + ClUint8T *buffer; +}ClIocMessagePoolT; + + +static const ClUint64T gClMaxMessageSize = 0xffff; +static CL_LIST_HEAD_DECLARE(iocMessagePool); +static ClOsalMutexT iocMessagePoolLock; +static ClUint64T iocMessagePoolLen; +static ClInt64T iocMessagePoolSize = 50*65535; +static ClUint64T iocMessagePoolEntries; +static ClInt64T iocMessagePoolLimit; + + +void __iocMessagePoolPut(ClUint8T *pBuffer) +{ + if(!iocMessagePoolLimit) + { + iocMessagePoolLen = gClMaxMessageSize; + CL_ASSERT(iocMessagePoolLen != 0); + iocMessagePoolLimit = iocMessagePoolSize/iocMessagePoolLen; + } + if(iocMessagePoolEntries >= iocMessagePoolLimit) + { + clHeapFree(pBuffer); + } + else + { + ClIocMessagePoolT *pool = (ClIocMessagePoolT*) clHeapCalloc(1, sizeof(*pool)); + CL_ASSERT(pool != NULL); + pool->buffer = pBuffer; + clOsalMutexLock(&iocMessagePoolLock); + clListAddTail(&pool->list, &iocMessagePool); + ++iocMessagePoolEntries; + clOsalMutexUnlock(&iocMessagePoolLock); + } +} + + ClUint8T *__iocMessagePoolGet() +{ + ClIocMessagePoolT *pool = NULL; + ClListHeadT *head = NULL; + ClUint8T *buffer = NULL; + clOsalMutexLock(&iocMessagePoolLock); + if(CL_LIST_HEAD_EMPTY(&iocMessagePool)) + { + clOsalMutexUnlock(&iocMessagePoolLock); + goto alloc; + } + head = iocMessagePool.pNext; + pool = CL_LIST_ENTRY(head, ClIocMessagePoolT, list); + clListDel(head); + --iocMessagePoolEntries; + clOsalMutexUnlock(&iocMessagePoolLock); + buffer = pool->buffer; + clHeapFree(pool); + return buffer; + + alloc: + return (ClUint8T*)clHeapAllocate(gClMaxMessageSize); +} + +static ClRcT __iocMessagePoolInitialize(void) +{ + ClUint32T currentSize = 0; + iocMessagePoolLen = gClMaxMessageSize; + CL_ASSERT(iocMessagePoolLen != 0); + clOsalMutexInit(&iocMessagePoolLock); + while(currentSize + iocMessagePoolLen < iocMessagePoolSize) + { + ClIocMessagePoolT *pool = (ClIocMessagePoolT*) clHeapCalloc(1, sizeof(*pool)); + ClUint8T *buffer = (ClUint8T*) clHeapAllocate(iocMessagePoolLen); + CL_ASSERT(pool != NULL); + CL_ASSERT(buffer != NULL); + currentSize += iocMessagePoolLen; + pool->buffer = buffer; + clListAddTail(&pool->list, &iocMessagePool); + ++iocMessagePoolEntries; + ++iocMessagePoolLimit; + } + return CL_OK; +} +static void __iocMessagePoolFinalize(void) +{ + ClIocMessagePoolT *pool = NULL; + ClListHeadT *iter = NULL; + while(!CL_LIST_HEAD_EMPTY(&iocMessagePool)) + { + iter = iocMessagePool.pNext; + pool = CL_LIST_ENTRY(iter, ClIocMessagePoolT, list); + clListDel(iter); + if(pool->buffer) + clHeapFree(pool->buffer); + clHeapFree(pool); + } + iocMessagePoolEntries = 0; + iocMessagePoolLimit = 0; + clOsalMutexDestroy(&iocMessagePoolLock); +} diff --git a/src/SAFplus/components/ioc/plugins/tipc/clTipc.c b/src/SAFplus/components/ioc/plugins/tipc/clTipc.c index 51845d719..9090cc79c 100644 --- a/src/SAFplus/components/ioc/plugins/tipc/clTipc.c +++ b/src/SAFplus/components/ioc/plugins/tipc/clTipc.c @@ -108,7 +108,7 @@ extern ClUint32T clEoWithOutCpm; extern ClUint32T clAspLocalId; extern ClIocNodeAddressT gIocLocalBladeAddress; - +#define MAX_MESSAGE_LENGTH 0xffff ClInt32T gClTipcXportId; ClCharT gClTipcXportType[CL_MAX_NAME_LENGTH]; static ClBoolT tipcPriorityChangePossible = CL_TRUE; /* Don't attempt to change priority if TIPC does not support, so we don't get tons of error msgs */ @@ -176,10 +176,11 @@ static ClRcT tipcDispatchCallback(ClInt32T fd, ClInt32T events, void *cookie) { ClRcT rc = CL_OK; ClTipcCommPortPrivateT *xportPrivate = (ClTipcCommPortPrivateT*) cookie; - ClUint8T buffer[0xffff+1]; struct msghdr msgHdr; struct sockaddr_tipc peerAddress; struct iovec ioVector[1]; + ClUint8T *buffer = NULL; + buffer = __iocMessagePoolGet(); ClInt32T bytes; if(!xportPrivate) @@ -195,7 +196,7 @@ static ClRcT tipcDispatchCallback(ClInt32T fd, ClInt32T events, void *cookie) msgHdr.msg_name = &peerAddress; msgHdr.msg_namelen = sizeof(peerAddress); ioVector[0].iov_base = (ClPtrT)buffer; - ioVector[0].iov_len = sizeof(buffer); + ioVector[0].iov_len = MAX_MESSAGE_LENGTH; msgHdr.msg_iov = ioVector; msgHdr.msg_iovlen = sizeof(ioVector)/sizeof(ioVector[0]); /* @@ -214,7 +215,10 @@ static ClRcT tipcDispatchCallback(ClInt32T fd, ClInt32T events, void *cookie) } rc = clIocDispatchAsync(gClTipcXportType, xportPrivate->portId, buffer, bytes); - + if(((ClIocHeaderT*)buffer)->flag == 0) + { + __iocMessagePoolPut(buffer); + } out: return rc; } @@ -491,7 +495,7 @@ ClRcT xportRecv(ClIocCommPortHandleT commPort, ClIocDispatchOptionT *pRecvOption ClBufferHandleT message, ClIocRecvParamT *pRecvParam) { ClRcT rc = CL_OK; - ClUint8T buffer[0xffff+1]; + ClUint8T *poolBuffer =NULL; ClIocCommPortT *pCommPort = (ClIocCommPortT*)commPort; ClTipcCommPortPrivateT *pCommPortPrivate = NULL; struct msghdr msgHdr; @@ -502,7 +506,6 @@ ClRcT xportRecv(ClIocCommPortHandleT commPort, ClIocDispatchOptionT *pRecvOption ClUint32T timeout; ClInt32T bytes = 0; ClInt32T pollStatus; - if(!pCommPort || !pRecvOption || !message || !pRecvParam) { rc = CL_ERR_INVALID_PARAMETER; @@ -514,15 +517,14 @@ ClRcT xportRecv(ClIocCommPortHandleT commPort, ClIocDispatchOptionT *pRecvOption rc = CL_ERR_NOT_EXIST; goto out; } - + poolBuffer= __iocMessagePoolGet(); + bufSize = MAX_MESSAGE_LENGTH; if(!pBuffer) { - pBuffer = buffer; - bufSize = (ClUint32T)sizeof(buffer); + pBuffer= poolBuffer; } memset(&pollfd, 0, sizeof(pollfd)); - memset(&msgHdr, 0, sizeof(msgHdr)); memset(&ioVector, 0, sizeof(ioVector)); msgHdr.msg_name = &peerAddress; @@ -532,7 +534,6 @@ ClRcT xportRecv(ClIocCommPortHandleT commPort, ClIocDispatchOptionT *pRecvOption msgHdr.msg_iov = &ioVector; msgHdr.msg_iovlen = 1; timeout = pRecvOption->timeout; - retry: for(;;) { @@ -577,20 +578,30 @@ ClRcT xportRecv(ClIocCommPortHandleT commPort, ClIocDispatchOptionT *pRecvOption break; } - rc = clIocDispatch(gClTipcXportType, commPort, pRecvOption, pBuffer, bytes, message, pRecvParam); + rc = clIocDispatch(gClTipcXportType, commPort, pRecvOption, poolBuffer, bytes, message, pRecvParam); if(CL_GET_ERROR_CODE(rc) == CL_ERR_TRY_AGAIN) + { goto retry; + } if(CL_GET_ERROR_CODE(rc) == IOC_MSG_QUEUED) { ClUint32T elapsedTm; if(timeout == CL_IOC_TIMEOUT_FOREVER) + { + poolBuffer= __iocMessagePoolGet(); + ioVector.iov_base = (ClPtrT)poolBuffer; + msgHdr.msg_iov = &ioVector; goto retry; + } elapsedTm = (clOsalStopWatchTimeGet() - tm)/1000; if(elapsedTm < timeout) { timeout -= elapsedTm; + poolBuffer= __iocMessagePoolGet(); + ioVector.iov_base = (ClPtrT)poolBuffer; + msgHdr.msg_iov = &ioVector; goto retry; } else @@ -604,6 +615,10 @@ ClRcT xportRecv(ClIocCommPortHandleT commPort, ClIocDispatchOptionT *pRecvOption } out: + if(((ClIocHeaderT*)poolBuffer)->flag == 0) + { + __iocMessagePoolPut(poolBuffer); + } return rc; } diff --git a/src/SAFplus/components/ioc/plugins/udp/clUdp.c b/src/SAFplus/components/ioc/plugins/udp/clUdp.c index 84d0615a7..26566a18f 100644 --- a/src/SAFplus/components/ioc/plugins/udp/clUdp.c +++ b/src/SAFplus/components/ioc/plugins/udp/clUdp.c @@ -42,6 +42,8 @@ ClInt32T gClSockType = SOCK_DGRAM; ClInt32T gClCmsgHdrLen; struct cmsghdr *gClCmsgHdr; static ClUint32T gClBindOffset; +#define MAX_MESSAGE_LENGTH 65000 + typedef struct ClUdpAddrCacheEntry { @@ -850,7 +852,7 @@ static ClRcT udpDispatchCallback(ClInt32T fd, ClInt32T events, void *cookie) { ClRcT rc = CL_OK; ClIocUdpPrivateT *xportPrivate = (ClIocUdpPrivateT*) cookie; - ClUint8T buffer[0xffff+1]; + ClUint8T* buffer = __iocMessagePoolGet(); struct msghdr msgHdr; struct sockaddr peerAddress; struct iovec ioVector[1]; @@ -870,7 +872,7 @@ static ClRcT udpDispatchCallback(ClInt32T fd, ClInt32T events, void *cookie) msgHdr.msg_control = (ClUint8T*)gClCmsgHdr; msgHdr.msg_controllen = gClCmsgHdrLen; ioVector[0].iov_base = (ClPtrT)buffer; - ioVector[0].iov_len = sizeof(buffer); + ioVector[0].iov_len = MAX_MESSAGE_LENGTH; msgHdr.msg_iov = ioVector; msgHdr.msg_iovlen = sizeof(ioVector)/sizeof(ioVector[0]); /* @@ -891,6 +893,10 @@ static ClRcT udpDispatchCallback(ClInt32T fd, ClInt32T events, void *cookie) rc = clIocDispatchAsync(gClUdpXportType, xportPrivate->port, buffer, bytes); out: + if(((ClIocHeaderT*)buffer)->flag == 0) + { + __iocMessagePoolPut(buffer); + } return rc; } @@ -1075,7 +1081,7 @@ ClRcT xportRecv(ClIocCommPortHandleT commPort, ClIocDispatchOptionT *pRecvOption ClBufferHandleT message, ClIocRecvParamT *pRecvParam) { ClRcT rc = CL_OK; - ClUint8T buffer[0xffff+1]; + ClUint8T *poolBuffer =NULL; ClIocCommPortT *pCommPort = (ClIocCommPortT*)commPort; ClIocUdpPrivateT *pCommPortPrivate = NULL; struct msghdr msgHdr; @@ -1098,15 +1104,14 @@ ClRcT xportRecv(ClIocCommPortHandleT commPort, ClIocDispatchOptionT *pRecvOption rc = CL_ERR_NOT_EXIST; goto out; } - + poolBuffer= __iocMessagePoolGet(); + bufSize = MAX_MESSAGE_LENGTH; if(!pBuffer) { - pBuffer = buffer; - bufSize = (ClUint32T)sizeof(buffer); + pBuffer= poolBuffer; } memset(&pollfd, 0, sizeof(pollfd)); - memset(&msgHdr, 0, sizeof(msgHdr)); memset(&ioVector, 0, sizeof(ioVector)); msgHdr.msg_name = &peerAddress; @@ -1161,7 +1166,7 @@ ClRcT xportRecv(ClIocCommPortHandleT commPort, ClIocDispatchOptionT *pRecvOption break; } - rc = clIocDispatch(gClUdpXportType, commPort, pRecvOption, pBuffer, bytes, message, pRecvParam); + rc = clIocDispatch(gClUdpXportType, commPort, pRecvOption, poolBuffer, bytes, message, pRecvParam); if(CL_GET_ERROR_CODE(rc) == CL_ERR_TRY_AGAIN) goto retry; @@ -1170,11 +1175,19 @@ ClRcT xportRecv(ClIocCommPortHandleT commPort, ClIocDispatchOptionT *pRecvOption { ClUint32T elapsedTm; if(timeout == CL_IOC_TIMEOUT_FOREVER) + { + poolBuffer= __iocMessagePoolGet(); + ioVector.iov_base = (ClPtrT)poolBuffer; + msgHdr.msg_iov = &ioVector; goto retry; + } elapsedTm = (clOsalStopWatchTimeGet() - tm)/1000; if(elapsedTm < timeout) { timeout -= elapsedTm; + poolBuffer= __iocMessagePoolGet(); + ioVector.iov_base = (ClPtrT)poolBuffer; + msgHdr.msg_iov = &ioVector; goto retry; } else @@ -1185,9 +1198,14 @@ ClRcT xportRecv(ClIocCommPortHandleT commPort, ClIocDispatchOptionT *pRecvOption "the specified timeout. Packet size is %d", bytes); } + } out: + if(((ClIocHeaderT*)poolBuffer)->flag == 0) + { + __iocMessagePoolPut(poolBuffer); + } return rc; } diff --git a/src/SAFplus/components/msg/client/clMsgQueueApi.c b/src/SAFplus/components/msg/client/clMsgQueueApi.c index 9bdb13aa1..d0db16aba 100644 --- a/src/SAFplus/components/msg/client/clMsgQueueApi.c +++ b/src/SAFplus/components/msg/client/clMsgQueueApi.c @@ -913,8 +913,8 @@ ClRcT VDECL_VER(clMsgQueueUnlink, 4, 0, 0)(SaNameT *pQName) qHandle = pQEntry->qHandle; - CL_OSAL_MUTEX_LOCK(&gClLocalQsLock); CL_OSAL_MUTEX_UNLOCK(&gClQueueDbLock); + CL_OSAL_MUTEX_LOCK(&gClLocalQsLock); rc = clHandleCheckout(gClMsgQDatabase, qHandle, (void **)&pQInfo); if(rc != CL_OK) diff --git a/src/SAFplus/components/msg/client/clMsgSender.c b/src/SAFplus/components/msg/client/clMsgSender.c index abecb7ad5..fb295871b 100644 --- a/src/SAFplus/components/msg/client/clMsgSender.c +++ b/src/SAFplus/components/msg/client/clMsgSender.c @@ -165,8 +165,8 @@ static ClRcT clMsgMessageSend(ClIocAddressT * pDestAddr, SaMsgQueueHandleT qHandle = pQueue->qHandle; - CL_OSAL_MUTEX_LOCK(&gClLocalQsLock); CL_OSAL_MUTEX_UNLOCK(&gClQueueDbLock); + CL_OSAL_MUTEX_LOCK(&gClLocalQsLock); /* Allocate memory to queue message on the same machine */ rc = clMsgIovecToIovecCopy(&pTempMessage, pMessage); diff --git a/src/SAFplus/components/msg/common/clMsgQueue.c b/src/SAFplus/components/msg/common/clMsgQueue.c index 343389467..bf91a106d 100644 --- a/src/SAFplus/components/msg/common/clMsgQueue.c +++ b/src/SAFplus/components/msg/common/clMsgQueue.c @@ -440,8 +440,8 @@ ClRcT VDECL_VER(clMsgQueueInfoGet, 4, 0, 0)( } qHandle = pQEntry->qHandle; - CL_OSAL_MUTEX_LOCK(&gClLocalQsLock); CL_OSAL_MUTEX_UNLOCK(&gClQueueDbLock); + CL_OSAL_MUTEX_LOCK(&gClLocalQsLock); rc = clHandleCheckout(gClMsgQDatabase, qHandle, (void**)&pQInfo); if(rc != CL_OK) diff --git a/src/SAFplus/components/msg/server/clMsgSrvIdlHandle.c b/src/SAFplus/components/msg/server/clMsgSrvIdlHandle.c index fe9613118..c5444b544 100644 --- a/src/SAFplus/components/msg/server/clMsgSrvIdlHandle.c +++ b/src/SAFplus/components/msg/server/clMsgSrvIdlHandle.c @@ -230,8 +230,8 @@ ClRcT VDECL_VER(clMsgQueueRetentionClose, 4, 0, 0)(const SaNameT *pQName) qHandle = pQEntry->qHandle; - CL_OSAL_MUTEX_LOCK(&gClLocalQsLock); CL_OSAL_MUTEX_UNLOCK(&gClQueueDbLock); + CL_OSAL_MUTEX_LOCK(&gClLocalQsLock); rc = clHandleCheckout(gClMsgQDatabase, qHandle, (void **)&pQInfo); if(rc != CL_OK) @@ -471,8 +471,8 @@ ClRcT VDECL_VER(clMsgMessageGet, 4, 0, 0)(const SaNameT *pQName, SaTimeT timeout queueHandle = pQEntry->qHandle; - CL_OSAL_MUTEX_LOCK(&gClLocalQsLock); CL_OSAL_MUTEX_UNLOCK(&gClQueueDbLock); + CL_OSAL_MUTEX_LOCK(&gClLocalQsLock); rc = clHandleCheckout(gClMsgQDatabase, queueHandle, (void**)&pQInfo); if(rc != CL_OK) diff --git a/src/install/packages.py b/src/install/packages.py index b7640ee45..2d3ca8df1 100644 --- a/src/install/packages.py +++ b/src/install/packages.py @@ -2,7 +2,9 @@ import os import objects from common import * +from distutils.version import * +cmp_version = lambda x, y: LooseVersion(x).__cmp__(y) #Equal 0, greater 1, lesser -1 # ------------------------------------------------------------------------------ @@ -21,7 +23,7 @@ def __init__(self): try: - self.gccVer = [int(x) for x in syscall('gcc --version')[0].split()[3].split(".")] + self.gccVer = syscall('gcc --version')[0].split()[3] except IndexError: # Most likely no gcc installed self.gccVer = None @@ -85,11 +87,10 @@ def tipcConfigBuild(self): def openHpiSubagentBuildCmds(self,EXPORT,log): squelchWarn = "" - if not self.gccVer: + if self.gccVer: try: - self.gccVer = [int(x) for x in syscall('gcc --version')[0].split()[3].split(".")] - if self.gccVer[0] > 4 or (self.gccVer[0] == 4 and self.gccVer[1] > 5): - squelchWarn = "-Wno-error=unused-but-set-variable" + if cmp_version(self.gccVer, "4.5") > 0: + squelchWarn = "-Wno-error=unused-but-set-variable" except Exception, e: #assert e, "Cannot determine C compiler version" pass @@ -267,28 +268,29 @@ def load_install_deps(self): TIPC = objects.BuildDep() TIPC.name = 'tipc' - if self.kernelVer[0] == 2 and self.kernelVer[1] == 6: - if self.kernelVer[2] >= 39: - TIPC.version = '2.0' - TIPC.pkg_name = None - TIPC_CONFIG.version = '2.0.2' - TIPC_CONFIG.pkg_name = 'tipcutils-2.0.2.tar.gz' #default name, can change - elif self.kernelVer[2] >= 34: - TIPC.version = '2.0' - TIPC.pkg_name = None - TIPC_CONFIG.version = '2.0.0' - TIPC_CONFIG.pkg_name = 'tipcutils-2.0.0.tar.gz' #default name, can change - elif self.kernelVer[2] >= 16: - TIPC.version = '1.7.7' - TIPC.pkg_name = 'tipc-1.7.7.tar.gz' - TIPC_CONFIG.version = '1.1.9' - TIPC_CONFIG.pkg_name = 'tipcutils-1.1.9.tar.gz' #default name, can change - elif self.kernelVer[2] >= 9: - TIPC.version = '1.5.12' - TIPC.pkg_name = 'tipc-1.5.12.tar.gz' - + + if cmp_version(self.kernelVerString, "2.7") < 0: + if cmp_version(self.kernelVerString, "2.6.39") > 0: + TIPC.version = '2.0' + TIPC.pkg_name = None + TIPC_CONFIG.version = '2.0.2' + TIPC_CONFIG.pkg_name = 'tipcutils-2.0.2.tar.gz' #default name, can change + elif cmp_version(self.kernelVerString, "2.6.34") > 0: + TIPC.version = '2.0' + TIPC.pkg_name = None + TIPC_CONFIG.version = '2.0.0' + TIPC_CONFIG.pkg_name = 'tipcutils-2.0.0.tar.gz' #default name, can change + elif cmp_version(self.kernelVerString, "2.6.16") > 0: + TIPC.version = '1.7.7' + TIPC.pkg_name = 'tipc-1.7.7.tar.gz' + TIPC_CONFIG.version = '1.1.9' + TIPC_CONFIG.pkg_name = 'tipcutils-1.1.9.tar.gz' #default name, can change + elif cmp_version(self.kernelVerString, "2.6.9") > 0: + TIPC.version = '1.5.12' + TIPC.pkg_name = 'tipc-1.5.12.tar.gz' + log = self.log_string_for_dep(TIPC.name) - + # tipc has a special case in install.py marked: # SPECIAL CASE, TIPC #TIPC.ver_test_cmd = ':' @@ -297,13 +299,10 @@ def load_install_deps(self): 'cp net/tipc/tipc.ko $PREFIX/modules', 'cp tools/tipc-config $PREFIX/bin', 'cp include/net/tipc/*.h $PREFIX/include'] - - if int(self.kernelVer[2]) < 16: - pass - else: + + if cmp_version(self.kernelVerString, "2.6.16") > 0: TIPC.build_cmds.append('mkdir -p $PREFIX/include/linux >/dev/null 2>&1') TIPC.build_cmds.append('cp include/net/tipc/*.h $PREFIX/include/linux') - # ------------------------------------------------------------------------------ # TIPC_CONFIG