Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
ndp.h
00001 /** 00002 * @file ndp.h 00003 * @brief NDP (Neighbor Discovery Protocol) 00004 * 00005 * @section License 00006 * 00007 * Copyright (C) 2010-2017 Oryx Embedded SARL. All rights reserved. 00008 * 00009 * This file is part of CycloneTCP Open. 00010 * 00011 * This program is free software; you can redistribute it and/or 00012 * modify it under the terms of the GNU General Public License 00013 * as published by the Free Software Foundation; either version 2 00014 * of the License, or (at your option) any later version. 00015 * 00016 * This program is distributed in the hope that it will be useful, 00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00019 * GNU General Public License for more details. 00020 * 00021 * You should have received a copy of the GNU General Public License 00022 * along with this program; if not, write to the Free Software Foundation, 00023 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00024 * 00025 * @author Oryx Embedded SARL (www.oryx-embedded.com) 00026 * @version 1.7.6 00027 **/ 00028 00029 #ifndef _NDP_H 00030 #define _NDP_H 00031 00032 //Dependencies 00033 #include "core/net.h" 00034 00035 //NDP support 00036 #ifndef NDP_SUPPORT 00037 #define NDP_SUPPORT ENABLED 00038 #elif (NDP_SUPPORT != ENABLED && NDP_SUPPORT != DISABLED) 00039 #error NDP_SUPPORT parameter is not valid 00040 #endif 00041 00042 //NDP tick interval 00043 #ifndef NDP_TICK_INTERVAL 00044 #define NDP_TICK_INTERVAL 200 00045 #elif (NDP_TICK_INTERVAL < 10) 00046 #error NDP_TICK_INTERVAL parameter is not valid 00047 #endif 00048 00049 //Neighbor cache size 00050 #ifndef NDP_NEIGHBOR_CACHE_SIZE 00051 #define NDP_NEIGHBOR_CACHE_SIZE 8 00052 #elif (NDP_NEIGHBOR_CACHE_SIZE < 1) 00053 #error NDP_NEIGHBOR_CACHE_SIZE parameter is not valid 00054 #endif 00055 00056 //Destination cache size 00057 #ifndef NDP_DEST_CACHE_SIZE 00058 #define NDP_DEST_CACHE_SIZE 8 00059 #elif (NDP_DEST_CACHE_SIZE < 1) 00060 #error NDP_DEST_CACHE_SIZE parameter is not valid 00061 #endif 00062 00063 //Maximum number of packets waiting for address resolution to complete 00064 #ifndef NDP_MAX_PENDING_PACKETS 00065 #define NDP_MAX_PENDING_PACKETS 2 00066 #elif (NDP_MAX_PENDING_PACKETS < 1) 00067 #error NDP_MAX_PENDING_PACKETS parameter is not valid 00068 #endif 00069 00070 //Maximum time interval between Router Advertisements 00071 #ifndef NDP_MAX_RTR_ADVERT_INTERVAL 00072 #define NDP_MAX_RTR_ADVERT_INTERVAL 600000 00073 #elif (NDP_MAX_RTR_ADVERT_INTERVAL < 1000) 00074 #error NDP_MAX_RTR_ADVERT_INTERVAL parameter is not valid 00075 #endif 00076 00077 //Maximum time interval between initial Router Advertisements 00078 #ifndef NDP_MAX_INITIAL_RTR_ADVERT_INTERVAL 00079 #define NDP_MAX_INITIAL_RTR_ADVERT_INTERVAL 16000 00080 #elif (NDP_MAX_INITIAL_RTR_ADVERT_INTERVAL < 1000) 00081 #error NDP_MAX_INITIAL_RTR_ADVERT_INTERVAL parameter is not valid 00082 #endif 00083 00084 //Maximum number of initial Router Advertisements 00085 #ifndef NDP_MAX_INITIAL_RTR_ADVERTISEMENTS 00086 #define NDP_MAX_INITIAL_RTR_ADVERTISEMENTS 3 00087 #elif (NDP_MAX_INITIAL_RTR_ADVERTISEMENTS < 1) 00088 #error NDP_MAX_INITIAL_RTR_ADVERTISEMENTS parameter is not valid 00089 #endif 00090 00091 //Maximum number of final Router Advertisements 00092 #ifndef NDP_MAX_FINAL_RTR_ADVERTISEMENTS 00093 #define NDP_MAX_FINAL_RTR_ADVERTISEMENTS 3 00094 #elif (NDP_MAX_FINAL_RTR_ADVERTISEMENTS < 1) 00095 #error NDP_MAX_FINAL_RTR_ADVERTISEMENTS parameter is not valid 00096 #endif 00097 00098 //Minimum delay between Router Advertisements 00099 #ifndef NDP_MIN_DELAY_BETWEEN_RAS 00100 #define NDP_MIN_DELAY_BETWEEN_RAS 3000 00101 #elif (NDP_MIN_DELAY_BETWEEN_RAS < 1000) 00102 #error NDP_MIN_DELAY_BETWEEN_RAS parameter is not valid 00103 #endif 00104 00105 //Maximum delay for Router Advertisements sent in response to a Router Solicitation 00106 #ifndef NDP_MAX_RA_DELAY_TIME 00107 #define NDP_MAX_RA_DELAY_TIME 500 00108 #elif (NDP_MAX_RA_DELAY_TIME < 100) 00109 #error NDP_MAX_RA_DELAY_TIME parameter is not valid 00110 #endif 00111 00112 //Minimum delay before transmitting the first Router Solicitation message 00113 #ifndef NDP_MIN_RTR_SOLICITATION_DELAY 00114 #define NDP_MIN_RTR_SOLICITATION_DELAY 0 00115 #elif (NDP_MIN_RTR_SOLICITATION_DELAY < 0) 00116 #error NDP_MIN_RTR_SOLICITATION_DELAY parameter is not valid 00117 #endif 00118 00119 //Maximum delay before transmitting the first Router Solicitation message 00120 #ifndef NDP_MAX_RTR_SOLICITATION_DELAY 00121 #define NDP_MAX_RTR_SOLICITATION_DELAY 1000 00122 #elif (NDP_MAX_RTR_SOLICITATION_DELAY < 0) 00123 #error NDP_MAX_RTR_SOLICITATION_DELAY parameter is not valid 00124 #endif 00125 00126 //The time between retransmissions of Router Solicitation messages 00127 #ifndef NDP_RTR_SOLICITATION_INTERVAL 00128 #define NDP_RTR_SOLICITATION_INTERVAL 4000 00129 #elif (NDP_RTR_SOLICITATION_INTERVAL < 1000) 00130 #error NDP_RTR_SOLICITATION_INTERVAL parameter is not valid 00131 #endif 00132 00133 //Number of retransmissions for Router Solicitation messages 00134 #ifndef NDP_MAX_RTR_SOLICITATIONS 00135 #define NDP_MAX_RTR_SOLICITATIONS 3 00136 #elif (NDP_MAX_RTR_SOLICITATIONS < 1) 00137 #error NDP_MAX_RTR_SOLICITATIONS parameter is not valid 00138 #endif 00139 00140 //Number of retransmissions for multicast Neighbor Solicitation messages 00141 #ifndef NDP_MAX_MULTICAST_SOLICIT 00142 #define NDP_MAX_MULTICAST_SOLICIT 3 00143 #elif (NDP_MAX_MULTICAST_SOLICIT < 1) 00144 #error NDP_MAX_MULTICAST_SOLICIT parameter is not valid 00145 #endif 00146 00147 //Number of retransmissions for unicast Neighbor Solicitation messages 00148 #ifndef NDP_MAX_UNICAST_SOLICIT 00149 #define NDP_MAX_UNICAST_SOLICIT 3 00150 #elif (NDP_MAX_UNICAST_SOLICIT < 1) 00151 #error NDP_MAX_UNICAST_SOLICIT parameter is not valid 00152 #endif 00153 00154 //Maximum number of Neighbor Solicitation messages sent while performing DAD 00155 #ifndef NDP_DUP_ADDR_DETECT_TRANSMITS 00156 #define NDP_DUP_ADDR_DETECT_TRANSMITS 1 00157 #elif (NDP_DUP_ADDR_DETECT_TRANSMITS < 0) 00158 #error NDP_DUP_ADDR_DETECT_TRANSMITS parameter is not valid 00159 #endif 00160 00161 //Delay before sending Neighbor Advertisements if the target address is an anycast address 00162 #ifndef NDP_MAX_ANYCAST_DELAY_TIME 00163 #define NDP_MAX_ANYCAST_DELAY_TIME 1000 00164 #elif (NDP_MAX_ANYCAST_DELAY_TIME < 100) 00165 #error NDP_MAX_ANYCAST_DELAY_TIME parameter is not valid 00166 #endif 00167 00168 //Maximum number of unsolicited Neighbor Advertisements 00169 #ifndef NDP_MAX_NEIGHBOR_ADVERTISEMENT 00170 #define NDP_MAX_NEIGHBOR_ADVERTISEMENT 3 00171 #elif (NDP_MAX_NEIGHBOR_ADVERTISEMENT < 0) 00172 #error NDP_MAX_NEIGHBOR_ADVERTISEMENT parameter is not valid 00173 #endif 00174 00175 //The time a neighbor is considered reachable after receiving a reachability confirmation 00176 #ifndef NDP_REACHABLE_TIME 00177 #define NDP_REACHABLE_TIME 30000 00178 #elif (NDP_REACHABLE_TIME < 1000) 00179 #error NDP_REACHABLE_TIME parameter is not valid 00180 #endif 00181 00182 //The time between retransmissions of Neighbor Solicitation messages 00183 #ifndef NDP_RETRANS_TIMER 00184 #define NDP_RETRANS_TIMER 1000 00185 #elif (NDP_RETRANS_TIMER < 100) 00186 #error NDP_RETRANS_TIMER parameter is not valid 00187 #endif 00188 00189 //Delay before sending the first probe 00190 #ifndef NDP_DELAY_FIRST_PROBE_TIME 00191 #define NDP_DELAY_FIRST_PROBE_TIME 5000 00192 #elif (NDP_DELAY_FIRST_PROBE_TIME < 1000) 00193 #error NDP_DELAY_FIRST_PROBE_TIME parameter is not valid 00194 #endif 00195 00196 //Hop Limit used by NDP messages 00197 #define NDP_HOP_LIMIT 255 00198 00199 //Infinite lifetime 00200 #define NDP_INFINITE_LIFETIME 0xFFFFFFFF 00201 00202 00203 /** 00204 * @brief Neighbor Discovery options 00205 **/ 00206 00207 typedef enum 00208 { 00209 NDP_OPT_SOURCE_LINK_LAYER_ADDR = 1, 00210 NDP_OPT_TARGET_LINK_LAYER_ADDR = 2, 00211 NDP_OPT_PREFIX_INFORMATION = 3, 00212 NDP_OPT_REDIRECTED_HEADER = 4, 00213 NDP_OPT_MTU = 5, 00214 NDP_OPT_ROUTE_INFORMATION = 24, 00215 NDP_OPT_RECURSIVE_DNS_SERVER = 25, 00216 NDP_OPT_DNS_SEARCH_LIST = 31, 00217 NDP_OPT_6LOWPAN_CONTEXT = 34, 00218 NDP_OPT_ANY = 255 00219 } NdpOptionType; 00220 00221 00222 /** 00223 * @brief Router selection preferences 00224 **/ 00225 00226 typedef enum 00227 { 00228 NDP_ROUTER_SEL_PREFERENCE_MEDIUM = 0, 00229 NDP_ROUTER_SEL_PREFERENCE_HIGH = 1, 00230 NDP_ROUTER_SEL_PREFERENCE_RESERVED = 2, 00231 NDP_ROUTER_SEL_PREFERENCE_LOW = 3 00232 } NdpRouterSelPreference; 00233 00234 00235 /** 00236 * @brief Neighbor cache entry states 00237 **/ 00238 00239 typedef enum 00240 { 00241 NDP_STATE_NONE = 0, 00242 NDP_STATE_INCOMPLETE = 1, 00243 NDP_STATE_REACHABLE = 2, 00244 NDP_STATE_STALE = 3, 00245 NDP_STATE_DELAY = 4, 00246 NDP_STATE_PROBE = 5, 00247 NDP_STATE_PERMANENT = 6 00248 } NdpState; 00249 00250 00251 //CodeWarrior or Win32 compiler? 00252 #if defined(__CWCC__) || defined(_WIN32) 00253 #pragma pack(push, 1) 00254 #endif 00255 00256 00257 /** 00258 * @brief Router Solicitation message 00259 **/ 00260 00261 typedef __start_packed struct 00262 { 00263 uint8_t type; //0 00264 uint8_t code; //1 00265 uint16_t checksum; //2-3 00266 uint32_t reserved; //4-7 00267 uint8_t options[]; //8 00268 } __end_packed NdpRouterSolMessage; 00269 00270 00271 /** 00272 * @brief Router Advertisement message 00273 **/ 00274 00275 typedef __start_packed struct 00276 { 00277 uint8_t type; //0 00278 uint8_t code; //1 00279 uint16_t checksum; //2-3 00280 uint8_t curHopLimit; //4 00281 #ifdef _CPU_BIG_ENDIAN 00282 uint8_t m : 1; //5 00283 uint8_t o : 1; 00284 uint8_t h : 1; 00285 uint8_t prf : 2; 00286 uint8_t p : 1; 00287 uint8_t reserved : 2; 00288 #else 00289 uint8_t reserved : 2; //5 00290 uint8_t p : 1; 00291 uint8_t prf : 2; 00292 uint8_t h : 1; 00293 uint8_t o : 1; 00294 uint8_t m : 1; 00295 #endif 00296 uint16_t routerLifetime; //6-7 00297 uint32_t reachableTime; //8-11 00298 uint32_t retransTimer; //12-15 00299 uint8_t options[]; //16 00300 } __end_packed NdpRouterAdvMessage; 00301 00302 00303 /** 00304 * @brief Neighbor Solicitation message 00305 **/ 00306 00307 typedef __start_packed struct 00308 { 00309 uint8_t type; //0 00310 uint8_t code; //1 00311 uint16_t checksum; //2-3 00312 uint32_t reserved; //4-7 00313 Ipv6Addr targetAddr; //8-23 00314 uint8_t options[]; //24 00315 } __end_packed NdpNeighborSolMessage; 00316 00317 00318 /** 00319 * @brief Neighbor Advertisement message 00320 **/ 00321 00322 typedef __start_packed struct 00323 { 00324 uint8_t type; //0 00325 uint8_t code; //1 00326 uint16_t checksum; //2-3 00327 #ifdef _CPU_BIG_ENDIAN 00328 uint32_t r : 1; //4 00329 uint32_t s : 1; 00330 uint32_t o : 1; 00331 uint32_t reserved1 : 5; 00332 uint32_t reserved2 : 24; //5-7 00333 #else 00334 uint32_t reserved1 : 5; //4 00335 uint32_t o : 1; 00336 uint32_t s : 1; 00337 uint32_t r : 1; 00338 uint32_t reserved2 : 24; //5-7 00339 #endif 00340 Ipv6Addr targetAddr; //8-23 00341 uint8_t options[]; //24 00342 } __end_packed NdpNeighborAdvMessage; 00343 00344 00345 /** 00346 * @brief Redirect message 00347 **/ 00348 00349 typedef __start_packed struct 00350 { 00351 uint8_t type; //0 00352 uint8_t code; //1 00353 uint16_t checksum; //2-3 00354 uint32_t reserved; //4-7 00355 Ipv6Addr targetAddr; //8-23 00356 Ipv6Addr destAddr; //24-39 00357 uint8_t options[]; //40 00358 } __end_packed NdpRedirectMessage; 00359 00360 00361 /** 00362 * @brief Neighbor Discovery option general format 00363 **/ 00364 00365 typedef __start_packed struct 00366 { 00367 uint8_t type; //0 00368 uint8_t length; //1 00369 uint8_t value[]; //2 00370 } __end_packed NdpOption; 00371 00372 00373 /** 00374 * @brief Source/Target Link-Layer Address option 00375 **/ 00376 00377 typedef __start_packed struct 00378 { 00379 uint8_t type; //0 00380 uint8_t length; //1 00381 MacAddr linkLayerAddr; //2-7 00382 } __end_packed NdpLinkLayerAddrOption; 00383 00384 00385 /** 00386 * @brief Prefix Information option (PIO) 00387 **/ 00388 00389 typedef __start_packed struct 00390 { 00391 uint8_t type; //0 00392 uint8_t length; //1 00393 uint8_t prefixLength; //2 00394 #ifdef _CPU_BIG_ENDIAN 00395 uint8_t l : 1; //3 00396 uint8_t a : 1; 00397 uint8_t reserved1 : 6; 00398 #else 00399 uint8_t reserved1 : 6; //3 00400 uint8_t a : 1; 00401 uint8_t l : 1; 00402 #endif 00403 uint32_t validLifetime; //4-7 00404 uint32_t preferredLifetime; //8-11 00405 uint32_t reserved2; //12-15 00406 Ipv6Addr prefix; //16-31 00407 } __end_packed NdpPrefixInfoOption; 00408 00409 00410 /** 00411 * @brief Redirected Header option (RHO) 00412 **/ 00413 00414 typedef __start_packed struct 00415 { 00416 uint8_t type; //0 00417 uint8_t length; //1 00418 uint16_t reserved1; //2-3 00419 uint32_t reserved2; //4-7 00420 uint8_t ipPacket[]; //8 00421 } __end_packed NdpRedirectedHeaderOption; 00422 00423 00424 /** 00425 * @brief MTU option 00426 **/ 00427 00428 typedef __start_packed struct 00429 { 00430 uint8_t type; //0 00431 uint8_t length; //1 00432 uint16_t reserved; //2-3 00433 uint32_t mtu; //4-7 00434 } __end_packed NdpMtuOption; 00435 00436 00437 /** 00438 * @brief Route Information option (RIO) 00439 **/ 00440 00441 typedef __start_packed struct 00442 { 00443 uint8_t type; //0 00444 uint8_t length; //1 00445 uint8_t prefixLength; //2 00446 #ifdef _CPU_BIG_ENDIAN 00447 uint8_t reserved1 : 3; //3 00448 uint8_t prf : 2; 00449 uint8_t reserved2 : 3; 00450 #else 00451 uint8_t reserved2 : 3; //3 00452 uint8_t prf : 2; 00453 uint8_t reserved1 : 3; 00454 #endif 00455 uint32_t routeLifetime; //4-7 00456 Ipv6Addr prefix; //8 00457 } __end_packed NdpRouteInfoOption; 00458 00459 00460 /** 00461 * @brief Recursive DNS Server option (RDNSS) 00462 **/ 00463 00464 typedef __start_packed struct 00465 { 00466 uint8_t type; //0 00467 uint8_t length; //1 00468 uint16_t reserved; //2-3 00469 uint32_t lifetime; //4-7 00470 Ipv6Addr address[]; //8 00471 } __end_packed NdpRdnssOption; 00472 00473 00474 /** 00475 * @brief DNS Search List option (DNSSL) 00476 **/ 00477 00478 typedef __start_packed struct 00479 { 00480 uint8_t type; //0 00481 uint8_t length; //1 00482 uint16_t reserved; //2-3 00483 uint32_t lifetime; //4-7 00484 uint8_t domainNames[]; //8 00485 } __end_packed NdpDnsslOption; 00486 00487 00488 /** 00489 * @brief 6LoWPAN Context option (6CO) 00490 **/ 00491 00492 typedef __start_packed struct 00493 { 00494 uint8_t type; //0 00495 uint8_t length; //1 00496 uint8_t contextLength; //2 00497 #ifdef _CPU_BIG_ENDIAN 00498 uint8_t reserved1 : 3; //3 00499 uint8_t c : 1; 00500 uint8_t cid : 4; 00501 #else 00502 uint8_t cid : 4; //3 00503 uint8_t c : 1; 00504 uint8_t reserved1 : 3; 00505 #endif 00506 uint16_t reserved2; //4-5 00507 uint16_t validLifetime; //6-7 00508 Ipv6Addr contextPrefix; //8 00509 } __end_packed NdpContextOption; 00510 00511 00512 //CodeWarrior or Win32 compiler? 00513 #if defined(__CWCC__) || defined(_WIN32) 00514 #pragma pack(pop) 00515 #endif 00516 00517 00518 /** 00519 * @brief NDP queue item 00520 **/ 00521 00522 typedef struct 00523 { 00524 NetInterface *srcInterface; //<Interface from which the packet has been received 00525 NetBuffer *buffer; ///<Packet waiting for address resolution 00526 size_t offset; ///<Offset to the first byte of the packet 00527 } NdpQueueItem; 00528 00529 00530 /** 00531 * @brief Neighbor cache entry 00532 **/ 00533 00534 typedef struct 00535 { 00536 NdpState state; ///<Reachability state 00537 Ipv6Addr ipAddr; ///<Unicast IPv6 address 00538 MacAddr macAddr; ///<Link layer address associated with the IPv6 address 00539 bool_t isRouter; ///<A flag indicating whether the neighbor is a router or a host 00540 systime_t timestamp; ///<Timestamp to manage entry lifetime 00541 systime_t timeout; ///<Timeout value 00542 uint_t retransmitCount; ///<Retransmission counter 00543 NdpQueueItem queue[NDP_MAX_PENDING_PACKETS]; ///<Packets waiting for address resolution to complete 00544 uint_t queueSize; ///<Number of queued packets 00545 } NdpNeighborCacheEntry; 00546 00547 00548 /** 00549 * @brief Destination cache entry 00550 **/ 00551 00552 typedef struct 00553 { 00554 Ipv6Addr destAddr; ///<Destination IPv6 address 00555 Ipv6Addr nextHop; ///<IPv6 address of the next-hop neighbor 00556 size_t pathMtu; ///<Path MTU 00557 systime_t timestamp; ///<Timestamp to manage entry lifetime 00558 } NdpDestCacheEntry; 00559 00560 00561 /** 00562 * @brief NDP context 00563 **/ 00564 00565 typedef struct 00566 { 00567 uint32_t reachableTime; ///<The time a node assumes a neighbor is reachable 00568 uint32_t retransTimer; ///<The time between retransmissions of NS messages 00569 uint_t dupAddrDetectTransmits; ///<Maximum number of NS messages sent while performing DAD 00570 systime_t minRtrSolicitationDelay; ///<Minimum delay before transmitting the first RS message 00571 systime_t maxRtrSolicitationDelay; ///<Maximum delay before transmitting the first RS message 00572 systime_t rtrSolicitationInterval; ///<Time interval between retransmissions of RS messages 00573 uint_t maxRtrSolicitations; ///<Number of retransmissions for RS messages 00574 uint_t rtrSolicitationCount; ///<Retransmission counter for RS messages 00575 bool_t rtrAdvReceived; ///<Valid RA message received 00576 systime_t timestamp; ///<Timestamp to manage retransmissions 00577 systime_t timeout; ///<Timeout value 00578 NdpNeighborCacheEntry neighborCache[NDP_NEIGHBOR_CACHE_SIZE]; ///<Neighbor cache 00579 NdpDestCacheEntry destCache[NDP_DEST_CACHE_SIZE]; ///<Destination cache 00580 } NdpContext; 00581 00582 00583 //Tick counter to handle periodic operations 00584 extern systime_t ndpTickCounter; 00585 00586 //NDP related functions 00587 error_t ndpInit(NetInterface *interface); 00588 00589 error_t ndpResolve(NetInterface *interface, const Ipv6Addr *ipAddr, MacAddr *macAddr); 00590 00591 error_t ndpEnqueuePacket(NetInterface *srcInterface, NetInterface *destInterface, 00592 const Ipv6Addr *ipAddr, NetBuffer *buffer, size_t offset); 00593 00594 void ndpTick(NetInterface *interface); 00595 void ndpLinkChangeEvent(NetInterface *interface); 00596 00597 void ndpProcessRouterAdv(NetInterface *interface, Ipv6PseudoHeader *pseudoHeader, 00598 const NetBuffer *buffer, size_t offset, uint8_t hopLimit); 00599 00600 void ndpProcessNeighborSol(NetInterface *interface, Ipv6PseudoHeader *pseudoHeader, 00601 const NetBuffer *buffer, size_t offset, uint8_t hopLimit); 00602 00603 void ndpProcessNeighborAdv(NetInterface *interface, Ipv6PseudoHeader *pseudoHeader, 00604 const NetBuffer *buffer, size_t offset, uint8_t hopLimit); 00605 00606 void ndpProcessRedirect(NetInterface *interface, Ipv6PseudoHeader *pseudoHeader, 00607 const NetBuffer *buffer, size_t offset, uint8_t hopLimit); 00608 00609 error_t ndpSendRouterSol(NetInterface *interface); 00610 00611 error_t ndpSendNeighborSol(NetInterface *interface, 00612 const Ipv6Addr *targetIpAddr, bool_t multicast); 00613 00614 error_t ndpSendNeighborAdv(NetInterface *interface, 00615 const Ipv6Addr *targetIpAddr, const Ipv6Addr *destIpAddr); 00616 00617 error_t ndpSendRedirect(NetInterface *interface, const Ipv6Addr *targetAddr, 00618 const NetBuffer *ipPacket, size_t ipPacketOffset); 00619 00620 void ndpDumpRouterSolMessage(const NdpRouterSolMessage *message); 00621 void ndpDumpRouterAdvMessage(const NdpRouterAdvMessage *message); 00622 void ndpDumpNeighborSolMessage(const NdpNeighborSolMessage *message); 00623 void ndpDumpNeighborAdvMessage(const NdpNeighborAdvMessage *message); 00624 void ndpDumpRedirectMessage(const NdpRedirectMessage *message); 00625 00626 #endif 00627
Generated on Tue Jul 12 2022 17:10:15 by
1.7.2