TianoCore EDK2 master
|
#include "Ip6Impl.h"
Go to the source code of this file.
The functions and routines to handle the route caches and route table.
Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
Definition in file Ip6Route.c.
EFI_STATUS Ip6AddRoute | ( | IN OUT IP6_ROUTE_TABLE * | RtTable, |
IN EFI_IPv6_ADDRESS * | Destination, | ||
IN UINT8 | PrefixLength, | ||
IN EFI_IPv6_ADDRESS * | GatewayAddress | ||
) |
Add a route entry to the route table. It is the help function for EfiIp6Routes.
[in,out] | RtTable | Route table to add route to. |
[in] | Destination | The destination of the network. |
[in] | PrefixLength | The PrefixLength of the destination. |
[in] | GatewayAddress | The next hop address. |
EFI_ACCESS_DENIED | The same route already exists. |
EFI_OUT_OF_RESOURCES | Failed to allocate memory for the entry. |
EFI_SUCCESS | The route was added successfully. |
Definition at line 446 of file Ip6Route.c.
EFI_STATUS Ip6BuildEfiRouteTable | ( | IN IP6_ROUTE_TABLE * | RouteTable, |
OUT UINT32 * | EfiRouteCount, | ||
OUT EFI_IP6_ROUTE_TABLE **EfiRouteTable | OPTIONAL | ||
) |
Build an array of EFI_IP6_ROUTE_TABLE to be returned to the caller. The number of EFI_IP6_ROUTE_TABLE is also returned.
[in] | RouteTable | The pointer of IP6_ROUTE_TABLE internal used. |
[out] | EfiRouteCount | The number of returned route entries. |
[out] | EfiRouteTable | The pointer to the array of EFI_IP6_ROUTE_TABLE. If NULL, only the route entry count is returned. |
EFI_SUCCESS | The EFI_IP6_ROUTE_TABLE successfully built. |
EFI_OUT_OF_RESOURCES | Failed to allocate the memory for the route table. |
Definition at line 261 of file Ip6Route.c.
VOID Ip6CleanRouteTable | ( | IN OUT IP6_ROUTE_TABLE * | RtTable | ) |
Free the route table and its associated route cache. Route table is reference counted.
[in,out] | RtTable | The route table to free. |
Definition at line 361 of file Ip6Route.c.
IP6_ROUTE_CACHE_ENTRY * Ip6CreateRouteCacheEntry | ( | IN EFI_IPv6_ADDRESS * | Dst, |
IN EFI_IPv6_ADDRESS * | Src, | ||
IN EFI_IPv6_ADDRESS * | GateWay, | ||
IN UINTN | Tag | ||
) |
Allocate and initialize a IP6 route cache entry.
[in] | Dst | The destination address. |
[in] | Src | The source address. |
[in] | GateWay | The next hop address. |
[in] | Tag | The tag from the caller. This marks all the cache entries spawned from one route table entry. |
Definition at line 167 of file Ip6Route.c.
IP6_ROUTE_ENTRY * Ip6CreateRouteEntry | ( | IN EFI_IPv6_ADDRESS *Destination | OPTIONAL, |
IN UINT8 | PrefixLength, | ||
IN EFI_IPv6_ADDRESS *GatewayAddress | OPTIONAL | ||
) |
Allocate a route entry then initialize it with the Destination/PrefixLength and Gateway.
[in] | Destination | The IPv6 destination address. This is an optional parameter that may be NULL. |
[in] | PrefixLength | The destination network's prefix length. |
[in] | GatewayAddress | The next hop address. This is an optional parameter that may be NULL. |
Definition at line 51 of file Ip6Route.c.
IP6_ROUTE_TABLE * Ip6CreateRouteTable | ( | VOID | ) |
Create an empty route table. This includes its internal route cache.
Definition at line 326 of file Ip6Route.c.
EFI_STATUS Ip6DelRoute | ( | IN OUT IP6_ROUTE_TABLE * | RtTable, |
IN EFI_IPv6_ADDRESS * | Destination, | ||
IN UINT8 | PrefixLength, | ||
IN EFI_IPv6_ADDRESS * | GatewayAddress | ||
) |
Remove a route entry and all the route caches spawn from it. It is the help function for EfiIp6Routes.
[in,out] | RtTable | The route table to remove the route from. |
[in] | Destination | The destination network. |
[in] | PrefixLength | The PrefixLength of the Destination. |
[in] | GatewayAddress | The next hop address. |
EFI_SUCCESS | The route entry was successfully removed. |
EFI_NOT_FOUND | There is no route entry in the table with that property. |
Definition at line 506 of file Ip6Route.c.
IP6_ROUTE_CACHE_ENTRY * Ip6FindRouteCache | ( | IN IP6_ROUTE_TABLE * | RtTable, |
IN EFI_IPv6_ADDRESS * | Dest, | ||
IN EFI_IPv6_ADDRESS * | Src | ||
) |
Find a route cache with the destination and source address. This is used by the ICMPv6 redirect message process.
[in] | RtTable | The route table to search the cache for. |
[in] | Dest | The destination address. |
[in] | Src | The source address. |
Definition at line 223 of file Ip6Route.c.
IP6_ROUTE_ENTRY * Ip6FindRouteEntry | ( | IN IP6_ROUTE_TABLE * | RtTable, |
IN EFI_IPv6_ADDRESS *Destination | OPTIONAL, | ||
IN EFI_IPv6_ADDRESS *NextHop | OPTIONAL | ||
) |
Search the route table for a most specific match to the Dst. It searches from the longest route area (prefix length == 128) to the shortest route area (default routes). In each route area, it will first search the instance's route table, then the default route table. This is required per the following requirements:
[in] | RtTable | The route table to search from. |
[in] | Destination | The destination address to search. If NULL, search the route table by NextHop. |
[in] | NextHop | The next hop address. If NULL, search the route table by Destination. |
Definition at line 118 of file Ip6Route.c.
VOID Ip6FreeRouteCacheEntry | ( | IN OUT IP6_ROUTE_CACHE_ENTRY * | RtCacheEntry | ) |
Free the route cache entry. It is reference counted.
[in,out] | RtCacheEntry | The route cache entry to free. |
Definition at line 199 of file Ip6Route.c.
VOID Ip6FreeRouteEntry | ( | IN OUT IP6_ROUTE_ENTRY * | RtEntry | ) |
Free the route table entry. It is reference counted.
[in,out] | RtEntry | The route entry to free. |
Definition at line 87 of file Ip6Route.c.
VOID Ip6PurgeRouteCache | ( | IN IP6_ROUTE_CACHE * | RtCache, |
IN UINTN | Tag | ||
) |
Remove all the cache entries bearing the Tag. When a route cache entry is created, it is tagged with the address of route entry from which it is spawned. When a route entry is deleted, the cache entries spawned from it are also deleted.
[in] | RtCache | Route cache to remove the entries from. |
[in] | Tag | The Tag of the entries to remove. |
Definition at line 410 of file Ip6Route.c.
IP6_ROUTE_CACHE_ENTRY * Ip6Route | ( | IN IP6_SERVICE * | IpSb, |
IN EFI_IPv6_ADDRESS * | Dest, | ||
IN EFI_IPv6_ADDRESS * | Src | ||
) |
Search the route table to route the packet. Return/create a route cache if there is a route to the destination.
[in] | IpSb | The IP6 service data. |
[in] | Dest | The destination address to search for. |
[in] | Src | The source address to search for. |
Definition at line 557 of file Ip6Route.c.
UINT32 Ip6RouteCacheHash | ( | IN EFI_IPv6_ADDRESS * | Ip1, |
IN EFI_IPv6_ADDRESS * | Ip2 | ||
) |
This is the worker function for IP6_ROUTE_CACHE_HASH(). It calculates the value as the index of the route cache bucket according to the prefix of two IPv6 addresses.
[in] | Ip1 | The IPv6 address. |
[in] | Ip2 | The IPv6 address. |
Definition at line 23 of file Ip6Route.c.