4f0f42f850e33e5eb41e7c8268a16e4b2d44b301
[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          4
16 #define IP_MASK_VER     0xf0
17 #define IP_MASK_HLEN    0x0f
18 #define IP_MASK_OFFSET  0x1fff
19 #define IP_MASK_DONOTFRAG       0x4000
20 #define IP_MASK_MOREFRAGS       0x2000
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_PKB_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 /* Fragment reassembly buffer */
40 struct frag_buffer {
41         /* Identification number */
42         uint16_t ident;
43         /* Source network address */
44         struct in_addr src;
45         /* Destination network address */
46         struct in_addr dest;
47         /* Reassembled packet buffer */
48         struct pk_buff *frag_pkb;
49         /* Reassembly timer */
50         struct retry_timer frag_timer;
51         /* List of fragment reassembly buffers */
52         struct list_head list;
53 };
54
55 struct pk_buff;
56 struct net_device;
57 struct net_protocol;
58 struct tcpip_protocol;
59
60 extern struct net_protocol ipv4_protocol;
61
62 extern int add_ipv4_address ( struct net_device *netdev,
63                               struct in_addr address, struct in_addr netmask,
64                               struct in_addr gateway );
65 extern void del_ipv4_address ( struct net_device *netdev );
66
67 extern int ipv4_uip_tx ( struct pk_buff *pkb );
68 extern int ipv4_tx ( struct pk_buff *pkb, struct tcpip_protocol *tcpip,
69                      struct in_addr *dest );
70
71 #endif /* _GPXE_IP_H */