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