\r
#include "Ip4Impl.h"\r
\r
-\r
/**\r
Allocate a route entry then initialize it with the Dest/Netmask\r
and Gateway.\r
**/\r
IP4_ROUTE_ENTRY *\r
Ip4CreateRouteEntry (\r
- IN IP4_ADDR Dest,\r
- IN IP4_ADDR Netmask,\r
- IN IP4_ADDR GateWay\r
+ IN IP4_ADDR Dest,\r
+ IN IP4_ADDR Netmask,\r
+ IN IP4_ADDR GateWay\r
)\r
{\r
- IP4_ROUTE_ENTRY *RtEntry;\r
+ IP4_ROUTE_ENTRY *RtEntry;\r
\r
RtEntry = AllocatePool (sizeof (IP4_ROUTE_ENTRY));\r
\r
return RtEntry;\r
}\r
\r
-\r
/**\r
Free the route table entry. It is reference counted.\r
\r
**/\r
VOID\r
Ip4FreeRouteEntry (\r
- IN IP4_ROUTE_ENTRY *RtEntry\r
+ IN IP4_ROUTE_ENTRY *RtEntry\r
)\r
{\r
ASSERT (RtEntry->RefCnt > 0);\r
}\r
}\r
\r
-\r
/**\r
Allocate and initialize an IP4 route cache entry.\r
\r
**/\r
IP4_ROUTE_CACHE_ENTRY *\r
Ip4CreateRouteCacheEntry (\r
- IN IP4_ADDR Dst,\r
- IN IP4_ADDR Src,\r
- IN IP4_ADDR GateWay,\r
- IN UINTN Tag\r
+ IN IP4_ADDR Dst,\r
+ IN IP4_ADDR Src,\r
+ IN IP4_ADDR GateWay,\r
+ IN UINTN Tag\r
)\r
{\r
- IP4_ROUTE_CACHE_ENTRY *RtCacheEntry;\r
+ IP4_ROUTE_CACHE_ENTRY *RtCacheEntry;\r
\r
RtCacheEntry = AllocatePool (sizeof (IP4_ROUTE_CACHE_ENTRY));\r
\r
return RtCacheEntry;\r
}\r
\r
-\r
/**\r
Free the route cache entry. It is reference counted.\r
\r
}\r
}\r
\r
-\r
/**\r
Initialize an empty route cache table.\r
\r
**/\r
VOID\r
Ip4InitRouteCache (\r
- IN OUT IP4_ROUTE_CACHE *RtCache\r
+ IN OUT IP4_ROUTE_CACHE *RtCache\r
)\r
{\r
- UINT32 Index;\r
+ UINT32 Index;\r
\r
for (Index = 0; Index < IP4_ROUTE_CACHE_HASH_VALUE; Index++) {\r
InitializeListHead (&(RtCache->CacheBucket[Index]));\r
}\r
}\r
\r
-\r
/**\r
Clean up a route cache, that is free all the route cache\r
entries enqueued in the cache.\r
**/\r
VOID\r
Ip4CleanRouteCache (\r
- IN IP4_ROUTE_CACHE *RtCache\r
+ IN IP4_ROUTE_CACHE *RtCache\r
)\r
{\r
- LIST_ENTRY *Entry;\r
- LIST_ENTRY *Next;\r
- IP4_ROUTE_CACHE_ENTRY *RtCacheEntry;\r
- UINT32 Index;\r
+ LIST_ENTRY *Entry;\r
+ LIST_ENTRY *Next;\r
+ IP4_ROUTE_CACHE_ENTRY *RtCacheEntry;\r
+ UINT32 Index;\r
\r
for (Index = 0; Index < IP4_ROUTE_CACHE_HASH_VALUE; Index++) {\r
NET_LIST_FOR_EACH_SAFE (Entry, Next, &(RtCache->CacheBucket[Index])) {\r
}\r
}\r
\r
-\r
-\r
/**\r
Create an empty route table, includes its internal route cache\r
\r
VOID\r
)\r
{\r
- IP4_ROUTE_TABLE *RtTable;\r
- UINT32 Index;\r
+ IP4_ROUTE_TABLE *RtTable;\r
+ UINT32 Index;\r
\r
RtTable = AllocatePool (sizeof (IP4_ROUTE_TABLE));\r
\r
return RtTable;\r
}\r
\r
-\r
/**\r
Free the route table and its associated route cache. Route\r
table is reference counted.\r
**/\r
VOID\r
Ip4FreeRouteTable (\r
- IN IP4_ROUTE_TABLE *RtTable\r
+ IN IP4_ROUTE_TABLE *RtTable\r
)\r
{\r
- LIST_ENTRY *Entry;\r
- LIST_ENTRY *Next;\r
- IP4_ROUTE_ENTRY *RtEntry;\r
- UINT32 Index;\r
+ LIST_ENTRY *Entry;\r
+ LIST_ENTRY *Next;\r
+ IP4_ROUTE_ENTRY *RtEntry;\r
+ UINT32 Index;\r
\r
ASSERT (RtTable->RefCnt > 0);\r
\r
if (--RtTable->RefCnt > 0) {\r
- return ;\r
+ return;\r
}\r
\r
//\r
FreePool (RtTable);\r
}\r
\r
-\r
-\r
/**\r
Remove all the cache entries bearing the Tag. When a route cache\r
entry is created, it is tagged with the address of route entry\r
**/\r
VOID\r
Ip4PurgeRouteCache (\r
- IN OUT IP4_ROUTE_CACHE *RtCache,\r
- IN UINTN Tag\r
+ IN OUT IP4_ROUTE_CACHE *RtCache,\r
+ IN UINTN Tag\r
)\r
{\r
- LIST_ENTRY *Entry;\r
- LIST_ENTRY *Next;\r
- IP4_ROUTE_CACHE_ENTRY *RtCacheEntry;\r
- UINT32 Index;\r
+ LIST_ENTRY *Entry;\r
+ LIST_ENTRY *Next;\r
+ IP4_ROUTE_CACHE_ENTRY *RtCacheEntry;\r
+ UINT32 Index;\r
\r
for (Index = 0; Index < IP4_ROUTE_CACHE_HASH_VALUE; Index++) {\r
NET_LIST_FOR_EACH_SAFE (Entry, Next, &RtCache->CacheBucket[Index]) {\r
-\r
RtCacheEntry = NET_LIST_USER_STRUCT (Entry, IP4_ROUTE_CACHE_ENTRY, Link);\r
\r
if (RtCacheEntry->Tag == Tag) {\r
}\r
}\r
\r
-\r
/**\r
Add a route entry to the route table. All the IP4_ADDRs are in\r
host byte order.\r
**/\r
EFI_STATUS\r
Ip4AddRoute (\r
- IN OUT IP4_ROUTE_TABLE *RtTable,\r
- IN IP4_ADDR Dest,\r
- IN IP4_ADDR Netmask,\r
- IN IP4_ADDR Gateway\r
+ IN OUT IP4_ROUTE_TABLE *RtTable,\r
+ IN IP4_ADDR Dest,\r
+ IN IP4_ADDR Netmask,\r
+ IN IP4_ADDR Gateway\r
)\r
{\r
- LIST_ENTRY *Head;\r
- LIST_ENTRY *Entry;\r
- IP4_ROUTE_ENTRY *RtEntry;\r
+ LIST_ENTRY *Head;\r
+ LIST_ENTRY *Entry;\r
+ IP4_ROUTE_ENTRY *RtEntry;\r
\r
//\r
// All the route entries with the same netmask length are\r
return EFI_SUCCESS;\r
}\r
\r
-\r
/**\r
Remove a route entry and all the route caches spawn from it.\r
\r
**/\r
EFI_STATUS\r
Ip4DelRoute (\r
- IN OUT IP4_ROUTE_TABLE *RtTable,\r
- IN IP4_ADDR Dest,\r
- IN IP4_ADDR Netmask,\r
- IN IP4_ADDR Gateway\r
+ IN OUT IP4_ROUTE_TABLE *RtTable,\r
+ IN IP4_ADDR Dest,\r
+ IN IP4_ADDR Netmask,\r
+ IN IP4_ADDR Gateway\r
)\r
{\r
- LIST_ENTRY *Head;\r
- LIST_ENTRY *Entry;\r
- LIST_ENTRY *Next;\r
- IP4_ROUTE_ENTRY *RtEntry;\r
+ LIST_ENTRY *Head;\r
+ LIST_ENTRY *Entry;\r
+ LIST_ENTRY *Next;\r
+ IP4_ROUTE_ENTRY *RtEntry;\r
\r
Head = &(RtTable->RouteArea[NetGetMaskLength (Netmask)]);\r
\r
RtEntry = NET_LIST_USER_STRUCT (Entry, IP4_ROUTE_ENTRY, Link);\r
\r
if (IP4_NET_EQUAL (RtEntry->Dest, Dest, Netmask) && (RtEntry->NextHop == Gateway)) {\r
- Ip4PurgeRouteCache (&RtTable->Cache, (UINTN) RtEntry);\r
+ Ip4PurgeRouteCache (&RtTable->Cache, (UINTN)RtEntry);\r
RemoveEntryList (Entry);\r
- Ip4FreeRouteEntry (RtEntry);\r
+ Ip4FreeRouteEntry (RtEntry);\r
\r
RtTable->TotalNum--;\r
return EFI_SUCCESS;\r
return EFI_NOT_FOUND;\r
}\r
\r
-\r
/**\r
Find a route cache with the dst and src. This is used by ICMP\r
redirect message process. All kinds of redirect is treated as\r
**/\r
IP4_ROUTE_CACHE_ENTRY *\r
Ip4FindRouteCache (\r
- IN IP4_ROUTE_TABLE *RtTable,\r
- IN IP4_ADDR Dest,\r
- IN IP4_ADDR Src\r
+ IN IP4_ROUTE_TABLE *RtTable,\r
+ IN IP4_ADDR Dest,\r
+ IN IP4_ADDR Src\r
)\r
{\r
- LIST_ENTRY *Entry;\r
- IP4_ROUTE_CACHE_ENTRY *RtCacheEntry;\r
- UINT32 Index;\r
+ LIST_ENTRY *Entry;\r
+ IP4_ROUTE_CACHE_ENTRY *RtCacheEntry;\r
+ UINT32 Index;\r
\r
Index = IP4_ROUTE_CACHE_HASH (Dest, Src);\r
\r
return NULL;\r
}\r
\r
-\r
/**\r
Search the route table for a most specific match to the Dst. It searches\r
from the longest route area (mask length == 32) to the shortest route area\r
**/\r
IP4_ROUTE_ENTRY *\r
Ip4FindRouteEntry (\r
- IN IP4_ROUTE_TABLE *RtTable,\r
- IN IP4_ADDR Dst\r
+ IN IP4_ROUTE_TABLE *RtTable,\r
+ IN IP4_ADDR Dst\r
)\r
{\r
- LIST_ENTRY *Entry;\r
- IP4_ROUTE_ENTRY *RtEntry;\r
- IP4_ROUTE_TABLE *Table;\r
- INTN Index;\r
+ LIST_ENTRY *Entry;\r
+ IP4_ROUTE_ENTRY *RtEntry;\r
+ IP4_ROUTE_TABLE *Table;\r
+ INTN Index;\r
\r
RtEntry = NULL;\r
\r
}\r
}\r
\r
-\r
return NULL;\r
}\r
\r
-\r
/**\r
Search the route table to route the packet. Return/create a route\r
cache if there is a route to the destination.\r
**/\r
IP4_ROUTE_CACHE_ENTRY *\r
Ip4Route (\r
- IN IP4_ROUTE_TABLE *RtTable,\r
- IN IP4_ADDR Dest,\r
- IN IP4_ADDR Src,\r
- IN IP4_ADDR SubnetMask,\r
- IN BOOLEAN AlwaysTryDestAddr\r
+ IN IP4_ROUTE_TABLE *RtTable,\r
+ IN IP4_ADDR Dest,\r
+ IN IP4_ADDR Src,\r
+ IN IP4_ADDR SubnetMask,\r
+ IN BOOLEAN AlwaysTryDestAddr\r
)\r
{\r
- LIST_ENTRY *Head;\r
- LIST_ENTRY *Entry;\r
- LIST_ENTRY *Next;\r
- IP4_ROUTE_CACHE_ENTRY *RtCacheEntry;\r
- IP4_ROUTE_CACHE_ENTRY *Cache;\r
- IP4_ROUTE_ENTRY *RtEntry;\r
- IP4_ADDR NextHop;\r
- UINT32 Count;\r
+ LIST_ENTRY *Head;\r
+ LIST_ENTRY *Entry;\r
+ LIST_ENTRY *Next;\r
+ IP4_ROUTE_CACHE_ENTRY *RtCacheEntry;\r
+ IP4_ROUTE_CACHE_ENTRY *Cache;\r
+ IP4_ROUTE_ENTRY *RtEntry;\r
+ IP4_ADDR NextHop;\r
+ UINT32 Count;\r
\r
ASSERT (RtTable != NULL);\r
\r
- Head = &RtTable->Cache.CacheBucket[IP4_ROUTE_CACHE_HASH (Dest, Src)];\r
- RtCacheEntry = Ip4FindRouteCache (RtTable, Dest, Src);\r
+ Head = &RtTable->Cache.CacheBucket[IP4_ROUTE_CACHE_HASH (Dest, Src)];\r
+ RtCacheEntry = Ip4FindRouteCache (RtTable, Dest, Src);\r
\r
//\r
// If found, promote the cache entry to the head of the hash bucket. LRU\r
// When using /32 subnet mask, the packet will always be sent to the direct\r
// destination first, if we can't find a matching route cache.\r
//\r
- if (SubnetMask == IP4_ALLONE_ADDRESS || ((RtEntry->Flag & IP4_DIRECT_ROUTE) != 0)) {\r
+ if ((SubnetMask == IP4_ALLONE_ADDRESS) || ((RtEntry->Flag & IP4_DIRECT_ROUTE) != 0)) {\r
NextHop = Dest;\r
} else {\r
NextHop = RtEntry->NextHop;\r
// For /32 subnet mask, the default route in RtEntry will be used if failed\r
// to send the packet to driect destination address.\r
//\r
- RtCacheEntry = Ip4CreateRouteCacheEntry (Dest, Src, NextHop, (UINTN) RtEntry);\r
+ RtCacheEntry = Ip4CreateRouteCacheEntry (Dest, Src, NextHop, (UINTN)RtEntry);\r
\r
if (RtCacheEntry == NULL) {\r
return NULL;\r
return RtCacheEntry;\r
}\r
\r
-\r
/**\r
Build a EFI_IP4_ROUTE_TABLE to be returned to the caller of\r
GetModeData. The EFI_IP4_ROUTE_TABLE is clumsy to use in the\r
**/\r
EFI_STATUS\r
Ip4BuildEfiRouteTable (\r
- IN IP4_PROTOCOL *IpInstance\r
+ IN IP4_PROTOCOL *IpInstance\r
)\r
{\r
- LIST_ENTRY *Entry;\r
- IP4_ROUTE_TABLE *RtTable;\r
- IP4_ROUTE_ENTRY *RtEntry;\r
- EFI_IP4_ROUTE_TABLE *Table;\r
- UINT32 Count;\r
- INT32 Index;\r
+ LIST_ENTRY *Entry;\r
+ IP4_ROUTE_TABLE *RtTable;\r
+ IP4_ROUTE_ENTRY *RtEntry;\r
+ EFI_IP4_ROUTE_TABLE *Table;\r
+ UINT32 Count;\r
+ INT32 Index;\r
\r
RtTable = IpInstance->RouteTable;\r
\r