1 /* 2 * Copyright 2006-2010, Haiku, Inc. All Rights Reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5 #ifndef IPV4_H 6 #define IPV4_H 7 8 9 #include <netinet/in.h> 10 11 #include <ByteOrder.h> 12 13 14 #define IPV4_VERSION 4 15 16 // fragment flags 17 #define IP_RESERVED_FLAG 0x8000 18 #define IP_DONT_FRAGMENT 0x4000 19 #define IP_MORE_FRAGMENTS 0x2000 20 #define IP_FRAGMENT_OFFSET_MASK 0x1fff 21 22 23 struct ipv4_header { 24 #if B_HOST_IS_LENDIAN == 1 25 uint8 header_length : 4; // header length in 32-bit words 26 uint8 version : 4; 27 #else 28 uint8 version : 4; 29 uint8 header_length : 4; 30 #endif 31 uint8 service_type; 32 uint16 total_length; 33 uint16 id; 34 uint16 fragment_offset; 35 uint8 time_to_live; 36 uint8 protocol; 37 uint16 checksum; 38 in_addr_t source; 39 in_addr_t destination; 40 41 uint16 HeaderLength() const { return header_length << 2; } 42 uint16 TotalLength() const { return ntohs(total_length); } 43 uint16 FragmentOffset() const { return ntohs(fragment_offset); } 44 } _PACKED; 45 46 47 #endif // IPV4_H 48