123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- /*++
- Copyright (c) 2013 Minoca Corp. All Rights Reserved
- Module Name:
- ip4.h
- Abstract:
- This header contains public definitions for the IPv4 network layer.
- Author:
- Evan Green 5-Apr-2013
- --*/
- //
- // ------------------------------------------------------------------- Includes
- //
- //
- // ---------------------------------------------------------------- Definitions
- //
- #define IP4_ALLOCATION_TAG 0x21347049 // '!4pI'
- #define IP4_VERSION 0x40
- #define IP4_VERSION_MASK 0xF0
- #define IP4_HEADER_LENGTH_MASK 0x0F
- #define IP4_MAX_PACKET_SIZE 0xFFFF
- #define IP4_FLAG_MORE_FRAGMENTS 0x1
- #define IP4_FLAG_DO_NOT_FRAGMENT 0x2
- #define IP4_FLAG_RESERVED 0x4
- #define IP4_FLAGS \
- (IP4_FLAG_RESERVED | \
- IP4_FLAG_DO_NOT_FRAGMENT | \
- IP4_FLAG_MORE_FRAGMENTS)
- #define IP4_FRAGMENT_FLAGS_MASK 0x7
- #define IP4_FRAGMENT_FLAGS_SHIFT 13
- #define IP4_FRAGMENT_OFFSET_MASK 0x1FFF
- #define IP4_FRAGMENT_OFFSET_SHIFT 0
- #define IP4_INITIAL_TIME_TO_LIVE 63
- #define IP4_BROADCAST_ADDRESS 0xFFFFFFFF
- #define IP4_ADDRESS_SIZE 4
- //
- // ------------------------------------------------------ Data Type Definitions
- //
- /*++
- Structure Description:
- This structure defines an IPv4 address.
- Members:
- Domain - Stores the network domain of this address.
- Port - Stores the 16 bit port number.
- Address - Stores the 32 bit IP address.
- NetworkAddress - Stores the unioned opaque version, used to ensure the
- structure is the proper size.
- --*/
- typedef struct _IP4_ADDRESS {
- union {
- struct {
- NET_DOMAIN_TYPE Domain;
- ULONG Port;
- ULONG Address;
- };
- NETWORK_ADDRESS NetworkAddress;
- };
- } IP4_ADDRESS, *PIP4_ADDRESS;
- /*++
- Structure Description:
- This structure defines an IPv4 header.
- Members:
- Version - Stores the version number and header length.
- Type - Stores the Differentiated Services Code Point (originally called
- Type of Service), and the Explicit Congestion Notification.
- TotalLength - Stores the total length of the packet, including the header
- and data, in bytes.
- Identification - Stores an identification field, usually used for uniquely
- identifying fragments of an original IP datagram.
- FragmentOffset - Stores some flags, as well as the fragment offset
- relative to the beginning of the original unfragmented IP datagram.
- TimeToLive - Stores the number of remaining hops this packet can make
- before being discarded.
- Protocol - Stores the protocol number for the next protocol.
- HeaderChecksum - Stores the 16 bit one's complement of the one's complement
- sum of all 16 bit words in the header.
- SourceAddress - Stores the source IP address of the packet.
- DestinationAddress - Stores the destination IP address of the packet.
- --*/
- typedef struct _IP4_HEADER {
- UCHAR VersionAndHeaderLength;
- UCHAR Type;
- USHORT TotalLength;
- USHORT Identification;
- USHORT FragmentOffset;
- UCHAR TimeToLive;
- UCHAR Protocol;
- USHORT HeaderChecksum;
- ULONG SourceAddress;
- ULONG DestinationAddress;
- } PACKED IP4_HEADER, *PIP4_HEADER;
- //
- // -------------------------------------------------------------------- Globals
- //
- //
- // -------------------------------------------------------- Function Prototypes
- //
|