トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

Programming_qualnet_addon_node

Qualnetアドオン ノード系

ノードポインタからインデックスを取得

int GetIndexFromNode(Node* node)
{
	int id = node->nodeId;
	int index = id+1;
	return index;
}

アドレスをノードが持っているかを判定

bool ContainAddressInInterface(Node* node, NodeAddress searchAddress)
{
	printf("contain address node[%d]\n",node->nodeId);
	bool returnFlag = false;
	for(int interfaceIndex = 0 ; interfaceIndex < node->numberInterfaces ;interfaceIndex++)
	{
		Address address;
		NetworkGetInterfaceInfo(node,interfaceIndex,&address,NETWORK_IPV4);
		if(address.interfaceAddr.ipv4 == searchAddress)
		{
			returnFlag =true;
		}
		else{}
	} 
	return returnFlag;
}

idからノードポインタを取得

void GetNodeFromId(Node* baseNode,Node* returnNode,int nodeId)
{
bool containAddress = false;
Node* tempNode = baseNode;

//search this node
//__________________________________
if(tempNode->nodeId == nodeId)
{
	returnNode = tempNode;
}		
else
{
	//search prev node
	//__________________________________
	for(tempNode = tempNode->prevNodeData; tempNode!=NULL ;tempNode = tempNode->prevNodeData)
	{
		if(tempNode->nodeId == nodeId){
			returnNode = tempNode;
			break;
		}
	}
	if(containAddress == true)
	{
		//search next node
		//__________________________________
		for(tempNode = tempNode->nextNodeData; tempNode!=NULL ;tempNode = tempNode->nextNodeData)
		{
			if(tempNode->nodeId == nodeId){
				returnNode = tempNode;
				break;
			}
		}
	}
}
}
アドレスからノードポインタを取得
void GetNodeFromAddress(Node* targetNode,Node** returnNode,NodeAddress address)
{
	bool containAddress = false;
	Node* tempNode = targetNode;
	
	containAddress = ContainAddressInInterface(tempNode,address);	
	//search this node
	//__________________________________
	if(containAddress == true)
	{
		*returnNode = tempNode;
		printf("returnNode = %d\n",*returnNode);
		return;
	}		

	//search prev node
	//__________________________________
	for(tempNode = targetNode->prevNodeData; tempNode!=NULL ;tempNode = tempNode->prevNodeData)
	{
		containAddress = ContainAddressInInterface(tempNode,address);	
		if(containAddress == true)
		{
			*returnNode = tempNode;
			printf("returnNode = %d\n",*returnNode);
			return ;
		}
	}
		
		
	//search next node
	//__________________________________
	for(tempNode = targetNode->nextNodeData; tempNode!=NULL ;tempNode = tempNode->nextNodeData)
		{
		containAddress = ContainAddressInInterface(tempNode,address);
		if(containAddress == true)
		{
			*returnNode = tempNode;
			printf("returnNode = %d\n",*returnNode);
			return ;
		}
	}	
}

サーバ側ノードが通信しているクライアントノードを取得node,msgはサーバ側

AppTimer *timer;
int client_NodeAddress;
Node *client_node;
timer = (AppTimer *) MESSAGE_ReturnInfo(msg);
client_NodeAddress = timer->connectionId;
GetNodeFromAddress(node, &client_node,client_NodeAddress);

Copyright(C) by 芝浦工業大学 工学部通信工学科, 森野研究室. All Rights Reserved.