亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? gpr_route_layer.pr.c

?? opnetadhoc自組網(wǎng)絡(luò)源碼
?? C
?? 第 1 頁 / 共 5 頁
字號(hào):

				
														if (!EPIDEMIC)
																{
				//filter the ns,if not fit the route,then ignore it


				iWaitValue=IsIn_Right_Direction_NS(pkt_dest_gpr_address,src_gp,iCode);

					

				
																  }
																	else 
																		{
																		iWaitValue=1;
																		}
																	
							
																	
				
							

							if (iCode!=ND_REQEST)
							{

							sprintf(msg,"33333)Rcv mac %d_NS for %d from %d,echo a NA,metirc is %d\n",iCode,pk_id,
								source_gpr_address,iWaitValue);
						GPR_message(msg,10);								

							}
					
		
							if (EPIDEMIC)
								iWaitValue =1;							
				
				if (iWaitValue>-1)
					{

				// Create the NA echo
				pk_NA_ptr=op_pk_create_fmt("GPR_NA");
				op_pk_nfd_set(pk_NA_ptr,"Type",NA_PACKET_TYPE);
				op_pk_nfd_set(pk_NA_ptr,"Code",iCode);
		
				// set the DEST field

				op_pk_nfd_set(pk_NA_ptr,"DEST",source_gpr_address);		
				op_pk_nfd_set(pk_NA_ptr,"DEST_GP",src_gp);	
				op_pk_nfd_set(pk_NA_ptr,"SRC",my_gpr_address);		
				op_pk_nfd_set(pk_NA_ptr,"SRC_GP",my_group_id);	

				op_pk_nfd_set(pk_NA_ptr,"PKT_DEST",pkt_dest_gpr_address);	
				op_pk_nfd_set(pk_NA_ptr,"PKT_DEST_GP",dest_gp_id);					
				op_pk_nfd_set(pk_NA_ptr,"packet_ID",pk_id);	
				

				
				op_pk_nfd_set(pk_NA_ptr,"GP_Metrics",iWaitValue);

				gpr_send_to_mac(pk_NA_ptr,source_gpr_address);



				}
				
				
	}
		else //has seen it
			{
				if (iCode==1)
					{
				sprintf(msg,"mac rcv type %d NS for %d from %d,I have seen it ....................................\n",iCode,pk_id,source_gpr_address);
				//GPR_message(msg,10);
				}	
				}
			

		
		}
	

	//op_pk_destroy (pk_ptr);
	
	
}


