⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nat_packet_structures.h

📁 vxworks下ppp的实现源码
💻 H
字号:
/* nat_packet_structures.h *//* Copyright 2000-2003 Wind River Systems, Inc. *//* @format.tab-size 4, @format.use-tabs true, @format.new-line lf *//*modification history--------------------01b,23apr03,zhu  updated copyright01a,23sep02,vvv  fixed problem with packed enums (SPR #80461)*/#ifndef __INCnat_packet_structuresh#define __INCnat_packet_structuresh#ifndef VARIABLE_NUMBER_OF_BYTES#define VARIABLE_NUMBER_OF_BYTES 1#endif/* enums */enum IP_PROTOCOL_VALUE{	RESERVED_PROTOCOL	= 0,           /* Reserved */	ICMP_PROTOCOL		= 1,	IGMP_PROTOCOL		= 2,	IP_PROTOCOL_UNUSED	= 4,           /* IP in IP (encapsulation) */ /* name conflict */	TCP_PROTOCOL		= 6,	IGP_PROTOCOL 		= 9,           /* any private interior gateway */	UDP_PROTOCOL		= 17,	IDRP_PROTOCOL 		= 45,          /* Inter-Domain Routing Protocol */	RSVP_PROTOCOL 		= 46,	GRE_PROTOCOL		= 47,	IPSEC_ESP_PROTOCOL	= 50,	IPSEC_AH_PROTOCOL	= 51,	IGRP_PROTOCOL		= 88,	OSPF_PROTOCOL		= 89,          /* OSPFIGP */	IPIP_PROTOCOL		= 94,  /* IP-within-IP Encapsulation Protocol */	ETHERIP_PROTOCOL	= 97   /* Ethernet-within-IP Encapsulation */#if __DCC__};#else} _pack;#endifenum ICMP_MESSAGE_TYPE{	ICMP_ECHO_REPLY_TYPE						= 0,	ICMP_DESTINATION_UNREACHABLE_TYPE			= 3, 	ICMP_SOURCE_QUENCH_TYPE						= 4,	ICMP_REDIRECT_TYPE							= 5,	ICMP_ECHO_REQUEST_TYPE 						= 8,	ICMP_TIME_EXCEEDED_TYPE						= 11,	ICMP_PARAMETER_PROBLEM_TYPE 				= 12,	ICMP_TIMESTAMP_TYPE							= 13,	ICMP_TIMESTAMP_REPLY_TYPE					= 14,	ICMP_INFO_REQUEST_TYPE						= 15,	ICMP_INFO_REPLY_TYPE						= 16,	ICMP_ADDRESS_MASK_TYPE						= 17,	ICMP_ADDR_MASK_REPLY_TYPE					= 18,	TOTAL_ICMP_TYPES							= 19#if __DCC__};#else} _pack;#endifenum ICMP_UNREACHABLE_CODE{	ICMP_NET_UNREACHABLE_CODE			= 0,	ICMP_HOST_UNREACHABLE_CODE			= 1,	ICMP_PROTOCOL_UNREACHABLE_CODE		= 2,	ICMP_PORT_UNREACHABLE_CODE			= 3,	ICMP_FRAGMENT_NEEDED_CODE			= 4,	ICMP_ROUTE_FAIL_CODE				= 5,	ICMP_ADMIN_PROHIBIT_CODE   			= 13,	TOTAL_UNREACHABLE_CODES				= 14#if __DCC__};#else} _pack;#endifenum ICMP_TIME_EXCEEDED_CODE{	ICMP_TTL_EXCEEDED_CODE			= 0,	ICMP_FRAGMENT_EXCEEDED_CODE		= 1,	TOTAL_TIME_EXCEEDED_CODES		= 2#if __DCC__};#else} _pack;#endifenum ICMP_REDIRECT_CODE{	ICMP_REDIRECT_NET_CODE					= 0,	ICMP_REDIRECT_HOST_CODE					= 1,	ICMP_REDIRECT_TOS_AND_NET_CODE			= 2,	ICMP_REDIRECT_TOS_AND_HOST_CODE			= 3,	TOTAL_REDIRECT_CODES					= 4#if __DCC__};#else} _pack;#endifenum IP_SEND_CONFIRMATION{ 	IP_SEND_ILLEGAL_OPTION_LENGTH 					= 0,	IP_SEND_NO_ROUTE 								= 1,	IP_SEND_BROADCAST_NOT_AVAILABLE 				= 2,	IP_SEND_BROADCAST_NOT_ALLOWED 					= 3,	IP_SEND_MESSAGE_TOO_BIG 						= 4,	IP_SEND_FRAGMENTATION_NEEDED 					= 5,	IP_SEND_PACKET_FILTERED 						= 6,	IP_SEND_CANNOT_FRAGMENT 						= 7,	IP_SEND_PORT_DISABLED 							= 8,	IP_SEND_PACKET_FRAGMENTED_OK 					= 9,	IP_SEND_OK 										= 0x0a,	IP_SEND_NO_ARP_TABLE_ENTRY 						= 0x0b,	IP_SEND_REAL_PORT_DISABLED 						= 0x0c,	IP_SEND_FAILED_TO_DETERMINE_OUTGOING_PORT		= 0x0d,	IP_SEND_DID_NOT_FREE_PACKET						= 0x0e,	IP_SEND_FAIL									= 0x0f,	TOTAL_IP_SEND_CONFIRMATIONS 					= 0x10#if __DCC__};#else} _pack;#endif#define RIP_PORT									520#define IP_NO_SUCH_PORT								0xffff#define IP_HEADER_LENGTH							20/* structurs */typedef _struct VERSION_LENGTH_BIT_STRUCTURE{#if (_BYTE_ORDER == _LITTLE_ENDIAN)	unsigned char		header_length:4;	unsigned char		version:4;#else	unsigned char		version:4;	unsigned char		header_length:4;#endif} _pack VERSION_LENGTH_BIT_STRUCTURE;typedef _struct SERVICE_TYPE_BIT_STRUCTURE{#if (_BYTE_ORDER == _LITTLE_ENDIAN)	unsigned char 		unused:2;	unsigned char 		high_reliability:1;	unsigned char 		high_throughput:1;	unsigned char 		low_delay:1;	unsigned char 		precedence:3;#else	unsigned char 		precedence:3;	unsigned char 		low_delay:1;	unsigned char 		high_throughput:1;	unsigned char		high_reliability:1;	unsigned char		unused:2;#endif} _pack SERVICE_TYPE_BIT_STRUCTURE;typedef _struct IP_HEADER{	VERSION_LENGTH_BIT_STRUCTURE 	version_header_length;	SERVICE_TYPE_BIT_STRUCTURE		service_type;	USHORT							total_length;	USHORT							identifier;	USHORT 							fragment;	BYTE							time_to_live;	BYTE							protocol;	USHORT							header_checksum;	ULONG							source_address;	ULONG							destination_address;} _pack IP_HEADER;#define IP_FRAGMENT_FLAG_RESERVED				0x8000	/* Must be zero */#define IP_FRAGMENT_FLAG_DO_NOT_FRAGMENT		0x4000#define IP_FRAGMENT_FLAG_MORE_FRAGMENTS			0x2000#define IP_FRAGMENT_OFFSET_MASK					0x1fff	/* Lower 12 bits used for offset */typedef _union	UNION_OPTIONS_OR_DATA{	BYTE 			data;	BYTE			ip_options;} _pack UNION_OPTIONS_OR_DATA;typedef _struct IP_PACKET{	IP_HEADER					header;	UNION_OPTIONS_OR_DATA 		options_or_data;} _pack IP_PACKET;/* UDP */typedef _struct UDP_HEADER{	USHORT 		source_port;	USHORT 		destination_port;	USHORT 		length;	USHORT 		checksum;} _pack UDP_HEADER;typedef _struct	UDP_PACKET{	IP_HEADER					ip_header;	UDP_HEADER					header;	BYTE						data[VARIABLE_NUMBER_OF_BYTES];} _pack UDP_PACKET;/* TCP */typedef _struct TCP_HEADER_LENGTH_BYTE{#if (_BYTE_ORDER == _LITTLE_ENDIAN)	unsigned char 		reserved:4;	unsigned char 		header_length:4;#else	unsigned char 		header_length:4;	unsigned char 		reserved:4;#endif} _pack TCP_HEADER_LENGTH_BYTE;typedef _struct TCP_HEADER_FLAGS{#if (_BYTE_ORDER == _LITTLE_ENDIAN)	unsigned char 		finished_flag:1;	unsigned char 		synchronize_flag:1;	unsigned char 		reset_flag:1;	unsigned char 		push_flag:1;	unsigned char 		acknowledgment_flag:1;	unsigned char 		urgent_flag:1;	unsigned char 		congest_flag:1;				/* not in rfc793 */	unsigned char 		reserved:1;#else	unsigned char 		reserved:1;	unsigned char 		congest_flag:1;				/* not in rfc793 */	unsigned char 		urgent_flag:1;	unsigned char 		acknowledgment_flag:1;	unsigned char 		push_flag:1;	unsigned char 		reset_flag:1;	unsigned char 		synchronize_flag:1;	unsigned char 		finished_flag:1;#endif} _pack TCP_HEADER_FLAGS;typedef _struct TCP_OPTIONS					/* The only option we will send in TCP is maximum segment size */{	BYTE	 			kind;	BYTE	 			length;	USHORT 				maximum_segment_size;} _pack TCP_OPTIONS;typedef _union TCP_UNION_OPTIONS_OR_DATA{	TCP_OPTIONS			tcp_options;	BYTE 				tcp_data;}  _pack TCP_UNION_OPTIONS_OR_DATA;/* TCP header as defined by RFC793 */typedef _struct TCP_HEADER{	USHORT 					  		source_port;	USHORT 					  		destination_port;	ULONG	 					  	sequence_number;	ULONG	 					  	acknowledgment_number;	TCP_HEADER_LENGTH_BYTE 			header_length_byte;	TCP_HEADER_FLAGS	  			flags;	USHORT					  		window_size;	USHORT					  		checksum;	USHORT					  		urgent_pointer;} _pack TCP_HEADER;typedef _struct TCP_PACKET{	IP_HEADER 				 	  	ip_header;	TCP_HEADER       		  		tcp_header;	TCP_UNION_OPTIONS_OR_DATA 		options_or_data;} _pack TCP_PACKET;/* ICMP */typedef _struct ICMP_UNREACHABLE_MESSAGE{	USHORT 			unused;	USHORT 			mtu;	IP_HEADER 		ip_data;}_pack ICMP_UNREACHABLE_MESSAGE;typedef _struct ICMP_PARAM_PROBLEM_MESSAGE{	BYTE			pointer;	BYTE			unused[3];	IP_HEADER 		ip_data;} _pack ICMP_PARAM_PROBLEM_MESSAGE;typedef _struct ICMP_REDIRECT_MESSAGE{	ULONG			gateway;	IP_HEADER 		ip_data;} _pack ICMP_REDIRECT_MESSAGE;typedef _struct ICMP_ECHO_MESSAGE{	USHORT 		identifier;	USHORT 		sequence_number;} _pack ICMP_ECHO_MESSAGE;typedef _struct ICMP_SOURCE_QUENCH_MESSAGE{	ULONG			unused;	IP_HEADER 		ip_data;} _pack ICMP_SOURCE_QUENCH_MESSAGE;typedef _struct ICMP_TIME_EXCEEDED_MESSAGE{	ULONG			unused;	IP_HEADER 		ip_data;} _pack ICMP_TIME_EXCEEDED_MESSAGE;typedef _struct ICMP_TIMESTAMP_MESSAGE{	USHORT 		identifier;	USHORT 		sequence_number;	ULONG		orginate_timestamp;	ULONG		receive_timestamp;	ULONG		transmit_timestamp;} _pack ICMP_TIMESTAMP_MESSAGE;typedef _struct ICMP_ADDRESS_MASK_MESSAGE{	USHORT 		identifier;	USHORT 		sequence_number;	ULONG		mask;} _pack ICMP_ADDRESS_MASK_MESSAGE;typedef _union UNION_ICMP_PACKET_OPTIONS{	ICMP_UNREACHABLE_MESSAGE 			unreachable_message;	ICMP_PARAM_PROBLEM_MESSAGE 			parameter_problem_message;	ICMP_REDIRECT_MESSAGE 				redirect_message;	ICMP_ECHO_MESSAGE 					echo_message;	ICMP_SOURCE_QUENCH_MESSAGE 			source_quench_message;	ICMP_TIME_EXCEEDED_MESSAGE 			time_exceeded_message;	ICMP_TIMESTAMP_MESSAGE 				timestamp_message;	ICMP_ADDRESS_MASK_MESSAGE 			address_mask_message;	ULONG								unused;} _pack UNION_ICMP_PACKET_OPTIONS;typedef _union	UNION_ICMP_CODES{	unsigned char	unreachable;	unsigned char	time_to_exceed;	unsigned char	redirect;	BYTE										generic;} _pack UNION_ICMP_CODES;typedef _struct	ICMP_HEADER{	unsigned char	type;	UNION_ICMP_CODES 							code;	USHORT 										checksum;	UNION_ICMP_PACKET_OPTIONS 					option;} _pack ICMP_HEADER;typedef _struct ICMP_PACKET{	IP_HEADER					ip_header;	ICMP_HEADER					header;} _pack ICMP_PACKET;/* Misc. */typedef _union		UNION_IP_PACKET{/*	ARP_PACKET 			arp;	RARP_PACKET			rarp;*/	IP_PACKET			ip;	ICMP_PACKET			icmp;/*	RIP_PACKET			rip; */ /* not needed for NAT */	UDP_PACKET			udp;} _pack UNION_IP_PACKET;/* others */#define MAXIMUM_IP_OPTION_LENGTH								40				/* Largest option field, bytes */typedef _union UNION_USER_OPTIONS{	BYTE 			char_options[MAXIMUM_IP_OPTION_LENGTH];							/* according to rfc791 format in network order */	ULONG			ulong_options[MAXIMUM_IP_OPTION_LENGTH / sizeof (ULONG)];} _pack UNION_USER_OPTIONS;typedef _struct IP_UPPER_LAYER_PARAMETERS{	ULONG 								source_address;	ULONG 								destination_address;	bool					 			do_not_fragment_flag;	SERVICE_TYPE_BIT_STRUCTURE			type_of_service;	USHORT 								sequence_id;	BYTE 								time_to_live;	BYTE 								protocol;	BYTE 								option_length;	UNION_USER_OPTIONS	 				user_options;	void 								*vptr_cached_route; 			/* address of cached route stored in user's space */	USHORT								virtual_port_number;			/* do not route, send out through this port if not NO_SUCH_PORT */	ULONG 								gateway;} _pack IP_UPPER_LAYER_PARAMETERS;typedef _struct IP_PARAMETERS{	USHORT 								header_length;	USHORT								total_length;	ULONG 								source_address;	ULONG 								destination_address;	USHORT								offset;	SERVICE_TYPE_BIT_STRUCTURE			type_of_service;	USHORT 								id;	BYTE 								time_to_live;	BYTE_ENUM (IP_PROTOCOL_VALUE)		protocol;	BYTE 								options_length;	bool 								do_not_fragment_flag;	bool					 			more_fragment_flag;	BYTE								version;	USHORT								checksum;	USHORT								rx_port_number;	ULONG 								gateway;	bool					 			union_ip_packet_is_to_be_freed;	bool					 			packet_forwarded_by_upper_layer;	bool					 			packet_recognized_by_upper_layer;#if defined (__IP_MULTICAST_EXTENSIONS__)	BYTE								options [MAXIMUM_IP_OPTION_LENGTH];#endif /* __IP_MULTICAST_EXTENSIONS__ */} _pack IP_PARAMETERS;typedef struct IP_ROUTE_CACHE_ENTRY{	UINT		fake_a;} IP_ROUTE_CACHE_ENTRY;#endif 	/* Don't add anything after this line */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -