📄 nat_packet_structures.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 + -