void mac_data_arrival(Packet* pk_ptr)
{


//dencap the app data from gpr route packet

int source_gpr_address,destination_gpr_address,pk_id;
int pk_TTL;
Packet * data_pk_ptr;
int size_route,i;
int bAppear,iGP_id;
char field[10];
int iRelay,iNext_hop;




	// extract some usefull information from the data packet
	op_pk_nfd_get (pk_ptr,"SRC",&source_gpr_address);
	op_pk_nfd_get (pk_ptr,"DEST",&destination_gpr_address); 	
	op_pk_nfd_get (pk_ptr, "packet_ID",&pk_id );
	op_pk_nfd_get (pk_ptr, "TTL",&pk_TTL );
	op_pk_nfd_get(pk_ptr,"RELAY",&iRelay);
	op_pk_nfd_get(pk_ptr,"Next_hop",&iNext_hop);




if (my_gpr_address==0&&iRelay==40)
	printf("back flow of a data\n");

//	if (pk_id==SeenPkt[0])
		if ( IsInQueue(pk_id, & my_SeenQueue)!=-1   )
		{

	   	op_pk_destroy(pk_ptr);

	sprintf(msg,"drop a data %d from %d,has seen it\n",pk_id,source_gpr_address);
	GPR_message(msg,10);	
		
		
		return;
		}
	else 
		{
		SeenPkt[0]=pk_id;
		AddItemToQ(pk_id,& my_SeenQueue);
		if (pk_id==0)
			{

			}
		
		}
	



	// if the current node is the destination and the final relay of the packet
	if (my_gpr_address==destination_gpr_address|| destination_gpr_address==GPR_BROADCAST_ADDR )
	{
			
		//decapulate the app data
		op_pk_nfd_get (pk_ptr, "data", &data_pk_ptr);
		op_pk_send( data_pk_ptr,TO_UPPER_LAYER_STRM);
		
		op_stat_write (stat_hop_per_pkt,pk_TTL);
		op_stat_write(stat_total_data_successfully_transmitted,++total_data_successfully_transmitted);

		
		


		
	}
	else//foreward data
	{
		// insert to buffer as its own spawned data . send ns
		//if never seen it

		//set the data flag
		op_ima_obj_attr_set(my_node_id,"Conceived",1);
	
		op_pk_nfd_get (pk_ptr,"Size_Route",&size_route); 	
		if (size_route>0)
		{
		//check if data carry route info
		//route 1
		gpr_update_route(pk_ptr,source_gpr_address);
		//route 2
		gpr_update_route(pk_ptr,destination_gpr_address);
	
		//then check if i was in the group link of the data packect

					bAppear=0;


					for (i=0;i<size_route;i++)
						{
		
							sprintf(field,"GP_%d",i);
							op_pk_nfd_get (pk_ptr,field,&iGP_id);	
							if (iGP_id==my_group_id)
								{
									bAppear=1;
									break;
									}
						}
							
						 
					//if not within the same group,add the group ,if within,then just fwd without midify
					if (bAppear==0)
						{
						//out of scope, need not fwd it
							sprintf(msg,"drop a data %d from %d,on the wrong way\n",pk_id,source_gpr_address);
							GPR_message(msg,10);		
						   op_pk_destroy(pk_ptr);
						   
						}
					else
						{
	
							//fwd it
	sprintf(msg,"got a data %d from %d,distance %d,histroy %d\n",pk_id,iRelay,
		GP_route_cache[destination_gpr_address].iDistance ,GP_route_cache[destination_gpr_address].iHistory);
	//GPR_message(msg,10);
								op_pk_nfd_set (pk_ptr, "TTL",pk_TTL+1 );	
								GPR_insert_buffer(pk_ptr,destination_gpr_address);
								//send a ns for this pack
								gpr_send_NS_for_route( ND_DATA);
						}

			
			
			
			
			}
		else
			{
			//no route yet
								//buffer it
	sprintf(msg,"got a data %d from %d,no route\n",pk_id,source_gpr_address);
	GPR_message(msg,10);
								op_pk_nfd_set (pk_ptr, "TTL",pk_TTL+1 );	
								GPR_insert_buffer(pk_ptr,destination_gpr_address);
								//send a ns for this pack
								gpr_send_NS_for_route( ND_DATA);
			
								}
	

		
	
		}




}

/*************************************************************/
/*                  Node BUFFER  operation                   */ 
/*************************************************************/
/* This function inserts a data packet waiting to be transmitted
/* in the node buffer (queue) corresponding to its destination
/* 		Packet* pk_ptr: a pointer to the data packet to store 
/* in the buffer
/* 		int destination_GPR_address: the gpr address of the data 
/* packet destination
/*************************************************************/
void GPR_insert_buffer(Packet* pk_ptr, int destination_GPR_address)
{
// enqueue packet in the destination subqueue
if (op_subq_pk_insert(destination_GPR_address,pk_ptr,OPC_QPOS_TAIL)!=OPC_QINS_OK)
	{
	// if there is an error the packet is destroyed
	GPR_message("Error, Can not insert packet in subqueue \n",0);
	op_pk_destroy(pk_ptr);
	}
else
	{
	



	}
}

