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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? nat_icmp_transaction.c

?? VXWORKS NAT 部分源代碼2 有興趣朋友可以參考下
?? C
字號:
/* nat_icmp_transaction.c */

/* Copyright 2000-2003  Wind River Systems, Inc. */

/* @format.tab-size 4, @format.use-tabs true, @format.new-line lf */

/*
modification history
--------------------
01b,24apr03,zhu  updated copyright
01a,21apr03,myz  replaced swap(_long) with the ntohs(l) and htons(l) macros,
                 replaced RWOS list functions with ones in dllLib.c.
040803  vks  	updated Copyright info 
040303  vks  	replacing table_malloc with calloc
050701  tk		Fix problem with ICMP time-exceeded message.  The ICMP time-exceeded message
				is handled as a datagram and is therefore moved to nat_icmp_datagram.c.
				Add comment in the code.
*/

#include "nat.h"
#include "nat_api.h"
/************************************************************************/
enum TEST handle_icmp_translation_global_rx_transaction_nats (ICMP_PACKET *sptr_icmp_packet);
static enum TEST handle_icmp_translation_global_rx_transaction_natg (ICMP_PACKET *sptr_icmp_packet);
static enum TEST handle_icmp_translation_local_rx_transaction_nats (ICMP_PACKET *sptr_icmp_packet);
static enum TEST handle_icmp_translation_local_rx_transaction_natg (ICMP_PACKET *sptr_icmp_packet);
/******************************************add by zbb********************************************/
static NAT_CURRENCY_TRANSLATION_ENTRY *new_icmp_translation_entry (ICMP_PACKET *sptr_icmp_packet);
static NAT_CURRENCY_TRANSLATION_ENTRY *find_icmp_entry (ICMP_PACKET *sptr_icmp_packet);
extern unsigned long c_icmp_translation_entry;


/************************************************************************/
enum TEST handle_icmp_translation_global_rx_transaction (ICMP_PACKET *sptr_icmp_packet)
{
	enum TEST pass_or_fail;

	if (nat.single_global_address_enabled == TRUE)
	{
		pass_or_fail = handle_icmp_translation_global_rx_transaction_nats (sptr_icmp_packet);
	}
	else
	{
		pass_or_fail = handle_icmp_translation_global_rx_transaction_natg (sptr_icmp_packet);
	}

	return (pass_or_fail);				
}
/***************************************************************************/
enum TEST handle_icmp_translation_local_rx_transaction (ICMP_PACKET *sptr_icmp_packet)
{
	enum TEST pass_or_fail;

	if (nat.single_global_address_enabled == TRUE)
	{
		pass_or_fail = handle_icmp_translation_local_rx_transaction_nats (sptr_icmp_packet);
	}
	else
	{
		pass_or_fail = handle_icmp_translation_local_rx_transaction_natg (sptr_icmp_packet);
	}

	return (pass_or_fail);				
}

/*********************************************************************************************
Description:
	This function handles translation of ICMP transactions received from global NAPT port.
	If a match of the ICMP identifier is not found, it goes to the default ICMP address if
	configured in natcfg.c and perform the translation and checksum adjustment.  If the
	ICMP address is not configured, it passes the ICMP packet to the higher layer.
**********************************************************************************************/
enum TEST handle_icmp_translation_global_rx_transaction_nats (ICMP_PACKET *sptr_icmp_packet)
{
	NAT_CURRENCY_TRANSLATION_ENTRY *sptr_icmp_translation_entry=NULL;
	USHORT icmp_identifier;
	USHORT spoofed_icmp_identifier;
	IP_ADDRESS address;
	USHORT checksum;

	spoofed_icmp_identifier = ntohs (sptr_icmp_packet->header.option.echo_message.identifier);
	
	spoofed_icmp_identifier=spoofed_icmp_identifier&(UPPER_EPHEMERAL_PORT_VALUE-1);
	
	semTake(natentrylock,WAIT_FOREVER);
	
