[IPv4] Tidy up some header files.
[people/dverkamp/gpxe.git] / src / include / gpxe / ip.h
1 #ifndef _GPXE_IP_H
2 #define _GPXE_IP_H
3
4 /** @file
5  *
6  * IP protocol
7  *
8  */
9
10 #include <stdint.h>
11 #include <gpxe/in.h>
12 #include <gpxe/list.h>
13 #include <gpxe/retry.h>
14
15 struct io_buffer;
16 struct net_device;
17 struct net_protocol;
18
19 /* IP constants */
20
21 #define IP_VER                  0x40U
22 #define IP_MASK_VER             0xf0U
23 #define IP_MASK_HLEN            0x0fU
24 #define IP_MASK_OFFSET          0x1fffU
25 #define IP_MASK_DONOTFRAG       0x4000U
26 #define IP_MASK_MOREFRAGS       0x2000U
27 #define IP_PSHLEN       12
28
29 /* IP header defaults */
30 #define IP_TOS          0
31 #define IP_TTL          64
32
33 #define IP_FRAG_IOB_SIZE        1500
34 #define IP_FRAG_TIMEOUT         50
35
36 /** An IPv4 packet header */
37 struct iphdr {
38         uint8_t  verhdrlen;
39         uint8_t  service;
40         uint16_t len;
41         uint16_t ident;
42         uint16_t frags;
43         uint8_t  ttl;
44         uint8_t  protocol;
45         uint16_t chksum;
46         struct in_addr src;
47         struct in_addr dest;
48 } __attribute__ (( packed ));
49
50 /** An IPv4 pseudo header */
51 struct ipv4_pseudo_header {
52         struct in_addr src;
53         struct in_addr dest;
54         uint8_t zero_padding;
55         uint8_t protocol;
56         uint16_t len;
57 };
58
59 /** An IPv4 address/routing table entry */
60 struct ipv4_miniroute {
61         /** List of miniroutes */
62         struct list_head list;
63
64         /** Network device */
65         struct net_device *netdev;
66
67         /** IPv4 address */
68         struct in_addr address;
69         /** Subnet mask */
70         struct in_addr netmask;
71         /** Gateway address */
72         struct in_addr gateway;
73 };
74
75 /* Fragment reassembly buffer */
76 struct frag_buffer {
77         /* Identification number */
78         uint16_t ident;
79         /* Source network address */
80         struct in_addr src;
81         /* Destination network address */
82         struct in_addr dest;
83         /* Reassembled I/O buffer */
84         struct io_buffer *frag_iob;
85         /* Reassembly timer */
86         struct retry_timer frag_timer;
87         /* List of fragment reassembly buffers */
88         struct list_head list;
89 };
90
91 extern struct list_head ipv4_miniroutes;
92
93 extern struct net_protocol ipv4_protocol;
94
95 #endif /* _GPXE_IP_H */