void GPR_restore_buffer(Packet* pk_ptr, int destination_GPR_address)
{
// enqueue packet in the destination subqueue
if (op_subq_pk_insert(destination_GPR_address,pk_ptr,OPC_QPOS_HEAD)!=OPC_QINS_OK)
	{
	// if there is an error the packet is destroyed
	GPR_message("Error, Can not insert packet in subqueue \n",0);
	op_pk_destroy(pk_ptr);
	}
else
	{
	



	}
}


Packet* gpr_extract_buffer(int destination_gpr_address)
{
Packet* pk_ptr;
// if there is at list one packet in the destination suqueue 
if (op_subq_empty(destination_gpr_address)==OPC_FALSE)
	{
	// extract the first packet from this queue
		GPR_message("extract a pack",1);

	pk_ptr=op_subq_pk_remove(destination_gpr_address,OPC_QPOS_HEAD);

	}
// if there is no packet in the destination subqueue
else
	{
	// will return OPC_NIL
	pk_ptr=OPC_NIL;
	}
// return the packet pointer
return(pk_ptr);
}

int gpr_buffer_empty(int destination_gpr_address)
{
return (op_subq_empty(destination_gpr_address));
}





void GPR_message(const char* message,int iType)
{
	switch (iType)
		{
		case 27:
			if (op_prg_odb_ltrace_active ("debugfwd") == OPC_TRUE)
				{
					printf("%s: ",my_name);
					printf(message);
					printf("\n");
				}		
		break;
		case 10:
			if (op_prg_odb_ltrace_active ("rr") == OPC_TRUE)
				{
					printf("%s: ",my_name);
					printf(message);
					printf("\n");		
				}
		
			break;
		case 2:
			if (op_prg_odb_ltrace_active ("ns") == OPC_TRUE)
				{
					printf("%s: ",my_name);
					printf(message);
					printf("\n");
				}				
		break;
		
		case 3:
			if (op_prg_odb_ltrace_active ("stat") == OPC_TRUE)
				{
					printf("%s: ",my_name);
					printf(message);
					printf("\n");
				}				
		break;
		
		case 4:
			if (op_prg_odb_ltrace_active ("data") == OPC_TRUE)
				{
					printf("%s: ",my_name);
					printf(message);
					printf("\n");
					
				}				
		break;		
		
		case 5:
			if (op_prg_odb_ltrace_active ("request") == OPC_TRUE)
				{
					printf("%s,group %d: ",my_name,my_group_id);
					printf(message);
					printf("\n");
				
				}				
		break;				
		}
	
		
		

}

void gpr_forward_request(Packet* pk_ptr)
{
	
int size_route;
char field[10];
int  bAppear;
int  iGP_id,i;
int destination_gpr_address,pk_id;
sPkBuff iItem;
int iNext_hop,iTTL;
int iPos;

bAppear=0;
iPos=-1;

// read the Size_Route and Seg_Left fields from the request packet
	op_pk_nfd_get (pk_ptr,"Size_Route",&size_route); 
	op_pk_nfd_get(pk_ptr,"DEST",&destination_gpr_address);
	op_pk_nfd_get(pk_ptr,"Seq_number",&pk_id);
	op_pk_nfd_get(pk_ptr,"Next_hop",&iNext_hop);
	op_pk_nfd_get(pk_ptr,"TTL",&iTTL);

// the current node insert its own gorup id to the group link

//check if it appear in the sequence of groups
for (i=0;i<size_route;i++)
	{
		
		sprintf(field,"GP_%d",i);
		op_pk_nfd_get (pk_ptr,field,&iGP_id);	
		if (iGP_id==my_group_id)
			{
				bAppear=1;
				iPos=i;
				break;
			}
	
	}

//if not within .the same group,add the group ,if within,then just fwd without midify
if (bAppear==0)
	{
		if (size_route< MAX_SIZE_GROUP_LINK-1)
			{
			sprintf(field,"GP_%d",size_route);
			op_pk_nfd_set (pk_ptr,field,my_group_id);
			// increment by one the Size_Route field of the packet
			op_pk_nfd_set(pk_ptr,"Size_Route",++size_route);
		}
		else
			{
			
			sprintf(field,"GP_%d",MAX_SIZE_GROUP_LINK-1);
			op_pk_nfd_set (pk_ptr,field,my_group_id);
			// increment by one the Size_Route field of the packet
			op_pk_nfd_set(pk_ptr,"Size_Route",MAX_SIZE_GROUP_LINK);		
			}



	 }
else
	{
	
	if (iPos<size_route-1)
		return;
	}


	
	//queue the request
	iItem.pkt_id=pk_id;
	iItem.pkt=pk_ptr;
	iItem.iStale=0;
   if ( (iPos=Pkt_Fulsh_Depul_Queue_by_dest(iItem,destination_gpr_address,&q_pkt_req_list) )!=-1 )
		{
		q_pkt_req_list.queue[iPos]=iItem;
		}
	else
		{
		
			Pkt_AddItemToQ(iItem,&q_pkt_req_list);
		}
	
	
	//send ns for the request
	if (iNext_hop==my_gpr_address)
		gpr_send_NS_for_route(ND_REQEST);	
	
	
	

}