	sptr_icmp_translation_entry=out_port_map[spoofed_icmp_identifier].next_entrys_link;
	for(;sptr_icmp_translation_entry!=NULL;sptr_icmp_translation_entry=sptr_icmp_translation_entry->next_entrys_link)
	{
		if (sptr_icmp_translation_entry->remote_address== ntohl(sptr_icmp_packet->ip_header.source_address)
			&&(sptr_icmp_translation_entry->spoofed_local_port== ntohs(sptr_icmp_packet->header.option.echo_message.identifier))
			&&(sptr_icmp_translation_entry->protocol_type==sptr_icmp_packet->ip_header.protocol))
		{
			break;
		}
	}
	
	if(sptr_icmp_translation_entry==NULL)
	{
		semGive(natentrylock);
		return (FAIL);
	}
	if (sptr_icmp_translation_entry->local_port!= 0x0000)
	{
		icmp_identifier = htons (sptr_icmp_translation_entry->local_port);

		checksum = sptr_icmp_packet->header.checksum;

		checksum_fixup ((BYTE *) &checksum,
						(BYTE *) &sptr_icmp_packet->header.option.echo_message.identifier, sizeof (USHORT),
						(BYTE *) &icmp_identifier, sizeof (USHORT));		

		sptr_icmp_packet->header.option.echo_message.identifier = icmp_identifier;
		sptr_icmp_packet->header.checksum = checksum;
	}

	else 
	{
		semGive(natentrylock);
		return (PASS);
	}	

	address = htonl (sptr_icmp_translation_entry->local_address);

	checksum = sptr_icmp_packet->ip_header.header_checksum;
	if(sptr_icmp_translation_entry->nat_aging_state == NAT_SYNCH_STATE)
		sptr_icmp_translation_entry->nat_aging_state = NAT_ESTABLISHED_STATE;

	checksum_fixup ((BYTE *) &checksum,
						(BYTE *) &sptr_icmp_packet->ip_header.destination_address, sizeof (IP_ADDRESS),
						(BYTE *) &address, sizeof (IP_ADDRESS));

	sptr_icmp_packet->ip_header.destination_address = address;
	sptr_icmp_packet->ip_header.header_checksum = checksum;

	sptr_icmp_translation_entry->currenty_translation_entry_timer=nat.icmp_translation_entry_timer;
	semGive(natentrylock);
	natStats.icmp_pkts_i2l++;
	
	natStats.icmp_bytes_i2l += ntohs(sptr_icmp_packet->ip_header.total_length);
	
	return (PASS);
}
/***************************************************************************/
static enum TEST handle_icmp_translation_global_rx_transaction_natg (ICMP_PACKET *sptr_icmp_packet)
{
	if (sptr_icmp_packet->ip_header.destination_address == nat.global_address)
	{
		return (PASS);
	}

	if (handle_ip_translation_global_rx_natg ((IP_PACKET *) sptr_icmp_packet) == NULL)
	{
		return (FAIL);
	}
	
	return (PASS);	
}
/***************************************************************************/
static enum TEST handle_icmp_translation_local_rx_transaction_natg (ICMP_PACKET *sptr_icmp_packet)
{
	if (handle_ip_translation_local_rx_natg ((IP_PACKET *) sptr_icmp_packet) == NULL)
	{
		return (FAIL);
	}

	return (PASS);	
}
/***************************************************************************/
static NAT_CURRENCY_TRANSLATION_ENTRY *find_icmp_entry (ICMP_PACKET *sptr_icmp_packet)
{
	unsigned long hash;
	NAT_CURRENCY_TRANSLATION_ENTRY *sptr_icmp_translation_entry=NULL;

	
	hash=natHash_get(sptr_icmp_packet->ip_header.source_address,sptr_icmp_packet->ip_header.destination_address,sptr_icmp_packet->header.option.echo_message.identifier);
	for(sptr_icmp_translation_entry=in_map_hash[hash].inmap;sptr_icmp_translation_entry != NULL;sptr_icmp_translation_entry=sptr_icmp_translation_entry->next_inmap_entrys_link)
	{
		if (sptr_icmp_translation_entry->local_address == ntohl(sptr_icmp_packet->ip_header.source_address)
			&&(sptr_icmp_translation_entry->local_port == ntohs(sptr_icmp_packet->header.option.echo_message.identifier)))
		{
			return (sptr_icmp_translation_entry);
		}
	}
	return (NULL);
}

