mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-10-31 08:32:28 +00:00 
			
		
		
		
	 5f778b1f69
			
		
	
	
		5f778b1f69
		
	
	
	
	
		
			
			BaseTools/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Impl.h: Fix filename case(sensitivity) issues. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4826 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			152 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @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 {
 | |
|   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 {
 | |
|   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 {
 | |
|   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;
 | |
| 
 | |
| struct _IP4_ROUTE_TABLE {
 | |
|   INTN                      RefCnt;
 | |
|   UINT32                    TotalNum;
 | |
|   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
 |