void gpr_handle_request(Packet * pk_ptr)
{
int source_gpr_address;
int destination_gpr_address;
int size_route;
int iSequ;
int iPos,iTimeStamp;
Packet * cp_pkptr;
int iNext_hop,iTTL;


// read the different fields of the packet
op_pk_nfd_get (pk_ptr,"SRC",&source_gpr_address);
op_pk_nfd_get (pk_ptr,"DEST",&destination_gpr_address); 
op_pk_nfd_get(pk_ptr,"Seq_number",&iSequ);
op_pk_nfd_get(pk_ptr,"Next_hop",&iNext_hop);
op_pk_nfd_get(pk_ptr,"TTL",&iTTL);

	cp_pkptr = op_pk_copy (pk_ptr);

	//have ever seen it
	iPos=IsInQueue(iSequ, & q_request_list);
	if (iPos==-1)
	{//never seen it then see it
		//if (iNext_hop==my_gpr_address)
			AddItemToQ(iSequ,& q_request_list);
			op_ima_obj_attr_set(my_node_id,"Conceived",1);		
				
	}
	else 
	{
		op_pk_destroy (pk_ptr);
				
		return;
				
	}	

	



	if (my_gpr_address==destination_gpr_address)
		{
			//send a reply

			if ( (GP_route_cache[source_gpr_address].iDistance==-1)||(GP_route_cache[source_gpr_address].iDistance>=iTTL) )
				GP_route_cache[source_gpr_address].iDistance=iTTL;//move to gpr_update_route

			if (GP_route_cache[source_gpr_address].iExpectedVal==0)
				{
					GP_route_cache[source_gpr_address].iExpectedVal= (MAX_SIZE_TTL-GP_route_cache[source_gpr_address].iDistance)*1000;
		
					}
					
			gpr_send_reply(cp_pkptr);
				
		
		}
	else
		{
		

				
					
			//gpr_update_route(pk_ptr,source_gpr_address);	



			size_route=GP_route_cache[destination_gpr_address].size_route;
			iTimeStamp=GP_route_cache[destination_gpr_address].iTimeStamp;
			if (size_route!=0)//has route to the dest then reply proxyly
				{
				//if (op_sim_time()-iTimeStamp<VAL_ROUTE_STALE_TIME)
					gpr_send_reply_proxy(cp_pkptr);
				
				}
			else
				{
					//lable the gp in the request and fwd the request
			if ( (GP_route_cache[source_gpr_address].iDistance==-1)||(GP_route_cache[source_gpr_address].iDistance>=iTTL) )
				GP_route_cache[source_gpr_address].iDistance=iTTL;//move to gpr_update_route
			else 
				return;
			
	if (GP_route_cache[source_gpr_address].iExpectedVal==0)
		{
		GP_route_cache[source_gpr_address].iExpectedVal= (MAX_SIZE_TTL-GP_route_cache[source_gpr_address].iDistance)*1000;
		
		}
				
			
			sprintf(msg,"hear request %d,current TTL(%d) to %d \n",iSequ,GP_route_cache[source_gpr_address].iDistance,source_gpr_address);
			GPR_message(msg,10);
											
					gpr_forward_request(cp_pkptr);

					
				}
		
		}
	
	
	
	
	
}

