Mistake on this page?
Report an issue in GitHub or email us
prot/nd6.h
Go to the documentation of this file.
1 /**
2  * @file
3  * ND6 protocol definitions
4  */
5 
6 /*
7  * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
8  * All rights reserved.
9  *
10  * Redistribution and use in source and binary forms, with or without modification,
11  * are permitted provided that the following conditions are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright notice,
14  * this list of conditions and the following disclaimer.
15  * 2. Redistributions in binary form must reproduce the above copyright notice,
16  * this list of conditions and the following disclaimer in the documentation
17  * and/or other materials provided with the distribution.
18  * 3. The name of the author may not be used to endorse or promote products
19  * derived from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
22  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
23  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
24  * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
26  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
29  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
30  * OF SUCH DAMAGE.
31  *
32  * This file is part of the lwIP TCP/IP stack.
33  *
34  * Author: Adam Dunkels <adam@sics.se>
35  *
36  */
37 #ifndef LWIP_HDR_PROT_ND6_H
38 #define LWIP_HDR_PROT_ND6_H
39 
40 #include "lwip/arch.h"
41 #include "lwip/ip6_addr.h"
42 #include "lwip/prot/ip6.h"
43 
44 #ifdef __cplusplus
45 extern "C" {
46 #endif
47 
48 /** Neighbor solicitation message header. */
49 #ifdef PACK_STRUCT_USE_INCLUDES
50 # include "arch/bpstruct.h"
51 #endif
53 struct ns_header {
54  PACK_STRUCT_FLD_8(u8_t type);
55  PACK_STRUCT_FLD_8(u8_t code);
56  PACK_STRUCT_FIELD(u16_t chksum);
57  PACK_STRUCT_FIELD(u32_t reserved);
58  PACK_STRUCT_FLD_S(ip6_addr_p_t target_address);
59  /* Options follow. */
62 #ifdef PACK_STRUCT_USE_INCLUDES
63 # include "arch/epstruct.h"
64 #endif
65 
66 /** Neighbor advertisement message header. */
67 #ifdef PACK_STRUCT_USE_INCLUDES
68 # include "arch/bpstruct.h"
69 #endif
71 struct na_header {
72  PACK_STRUCT_FLD_8(u8_t type);
73  PACK_STRUCT_FLD_8(u8_t code);
74  PACK_STRUCT_FIELD(u16_t chksum);
75  PACK_STRUCT_FLD_8(u8_t flags);
76  PACK_STRUCT_FLD_8(u8_t reserved[3]);
77  PACK_STRUCT_FLD_S(ip6_addr_p_t target_address);
78  /* Options follow. */
81 #ifdef PACK_STRUCT_USE_INCLUDES
82 # include "arch/epstruct.h"
83 #endif
84 #define ND6_FLAG_ROUTER (0x80)
85 #define ND6_FLAG_SOLICITED (0x40)
86 #define ND6_FLAG_OVERRIDE (0x20)
87 
88 /** Router solicitation message header. */
89 #ifdef PACK_STRUCT_USE_INCLUDES
90 # include "arch/bpstruct.h"
91 #endif
93 struct rs_header {
94  PACK_STRUCT_FLD_8(u8_t type);
95  PACK_STRUCT_FLD_8(u8_t code);
96  PACK_STRUCT_FIELD(u16_t chksum);
97  PACK_STRUCT_FIELD(u32_t reserved);
98  /* Options follow. */
101 #ifdef PACK_STRUCT_USE_INCLUDES
102 # include "arch/epstruct.h"
103 #endif
104 
105 /** Router advertisement message header. */
106 #define ND6_RA_FLAG_MANAGED_ADDR_CONFIG (0x80)
107 #define ND6_RA_FLAG_OTHER_CONFIG (0x40)
108 #define ND6_RA_FLAG_HOME_AGENT (0x20)
109 #define ND6_RA_PREFERENCE_MASK (0x18)
110 #define ND6_RA_PREFERENCE_HIGH (0x08)
111 #define ND6_RA_PREFERENCE_MEDIUM (0x00)
112 #define ND6_RA_PREFERENCE_LOW (0x18)
113 #define ND6_RA_PREFERENCE_DISABLED (0x10)
114 #ifdef PACK_STRUCT_USE_INCLUDES
115 # include "arch/bpstruct.h"
116 #endif
118 struct ra_header {
119  PACK_STRUCT_FLD_8(u8_t type);
120  PACK_STRUCT_FLD_8(u8_t code);
121  PACK_STRUCT_FIELD(u16_t chksum);
122  PACK_STRUCT_FLD_8(u8_t current_hop_limit);
123  PACK_STRUCT_FLD_8(u8_t flags);
124  PACK_STRUCT_FIELD(u16_t router_lifetime);
125  PACK_STRUCT_FIELD(u32_t reachable_time);
126  PACK_STRUCT_FIELD(u32_t retrans_timer);
127  /* Options follow. */
130 #ifdef PACK_STRUCT_USE_INCLUDES
131 # include "arch/epstruct.h"
132 #endif
133 
134 /** Redirect message header. */
135 #ifdef PACK_STRUCT_USE_INCLUDES
136 # include "arch/bpstruct.h"
137 #endif
140  PACK_STRUCT_FLD_8(u8_t type);
141  PACK_STRUCT_FLD_8(u8_t code);
142  PACK_STRUCT_FIELD(u16_t chksum);
143  PACK_STRUCT_FIELD(u32_t reserved);
144  PACK_STRUCT_FLD_S(ip6_addr_p_t target_address);
145  PACK_STRUCT_FLD_S(ip6_addr_p_t destination_address);
146  /* Options follow. */
149 #ifdef PACK_STRUCT_USE_INCLUDES
150 # include "arch/epstruct.h"
151 #endif
152 
153 /** Link-layer address option. */
154 #define ND6_OPTION_TYPE_SOURCE_LLADDR (0x01)
155 #define ND6_OPTION_TYPE_TARGET_LLADDR (0x02)
156 #ifdef PACK_STRUCT_USE_INCLUDES
157 # include "arch/bpstruct.h"
158 #endif
161  PACK_STRUCT_FLD_8(u8_t type);
162  PACK_STRUCT_FLD_8(u8_t length);
166 #ifdef PACK_STRUCT_USE_INCLUDES
167 # include "arch/epstruct.h"
168 #endif
169 
170 /** Prefix information option. */
171 #define ND6_OPTION_TYPE_PREFIX_INFO (0x03)
172 #define ND6_PREFIX_FLAG_ON_LINK (0x80)
173 #define ND6_PREFIX_FLAG_AUTONOMOUS (0x40)
174 #define ND6_PREFIX_FLAG_ROUTER_ADDRESS (0x20)
175 #define ND6_PREFIX_FLAG_SITE_PREFIX (0x10)
176 #ifdef PACK_STRUCT_USE_INCLUDES
177 # include "arch/bpstruct.h"
178 #endif
181  PACK_STRUCT_FLD_8(u8_t type);
182  PACK_STRUCT_FLD_8(u8_t length);
183  PACK_STRUCT_FLD_8(u8_t prefix_length);
184  PACK_STRUCT_FLD_8(u8_t flags);
185  PACK_STRUCT_FIELD(u32_t valid_lifetime);
186  PACK_STRUCT_FIELD(u32_t preferred_lifetime);
187  PACK_STRUCT_FLD_8(u8_t reserved2[3]);
188  PACK_STRUCT_FLD_8(u8_t site_prefix_length);
189  PACK_STRUCT_FLD_S(ip6_addr_p_t prefix);
192 #ifdef PACK_STRUCT_USE_INCLUDES
193 # include "arch/epstruct.h"
194 #endif
195 
196 /** Redirected header option. */
197 #define ND6_OPTION_TYPE_REDIR_HDR (0x04)
198 #ifdef PACK_STRUCT_USE_INCLUDES
199 # include "arch/bpstruct.h"
200 #endif
203  PACK_STRUCT_FLD_8(u8_t type);
204  PACK_STRUCT_FLD_8(u8_t length);
205  PACK_STRUCT_FLD_8(u8_t reserved[6]);
206  /* Portion of redirected packet follows. */
207  /* PACK_STRUCT_FLD_8(u8_t redirected[8]); */
210 #ifdef PACK_STRUCT_USE_INCLUDES
211 # include "arch/epstruct.h"
212 #endif
213 
214 /** MTU option. */
215 #define ND6_OPTION_TYPE_MTU (0x05)
216 #ifdef PACK_STRUCT_USE_INCLUDES
217 # include "arch/bpstruct.h"
218 #endif
220 struct mtu_option {
221  PACK_STRUCT_FLD_8(u8_t type);
222  PACK_STRUCT_FLD_8(u8_t length);
223  PACK_STRUCT_FIELD(u16_t reserved);
224  PACK_STRUCT_FIELD(u32_t mtu);
227 #ifdef PACK_STRUCT_USE_INCLUDES
228 # include "arch/epstruct.h"
229 #endif
230 
231 /** Route information option. */
232 #define ND6_OPTION_TYPE_ROUTE_INFO (24)
233 #ifdef PACK_STRUCT_USE_INCLUDES
234 # include "arch/bpstruct.h"
235 #endif
237 struct route_option {
238  PACK_STRUCT_FLD_8(u8_t type);
239  PACK_STRUCT_FLD_8(u8_t length);
240  PACK_STRUCT_FLD_8(u8_t prefix_length);
241  PACK_STRUCT_FLD_8(u8_t preference);
242  PACK_STRUCT_FIELD(u32_t route_lifetime);
243  PACK_STRUCT_FLD_S(ip6_addr_p_t prefix);
246 #ifdef PACK_STRUCT_USE_INCLUDES
247 # include "arch/epstruct.h"
248 #endif
249 
250 /** Recursive DNS Server Option. */
251 #define ND6_OPTION_TYPE_RDNSS (25)
252 #ifdef PACK_STRUCT_USE_INCLUDES
253 # include "arch/bpstruct.h"
254 #endif
256 struct rdnss_option {
257  PACK_STRUCT_FLD_8(u8_t type);
258  PACK_STRUCT_FLD_8(u8_t length);
259  PACK_STRUCT_FIELD(u16_t reserved);
260  PACK_STRUCT_FIELD(u32_t lifetime);
261  PACK_STRUCT_FLD_S(ip6_addr_p_t rdnss_address[1]);
264 #ifdef PACK_STRUCT_USE_INCLUDES
265 # include "arch/epstruct.h"
266 #endif
267 
268 #define SIZEOF_RDNSS_OPTION_BASE 8 /* size without addresses */
269 
270 #ifdef __cplusplus
271 }
272 #endif
273 
274 #endif /* LWIP_HDR_PROT_ND6_H */
Router solicitation message header.
Definition: prot/nd6.h:93
#define PACK_STRUCT_BEGIN
Packed structs support.
Definition: arch.h:307
IPv6 addresses.
Redirect message header.
Definition: prot/nd6.h:139
#define NETIF_MAX_HWADDR_LEN
Must be the maximum of all used hardware address lengths across all types of interfaces in use...
Definition: netif.h:64
#define PACK_STRUCT_FLD_S(x)
Packed structs support.
Definition: arch.h:356
IPv6 protocol definitions.
#define PACK_STRUCT_STRUCT
Packed structs support.
Definition: arch.h:328
#define PACK_STRUCT_END
Packed structs support.
Definition: arch.h:316
#define PACK_STRUCT_FLD_8(x)
Packed structs support.
Definition: arch.h:347
Neighbor solicitation message header.
Definition: prot/nd6.h:53
Neighbor advertisement message header.
Definition: prot/nd6.h:71
Support for different processor and compiler architectures.
Important Information for this Arm website

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies. If you are not happy with the use of these cookies, please review our Cookie Policy to learn how they can be disabled. By disabling cookies, some features of the site will not work.