Contiki 2.6
|
00001 /** 00002 * \addtogroup uip6 00003 * @{ 00004 */ 00005 00006 /** 00007 * \file 00008 * Neighbor discovery (RFC 4861) 00009 * \author Julien Abeille <jabeille@cisco.com> 00010 * \author Mathilde Durvy <mdurvy@cisco.com> 00011 */ 00012 00013 /* 00014 * Copyright (c) 2006, Swedish Institute of Computer Science. 00015 * All rights reserved. 00016 * 00017 * Redistribution and use in source and binary forms, with or without 00018 * modification, are permitted provided that the following conditions 00019 * are met: 00020 * 1. Redistributions of source code must retain the above copyright 00021 * notice, this list of conditions and the following disclaimer. 00022 * 2. Redistributions in binary form must reproduce the above copyright 00023 * notice, this list of conditions and the following disclaimer in the 00024 * documentation and/or other materials provided with the distribution. 00025 * 3. Neither the name of the Institute nor the names of its contributors 00026 * may be used to endorse or promote products derived from this software 00027 * without specific prior written permission. 00028 * 00029 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 00030 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00031 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00032 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 00033 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 00034 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 00035 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 00036 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00037 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 00038 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 00039 * SUCH DAMAGE. 00040 * 00041 * This file is part of the Contiki operating system. 00042 * 00043 */ 00044 00045 #ifndef __UIP_ND6_H__ 00046 #define __UIP_ND6_H__ 00047 00048 #include "net/uip.h" 00049 #include "sys/stimer.h" 00050 /** 00051 * \name General 00052 * @{ 00053 */ 00054 /** \brief HOP LIMIT to be used when sending ND messages (255) */ 00055 #define UIP_ND6_HOP_LIMIT 255 00056 /** \brief INFINITE lifetime */ 00057 #define UIP_ND6_INFINITE_LIFETIME 0xFFFFFFFF 00058 /** @} */ 00059 00060 #ifndef UIP_CONF_ND6_DEF_MAXDADNS 00061 /** \brief Do not try DAD when using EUI-64 as allowed by draft-ietf-6lowpan-nd-15 section 8.2 */ 00062 #if UIP_CONF_LL_802154 00063 #define UIP_ND6_DEF_MAXDADNS 0 00064 #else /* UIP_CONF_LL_802154 */ 00065 #define UIP_ND6_DEF_MAXDADNS 1 00066 #endif /* UIP_CONF_LL_802154 */ 00067 #else /* UIP_CONF_ND6_DEF_MAXDADNS */ 00068 #define UIP_ND6_DEF_MAXDADNS UIP_CONF_ND6_DEF_MAXDADNS 00069 #endif /* UIP_CONF_ND6_DEF_MAXDADNS */ 00070 00071 /** \name RFC 4861 Host constant */ 00072 /** @{ */ 00073 #define UIP_ND6_MAX_RTR_SOLICITATION_DELAY 1 00074 #define UIP_ND6_RTR_SOLICITATION_INTERVAL 4 00075 #define UIP_ND6_MAX_RTR_SOLICITATIONS 3 00076 /** @} */ 00077 00078 /** \name RFC 4861 Router constants */ 00079 /** @{ */ 00080 #ifndef UIP_CONF_ND6_SEND_RA 00081 #define UIP_ND6_SEND_RA 1 /* enable/disable RA sending */ 00082 #else 00083 #define UIP_ND6_SEND_RA UIP_CONF_ND6_SEND_RA 00084 #endif 00085 #define UIP_ND6_MAX_RA_INTERVAL 600 00086 #define UIP_ND6_MIN_RA_INTERVAL (UIP_ND6_MAX_RA_INTERVAL / 3) 00087 #define UIP_ND6_M_FLAG 0 00088 #define UIP_ND6_O_FLAG 0 00089 #define UIP_ND6_ROUTER_LIFETIME 3 * UIP_ND6_MAX_RA_INTERVAL 00090 00091 #define UIP_ND6_MAX_INITIAL_RA_INTERVAL 16 /*seconds*/ 00092 #define UIP_ND6_MAX_INITIAL_RAS 3 /*transmissions*/ 00093 #define UIP_ND6_MIN_DELAY_BETWEEN_RAS 3 /*seconds*/ 00094 //#define UIP_ND6_MAX_RA_DELAY_TIME 0.5 /*seconds*/ 00095 #define UIP_ND6_MAX_RA_DELAY_TIME_MS 500 /*milli seconds*/ 00096 /** @} */ 00097 00098 00099 /** \name RFC 4861 Node constant */ 00100 #define UIP_ND6_MAX_MULTICAST_SOLICIT 3 00101 #define UIP_ND6_MAX_UNICAST_SOLICIT 3 00102 #ifdef UIP_CONF_ND6_REACHABLE_TIME 00103 #define UIP_ND6_REACHABLE_TIME UIP_CONF_ND6_REACHABLE_TIME 00104 #else 00105 #define UIP_ND6_REACHABLE_TIME 30000 00106 #endif 00107 #ifdef UIP_CONF_ND6_RETRANS_TIMER 00108 #define UIP_ND6_RETRANS_TIMER UIP_CONF_ND6_RETRANS_TIMER 00109 #else 00110 #define UIP_ND6_RETRANS_TIMER 1000 00111 #endif 00112 #define UIP_ND6_DELAY_FIRST_PROBE_TIME 5 00113 #define UIP_ND6_MIN_RANDOM_FACTOR(x) (x / 2) 00114 #define UIP_ND6_MAX_RANDOM_FACTOR(x) ((x) + (x) / 2) 00115 /** @} */ 00116 00117 00118 /** \name ND6 option types */ 00119 /** @{ */ 00120 #define UIP_ND6_OPT_SLLAO 1 00121 #define UIP_ND6_OPT_TLLAO 2 00122 #define UIP_ND6_OPT_PREFIX_INFO 3 00123 #define UIP_ND6_OPT_REDIRECTED_HDR 4 00124 #define UIP_ND6_OPT_MTU 5 00125 /** @} */ 00126 00127 /** \name ND6 option types */ 00128 /** @{ */ 00129 #define UIP_ND6_OPT_TYPE_OFFSET 0 00130 #define UIP_ND6_OPT_LEN_OFFSET 1 00131 #define UIP_ND6_OPT_DATA_OFFSET 2 00132 00133 /** \name ND6 message length (excluding options) */ 00134 /** @{ */ 00135 #define UIP_ND6_NA_LEN 20 00136 #define UIP_ND6_NS_LEN 20 00137 #define UIP_ND6_RA_LEN 12 00138 #define UIP_ND6_RS_LEN 4 00139 /** @} */ 00140 00141 00142 /** \name ND6 option length in bytes */ 00143 /** @{ */ 00144 #define UIP_ND6_OPT_HDR_LEN 2 00145 #define UIP_ND6_OPT_PREFIX_INFO_LEN 32 00146 #define UIP_ND6_OPT_MTU_LEN 8 00147 00148 00149 /* Length of TLLAO and SLLAO options, it is L2 dependant */ 00150 #if UIP_CONF_LL_802154 00151 /* If the interface is 802.15.4. For now we use only long addresses */ 00152 #define UIP_ND6_OPT_SHORT_LLAO_LEN 8 00153 #define UIP_ND6_OPT_LONG_LLAO_LEN 16 00154 /** \brief length of a ND6 LLAO option for 802.15.4 */ 00155 #define UIP_ND6_OPT_LLAO_LEN UIP_ND6_OPT_LONG_LLAO_LEN 00156 #else /*UIP_CONF_LL_802154*/ 00157 #if UIP_CONF_LL_80211 00158 /* If the interface is 802.11 */ 00159 /** \brief length of a ND6 LLAO option for 802.11 */ 00160 #define UIP_ND6_OPT_LLAO_LEN 8 00161 #else /*UIP_CONF_LL_80211*/ 00162 /** \brief length of a ND6 LLAO option for default L2 type (e.g. Ethernet) */ 00163 #define UIP_ND6_OPT_LLAO_LEN 8 00164 #endif /*UIP_CONF_LL_80211*/ 00165 #endif /*UIP_CONF_LL_802154*/ 00166 /** @} */ 00167 00168 00169 /** \name Neighbor Advertisement flags masks */ 00170 /** @{ */ 00171 #define UIP_ND6_NA_FLAG_ROUTER 0x80 00172 #define UIP_ND6_NA_FLAG_SOLICITED 0x40 00173 #define UIP_ND6_NA_FLAG_OVERRIDE 0x20 00174 #define UIP_ND6_RA_FLAG_ONLINK 0x80 00175 #define UIP_ND6_RA_FLAG_AUTONOMOUS 0x40 00176 /** @} */ 00177 00178 /** 00179 * \name ND message structures 00180 * @{ 00181 */ 00182 00183 /** 00184 * \brief A neighbor solicitation constant part 00185 * 00186 * Possible option is: SLLAO 00187 */ 00188 typedef struct uip_nd6_ns { 00189 uint32_t reserved; 00190 uip_ipaddr_t tgtipaddr; 00191 } uip_nd6_ns; 00192 00193 /** 00194 * \brief A neighbor advertisement constant part. 00195 * 00196 * Possible option is: TLLAO 00197 */ 00198 typedef struct uip_nd6_na { 00199 uint8_t flagsreserved; 00200 uint8_t reserved[3]; 00201 uip_ipaddr_t tgtipaddr; 00202 } uip_nd6_na; 00203 00204 /** 00205 * \brief A router solicitation constant part 00206 * 00207 * Possible option is: SLLAO 00208 */ 00209 typedef struct uip_nd6_rs { 00210 uint32_t reserved; 00211 } uip_nd6_rs; 00212 00213 /** 00214 * \brief A router advertisement constant part 00215 * 00216 * Possible options are: SLLAO, MTU, Prefix Information 00217 */ 00218 typedef struct uip_nd6_ra { 00219 uint8_t cur_ttl; 00220 uint8_t flags_reserved; 00221 uint16_t router_lifetime; 00222 uint32_t reachable_time; 00223 uint32_t retrans_timer; 00224 } uip_nd6_ra; 00225 00226 /** 00227 * \brief A redirect message constant part 00228 * 00229 * Possible options are: TLLAO, redirected header 00230 */ 00231 typedef struct uip_nd6_redirect { 00232 uint32_t reserved; 00233 uip_ipaddr_t tgtipaddress; 00234 uip_ipaddr_t destipaddress; 00235 } uip_nd6_redirect; 00236 /** @} */ 00237 00238 /** 00239 * \name ND Option structures 00240 * @{ 00241 */ 00242 00243 /** \brief ND option header */ 00244 typedef struct uip_nd6_opt_hdr { 00245 uint8_t type; 00246 uint8_t len; 00247 } uip_nd6_opt_hdr; 00248 00249 /** \brief ND option prefix information */ 00250 typedef struct uip_nd6_opt_prefix_info { 00251 uint8_t type; 00252 uint8_t len; 00253 uint8_t preflen; 00254 uint8_t flagsreserved1; 00255 uint32_t validlt; 00256 uint32_t preferredlt; 00257 uint32_t reserved2; 00258 uip_ipaddr_t prefix; 00259 } uip_nd6_opt_prefix_info ; 00260 00261 /** \brief ND option MTU */ 00262 typedef struct uip_nd6_opt_mtu { 00263 uint8_t type; 00264 uint8_t len; 00265 uint16_t reserved; 00266 uint32_t mtu; 00267 } uip_nd6_opt_mtu; 00268 00269 /** \struct Redirected header option */ 00270 typedef struct uip_nd6_opt_redirected_hdr { 00271 uint8_t type; 00272 uint8_t len; 00273 uint8_t reserved[6]; 00274 } uip_nd6_opt_redirected_hdr; 00275 /** @} */ 00276 00277 /** 00278 * \name ND Messages Processing and Generation 00279 * @{ 00280 */ 00281 /** 00282 * \brief Process a neighbor solicitation 00283 * 00284 * The NS can be received in 3 cases (procedures): 00285 * - sender is performing DAD (ip src = unspecified, no SLLAO option) 00286 * - sender is performing NUD (ip dst = unicast) 00287 * - sender is performing address resolution (ip dest = solicited node mcast 00288 * address) 00289 * 00290 * We do: 00291 * - if the tgt belongs to me, reply, otherwise ignore 00292 * - if i was performing DAD for the same address, two cases: 00293 * -- I already sent a NS, hence I win 00294 * -- I did not send a NS yet, hence I lose 00295 * 00296 * If we need to send a NA in response (i.e. the NS was done for NUD, or 00297 * address resolution, or DAD and there is a conflict), we do it in this 00298 * function: set src, dst, tgt address in the three cases, then for all cases 00299 * set the rest, including SLLAO 00300 * 00301 */ 00302 void 00303 uip_nd6_ns_input(void); 00304 00305 /** 00306 * \brief Send a neighbor solicitation, send a Neighbor Advertisement 00307 * \param src pointer to the src of the NS if known 00308 * \param dest pointer to ip address to send the NS, for DAD or ADDR Resol, 00309 * MUST be NULL, for NUD, must be correct unicast dest 00310 * \param tgt pointer to ip address to fill the target address field, must 00311 * not be NULL 00312 * 00313 * - RFC 4861, 7.2.2 : 00314 * "If the source address of the packet prompting the solicitation is the 00315 * same as one of the addresses assigned to the outgoing interface, that 00316 * address SHOULD be placed in the IP Source Address of the outgoing 00317 * solicitation. Otherwise, any one of the addresses assigned to the 00318 * interface should be used." 00319 * This is why we have a src ip address as argument. If NULL, we will do 00320 * src address selection, otherwise we use the argument. 00321 * 00322 * - we check if it is a NS for Address resolution or NUD, if yes we include 00323 * a SLLAO option, otherwise no. 00324 */ 00325 void 00326 uip_nd6_ns_output(uip_ipaddr_t *src, uip_ipaddr_t *dest, uip_ipaddr_t *tgt); 00327 00328 /** 00329 * \brief Process a Neighbor Advertisement 00330 * 00331 * we might have to send a pkt that had been buffered while address 00332 * resolution was performed (if we support buffering, see UIP_CONF_QUEUE_PKT) 00333 * 00334 * As per RFC 4861, on link layer that have addresses, TLLAO options MUST be 00335 * included when responding to multicast solicitations, SHOULD be included in 00336 * response to unicast (here we assume it is for now) 00337 * 00338 * NA can be received after sending NS for DAD, Address resolution or NUD. Can 00339 * be unsolicited as well. 00340 * It can trigger update of the state of the neighbor in the neighbor cache, 00341 * router in the router list. 00342 * If the NS was for DAD, it means DAD failed 00343 * 00344 */ 00345 void 00346 uip_nd6_na_input(void); 00347 00348 #if UIP_CONF_ROUTER 00349 #if UIP_ND6_SEND_RA 00350 /** 00351 * \brief Process a Router Solicitation 00352 * 00353 */ 00354 void uip_nd6_rs_input(void); 00355 00356 /** 00357 * \brief send a Router Advertisement 00358 * 00359 * Only for router, for periodic as well as sollicited RA 00360 */ 00361 void uip_nd6_ra_output(uip_ipaddr_t *dest); 00362 #endif /* UIP_ND6_SEND_RA */ 00363 #endif /*UIP_CONF_ROUTER*/ 00364 00365 /** 00366 * \brief Send a Router Solicitation 00367 * 00368 * src is chosen through the uip_netif_select_src function. If src is 00369 * unspecified (i.e. we do not have a preferred address yet), then we do not 00370 * put a SLLAO option (MUST NOT in RFC 4861). Otherwise we do. 00371 * 00372 * RS message format, 00373 * possible option is SLLAO, MUST NOT be included if source = unspecified 00374 * SHOULD be included otherwise 00375 */ 00376 void uip_nd6_rs_output(void); 00377 00378 /** 00379 * 00380 * \brief process a Router Advertisement 00381 * 00382 * - Possible actions when receiving a RA: add router to router list, 00383 * recalculate reachable time, update link hop limit, update retrans timer. 00384 * - If MTU option: update MTU. 00385 * - If SLLAO option: update entry in neighbor cache 00386 * - If prefix option: start autoconf, add prefix to prefix list 00387 */ 00388 void 00389 uip_nd6_ra_input(void); 00390 /** @} */ 00391 00392 00393 void 00394 uip_appserver_addr_get(uip_ipaddr_t *ipaddr); 00395 /*--------------------------------------*/ 00396 /******* ANNEX - message formats ********/ 00397 /*--------------------------------------*/ 00398 00399 /* 00400 * RS format. possible option is SLLAO 00401 * 0 1 2 3 00402 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 00403 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00404 * | Type | Code | Checksum | 00405 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00406 * | Reserved | 00407 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00408 * | Options ... 00409 * +-+-+-+-+-+-+-+-+-+-+-+- 00410 * 00411 * 00412 * RA format. possible options: prefix information, MTU, SLLAO 00413 * 0 1 2 3 00414 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 00415 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00416 * | Type | Code | Checksum | 00417 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00418 * | Cur Hop Limit |M|O| Reserved | Router Lifetime | 00419 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00420 * | Reachable Time | 00421 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00422 * | Retrans Timer | 00423 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00424 * | Options ... 00425 * +-+-+-+-+-+-+-+-+-+-+-+- 00426 * 00427 * 00428 * NS format: options should be SLLAO 00429 * 0 1 2 3 00430 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 00431 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00432 * | Type | Code | Checksum | 00433 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00434 * | Reserved | 00435 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00436 * | | 00437 * + + 00438 * | | 00439 * + Target Address + 00440 * | | 00441 * + + 00442 * | | 00443 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00444 * | Options ... 00445 * +-+-+-+-+-+-+-+-+-+-+-+- 00446 * 00447 * 00448 * NA message format. possible options is TLLAO 00449 * 00450 * 0 1 2 3 00451 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 00452 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00453 * | Type | Code | Checksum | 00454 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00455 * |R|S|O| Reserved | 00456 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00457 * | | 00458 * + + 00459 * | | 00460 * + Target Address + 00461 * | | 00462 * + + 00463 * | | 00464 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00465 * | Options ... 00466 * +-+-+-+-+-+-+-+-+-+-+-+- 00467 * 00468 * 00469 * Redirect message format. Possible options are TLLAO and Redirected header 00470 * 00471 * 0 1 2 3 00472 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 00473 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00474 * | Type | Code | Checksum | 00475 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00476 * | Reserved | 00477 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00478 * | | 00479 * + + 00480 * | | 00481 * + Target Address + 00482 * | | 00483 * + + 00484 * | | 00485 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00486 * | | 00487 * + + 00488 * | | 00489 * + Destination Address + 00490 * | | 00491 * + + 00492 * | | 00493 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00494 * | Options ... 00495 * +-+-+-+-+-+-+-+-+-+-+-+- 00496 * 00497 * 00498 * SLLAO/TLLAO option: 00499 * 0 1 2 3 00500 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 00501 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00502 * | Type | Length | Link-Layer Address ... 00503 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00504 * 00505 * 00506 * Prefix information option 00507 * 0 1 2 3 00508 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 00509 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00510 * | Type | Length | Prefix Length |L|A| Reserved1 | 00511 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00512 * | Valid Lifetime | 00513 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00514 * | Preferred Lifetime | 00515 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00516 * | Reserved2 | 00517 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00518 * | | 00519 * + + 00520 * | | 00521 * + Prefix + 00522 * | | 00523 * + + 00524 * | | 00525 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00526 * 00527 * 00528 * MTU option 00529 * 0 1 2 3 00530 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 00531 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00532 * | Type | Length | Reserved | 00533 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00534 * | MTU | 00535 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00536 * 00537 * 00538 * Redirected header option 00539 * 00540 * 0 1 2 3 00541 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 00542 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00543 * | Type | Length | Reserved | 00544 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00545 * | Reserved | 00546 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00547 * | | 00548 * ~ IP header + data ~ 00549 * | | 00550 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 00551 * 00552 */ 00553 #endif /* __UIP_ND6_H__ */ 00554 00555 /** @} */