void gpr_transmit_request(int destination_gpr_address)
{
Packet* pk_ptr;
sPkBuff iItem;
int iSeq;
	
	pk_ptr=op_pk_create_fmt("GPR_Request");
	op_pk_nfd_set(pk_ptr,"Type",REQUET_PACKET_TYPE);
	op_pk_nfd_set(pk_ptr,"SRC",my_gpr_address);


	op_pk_nfd_set(pk_ptr,"DEST",destination_gpr_address);
	op_pk_nfd_set(pk_ptr,"GP_0",my_group_id);
	op_pk_nfd_set(pk_ptr,"Size_Route",1);
	op_pk_nfd_set(pk_ptr,"SRC_GP",my_group_id);	

	op_pk_nfd_set(pk_ptr,"Seq_number",++g_pkt_id);
	op_pk_nfd_set(pk_ptr,"TTL",0);



	iSeq=g_pkt_id;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
奇米精品一区二区三区四区| 欧美一区二区精美| 国产成人自拍在线| 久久精品国产第一区二区三区 | 精品国产91洋老外米糕| 欧美福利视频导航| 欧美网站一区二区| 欧美日韩精品一区视频| 在线区一区二视频| 欧美日本国产视频| 日韩欧美亚洲一区二区| 日韩欧美一区在线观看| 日韩视频123| 欧美精品一区二区在线播放| www国产成人| 国产日产精品一区| 国产精品热久久久久夜色精品三区 | 国产69精品久久777的优势| 国产成人免费在线视频| 国产毛片精品国产一区二区三区| 国产一区二区毛片| 成人ar影院免费观看视频| 99re视频精品| 欧美色精品天天在线观看视频| 欧美精品在线一区二区三区| 欧美一区二区三区爱爱| 精品国产精品一区二区夜夜嗨| 久久精品亚洲麻豆av一区二区| 国产精品三级电影| 一区二区三区91| 免费在线观看成人| 国产福利91精品| 91视视频在线观看入口直接观看www | 欧美日本韩国一区二区三区视频 | 中文字幕一区二区三区在线不卡| 亚洲视频免费看| 亚洲成人免费视| 韩国欧美国产1区| 97久久精品人人爽人人爽蜜臀 | 欧美经典一区二区三区| 亚洲色图欧洲色图| 日韩中文字幕麻豆| 国产69精品久久久久777| 91福利视频在线| 日韩一区二区影院| 国产精品高清亚洲| 日韩精品91亚洲二区在线观看| 国产精品亚洲一区二区三区妖精| 99久久综合狠狠综合久久| 欧美美女一区二区| 国产人伦精品一区二区| 亚洲国产日韩在线一区模特 | 欧美精品第一页| 久久久不卡网国产精品二区| 亚洲男同性视频| 捆绑调教美女网站视频一区| 色先锋aa成人| 国产夜色精品一区二区av| 婷婷综合五月天| 岛国精品在线观看| 欧美日韩一区二区三区免费看| 国产欧美精品一区| 日欧美一区二区| 色综合网色综合| 久久九九国产精品| 蜜桃av一区二区| 欧美午夜精品一区| 欧美国产精品中文字幕| 久久精品久久久精品美女| 在线中文字幕不卡| 中文字幕国产一区二区| 日本最新不卡在线| 在线观看视频一区二区| 中文字幕av一区二区三区高| 免费观看在线综合| 欧美日韩一二三| 亚洲女厕所小便bbb| 粉嫩久久99精品久久久久久夜| 日韩一区二区免费在线观看| 亚洲电影视频在线| 91亚洲精品久久久蜜桃| 国产性做久久久久久| 麻豆高清免费国产一区| 欧美日韩成人综合在线一区二区| 日韩理论片一区二区| 国产成人精品免费| 欧美精品一区二区高清在线观看| 日韩在线一区二区| 欧美日韩亚洲高清一区二区| 亚洲欧美日韩电影| 91亚洲精品乱码久久久久久蜜桃| 欧美韩日一区二区三区四区| 国产一区二区不卡在线| 欧美精品一区二区三区蜜桃| 另类的小说在线视频另类成人小视频在线| 欧洲一区二区三区免费视频| 亚洲精品中文在线影院| 色偷偷久久一区二区三区| 亚洲天堂av老司机| a美女胸又www黄视频久久| 国产精品系列在线| 成年人午夜久久久| 中文字幕一区免费在线观看| 成人18视频在线播放| 国产精品色在线| 97超碰欧美中文字幕| 日韩理论片在线| 91精品福利视频| 亚洲一区二区三区小说| 精品视频在线免费观看| 性做久久久久久久久| 在线综合视频播放| 久久超碰97中文字幕| 精品成人免费观看| 丰满少妇久久久久久久| 国产精品大尺度| 一本到不卡免费一区二区| 亚洲一区中文日韩| 在线电影欧美成精品| 麻豆精品在线视频| 国产亲近乱来精品视频| 99re66热这里只有精品3直播 | 一区二区三区日本| 欧美揉bbbbb揉bbbbb| 日本在线不卡视频一二三区| 精品88久久久久88久久久| 国产精品18久久久久久vr| 国产精品污网站| 91九色最新地址| 麻豆国产一区二区| 欧美激情一区二区三区全黄| 91亚洲精品乱码久久久久久蜜桃| 亚洲国产精品人人做人人爽| 欧美一卡二卡三卡| 国产91精品露脸国语对白| 有码一区二区三区| 91精品国产一区二区人妖| 国产高清视频一区| 一区二区三区日本| 欧美变态tickling挠脚心| 豆国产96在线|亚洲| 亚洲午夜在线电影| 精品国产3级a| 91蜜桃婷婷狠狠久久综合9色| 性做久久久久久免费观看| 久久综合九色综合97婷婷| 99久久精品费精品国产一区二区| 偷拍亚洲欧洲综合| 中文字幕免费一区| 欧美三级电影网| 国产成人一区在线| 洋洋av久久久久久久一区| 精品久久人人做人人爰| fc2成人免费人成在线观看播放| 亚洲一区影音先锋| 久久精品一区二区三区av| 在线精品视频免费播放| 国产揄拍国内精品对白| 亚洲综合在线免费观看| 精品久久久久久无| 色94色欧美sute亚洲线路二 | 欧美一区二区不卡视频| 成人中文字幕电影| 日本女人一区二区三区| 自拍av一区二区三区| 久久综合色婷婷| 欧美日韩午夜在线视频| 国产成人综合亚洲91猫咪| 日韩精品视频网| 亚洲少妇30p| 欧美精品一区二区精品网| 欧日韩精品视频| 国产一区二区0| 青娱乐精品视频在线| 18成人在线观看| 国产亚洲人成网站| 欧美一区二区在线视频| 91黄色激情网站| 成人中文字幕电影| 精品写真视频在线观看| 午夜精品福利一区二区蜜股av| 国产精品国产自产拍高清av| 久久久一区二区| 日韩视频123| 制服丝袜亚洲精品中文字幕| 色综合一区二区| 99国产精品久| 成人app网站| 成人性生交大合| 国产在线日韩欧美| 久久丁香综合五月国产三级网站| 亚洲国产综合在线| 亚洲黄色小说网站| 自拍偷自拍亚洲精品播放| 国产精品色哟哟网站| 国产日韩精品一区| 国产免费观看久久| 久久精品日产第一区二区三区高清版| 欧美一区二区三区男人的天堂| 欧美女孩性生活视频|