Add route() function to display routing table.
[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 <ip.h>
11 #include <gpxe/retry.h>
12 #include <gpxe/hotplug.h>
13
14 /* IP constants */
15
16 #define IP_VER          0x40
17 #define IP_MASK_VER     0xf0
18 #define IP_MASK_HLEN    0x0f
19 #define IP_MASK_OFFSET  0x1fff
20 #define IP_MASK_DONOTFRAG       0x4000
21 #define IP_MASK_MOREFRAGS       0x2000
22 #define IP_PSHLEN       12
23
24 /* IP header defaults */
25 #define IP_TOS          0
26 #define IP_TTL          64
27
28 #define IP_FRAG_PKB_SIZE        1500
29 #define IP_FRAG_TIMEOUT         50
30
31 /* IP4 pseudo header */
32 struct ipv4_pseudo_header {
33         struct in_addr src;
34         struct in_addr dest;
35         uint8_t zero_padding;
36         uint8_t protocol;
37         uint16_t len;
38 };
39
40 /** An IPv4 address/routing table entry */
41 struct ipv4_miniroute {
42         /** List of miniroutes */
43         struct list_head list;
44
45         /** Network device */
46         struct net_device *netdev;
47         /** Reference to network device */
48         struct reference netdev_ref;
49
50         /** IPv4 address */
51         struct in_addr address;
52         /** Subnet mask */
53         struct in_addr netmask;
54         /** Gateway address */
55         struct in_addr gateway;
56 };
57
58 /* Fragment reassembly buffer */
59 struct frag_buffer {
60         /* Identification number */
61         uint16_t ident;
62         /* Source network address */
63         struct in_addr src;
64         /* Destination network address */
65         struct in_addr dest;
66         /* Reassembled packet buffer */
67         struct pk_buff *frag_pkb;
68         /* Reassembly timer */
69         struct retry_timer frag_timer;
70         /* List of fragment reassembly buffers */
71         struct list_head list;
72 };
73
74 struct pk_buff;
75 struct net_device;
76 struct net_protocol;
77 struct tcpip_protocol;
78
79 extern struct list_head ipv4_miniroutes;
80
81 extern struct net_protocol ipv4_protocol;
82
83 extern int add_ipv4_address ( struct net_device *netdev,
84                               struct in_addr address, struct in_addr netmask,
85                               struct in_addr gateway );
86 extern void del_ipv4_address ( struct net_device *netdev );
87
88 #endif /* _GPXE_IP_H */