diff options
author | vanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524> | 2007-07-30 02:37:10 +0000 |
---|---|---|
committer | vanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524> | 2007-07-30 02:37:10 +0000 |
commit | 772db4bb33ae66fa20e39f786b5f80d107d450a5 (patch) | |
tree | 206a2d4756e0f7e245e08ca75f3ba10df2e1cf7a /MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Route.h | |
parent | eca7eaf49be5f23e3c79270621df7097ef585349 (diff) | |
download | edk2-platforms-772db4bb33ae66fa20e39f786b5f80d107d450a5.tar.xz |
Import ArpDxe, Dhcp4Dxe, Ip4Dxe, Mtftp4Dxe, PxeBcDxe and PxeDhcp4Dxe.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3492 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Route.h')
-rw-r--r-- | MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Route.h | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Route.h b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Route.h new file mode 100644 index 0000000000..ce07b1d10c --- /dev/null +++ b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Route.h @@ -0,0 +1,151 @@ +/** @file + +Copyright (c) 2005 - 2006, Intel Corporation +All rights reserved. This program and the accompanying materials +are licensed and made available under the terms and conditions of the BSD License +which accompanies this distribution. The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + + +Module Name: + + Ip4Route.h + +Abstract: + + EFI IP4 route table and route cache table defintions. + + +**/ + +#ifndef __EFI_IP4_ROUTE_H__ +#define __EFI_IP4_ROUTE_H__ + +#include "IP4Common.h" + +enum { + IP4_DIRECT_ROUTE = 0x00000001, + + IP4_ROUTE_CACHE_HASH = 31, + IP4_ROUTE_CACHE_MAX = 64, // Max NO. of cache entry per hash bucket +}; + +#define IP4_ROUTE_CACHE_HASH(Dst, Src) (((Dst) ^ (Src)) % IP4_ROUTE_CACHE_HASH) + +// +// The route entry in the route table. Dest/Netmask is the destion +// network. The nexthop is the gateway to send the packet to in +// order to reach the Dest/Netmask. If the Flag has IP4_DIRECT_ROUTE +// on, the gateway is the destination of the IP packet itself. Route +// enties of the connected network have the flag on. +// +typedef struct { + NET_LIST_ENTRY Link; + INTN RefCnt; + IP4_ADDR Dest; + IP4_ADDR Netmask; + IP4_ADDR NextHop; + UINT32 Flag; +} IP4_ROUTE_ENTRY; + +// +// The route cache entry. The route cache entry is optional. +// But it is necessary to support the ICMP redirect message. +// Check Ip4ProcessIcmpRedirect for information. +// +// The cache entry field Tag is used to tag all the route +// cache entry spawned from a route table entry. This makes +// it simple to delete all the route cache entries from a +// to-be-deleted route entry. +// +typedef struct { + NET_LIST_ENTRY Link; + INTN RefCnt; + IP4_ADDR Dest; + IP4_ADDR Src; + IP4_ADDR NextHop; + UINTN Tag; +} IP4_ROUTE_CACHE_ENTRY; + +// +// The route cache table is organized as a hash table. Each +// IP4 route table has a embedded route cache. For now the +// route cache and route table are binded togehter. But keep +// the route cache a seperated structure in case we want to +// detach them later. +// +typedef struct { + NET_LIST_ENTRY CacheBucket[IP4_ROUTE_CACHE_HASH]; +} IP4_ROUTE_CACHE; + +// +// Each IP4 instance has its own route table. Each ServiceBinding +// instance has a default route table and default address. +// +// All the route table entries with the same mask are linked +// together in one route area. For example, RouteArea[0] contains +// the default routes. A route table also contains a route cache. +// +typedef struct _IP4_ROUTE_TABLE IP4_ROUTE_TABLE; + +typedef struct _IP4_ROUTE_TABLE { + INTN RefCnt; + UINT32 TotalNum; + NET_LIST_ENTRY RouteArea[IP4_MASK_NUM]; + IP4_ROUTE_TABLE *Next; + IP4_ROUTE_CACHE Cache; +}; + +IP4_ROUTE_TABLE* +Ip4CreateRouteTable ( + VOID + ); + +VOID +Ip4FreeRouteTable ( + IN IP4_ROUTE_TABLE *RouteTable + ); + +EFI_STATUS +Ip4AddRoute ( + IN IP4_ROUTE_TABLE *RtTable, + IN IP4_ADDR Dest, + IN IP4_ADDR Netmask, + IN IP4_ADDR Gateway + ); + +EFI_STATUS +Ip4DelRoute ( + IN IP4_ROUTE_TABLE *RtTable, + IN IP4_ADDR Dest, + IN IP4_ADDR Netmask, + IN IP4_ADDR Gateway + ); + +IP4_ROUTE_CACHE_ENTRY * +Ip4FindRouteCache ( + IN IP4_ROUTE_TABLE *RtTable, + IN IP4_ADDR Dest, + IN IP4_ADDR Src + ); + +VOID +Ip4FreeRouteCacheEntry ( + IN IP4_ROUTE_CACHE_ENTRY *RtCacheEntry + ); + +IP4_ROUTE_CACHE_ENTRY * +Ip4Route ( + IN IP4_ROUTE_TABLE *RtTable, + IN IP4_ADDR Dest, + IN IP4_ADDR Src + ); + +EFI_STATUS +Ip4BuildEfiRouteTable ( + IN IP4_PROTOCOL *IpInstance + ); +#endif |