xref: /haiku/src/add-ons/kernel/network/protocols/ipv4/ipv4.h (revision 2b76973fa2401f7a5edf68e6470f3d3210cbcff3)
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