/***************************************************************************/
static enum TEST handle_icmp_translation_local_rx_transaction_nats (ICMP_PACKET *sptr_icmp_packet)
{
	NAT_CURRENCY_TRANSLATION_ENTRY *sptr_icmp_translation_entry=NULL;
	USHORT checksum;
	IP_ADDRESS address;
	USHORT spoofed_icmp_identifier;

	/*printf("enter icmp function !start find icmp entry!\n");*/
	semTake(natentrylock,WAIT_FOREVER);
	sptr_icmp_translation_entry = find_icmp_entry (sptr_icmp_packet);

	
	if (!sptr_icmp_translation_entry)
	{
		
		sptr_icmp_translation_entry = new_icmp_translation_entry (sptr_icmp_packet);
	}

	if (!sptr_icmp_translation_entry)
	{
		semGive(natentrylock);
		return (FAIL);
	}

	if (sptr_icmp_translation_entry->spoofed_local_port != 0x0000)
	{
		spoofed_icmp_identifier = htons (sptr_icmp_translation_entry->spoofed_local_port);
		checksum = sptr_icmp_packet->header.checksum;

		checksum_fixup ((BYTE *) &checksum,
							(BYTE *) &sptr_icmp_packet->header.option.echo_message.identifier, sizeof (USHORT),
							(BYTE *) &spoofed_icmp_identifier, sizeof (USHORT));

		sptr_icmp_packet->header.checksum = checksum;
		sptr_icmp_packet->header.option.echo_message.identifier = spoofed_icmp_identifier;
	}

	address = htonl (nat.global_address);
	checksum = sptr_icmp_packet->ip_header.header_checksum;

	checksum_fixup ((BYTE *) &checksum,
						(BYTE *) &sptr_icmp_packet->ip_header.source_address, sizeof (IP_ADDRESS),
						(BYTE *)	&address, sizeof (IP_ADDRESS));

	sptr_icmp_packet->ip_header.source_address = address;
	sptr_icmp_packet->ip_header.header_checksum = checksum;
/*********************************add by zbb******************************************/
	sptr_icmp_translation_entry->currenty_translation_entry_timer=nat.icmp_translation_entry_timer;
	semGive(natentrylock);
	natStats.icmp_pkts_l2i++;
	natStats.icmp_bytes_l2i += ntohs(sptr_icmp_packet->ip_header.total_length);
	
/************************************************************************************/
	
