2 Definition of Neighbor Discovery support routines.
4 Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>
6 SPDX-License-Identifier: BSD-2-Clause-Patent
10 #ifndef __EFI_IP6_ND_H__
11 #define __EFI_IP6_ND_H__
13 #define IP6_GET_TICKS(Ms) (((Ms) + IP6_TIMER_INTERVAL_IN_MS - 1) / IP6_TIMER_INTERVAL_IN_MS)
16 IP6_INF_ROUTER_LIFETIME
= 0xFFFF,
18 IP6_MAX_RTR_SOLICITATION_DELAY
= 1000, ///< 1000 milliseconds
19 IP6_MAX_RTR_SOLICITATIONS
= 3,
20 IP6_RTR_SOLICITATION_INTERVAL
= 4000,
22 IP6_MIN_RANDOM_FACTOR_SCALED
= 1,
23 IP6_MAX_RANDOM_FACTOR_SCALED
= 3,
24 IP6_RANDOM_FACTOR_SCALE
= 2,
26 IP6_MAX_MULTICAST_SOLICIT
= 3,
27 IP6_MAX_UNICAST_SOLICIT
= 3,
28 IP6_MAX_ANYCAST_DELAY_TIME
= 1,
29 IP6_MAX_NEIGHBOR_ADV
= 3,
30 IP6_REACHABLE_TIME
= 30000,
31 IP6_RETRANS_TIMER
= 1000,
32 IP6_DELAY_FIRST_PROBE_TIME
= 5000,
34 IP6_MIN_LINK_MTU
= 1280,
35 IP6_MAX_LINK_MTU
= 1500,
37 IP6_IS_ROUTER_FLAG
= 0x80,
38 IP6_SOLICITED_FLAG
= 0x40,
39 IP6_OVERRIDE_FLAG
= 0x20,
41 IP6_M_ADDR_CONFIG_FLAG
= 0x80,
42 IP6_O_CONFIG_FLAG
= 0x40,
44 IP6_ON_LINK_FLAG
= 0x80,
45 IP6_AUTO_CONFIG_FLAG
= 0x40,
49 IP6_REDITECT_LENGTH
= 40,
50 IP6_DAD_ENTRY_SIGNATURE
= SIGNATURE_32 ('I', 'P', 'D', 'E')
59 typedef struct _IP6_OPTION_HEADER
{
64 STATIC_ASSERT (sizeof (IP6_OPTION_HEADER
) == 2, "IP6_OPTION_HEADER is expected to be exactly 2 bytes long.");
66 typedef struct _IP6_ETHE_ADDR_OPTION
{
70 } IP6_ETHER_ADDR_OPTION
;
72 STATIC_ASSERT (sizeof (IP6_ETHER_ADDR_OPTION
) == 8, "IP6_ETHER_ADDR_OPTION is expected to be exactly 8 bytes long.");
74 typedef struct _IP6_MTU_OPTION
{
81 STATIC_ASSERT (sizeof (IP6_MTU_OPTION
) == 8, "IP6_MTU_OPTION is expected to be exactly 8 bytes long.");
83 typedef struct _IP6_PREFIX_INFO_OPTION
{
89 UINT32 PreferredLifetime
;
91 EFI_IPv6_ADDRESS Prefix
;
92 } IP6_PREFIX_INFO_OPTION
;
94 STATIC_ASSERT (sizeof (IP6_PREFIX_INFO_OPTION
) == 32, "IP6_PREFIX_INFO_OPTION is expected to be exactly 32 bytes long.");
99 IN BOOLEAN IsDadPassed
,
100 IN EFI_IPv6_ADDRESS
*TargetAddress
,
104 typedef struct _IP6_DAD_ENTRY
{
111 IP6_ADDRESS_INFO
*AddressInfo
;
112 EFI_IPv6_ADDRESS Destination
;
113 IP6_DAD_CALLBACK Callback
;
117 typedef struct _IP6_DELAY_JOIN_LIST
{
119 UINT32 DelayTime
; ///< in tick per 50 milliseconds
120 IP6_INTERFACE
*Interface
;
121 IP6_ADDRESS_INFO
*AddressInfo
;
122 IP6_DAD_CALLBACK DadCallback
;
124 } IP6_DELAY_JOIN_LIST
;
126 typedef struct _IP6_NEIGHBOR_ENTRY
{
133 EFI_IPv6_ADDRESS Neighbor
;
134 EFI_MAC_ADDRESS LinkAddress
;
135 EFI_IP6_NEIGHBOR_STATE State
;
140 IP6_INTERFACE
*Interface
;
141 IP6_ARP_CALLBACK CallBack
;
142 } IP6_NEIGHBOR_ENTRY
;
144 typedef struct _IP6_DEFAULT_ROUTER
{
148 EFI_IPv6_ADDRESS Router
;
149 IP6_NEIGHBOR_ENTRY
*NeighborCache
;
150 } IP6_DEFAULT_ROUTER
;
152 typedef struct _IP6_PREFIX_LIST_ENTRY
{
155 UINT32 ValidLifetime
;
156 UINT32 PreferredLifetime
;
158 EFI_IPv6_ADDRESS Prefix
;
159 } IP6_PREFIX_LIST_ENTRY
;
162 Build a array of EFI_IP6_NEIGHBOR_CACHE to be returned to the caller. The number
163 of EFI_IP6_NEIGHBOR_CACHE is also returned.
165 @param[in] IpInstance The pointer to IP6_PROTOCOL instance.
166 @param[out] NeighborCount The number of returned neighbor cache entries.
167 @param[out] NeighborCache The pointer to the array of EFI_IP6_NEIGHBOR_CACHE.
169 @retval EFI_SUCCESS The EFI_IP6_NEIGHBOR_CACHE successfully built.
170 @retval EFI_OUT_OF_RESOURCES Failed to allocate the memory for the route table.
174 Ip6BuildEfiNeighborCache (
175 IN IP6_PROTOCOL
*IpInstance
,
176 OUT UINT32
*NeighborCount
,
177 OUT EFI_IP6_NEIGHBOR_CACHE
**NeighborCache
181 Build a array of EFI_IP6_ADDRESS_INFO to be returned to the caller. The number
182 of prefix entries is also returned.
184 @param[in] IpInstance The pointer to IP6_PROTOCOL instance.
185 @param[out] PrefixCount The number of returned prefix entries.
186 @param[out] PrefixTable The pointer to the array of PrefixTable.
188 @retval EFI_SUCCESS The prefix table successfully built.
189 @retval EFI_OUT_OF_RESOURCES Failed to allocate the memory for the prefix table.
193 Ip6BuildPrefixTable (
194 IN IP6_PROTOCOL
*IpInstance
,
195 OUT UINT32
*PrefixCount
,
196 OUT EFI_IP6_ADDRESS_INFO
**PrefixTable
200 Allocate and initialize an IP6 default router entry.
202 @param[in] IpSb The pointer to the IP6_SERVICE instance.
203 @param[in] Ip6Address The IPv6 address of the default router.
204 @param[in] RouterLifetime The lifetime associated with the default
205 router, in units of seconds.
207 @return NULL if it failed to allocate memory for the default router node.
208 Otherwise, point to the created default router node.
212 Ip6CreateDefaultRouter (
213 IN IP6_SERVICE
*IpSb
,
214 IN EFI_IPv6_ADDRESS
*Ip6Address
,
215 IN UINT16 RouterLifetime
219 Destroy an IP6 default router entry.
221 @param[in] IpSb The pointer to the IP6_SERVICE instance.
222 @param[in] DefaultRouter The to be destroyed IP6_DEFAULT_ROUTER.
226 Ip6DestroyDefaultRouter (
227 IN IP6_SERVICE
*IpSb
,
228 IN IP6_DEFAULT_ROUTER
*DefaultRouter
232 Clean an IP6 default router list.
234 @param[in] IpSb The pointer to the IP6_SERVICE instance.
238 Ip6CleanDefaultRouterList (
243 Search a default router node from an IP6 default router list.
245 @param[in] IpSb The pointer to the IP6_SERVICE instance.
246 @param[in] Ip6Address The IPv6 address of the to be searched default router node.
248 @return NULL if it failed to find the matching default router node.
249 Otherwise, point to the found default router node.
253 Ip6FindDefaultRouter (
254 IN IP6_SERVICE
*IpSb
,
255 IN EFI_IPv6_ADDRESS
*Ip6Address
259 The function to be called after DAD (Duplicate Address Detection) is performed.
261 @param[in] IsDadPassed If TRUE, the DAD operation succeed. Otherwise, the DAD operation failed.
262 @param[in] IpIf Points to the IP6_INTERFACE.
263 @param[in] DadEntry The DAD entry which already performed DAD.
268 IN BOOLEAN IsDadPassed
,
269 IN IP6_INTERFACE
*IpIf
,
270 IN IP6_DAD_ENTRY
*DadEntry
274 Create a DAD (Duplicate Address Detection) entry and queue it to be performed.
276 @param[in] IpIf Points to the IP6_INTERFACE.
277 @param[in] AddressInfo The address information which needs DAD performed.
278 @param[in] Callback The callback routine that will be called after DAD
279 is performed. This is an optional parameter that
281 @param[in] Context The opaque parameter for a DAD callback routine.
282 This is an optional parameter that may be NULL.
284 @retval EFI_SUCCESS The DAD entry was created and queued.
285 @retval EFI_OUT_OF_RESOURCES Failed to allocate the memory to complete the
292 IN IP6_INTERFACE
*IpIf
,
293 IN IP6_ADDRESS_INFO
*AddressInfo
,
294 IN IP6_DAD_CALLBACK Callback OPTIONAL
,
295 IN VOID
*Context OPTIONAL
299 Search IP6_DAD_ENTRY from the Duplicate Address Detection List.
301 @param[in] IpSb The pointer to the IP6_SERVICE instance.
302 @param[in] Target The address information which needs DAD performed .
303 @param[out] Interface If not NULL, output the IP6 interface that configures
304 the tentative address.
306 @return NULL if failed to find the matching DAD entry.
307 Otherwise, point to the found DAD entry.
312 IN IP6_SERVICE
*IpSb
,
313 IN EFI_IPv6_ADDRESS
*Target
,
314 OUT IP6_INTERFACE
**Interface OPTIONAL
318 Allocate and initialize a IP6 prefix list entry.
320 @param[in] IpSb The pointer to IP6_SERVICE instance.
321 @param[in] OnLinkOrAuto If TRUE, the entry is created for the on link prefix list.
322 Otherwise, it is created for the autoconfiguration prefix list.
323 @param[in] ValidLifetime The length of time in seconds that the prefix
324 is valid for the purpose of on-link determination.
325 @param[in] PreferredLifetime The length of time in seconds that addresses
326 generated from the prefix via stateless address
327 autoconfiguration remain preferred.
328 @param[in] PrefixLength The prefix length of the Prefix.
329 @param[in] Prefix The prefix address.
331 @return NULL if it failed to allocate memory for the prefix node. Otherwise, point
332 to the created or existing prefix list entry.
335 IP6_PREFIX_LIST_ENTRY
*
336 Ip6CreatePrefixListEntry (
337 IN IP6_SERVICE
*IpSb
,
338 IN BOOLEAN OnLinkOrAuto
,
339 IN UINT32 ValidLifetime
,
340 IN UINT32 PreferredLifetime
,
341 IN UINT8 PrefixLength
,
342 IN EFI_IPv6_ADDRESS
*Prefix
346 Destroy a IP6 prefix list entry.
348 @param[in] IpSb The pointer to IP6_SERVICE instance.
349 @param[in] PrefixEntry The to be destroyed prefix list entry.
350 @param[in] OnLinkOrAuto If TRUE, the entry is removed from on link prefix list.
351 Otherwise remove from autoconfiguration prefix list.
352 @param[in] ImmediateDelete If TRUE, remove the entry directly.
353 Otherwise, check the reference count to see whether
354 it should be removed.
358 Ip6DestroyPrefixListEntry (
359 IN IP6_SERVICE
*IpSb
,
360 IN IP6_PREFIX_LIST_ENTRY
*PrefixEntry
,
361 IN BOOLEAN OnLinkOrAuto
,
362 IN BOOLEAN ImmediateDelete
366 Search the list array to find an IP6 prefix list entry.
368 @param[in] IpSb The pointer to IP6_SERVICE instance.
369 @param[in] OnLinkOrAuto If TRUE, the search the link prefix list,
370 Otherwise search the autoconfiguration prefix list.
371 @param[in] PrefixLength The prefix length of the Prefix
372 @param[in] Prefix The prefix address.
374 @return NULL if cannot find the IP6 prefix list entry. Otherwise, return the
375 pointer to the IP6 prefix list entry.
378 IP6_PREFIX_LIST_ENTRY
*
379 Ip6FindPrefixListEntry (
380 IN IP6_SERVICE
*IpSb
,
381 IN BOOLEAN OnLinkOrAuto
,
382 IN UINT8 PrefixLength
,
383 IN EFI_IPv6_ADDRESS
*Prefix
387 Release the resource in prefix list table, and destroy the list entry and
388 corresponding addresses or route entries.
390 @param[in] IpSb The pointer to the IP6_SERVICE instance.
391 @param[in] ListHead The list entry head of the prefix list table.
395 Ip6CleanPrefixListTable (
396 IN IP6_SERVICE
*IpSb
,
397 IN LIST_ENTRY
*ListHead
401 Allocate and initialize an IP6 neighbor cache entry.
403 @param[in] IpSb The pointer to the IP6_SERVICE instance.
404 @param[in] CallBack The callback function to be called when
405 address resolution is finished.
406 @param[in] Ip6Address Points to the IPv6 address of the neighbor.
407 @param[in] LinkAddress Points to the MAC address of the neighbor.
410 @return NULL if failed to allocate memory for the neighbor cache entry.
411 Otherwise, point to the created neighbor cache entry.
415 Ip6CreateNeighborEntry (
416 IN IP6_SERVICE
*IpSb
,
417 IN IP6_ARP_CALLBACK CallBack
,
418 IN EFI_IPv6_ADDRESS
*Ip6Address
,
419 IN EFI_MAC_ADDRESS
*LinkAddress OPTIONAL
423 Search a IP6 neighbor cache entry.
425 @param[in] IpSb The pointer to the IP6_SERVICE instance.
426 @param[in] Ip6Address Points to the IPv6 address of the neighbor.
428 @return NULL if it failed to find the matching neighbor cache entry.
429 Otherwise, point to the found neighbor cache entry.
433 Ip6FindNeighborEntry (
434 IN IP6_SERVICE
*IpSb
,
435 IN EFI_IPv6_ADDRESS
*Ip6Address
439 Free a IP6 neighbor cache entry and remove all the frames on the address
440 resolution queue that pass the FrameToCancel. That is, either FrameToCancel
441 is NULL, or it returns true for the frame.
443 @param[in] IpSb The pointer to the IP6_SERVICE instance.
444 @param[in] NeighborCache The to be free neighbor cache entry.
445 @param[in] SendIcmpError If TRUE, send out ICMP error.
446 @param[in] FullFree If TRUE, remove the neighbor cache entry.
447 Otherwise remove the pending frames.
448 @param[in] IoStatus The status returned to the cancelled frames'
450 @param[in] FrameToCancel Function to select which frame to cancel.
451 This is an optional parameter that may be NULL.
452 @param[in] Context Opaque parameter to the FrameToCancel.
453 Ignored if FrameToCancel is NULL.
455 @retval EFI_INVALID_PARAMETER The input parameter is invalid.
456 @retval EFI_SUCCESS The operation finished successfully.
460 Ip6FreeNeighborEntry (
461 IN IP6_SERVICE
*IpSb
,
462 IN IP6_NEIGHBOR_ENTRY
*NeighborCache
,
463 IN BOOLEAN SendIcmpError
,
465 IN EFI_STATUS IoStatus
,
466 IN IP6_FRAME_TO_CANCEL FrameToCancel OPTIONAL
,
467 IN VOID
*Context OPTIONAL
471 Add Neighbor cache entries. It is a work function for EfiIp6Neighbors().
473 @param[in] IpSb The IP6 service binding instance.
474 @param[in] TargetIp6Address Pointer to Target IPv6 address.
475 @param[in] TargetLinkAddress Pointer to link-layer address of the target. Ignored if NULL.
476 @param[in] Timeout Time in 100-ns units that this entry will remain in the neighbor
477 cache. It will be deleted after Timeout. A value of zero means that
478 the entry is permanent. A non-zero value means that the entry is
480 @param[in] Override If TRUE, the cached link-layer address of the matching entry will
481 be overridden and updated; if FALSE, and if a
482 corresponding cache entry already existed, EFI_ACCESS_DENIED
485 @retval EFI_SUCCESS The neighbor cache entry has been added.
486 @retval EFI_OUT_OF_RESOURCES Could not add the entry to the neighbor cache
487 due to insufficient resources.
488 @retval EFI_NOT_FOUND TargetLinkAddress is NULL.
489 @retval EFI_ACCESS_DENIED The to-be-added entry is already defined in the neighbor cache,
490 and that entry is tagged as un-overridden (when DeleteFlag
496 IN IP6_SERVICE
*IpSb
,
497 IN EFI_IPv6_ADDRESS
*TargetIp6Address
,
498 IN EFI_MAC_ADDRESS
*TargetLinkAddress OPTIONAL
,
504 Delete or update Neighbor cache entries. It is a work function for EfiIp6Neighbors().
506 @param[in] IpSb The IP6 service binding instance.
507 @param[in] TargetIp6Address Pointer to Target IPv6 address.
508 @param[in] TargetLinkAddress Pointer to link-layer address of the target. Ignored if NULL.
509 @param[in] Timeout Time in 100-ns units that this entry will remain in the neighbor
510 cache. It will be deleted after Timeout. A value of zero means that
511 the entry is permanent. A non-zero value means that the entry is
513 @param[in] Override If TRUE, the cached link-layer address of the matching entry will
514 be overridden and updated; if FALSE, and if a
515 corresponding cache entry already existed, EFI_ACCESS_DENIED
518 @retval EFI_SUCCESS The neighbor cache entry has been updated or deleted.
519 @retval EFI_NOT_FOUND This entry is not in the neighbor cache.
524 IN IP6_SERVICE
*IpSb
,
525 IN EFI_IPv6_ADDRESS
*TargetIp6Address
,
526 IN EFI_MAC_ADDRESS
*TargetLinkAddress OPTIONAL
,
532 Process the Neighbor Solicitation message. The message may be sent for Duplicate
533 Address Detection or Address Resolution.
535 @param[in] IpSb The IP service that received the packet.
536 @param[in] Head The IP head of the message.
537 @param[in] Packet The content of the message with IP head removed.
539 @retval EFI_SUCCESS The packet processed successfully.
540 @retval EFI_INVALID_PARAMETER The packet is invalid.
541 @retval EFI_ICMP_ERROR The packet indicates that DAD is failed.
542 @retval Others Failed to process the packet.
546 Ip6ProcessNeighborSolicit (
547 IN IP6_SERVICE
*IpSb
,
548 IN EFI_IP6_HEADER
*Head
,
553 Process the Neighbor Advertisement message.
555 @param[in] IpSb The IP service that received the packet.
556 @param[in] Head The IP head of the message.
557 @param[in] Packet The content of the message with IP head removed.
559 @retval EFI_SUCCESS The packet processed successfully.
560 @retval EFI_INVALID_PARAMETER The packet is invalid.
561 @retval EFI_ICMP_ERROR The packet indicates that DAD is failed.
562 @retval Others Failed to process the packet.
566 Ip6ProcessNeighborAdvertise (
567 IN IP6_SERVICE
*IpSb
,
568 IN EFI_IP6_HEADER
*Head
,
573 Process the Router Advertisement message according to RFC4861.
575 @param[in] IpSb The IP service that received the packet.
576 @param[in] Head The IP head of the message.
577 @param[in] Packet The content of the message with the IP head removed.
579 @retval EFI_SUCCESS The packet processed successfully.
580 @retval EFI_INVALID_PARAMETER The packet is invalid.
581 @retval EFI_OUT_OF_RESOURCES Insufficient resources to complete the operation.
582 @retval Others Failed to process the packet.
586 Ip6ProcessRouterAdvertise (
587 IN IP6_SERVICE
*IpSb
,
588 IN EFI_IP6_HEADER
*Head
,
593 Process the ICMPv6 redirect message. Find the instance, then update
596 @param[in] IpSb The IP6 service binding instance that received
598 @param[in] Head The IP head of the received ICMPv6 packet.
599 @param[in] Packet The content of the ICMPv6 redirect packet with
602 @retval EFI_INVALID_PARAMETER The parameter is invalid.
603 @retval EFI_OUT_OF_RESOURCES Insufficient resources to complete the
605 @retval EFI_SUCCESS Successfully updated the route caches.
610 IN IP6_SERVICE
*IpSb
,
611 IN EFI_IP6_HEADER
*Head
,
616 Generate router solicit message and send it out to Destination Address or
617 All Router Link Local scope multicast address.
619 @param[in] IpSb The IP service to send the packet.
620 @param[in] Interface If not NULL, points to the IP6 interface to send
622 @param[in] SourceAddress If not NULL, the source address of the message.
623 @param[in] DestinationAddress If not NULL, the destination address of the message.
624 @param[in] SourceLinkAddress If not NULL, the MAC address of the source.
625 A source link-layer address option will be appended
628 @retval EFI_OUT_OF_RESOURCES Insufficient resources to complete the operation.
629 @retval EFI_SUCCESS The router solicit message was successfully sent.
633 Ip6SendRouterSolicit (
634 IN IP6_SERVICE
*IpSb
,
635 IN IP6_INTERFACE
*Interface OPTIONAL
,
636 IN EFI_IPv6_ADDRESS
*SourceAddress OPTIONAL
,
637 IN EFI_IPv6_ADDRESS
*DestinationAddress OPTIONAL
,
638 IN EFI_MAC_ADDRESS
*SourceLinkAddress OPTIONAL
642 Generate the Neighbor Solicitation message and send it to the Destination Address.
644 @param[in] IpSb The IP service to send the packet
645 @param[in] SourceAddress The source address of the message.
646 @param[in] DestinationAddress The destination address of the message.
647 @param[in] TargetIp6Address The IP address of the target of the solicitation.
648 It must not be a multicast address.
649 @param[in] SourceLinkAddress The MAC address for the sender. If not NULL,
650 a source link-layer address option will be appended
653 @retval EFI_INVALID_PARAMETER Any input parameter is invalid.
654 @retval EFI_OUT_OF_RESOURCES Insufficient resources to complete the
656 @retval EFI_SUCCESS The Neighbor Advertise message was successfully sent.
660 Ip6SendNeighborSolicit (
661 IN IP6_SERVICE
*IpSb
,
662 IN EFI_IPv6_ADDRESS
*SourceAddress
,
663 IN EFI_IPv6_ADDRESS
*DestinationAddress
,
664 IN EFI_IPv6_ADDRESS
*TargetIp6Address
,
665 IN EFI_MAC_ADDRESS
*SourceLinkAddress OPTIONAL
669 Set the interface's address. This will trigger the DAD process for the
670 address to set. To set an already set address, the lifetimes wil be
671 updated to the new value passed in.
673 @param[in] Interface The interface to set the address.
674 @param[in] Ip6Addr The interface's to be assigned IPv6 address.
675 @param[in] IsAnycast If TRUE, the unicast IPv6 address is anycast.
676 Otherwise, it is not anycast.
677 @param[in] PrefixLength The prefix length of the Ip6Addr.
678 @param[in] ValidLifetime The valid lifetime for this address.
679 @param[in] PreferredLifetime The preferred lifetime for this address.
680 @param[in] DadCallback The caller's callback to trigger when DAD finishes.
681 This is an optional parameter that may be NULL.
682 @param[in] Context The context that will be passed to DadCallback.
683 This is an optional parameter that may be NULL.
685 @retval EFI_SUCCESS The interface is scheduled to be configured with
686 the specified address.
687 @retval EFI_OUT_OF_RESOURCES Failed to set the interface's address due to
693 IN IP6_INTERFACE
*Interface
,
694 IN EFI_IPv6_ADDRESS
*Ip6Addr
,
695 IN BOOLEAN IsAnycast
,
696 IN UINT8 PrefixLength
,
697 IN UINT32 ValidLifetime
,
698 IN UINT32 PreferredLifetime
,
699 IN IP6_DAD_CALLBACK DadCallback OPTIONAL
,
700 IN VOID
*Context OPTIONAL
704 The heartbeat timer of ND module in IP6_TIMER_INTERVAL_IN_MS milliseconds.
705 This time routine handles DAD module and neighbor state transition.
706 It is also responsible for sending out router solicitations.
708 @param[in] Event The IP6 service instance's heartbeat timer.
709 @param[in] Context The IP6 service instance.
714 Ip6NdFasterTimerTicking (
720 The heartbeat timer of ND module in 1 second. This time routine handles following
721 things: 1) maintain default router list; 2) maintain prefix options;
722 3) maintain route caches.
724 @param[in] IpSb The IP6 service binding instance.
733 Callback function when address resolution is finished. It will cancel
734 all the queued frames if the address resolution failed, or transmit them
735 if the request succeeded.
737 @param[in] Context The context of the callback, a pointer to IP6_NEIGHBOR_ENTRY.
746 Update the ReachableTime in IP6 service binding instance data, in milliseconds.
748 @param[in, out] IpSb Points to the IP6_SERVICE.
752 Ip6UpdateReachableTime (
753 IN OUT IP6_SERVICE
*IpSb