0a23565b298e31648e9e978879047c00d9383daf
[people/meteger/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 <ip.h>
11 #include <gpxe/retry.h>
12
13 /* IP constants */
14
15 #define IP_VER                  0x40U
16 #define IP_MASK_VER             0xf0U
17 #define IP_MASK_HLEN            0x0fU
18 #define IP_MASK_OFFSET          0x1fffU
19 #define IP_MASK_DONOTFRAG       0x4000U
20 #define IP_MASK_MOREFRAGS       0x2000U
21 #define IP_PSHLEN       12
22
23 /* IP header defaults */
24 #define IP_TOS          0
25 #define IP_TTL          64
26
27 #define IP_FRAG_IOB_SIZE        1500
28 #define IP_FRAG_TIMEOUT         50
29
30 /* IP4 pseudo header */
31 struct ipv4_pseudo_header {
32         struct in_addr src;
33         struct in_addr dest;
34         uint8_t zero_padding;
35         uint8_t protocol;
36         uint16_t len;
37 };
38
39 /** An IPv4 address/routing table entry */
40 struct ipv4_miniroute {
41         /** List of miniroutes */
42         struct list_head list;
43
44         /** Network device */
45         struct net_device *netdev;
46
47         /** IPv4 address */
48         struct in_addr address;
49         /** Subnet mask */
50         struct in_addr netmask;
51         /** Gateway address */
52         struct in_addr gateway;
53 };
54
55 /* Fragment reassembly buffer */
56 struct frag_buffer {
57         /* Identification number */
58         uint16_t ident;
59         /* Source network address */
60         struct in_addr src;
61         /* Destination network address */
62         struct in_addr dest;
63         /* Reassembled I/O buffer */
64         struct io_buffer *frag_iob;
65         /* Reassembly timer */
66         struct retry_timer frag_timer;
67         /* List of fragment reassembly buffers */
68         struct list_head list;
69 };
70
71 struct io_buffer;
72 struct net_device;
73 struct net_protocol;
74 struct tcpip_protocol;
75
76 extern struct list_head ipv4_miniroutes;
77
78 extern struct net_protocol ipv4_protocol;
79
80 #endif /* _GPXE_IP_H */