	return (PASS);		
}
/*********************************add by zbb******************************************/
static NAT_CURRENCY_TRANSLATION_ENTRY *new_icmp_translation_entry (ICMP_PACKET *sptr_icmp_packet)
{
	NAT_CURRENCY_TRANSLATION_ENTRY *sptr_icmp_translation_entry=NULL;
	unsigned long out_porthash;
	
	semTake (spoofingPortLock, WAIT_FOREVER);
	
	if( natEntryFree != NULL)
	{
		sptr_icmp_translation_entry= natEntryFree;
		natEntryFree=natEntryFree->next_entrys_link;
	}
	else
	{
		sptr_icmp_translation_entry=natCheck_Free_Entrys();
	}
	
	if (sptr_icmp_translation_entry == NULL)
	{
		semGive(spoofingPortLock);
		return (NULL);
	}
	if(find_nat_port_spoofing_number(ntohl (sptr_icmp_packet->ip_header.source_address),
		ntohs (sptr_icmp_packet->header.option.timestamp_message.identifier))==FAIL)
	{
		semGive(spoofingPortLock);
		return (NULL);
	}

	sptr_icmp_translation_entry->local_state = NAT_INITIAL_STATE;
	sptr_icmp_translation_entry->nat_aging_state = NAT_SYNCH_STATE;
	sptr_icmp_translation_entry->local_sequence_delta_list.sptr_forward_link = NULL;
	sptr_icmp_translation_entry->local_sequence_delta_list.sptr_backward_link = NULL;
	sptr_icmp_translation_entry->global_sequence_delta_list.sptr_forward_link = NULL;
	sptr_icmp_translation_entry->global_sequence_delta_list.sptr_backward_link = NULL;
	/*
	sptr_icmp_translation_entry->global_sequence_number = 0x00000000L;
	sptr_icmp_translation_entry->local_sequence_number = 0x00000000L;
	*/
	sptr_icmp_translation_entry->protocol_type=sptr_icmp_packet->ip_header.protocol;
	sptr_icmp_translation_entry->local_port = ntohs (sptr_icmp_packet->header.option.timestamp_message.identifier);
	sptr_icmp_translation_entry->spoofed_local_port = nat.current_port_spoofing_number;
	sptr_icmp_translation_entry->local_address = ntohl (sptr_icmp_packet->ip_header.source_address);
	sptr_icmp_translation_entry->currenty_translation_entry_timer = nat.icmp_translation_entry_timer;
	sptr_icmp_translation_entry->remote_address=ntohl(sptr_icmp_packet->ip_header.destination_address);
	
	out_porthash=nat.current_port_spoofing_number&(UPPER_EPHEMERAL_PORT_VALUE-1);
	sptr_icmp_translation_entry->next_entrys_link=out_port_map[out_porthash].next_entrys_link;
	out_port_map[out_porthash].next_entrys_link=sptr_icmp_translation_entry;
	natMark_in_map(sptr_icmp_translation_entry);

	
	natStats.icmpCons++;
	semGive(spoofingPortLock);
	return (sptr_icmp_translation_entry);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩成人高清| 国产午夜精品久久久久久久| 精品国产露脸精彩对白| 最新不卡av在线| 国内国产精品久久| 欧美另类一区二区三区| 亚洲三级理论片| 成人在线综合网站| 精品国精品自拍自在线| 肉肉av福利一精品导航| 一本大道久久a久久综合婷婷| 精品国免费一区二区三区| 日韩二区在线观看| 欧美日韩在线三级| 亚洲精品免费播放| 99久久伊人精品| 国产精品看片你懂得| 国产99精品国产| 国产日韩欧美激情| 国产精品99久久不卡二区| 国产最新精品免费| 欧美日韩一区二区三区四区| 国产精品不卡一区| 97国产一区二区| 中文字幕国产一区二区| 高清av一区二区| 久久久久久久久久久久电影| 激情欧美日韩一区二区| 精品国产免费一区二区三区四区 | 日韩欧美你懂的| 午夜激情久久久| 欧美日韩精品免费| 日本欧美一区二区| 日韩美女一区二区三区四区| 麻豆91在线播放免费| 欧美成人精品3d动漫h| 看电视剧不卡顿的网站| 精品国产青草久久久久福利| 国产一区在线精品| 国产免费观看久久| 91丨国产丨九色丨pron| 一区二区三区波多野结衣在线观看| 色综合久久综合中文综合网| 亚洲一区二区三区自拍| 欧美视频一区二区三区四区| 日韩精品亚洲专区| 精品福利视频一区二区三区| 国产精品主播直播| ㊣最新国产の精品bt伙计久久| 91视频国产资源| 日韩精品一区第一页| 亚洲精品在线观看网站| 成人激情免费视频| 午夜激情一区二区| 国产午夜亚洲精品不卡| 在线一区二区三区四区五区| 免费看欧美女人艹b| 国产色综合一区| 在线视频国产一区| 狠狠狠色丁香婷婷综合激情| 亚洲精品视频在线观看免费 | 麻豆91在线看| 国产精品大尺度| 337p亚洲精品色噜噜狠狠| 国产盗摄一区二区| 亚洲一卡二卡三卡四卡无卡久久| 日韩欧美在线123| 99久久国产免费看| 久久综合综合久久综合| 亚洲欧洲性图库| 欧美电视剧免费观看| 91美女片黄在线观看| 激情综合五月天| 亚洲香肠在线观看| 国产精品久久久久永久免费观看| 91麻豆精品国产自产在线观看一区 | 国产视频视频一区| 欧美日韩aaaaa| 国产99一区视频免费| 欧美aaaaaa午夜精品| 日韩毛片在线免费观看| 精品国产sm最大网站| 欧美日本韩国一区二区三区视频| 成人永久免费视频| 亚洲最新在线观看| 久久免费视频色| 欧美精品色一区二区三区| 99久久99精品久久久久久 | 色综合久久中文综合久久牛| 精品一区二区三区久久久| 亚洲主播在线播放| 国产精品美女久久久久久久网站| 日韩精品一区二区在线| 欧美日韩在线三级| 91成人免费网站| 色综合一个色综合| 99久免费精品视频在线观看| 黄色小说综合网站| 久久超碰97人人做人人爱| 午夜激情久久久| 亚洲国产精品久久一线不卡| 亚洲黄色尤物视频| 亚洲精选免费视频| 亚洲精品免费在线| 一区二区三区四区不卡在线 | 国产一区二区伦理| 麻豆91精品91久久久的内涵| 午夜视频一区二区三区| 亚洲一二三四区| 亚洲一区二区视频在线| 有码一区二区三区| 亚洲综合在线观看视频| 亚洲精选免费视频| 亚洲综合清纯丝袜自拍| 亚洲精品亚洲人成人网| 亚洲在线观看免费视频| 亚洲成年人影院| 美女久久久精品| 国产乱子伦视频一区二区三区| 国产一区二区三区日韩| 成人精品国产免费网站| 99久久国产综合精品女不卡 | 成人动漫在线一区| 99精品黄色片免费大全| 在线视频你懂得一区| 欧美网站一区二区| 91精品国产综合久久香蕉的特点| 欧美va亚洲va| 中文字幕成人av| 亚洲精品视频观看| 日本成人中文字幕| 国产精品一区二区三区四区| 成年人午夜久久久| 欧美系列在线观看| 欧美一级日韩不卡播放免费| 欧美精品一区二区三区四区| 国产精品色在线观看| 一个色妞综合视频在线观看| 亚洲成人精品一区| 精品一区二区三区av| 成人黄色在线网站| 欧美日韩国产123区| 久久精品一二三| 亚洲永久免费av| 国产在线视频一区二区| 91久久人澡人人添人人爽欧美| 欧美一区二区三区爱爱| 国产精品第五页| 免费av网站大全久久| av一区二区三区在线| 欧美久久婷婷综合色| 国产精品无人区| 日本女优在线视频一区二区| av影院午夜一区| 欧美xxxxx牲另类人与| 一区二区久久久久| 国产成人小视频| 91.xcao| 亚洲伦在线观看| 国产在线视视频有精品| 欧美日韩精品欧美日韩精品一综合| 国产亚洲制服色| 秋霞av亚洲一区二区三| 日本精品视频一区二区| 久久久久久久久久久久久夜| 五月综合激情日本mⅴ| 91在线国内视频| 久久奇米777| 久久精品国产99国产| 欧美日韩高清影院| 亚洲精品国产品国语在线app| 黄色资源网久久资源365| 欧美精品免费视频| 一二三区精品福利视频| www.av精品| 国产日韩精品一区二区三区在线| 婷婷亚洲久悠悠色悠在线播放| 99久久久精品免费观看国产蜜| 2014亚洲片线观看视频免费| 青青草原综合久久大伊人精品 | 久久国产人妖系列| 欧美男同性恋视频网站| 一区二区三区在线视频免费观看| 成人性生交大合| 国产午夜精品久久久久久久 | 欧美精品久久一区| 亚洲午夜一二三区视频| 色综合天天综合在线视频| 国产精品久久久久毛片软件| 国产精品正在播放| 精品日韩在线观看| 69堂亚洲精品首页| 亚洲制服欧美中文字幕中文字幕| 9人人澡人人爽人人精品| 欧美激情一区二区三区四区 | 91香蕉视频在线| 国产精品网站在线观看| 成人亚洲精品久久久久软件| 国产女主播一区| 成人小视频免费在线观看|