[IPv4] Tidy up some header files.
[gpxe.git] / src / include / gpxe / ip6.h
1 #ifndef _GPXE_IP6_H
2 #define _GPXE_IP6_H
3
4 /** @file
5  *
6  * IP6 protocol
7  *
8  */
9
10 #include <stdint.h>
11 #include <gpxe/in.h>
12
13 /* IP6 constants */
14
15 #define IP6_VERSION     0x6
16 #define IP6_HOP_LIMIT   255
17
18 /**
19  * I/O buffer contents
20  * This is duplicated in tcp.h and here. Ideally it should go into iobuf.h
21  */
22 #define MAX_HDR_LEN     100
23 #define MAX_IOB_LEN     1500
24 #define MIN_IOB_LEN     MAX_HDR_LEN + 100 /* To account for padding by LL */
25
26 #define IP6_EQUAL( in6_addr1, in6_addr2 ) \
27         ( memcmp ( ( char* ) &( in6_addr1 ), ( char* ) &( in6_addr2 ),\
28         sizeof ( struct in6_addr ) ) == 0 )
29
30 #define IS_UNSPECIFIED( addr ) \
31         ( ( (addr).in6_u.u6_addr32[0] == 0x00000000 ) && \
32         ( (addr).in6_u.u6_addr32[1] == 0x00000000 ) && \
33         ( (addr).in6_u.u6_addr32[2] == 0x00000000 ) && \
34         ( (addr).in6_u.u6_addr32[3] == 0x00000000 ) )
35 /* IP6 header */
36 struct ip6_header {
37         uint32_t        ver_traffic_class_flow_label;
38         uint16_t        payload_len;
39         uint8_t         nxt_hdr;
40         uint8_t         hop_limit;
41         struct in6_addr src;
42         struct in6_addr dest;
43 };
44
45 /* IP6 pseudo header */
46 struct ipv6_pseudo_header {
47         struct in6_addr src;
48         struct in6_addr dest;
49         uint8_t zero_padding;
50         uint8_t nxt_hdr;
51         uint16_t len;
52 };
53
54 /* Next header numbers */
55 #define IP6_HOPBYHOP            0x00
56 #define IP6_ROUTING             0x43
57 #define IP6_FRAGMENT            0x44
58 #define IP6_AUTHENTICATION      0x51
59 #define IP6_DEST_OPTS           0x60
60 #define IP6_ESP                 0x50
61 #define IP6_ICMP6               0x58
62 #define IP6_NO_HEADER           0x59
63
64 struct io_buffer;
65 struct net_device;
66 struct net_protocol;
67
68 extern struct net_protocol ipv6_protocol;
69 extern struct tcpip_net_protocol ipv6_tcpip_protocol;
70 extern char * inet6_ntoa ( struct in6_addr in6 );
71
72 extern int add_ipv6_address ( struct net_device *netdev,
73                               struct in6_addr prefix, int prefix_len,
74                               struct in6_addr address,
75                               struct in6_addr gateway );
76 extern void del_ipv6_address ( struct net_device *netdev );
77
78 #endif /* _GPXE_IP6_H */