From 1204fe8319e5e6f77df68c375ef403e9ffa9227e Mon Sep 17 00:00:00 2001 From: xdu2 Date: Wed, 30 Dec 2009 13:44:11 +0000 Subject: [PATCH] Code clean up in NetLib: 1. Add GLOBAL_REMOVE_IF_UNREFERENCED to all globals 2. Update NTOHL and NTOHS to be BaseLib func SwapBytes32/SwapBytes16 3. Remove duplicate NET_SWAP_SHORT (to use NTOHS instead) git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9648 6f19259b-4bc3-4df7-8a09-765794883524 --- MdeModulePkg/Include/Library/NetLib.h | 357 +++++++++--------- MdeModulePkg/Library/DxeIpIoLib/DxeIpIoLib.c | 10 +- MdeModulePkg/Library/DxeNetLib/DxeNetLib.c | 341 +++++++++-------- MdeModulePkg/Library/DxeNetLib/DxeNetLib.inf | 2 + MdeModulePkg/Library/DxeNetLib/NetBuffer.c | 184 ++++----- .../Universal/Network/IScsiDxe/IScsiProto.c | 2 +- .../Universal/Network/Ip4Dxe/Ip4Icmp.c | 10 +- .../Universal/Network/Ip4Dxe/Ip4Impl.c | 26 +- .../Universal/Network/Ip4Dxe/Ip4Output.c | 2 +- .../Universal/Network/Tcp4Dxe/Tcp4Input.c | 2 +- .../Universal/Network/Tcp4Dxe/Tcp4Misc.c | 8 +- .../Universal/Network/Udp4Dxe/Udp4Main.c | 2 +- .../Network/UefiPxeBcDxe/PxeBcDhcp.c | 2 +- 13 files changed, 473 insertions(+), 475 deletions(-) diff --git a/MdeModulePkg/Include/Library/NetLib.h b/MdeModulePkg/Include/Library/NetLib.h index 2eab4a3329..d19e3ac9b1 100644 --- a/MdeModulePkg/Include/Library/NetLib.h +++ b/MdeModulePkg/Include/Library/NetLib.h @@ -1,5 +1,5 @@ /** @file - Ihis library is only intended to be used by UEFI network stack modules. + This library is only intended to be used by UEFI network stack modules. It provides basic functions for the UEFI network stack. Copyright (c) 2005 - 2009, Intel Corporation @@ -18,6 +18,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include +#include + typedef UINT32 IP4_ADDR; typedef UINT32 TCP_SEQNO; typedef UINT16 TCP_PORTNO; @@ -160,15 +162,11 @@ typedef struct { #define NET_MAC_IS_MULTICAST(Mac, BMac, Len) \ (((*((UINT8 *) Mac) & 0x01) == 0x01) && (!NET_MAC_EQUAL (Mac, BMac, Len))) -#define NTOHL(x) (UINT32)((((UINT32) (x) & 0xff) << 24) | \ - (((UINT32) (x) & 0xff00) << 8) | \ - (((UINT32) (x) & 0xff0000) >> 8) | \ - (((UINT32) (x) & 0xff000000) >> 24)) +#define NTOHL(x) SwapBytes32 (x) #define HTONL(x) NTOHL(x) -#define NTOHS(x) (UINT16)((((UINT16) (x) & 0xff) << 8) | \ - (((UINT16) (x) & 0xff00) >> 8)) +#define NTOHS(x) SwapBytes16 (x) #define HTONS(x) NTOHS(x) #define NTOHLL(x) SwapBytes64 (x) @@ -199,24 +197,24 @@ typedef struct { #define IP6_COPY_LINK_ADDRESS(Mac1, Mac2) (CopyMem ((Mac1), (Mac2), sizeof (EFI_MAC_ADDRESS))) // -// The debug level definition. This value is also used as the -// syslog's servity level. Don't change it. +// The debug level definition. This value is also used as the +// syslog's servity level. Don't change it. // #define NETDEBUG_LEVEL_TRACE 5 #define NETDEBUG_LEVEL_WARNING 4 #define NETDEBUG_LEVEL_ERROR 3 // -// Network debug message is sent out as syslog packet. +// Network debug message is sent out as syslog packet. // -#define NET_SYSLOG_FACILITY 16 // Syslog local facility local use -#define NET_SYSLOG_PACKET_LEN 512 -#define NET_SYSLOG_TX_TIMEOUT 500 *1000 *10 // 500ms -#define NET_DEBUG_MSG_LEN 470 // 512 - (ether+ip4+udp4 head length) +#define NET_SYSLOG_FACILITY 16 // Syslog local facility local use +#define NET_SYSLOG_PACKET_LEN 512 +#define NET_SYSLOG_TX_TIMEOUT (500 * 1000 * 10) // 500ms +#define NET_DEBUG_MSG_LEN 470 // 512 - (ether+ip4+udp4 head length) // -// The debug output expects the ASCII format string, Use %a to print ASCII -// string, and %s to print UNICODE string. PrintArg must be enclosed in (). +// The debug output expects the ASCII format string, Use %a to print ASCII +// string, and %s to print UNICODE string. PrintArg must be enclosed in (). // For example: NET_DEBUG_TRACE ("Tcp", ("State transit to %a\n", Name)); // #define NET_DEBUG_TRACE(Module, PrintArg) \ @@ -247,23 +245,23 @@ typedef struct { ) /** - Allocate a buffer, then format the message to it. This is a - help function for the NET_DEBUG_XXX macros. The PrintArg of - these macros treats the variable length print parameters as a + Allocate a buffer, then format the message to it. This is a + help function for the NET_DEBUG_XXX macros. The PrintArg of + these macros treats the variable length print parameters as a single parameter, and pass it to the NetDebugASPrint. For example, NET_DEBUG_TRACE ("Tcp", ("State transit to %a\n", Name)) - if extracted to: - + if extracted to: + NetDebugOutput ( - NETDEBUG_LEVEL_TRACE, - "Tcp", + NETDEBUG_LEVEL_TRACE, + "Tcp", __FILE__, __LINE__, - NetDebugASPrint ("State transit to %a\n", Name) - ) - + NetDebugASPrint ("State transit to %a\n", Name) + ) + @param Format The ASCII format string. - @param ... The variable length parameter whose format is determined + @param ... The variable length parameter whose format is determined by the Format string. @return The buffer containing the formatted message, @@ -290,12 +288,12 @@ NetDebugASPrint ( @retval EFI_INVALID_PARAMETER Any input parameter is invalid. @retval EFI_OUT_OF_RESOURCES Failed to allocate memory for the packet - @retval EFI_SUCCESS The log is discard because that it is more verbose + @retval EFI_SUCCESS The log is discard because that it is more verbose than the mNetDebugLevelMax. Or, it has been sent out. -**/ +**/ EFI_STATUS NetDebugOutput ( - IN UINT32 Level, + IN UINT32 Level, IN UINT8 *Module, IN UINT8 *File, IN UINT32 Line, @@ -304,8 +302,8 @@ NetDebugOutput ( /** - Return the length of the mask. - + Return the length of the mask. + Return the length of the mask. Valid values are 0 to 32. If the mask is invalid, return the invalid length 33, which is IP4_MASK_NUM. NetMask is in the host byte order. @@ -313,7 +311,7 @@ NetDebugOutput ( @param[in] NetMask The netmask to get the length from. @return The length of the netmask, or IP4_MASK_NUM (33) if the mask is invalid. - + **/ INTN EFIAPI @@ -324,19 +322,19 @@ NetGetMaskLength ( /** Return the class of the IP address, such as class A, B, C. Addr is in host byte order. - + The address of class A starts with 0. If the address belong to class A, return IP4_ADDR_CLASSA. - The address of class B starts with 10. + The address of class B starts with 10. If the address belong to class B, return IP4_ADDR_CLASSB. - The address of class C starts with 110. + The address of class C starts with 110. If the address belong to class C, return IP4_ADDR_CLASSC. - The address of class D starts with 1110. + The address of class D starts with 1110. If the address belong to class D, return IP4_ADDR_CLASSD. The address of class E starts with 1111. If the address belong to class E, return IP4_ADDR_CLASSE. - + @param[in] Addr The address to get the class from. @return IP address class, such as IP4_ADDR_CLASSA. @@ -351,10 +349,10 @@ NetGetIpClass ( /** Check whether the IP is a valid unicast address according to the netmask. If NetMask is zero, use the IP address's class to get the default mask. - + If Ip is 0, IP is not a valid unicast address. Class D address is used for multicasting and class E address is reserved for future. If Ip - belongs to class D or class E, Ip is not a valid unicast address. + belongs to class D or class E, Ip is not a valid unicast address. If all bits of the host address of Ip are 0 or 1, Ip is not a valid unicast address. @param[in] Ip The IP to check against. @@ -377,13 +375,13 @@ NetIp4IsUnicast ( a valid unicast address. If the address is unspecified ::, it is not a valid unicast address to be assigned to any node. If the address is loopback address ::1, it is also not a valid unicast address to be assigned to any physical - interface. + interface. @param[in] Ip6 The IPv6 address to check against. @return TRUE if Ip6 is a valid unicast address on the network, otherwise FALSE. -**/ +**/ BOOLEAN NetIp6IsValidUnicast ( IN EFI_IPv6_ADDRESS *Ip6 @@ -397,7 +395,7 @@ NetIp6IsValidUnicast ( @retval TRUE - Yes, unspecified @retval FALSE - No - + **/ BOOLEAN NetIp6IsUnspecifiedAddr ( @@ -411,7 +409,7 @@ NetIp6IsUnspecifiedAddr ( @retval TRUE - Yes, link-local address @retval FALSE - No - + **/ BOOLEAN NetIp6IsLinkLocalAddr ( @@ -427,7 +425,7 @@ NetIp6IsLinkLocalAddr ( @retval TRUE - Yes, connected. @retval FALSE - No. - + **/ BOOLEAN NetIp6IsNetEqual ( @@ -470,8 +468,8 @@ extern EFI_IPv4_ADDRESS mZeroIp4Addr; /** Extract a UINT32 from a byte stream. - - This function copies a UINT32 from a byte stream, and then converts it from Network + + This function copies a UINT32 from a byte stream, and then converts it from Network byte order to host byte order. Use this function to avoid alignment error. @param[in] Buf The buffer to extract the UINT32. @@ -486,14 +484,14 @@ NetGetUint32 ( ); /** - Puts a UINT32 into the byte stream in network byte order. - - Converts a UINT32 from host byte order to network byte order, and then copies it to the + Puts a UINT32 into the byte stream in network byte order. + + Converts a UINT32 from host byte order to network byte order, and then copies it to the byte stream. @param[in, out] Buf The buffer to put the UINT32. @param[in] Data The data to put. - + **/ VOID EFIAPI @@ -504,11 +502,11 @@ NetPutUint32 ( /** Initialize a random seed using current time. - - Get current time first. Then initialize a random seed based on some basic - mathematical operations on the hour, day, minute, second, nanosecond and year + + Get current time first. Then initialize a random seed based on some basic + mathematical operations on the hour, day, minute, second, nanosecond and year of the current time. - + @return The random seed, initialized with current time. **/ @@ -555,16 +553,16 @@ NetRandomInitSeed ( /** Remove the first node entry on the list, and return the removed node entry. - + Removes the first node entry from a doubly linked list. It is up to the caller of this function to release the memory used by the first node, if that is required. On - exit, the removed node is returned. + exit, the removed node is returned. If Head is NULL, then ASSERT(). If Head was not initialized, then ASSERT(). If PcdMaximumLinkedListLength is not zero, and the number of nodes in the linked list including the head node is greater than or equal to PcdMaximumLinkedListLength, - then ASSERT(). + then ASSERT(). @param[in, out] Head The list header. @@ -582,14 +580,14 @@ NetListRemoveHead ( Removes the last node entry from a doubly linked list. It is up to the caller of this function to release the memory used by the first node, if that is required. On - exit, the removed node is returned. + exit, the removed node is returned. If Head is NULL, then ASSERT(). If Head was not initialized, then ASSERT(). If PcdMaximumLinkedListLength is not zero, and the number of nodes in the linked list including the head node is greater than or equal to PcdMaximumLinkedListLength, - then ASSERT(). - + then ASSERT(). + @param[in, out] Head The list head. @return The last node entry that is removed from the list, NULL if the list is empty. @@ -603,11 +601,11 @@ NetListRemoveTail ( /** Insert a new node entry after a designated node entry of a doubly linked list. - + Inserts a new node entry designated by NewEntry after the node entry designated by PrevEntry of the doubly linked list. - - @param[in, out] PrevEntry The entry after which to insert. + + @param[in, out] PrevEntry The entry after which to insert. @param[in, out] NewEntry The new entry to insert. **/ @@ -620,10 +618,10 @@ NetListInsertAfter ( /** Insert a new node entry before a designated node entry of a doubly linked list. - + Inserts a new node entry designated by NewEntry before the node entry designated by PostEntry of the doubly linked list. - + @param[in, out] PostEntry The entry to insert before. @param[in, out] NewEntry The new entry to insert. @@ -656,15 +654,15 @@ typedef struct { /** Initialize the netmap. Netmap is a reposity to keep the pairs. - - Initialize the forward and backward links of two head nodes donated by Map->Used + + Initialize the forward and backward links of two head nodes donated by Map->Used and Map->Recycled of two doubly linked lists. Initializes the count of the pairs in the netmap to zero. - + If Map is NULL, then ASSERT(). If the address of Map->Used is NULL, then ASSERT(). If the address of Map->Recycled is NULl, then ASSERT(). - + @param[in, out] Map The netmap to initialize. **/ @@ -676,13 +674,13 @@ NetMapInit ( /** To clean up the netmap, that is, release allocated memories. - + Removes all nodes of the Used doubly linked list and frees memory of all related netmap items. Removes all nodes of the Recycled doubly linked list and free memory of all related netmap items. The number of the pairs in the netmap is set to zero. - + If Map is NULL, then ASSERT(). - + @param[in, out] Map The netmap to clean up. **/ @@ -694,12 +692,12 @@ NetMapClean ( /** Test whether the netmap is empty and return true if it is. - + If the number of the pairs in the netmap is zero, return TRUE. - + If Map is NULL, then ASSERT(). - - + + @param[in] Map The net map to test. @return TRUE if the netmap is empty, otherwise FALSE. @@ -727,13 +725,13 @@ NetMapGetCount ( /** Allocate an item to save the pair to the head of the netmap. - + Allocate an item to save the pair and add corresponding node entry - to the beginning of the Used doubly linked list. The number of the + to the beginning of the Used doubly linked list. The number of the pairs in the netmap increase by 1. If Map is NULL, then ASSERT(). - + @param[in, out] Map The netmap to insert into. @param[in] Key The user's key. @param[in] Value The user's value for the key. @@ -754,11 +752,11 @@ NetMapInsertHead ( Allocate an item to save the pair to the tail of the netmap. Allocate an item to save the pair and add corresponding node entry - to the tail of the Used doubly linked list. The number of the + to the tail of the Used doubly linked list. The number of the pairs in the netmap increase by 1. If Map is NULL, then ASSERT(). - + @param[in, out] Map The netmap to insert into. @param[in] Key The user's key. @param[in] Value The user's value for the key. @@ -777,12 +775,12 @@ NetMapInsertTail ( /** Finds the key in the netmap and returns the point to the item containing the Key. - - Iterate the Used doubly linked list of the netmap to get every item. Compare the key of every + + Iterate the Used doubly linked list of the netmap to get every item. Compare the key of every item with the key to search. It returns the point to the item contains the Key if found. If Map is NULL, then ASSERT(). - + @param[in] Map The netmap to search within. @param[in] Key The key to search. @@ -798,16 +796,16 @@ NetMapFindKey ( /** Remove the node entry of the item from the netmap and return the key of the removed item. - - Remove the node entry of the item from the Used doubly linked list of the netmap. - The number of the pairs in the netmap decrease by 1. Then add the node + + Remove the node entry of the item from the Used doubly linked list of the netmap. + The number of the pairs in the netmap decrease by 1. Then add the node entry of the item to the Recycled doubly linked list of the netmap. If Value is not NULL, Value will point to the value of the item. It returns the key of the removed item. - + If Map is NULL, then ASSERT(). If Item is NULL, then ASSERT(). if item in not in the netmap, then ASSERT(). - + @param[in, out] Map The netmap to remove the item from. @param[in, out] Item The item to remove. @param[out] Value The variable to receive the value if not NULL. @@ -826,14 +824,14 @@ NetMapRemoveItem ( /** Remove the first node entry on the netmap and return the key of the removed item. - Remove the first node entry from the Used doubly linked list of the netmap. - The number of the pairs in the netmap decrease by 1. Then add the node + Remove the first node entry from the Used doubly linked list of the netmap. + The number of the pairs in the netmap decrease by 1. Then add the node entry to the Recycled doubly linked list of the netmap. If parameter Value is not NULL, parameter Value will point to the value of the item. It returns the key of the removed item. - + If Map is NULL, then ASSERT(). If the Used doubly linked list is empty, then ASSERT(). - + @param[in, out] Map The netmap to remove the head from. @param[out] Value The variable to receive the value if not NULL. @@ -850,14 +848,14 @@ NetMapRemoveHead ( /** Remove the last node entry on the netmap and return the key of the removed item. - Remove the last node entry from the Used doubly linked list of the netmap. - The number of the pairs in the netmap decrease by 1. Then add the node + Remove the last node entry from the Used doubly linked list of the netmap. + The number of the pairs in the netmap decrease by 1. Then add the node entry to the Recycled doubly linked list of the netmap. If parameter Value is not NULL, parameter Value will point to the value of the item. It returns the key of the removed item. - + If Map is NULL, then ASSERT(). If the Used doubly linked list is empty, then ASSERT(). - + @param[in, out] Map The netmap to remove the tail from. @param[out] Value The variable to receive the value if not NULL. @@ -881,14 +879,14 @@ EFI_STATUS /** Iterate through the netmap and call CallBack for each item. - + It will contiue the traverse if CallBack returns EFI_SUCCESS, otherwise, break - from the loop. It returns the CallBack's last return value. This function is + from the loop. It returns the CallBack's last return value. This function is delete safe for the current item. If Map is NULL, then ASSERT(). If CallBack is NULL, then ASSERT(). - + @param[in] Map The Map to iterate through. @param[in] CallBack The callback function to call for each item. @param[in] Arg The opaque parameter to the callback. @@ -912,12 +910,12 @@ NetMapIterate ( // /** Create a child of the service that is identified by ServiceBindingGuid. - + Get the ServiceBinding Protocol first, then use it to create a child. If ServiceBindingGuid is NULL, then ASSERT(). If ChildHandle is NULL, then ASSERT(). - + @param[in] Controller The controller which has the service installed. @param[in] Image The image handle used to open service. @param[in] ServiceBindingGuid The service's Guid. @@ -938,11 +936,11 @@ NetLibCreateServiceChild ( /** Destroy a child of the service that is identified by ServiceBindingGuid. - + Get the ServiceBinding Protocol first, then use it to destroy a child. - + If ServiceBindingGuid is NULL, then ASSERT(). - + @param[in] Controller The controller which has the service installed. @param[in] Image The image handle used to open service. @param[in] ServiceBindingGuid The service's Guid. @@ -977,9 +975,9 @@ NetLibDestroyServiceChild ( get the simple network protocol. @param[out] MacString The pointer to store the address of the string representation of the mac address. - - @retval EFI_SUCCESS Converted the mac address a unicode string successfully. - @retval EFI_OUT_OF_RESOURCES There are not enough memory resources. + + @retval EFI_SUCCESS Convert the mac address a unicode string successfully. + @retval EFI_OUT_OF_RESOURCES There are not enough memory resource. @retval Others Failed to open the simple network protocol. **/ @@ -993,7 +991,7 @@ NetLibGetMacString ( /** Create an IPv4 device path node. - + The header type of IPv4 device path node is MESSAGING_DEVICE_PATH. The header subtype of IPv4 device path node is MSG_IPv4_DP. The length of the IPv4 device path node in bytes is 19. @@ -1024,7 +1022,7 @@ NetLibCreateIPv4DPathNode ( /** Create an IPv6 device path node. - + The header type of IPv6 device path node is MESSAGING_DEVICE_PATH. The header subtype of IPv6 device path node is MSG_IPv6_DP. The length of the IPv6 device path node in bytes is 43. @@ -1054,7 +1052,7 @@ NetLibCreateIPv6DPathNode ( /** Find the UNDI/SNP handle from controller and protocol GUID. - + For example, IP will open an MNP child to transmit/receive packets. When MNP is stopped, IP should also be stopped. IP needs to find its own private data which is related the IP's @@ -1081,7 +1079,7 @@ NetLibGetNicHandle ( Disconnect the driver specified by ImageHandle from all the devices in the handle database. Uninstall all the protocols installed in the driver entry point. - + @param[in] ImageHandle The drivers' driver image. @retval EFI_SUCCESS The image is unloaded. @@ -1111,9 +1109,6 @@ NetLibDefaultUnload ( #define NET_CHECK_SIGNATURE(PData, SIGNATURE) \ ASSERT (((PData) != NULL) && ((PData)->Signature == (SIGNATURE))) -#define NET_SWAP_SHORT(Value) \ - ((((Value) & 0xff) << 8) | (((Value) >> 8) & 0xff)) - // // Single memory block in the vector. // @@ -1255,7 +1250,7 @@ typedef struct { @param[in] Len The length of the block. - @return Pointer to the allocated NET_BUF, or NULL if the + @return Pointer to the allocated NET_BUF, or NULL if the allocation failed due to resource limit. **/ @@ -1267,13 +1262,13 @@ NetbufAlloc ( /** Free the net buffer and its associated NET_VECTOR. - + Decrease the reference count of the net buffer by one. Free the associated net - vector and itself if the reference count of the net buffer is decreased to 0. - The net vector free operation decreases the reference count of the net + vector and itself if the reference count of the net buffer is decreased to 0. + The net vector free operation decreases the reference count of the net vector by one, and performs the resource free operation when the reference count - of the net vector is 0. - + of the net vector is 0. + @param[in] Nbuf Pointer to the NET_BUF to be freed. **/ @@ -1284,16 +1279,16 @@ NetbufFree ( ); /** - Get the index of NET_BLOCK_OP that contains the byte at Offset in the net - buffer. - - For example, this function can be used to retrieve the IP header in the packet. It - also can be used to get the fragment that contains the byte used - mainly by the library implementation itself. + Get the index of NET_BLOCK_OP that contains the byte at Offset in the net + buffer. + + For example, this function can be used to retrieve the IP header in the packet. It + also can be used to get the fragment that contains the byte used + mainly by the library implementation itself. @param[in] Nbuf Pointer to the net buffer. @param[in] Offset The offset of the byte. - @param[out] Index Index of the NET_BLOCK_OP that contains the byte at + @param[out] Index Index of the NET_BLOCK_OP that contains the byte at Offset. @return Pointer to the Offset'th byte of data in the net buffer, or NULL @@ -1309,10 +1304,10 @@ NetbufGetByte ( ); /** - Create a copy of the net buffer that shares the associated net vector. - - The reference count of the newly created net buffer is set to 1. The reference - count of the associated net vector is increased by one. + Create a copy of the net buffer that shares the associated net vector. + + The reference count of the newly created net buffer is set to 1. The reference + count of the associated net vector is increased by one. @param[in] Nbuf Pointer to the net buffer to be cloned. @@ -1329,12 +1324,12 @@ NetbufClone ( /** Create a duplicated copy of the net buffer with data copied and HeadSpace bytes of head space reserved. - + The duplicated net buffer will allocate its own memory to hold the data of the source net buffer. - + @param[in] Nbuf Pointer to the net buffer to be duplicated from. - @param[in, out] Duplicate Pointer to the net buffer to duplicate to, if + @param[in, out] Duplicate Pointer to the net buffer to duplicate to, if NULL a new net buffer is allocated. @param[in] HeadSpace Length of the head space to reserve. @@ -1351,19 +1346,19 @@ NetbufDuplicate ( ); /** - Create a NET_BUF structure which contains Len byte data of Nbuf starting from - Offset. - - A new NET_BUF structure will be created but the associated data in NET_VECTOR - is shared. This function exists to do IP packet fragmentation. + Create a NET_BUF structure which contains Len byte data of Nbuf starting from + Offset. + + A new NET_BUF structure will be created but the associated data in NET_VECTOR + is shared. This function exists to do IP packet fragmentation. @param[in] Nbuf Pointer to the net buffer to be extracted. - @param[in] Offset Starting point of the data to be included in the new + @param[in] Offset Starting point of the data to be included in the new net buffer. - @param[in] Len Bytes of data to be included in the new net buffer. - @param[in] HeadSpace Bytes of head space to reserve for protocol header. + @param[in] Len Bytes of data to be included in the new net buffer. + @param[in] HeadSpace Bytes of head space to reserve for protocol header. - @return Pointer to the cloned net buffer, or NULL if the + @return Pointer to the cloned net buffer, or NULL if the allocation failed due to resource limit. **/ @@ -1379,10 +1374,10 @@ NetbufGetFragment ( /** Reserve some space in the header room of the net buffer. - Upon allocation, all the space is in the tail room of the buffer. Call this + Upon allocation, all the space is in the tail room of the buffer. Call this function to move some space to the header room. This function is quite limited - in that it can only reserve space from the first block of an empty NET_BUF not - built from the external. But it should be enough for the network stack. + in that it can only reserve space from the first block of an empty NET_BUF not + built from the external. But it should be enough for the network stack. @param[in, out] Nbuf Pointer to the net buffer. @param[in] Len The length of buffer to be reserved from the header. @@ -1396,14 +1391,14 @@ NetbufReserve ( ); /** - Allocate Len bytes of space from the header or tail of the buffer. + Allocate Len bytes of space from the header or tail of the buffer. @param[in, out] Nbuf Pointer to the net buffer. @param[in] Len The length of the buffer to be allocated. - @param[in] FromHead The flag to indicate whether reserve the data + @param[in] FromHead The flag to indicate whether reserve the data from head (TRUE) or tail (FALSE). - @return Pointer to the first byte of the allocated buffer, + @return Pointer to the first byte of the allocated buffer, or NULL if there is no sufficient space. **/ @@ -1416,14 +1411,14 @@ NetbufAllocSpace ( ); /** - Trim Len bytes from the header or tail of the net buffer. + Trim Len bytes from the header or tail of the net buffer. @param[in, out] Nbuf Pointer to the net buffer. @param[in] Len The length of the data to be trimmed. - @param[in] FromHead The flag to indicate whether trim data from head + @param[in] FromHead The flag to indicate whether trim data from head (TRUE) or tail (FALSE). - @return Length of the actually trimmed data, which may be less + @return Length of the actually trimmed data, which may be less than Len if the TotalSize of Nbuf is less than Len. **/ @@ -1436,11 +1431,11 @@ NetbufTrim ( ); /** - Copy Len bytes of data from the specific offset of the net buffer to the + Copy Len bytes of data from the specific offset of the net buffer to the destination memory. - + The Len bytes of data may cross several fragments of the net buffer. - + @param[in] Nbuf Pointer to the net buffer. @param[in] Offset The sequence number of the first byte to copy. @param[in] Len Length of the data to copy. @@ -1460,8 +1455,8 @@ NetbufCopy ( ); /** - Build a NET_BUF from external blocks. - + Build a NET_BUF from external blocks. + A new NET_BUF structure will be created from external blocks. An additional block of memory will be allocated to hold reserved HeadSpace bytes of header room and existing HeadLen bytes of header, but the external blocks are shared by the @@ -1476,7 +1471,7 @@ NetbufCopy ( @param[in] Arg The argument passed to ExtFree when ExtFree is called. - @return Pointer to the net buffer built from the data blocks, + @return Pointer to the net buffer built from the data blocks, or NULL if the allocation failed due to resource limit. @@ -1494,13 +1489,13 @@ NetbufFromExt ( /** Build a fragment table to contain the fragments in the net buffer. This is the - opposite operation of the NetbufFromExt. - + opposite operation of the NetbufFromExt. + @param[in] Nbuf Point to the net buffer. @param[in, out] ExtFragment Pointer to the data block. @param[in, out] ExtNum The number of the data blocks. - @retval EFI_BUFFER_TOO_SMALL The number of non-empty blocks is bigger than + @retval EFI_BUFFER_TOO_SMALL The number of non-empty blocks is bigger than ExtNum. @retval EFI_SUCCESS Fragment table is built successfully. @@ -1515,10 +1510,10 @@ NetbufBuildExt ( /** Build a net buffer from a list of net buffers. - - All the fragments will be collected from the list of NEW_BUF and then a new - net buffer will be created through NetbufFromExt. - + + All the fragments will be collected from the list of NEW_BUF and then a new + net buffer will be created through NetbufFromExt. + @param[in] BufList A List of the net buffer. @param[in] HeadSpace The head space to be reserved. @param[in] HeaderLen The length of the protocol header. The function @@ -1526,7 +1521,7 @@ NetbufBuildExt ( @param[in] ExtFree Pointer to the caller provided free function. @param[in] Arg The argument passed to ExtFree when ExtFree is called. - @return Pointer to the net buffer built from the list of net + @return Pointer to the net buffer built from the list of net buffers. **/ @@ -1578,10 +1573,10 @@ NetbufQueAlloc ( ); /** - Free a net buffer queue. - + Free a net buffer queue. + Decrease the reference count of the net buffer queue by one. The real resource - free operation isn't performed until the reference count of the net buffer + free operation isn't performed until the reference count of the net buffer queue is decreased to 0. @param[in] NbufQue Pointer to the net buffer queue to be freed. @@ -1598,7 +1593,7 @@ NetbufQueFree ( @param[in, out] NbufQue Pointer to the net buffer queue. - @return Pointer to the net buffer removed from the specific queue, + @return Pointer to the net buffer removed from the specific queue, or NULL if there is no net buffer in the specific queue. **/ @@ -1625,16 +1620,16 @@ NetbufQueAppend ( /** Copy Len bytes of data from the net buffer queue at the specific offset to the destination memory. - + The copying operation is the same as NetbufCopy but applies to the net buffer queue instead of the net buffer. - + @param[in] NbufQue Pointer to the net buffer queue. @param[in] Offset The sequence number of the first byte to copy. @param[in] Len Length of the data to copy. @param[out] Dest The destination of the data to copy to. - @return The length of the actual copied data, or 0 if the offset + @return The length of the actual copied data, or 0 if the offset specified exceeds the total size of net buffer queue. **/ @@ -1648,9 +1643,9 @@ NetbufQueCopy ( ); /** - Trim Len bytes of data from the queue header and release any net buffer + Trim Len bytes of data from the queue header and release any net buffer that is trimmed wholely. - + The trimming operation is the same as NetbufTrim but applies to the net buffer queue instead of the net buffer. @@ -1727,8 +1722,8 @@ NetbufChecksum ( ); /** - Compute the checksum for TCP/UDP pseudo header. - + Compute the checksum for TCP/UDP pseudo header. + Src and Dst are in network byte order, and Len is in host byte order. @param[in] Src The source address of the packet. @@ -1749,8 +1744,8 @@ NetPseudoHeadChecksum ( ); /** - Compute the checksum for TCP6/UDP6 pseudo header. - + Compute the checksum for TCP6/UDP6 pseudo header. + Src and Dst are in network byte order, and Len is in host byte order. @param[in] Src The source address of the packet. diff --git a/MdeModulePkg/Library/DxeIpIoLib/DxeIpIoLib.c b/MdeModulePkg/Library/DxeIpIoLib/DxeIpIoLib.c index 4df49a5e7b..9ed7b8ddfb 100644 --- a/MdeModulePkg/Library/DxeIpIoLib/DxeIpIoLib.c +++ b/MdeModulePkg/Library/DxeIpIoLib/DxeIpIoLib.c @@ -24,12 +24,12 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include -LIST_ENTRY mActiveIpIoList = { +GLOBAL_REMOVE_IF_UNREFERENCED LIST_ENTRY mActiveIpIoList = { &mActiveIpIoList, &mActiveIpIoList }; -EFI_IP4_CONFIG_DATA mIp4IoDefaultIpConfigData = { +GLOBAL_REMOVE_IF_UNREFERENCED EFI_IP4_CONFIG_DATA mIp4IoDefaultIpConfigData = { EFI_IP_PROTO_UDP, FALSE, TRUE, @@ -46,7 +46,7 @@ EFI_IP4_CONFIG_DATA mIp4IoDefaultIpConfigData = { 0 }; -EFI_IP6_CONFIG_DATA mIp6IoDefaultIpConfigData = { +GLOBAL_REMOVE_IF_UNREFERENCED EFI_IP6_CONFIG_DATA mIp6IoDefaultIpConfigData = { EFI_IP_PROTO_UDP, FALSE, TRUE, @@ -60,7 +60,7 @@ EFI_IP6_CONFIG_DATA mIp6IoDefaultIpConfigData = { 0 }; -ICMP_ERROR_INFO mIcmpErrMap[10] = { +GLOBAL_REMOVE_IF_UNREFERENCED ICMP_ERROR_INFO mIcmpErrMap[10] = { {FALSE, TRUE }, // ICMP_ERR_UNREACH_NET {FALSE, TRUE }, // ICMP_ERR_UNREACH_HOST {TRUE, TRUE }, // ICMP_ERR_UNREACH_PROTOCOL @@ -73,7 +73,7 @@ ICMP_ERROR_INFO mIcmpErrMap[10] = { {FALSE, TRUE } // ICMP_ERR_PARAMPROB }; -ICMP_ERROR_INFO mIcmp6ErrMap[10] = { +GLOBAL_REMOVE_IF_UNREFERENCED ICMP_ERROR_INFO mIcmp6ErrMap[10] = { {FALSE, TRUE}, // ICMP6_ERR_UNREACH_NET {FALSE, TRUE}, // ICMP6_ERR_UNREACH_HOST {TRUE, TRUE}, // ICMP6_ERR_UNREACH_PROTOCOL diff --git a/MdeModulePkg/Library/DxeNetLib/DxeNetLib.c b/MdeModulePkg/Library/DxeNetLib/DxeNetLib.c index b42054f544..ffcd70ca84 100644 --- a/MdeModulePkg/Library/DxeNetLib/DxeNetLib.c +++ b/MdeModulePkg/Library/DxeNetLib/DxeNetLib.c @@ -1,6 +1,6 @@ /** @file Network library. - + Copyright (c) 2005 - 2009, 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 @@ -16,6 +16,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #include #include +#include #include #include #include @@ -33,14 +34,12 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #include -GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 mNetLibHexStr[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; - #define NIC_ITEM_CONFIG_SIZE sizeof (NIC_IP4_CONFIG_INFO) + sizeof (EFI_IP4_ROUTE_TABLE) * MAX_IP4_CONFIG_IN_VARIABLE // // All the supported IP4 maskes in host byte order. // -IP4_ADDR gIp4AllMasks[IP4_MASK_NUM] = { +GLOBAL_REMOVE_IF_UNREFERENCED IP4_ADDR gIp4AllMasks[IP4_MASK_NUM] = { 0x00000000, 0x80000000, 0xC0000000, @@ -79,26 +78,25 @@ IP4_ADDR gIp4AllMasks[IP4_MASK_NUM] = { 0xFFFFFFFF, }; -EFI_IPv4_ADDRESS mZeroIp4Addr = {{0, 0, 0, 0}}; +GLOBAL_REMOVE_IF_UNREFERENCED EFI_IPv4_ADDRESS mZeroIp4Addr = {{0, 0, 0, 0}}; // -// Any error level digitally larger than mNetDebugLevelMax +// Any error level digitally larger than mNetDebugLevelMax // will be silently discarded. // -UINTN mNetDebugLevelMax = NETDEBUG_LEVEL_ERROR; -UINT32 mSyslogPacketSeq = 0xDEADBEEF; +GLOBAL_REMOVE_IF_UNREFERENCED UINTN mNetDebugLevelMax = NETDEBUG_LEVEL_ERROR; +GLOBAL_REMOVE_IF_UNREFERENCED UINT32 mSyslogPacketSeq = 0xDEADBEEF; -// -// You can change mSyslogDstMac mSyslogDstIp and mSyslogSrcIp -// here to direct the syslog packets to the syslog deamon. The -// default is broadcast to both the ethernet and IP. // -UINT8 mSyslogDstMac[NET_ETHER_ADDR_LEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; -UINT32 mSyslogDstIp = 0xffffffff; -UINT32 mSyslogSrcIp = 0; +// You can change mSyslogDstMac mSyslogDstIp and mSyslogSrcIp +// here to direct the syslog packets to the syslog deamon. The +// default is broadcast to both the ethernet and IP. +// +GLOBAL_REMOVE_IF_UNREFERENCED UINT8 mSyslogDstMac[NET_ETHER_ADDR_LEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; +GLOBAL_REMOVE_IF_UNREFERENCED UINT32 mSyslogDstIp = 0xffffffff; +GLOBAL_REMOVE_IF_UNREFERENCED UINT32 mSyslogSrcIp = 0; -CHAR8 * -mMonthName[] = { +GLOBAL_REMOVE_IF_UNREFERENCED CHAR8 *mMonthName[] = { "Jan", "Feb", "Mar", @@ -114,7 +112,7 @@ mMonthName[] = { }; /** - Locate the handles that support SNP, then open one of them + Locate the handles that support SNP, then open one of them to send the syslog packets. The caller isn't required to close the SNP after use because the SNP is opened by HandleProtocol. @@ -147,12 +145,12 @@ SyslogLocateSnp ( if (EFI_ERROR (Status) || (HandleCount == 0)) { return NULL; } - + // // Try to open one of the ethernet SNP protocol to send packet // Snp = NULL; - + for (Index = 0; Index < HandleCount; Index++) { Status = gBS->HandleProtocol ( Handles[Index], @@ -160,10 +158,10 @@ SyslogLocateSnp ( (VOID **) &Snp ); - if ((Status == EFI_SUCCESS) && (Snp != NULL) && + if ((Status == EFI_SUCCESS) && (Snp != NULL) && (Snp->Mode->IfType == NET_IFTYPE_ETHERNET) && (Snp->Mode->MaxPacketSize >= NET_SYSLOG_PACKET_LEN)) { - + break; } @@ -176,18 +174,18 @@ SyslogLocateSnp ( /** Transmit a syslog packet synchronously through SNP. The Packet - already has the ethernet header prepended. This function should + already has the ethernet header prepended. This function should fill in the source MAC because it will try to locate a SNP each time it is called to avoid the problem if SNP is unloaded. - This code snip is copied from MNP. + This code snip is copied from MNP. - @param[in] Packet - The Syslog packet - @param[in] Length - The length of the packet + @param[in] Packet The Syslog packet + @param[in] Length The length of the packet + + @retval EFI_DEVICE_ERROR Failed to locate a usable SNP protocol + @retval EFI_TIMEOUT Timeout happened to send the packet. + @retval EFI_SUCCESS Packet is sent. - @retval EFI_DEVICE_ERROR - Failed to locate a usable SNP protocol - @retval EFI_TIMEOUT - Timeout happened to send the packet. - @retval EFI_SUCCESS - Packet is sent. - **/ EFI_STATUS SyslogSendPacket ( @@ -241,7 +239,7 @@ SyslogSendPacket ( Status = EFI_DEVICE_ERROR; break; } - + // // If Status is EFI_SUCCESS, the packet is put in the transmit queue. // if Status is EFI_NOT_READY, the transmit engine of the network @@ -265,7 +263,7 @@ SyslogSendPacket ( if ((Status == EFI_SUCCESS) || (Status == EFI_TIMEOUT)) { break; } - + // // Status is EFI_NOT_READY. Restart the timer event and // call Snp->Transmit again. @@ -281,20 +279,18 @@ ON_EXIT: } /** - Build a syslog packet, including the Ethernet/Ip/Udp headers - and user's message. - - @param[in] Level - Syslog servity level - @param[in] Module - The module that generates the log - @param[in] File - The file that contains the current log - @param[in] Line - The line of code in the File that contains the current log - @param[in] Message - The log message - @param[in] BufLen - The lenght of the Buf - @param[out] Buf - The buffer to put the packet data + Build a syslog packet, including the Ethernet/Ip/Udp headers + and user's message. -Returns: + @param[in] Level Syslog servity level + @param[in] Module The module that generates the log + @param[in] File The file that contains the current log + @param[in] Line The line of code in the File that contains the current log + @param[in] Message The log message + @param[in] BufLen The lenght of the Buf + @param[out] Buf The buffer to put the packet data - The length of the syslog packet built. + @return The length of the syslog packet built. **/ UINT32 @@ -305,7 +301,7 @@ SyslogBuildPacket ( IN UINT32 Line, IN UINT8 *Message, IN UINT32 BufLen, - OUT CHAR8 *Buf + OUT CHAR8 *Buf ) { ETHER_HEAD *Ether; @@ -316,7 +312,7 @@ SyslogBuildPacket ( UINT32 Len; // - // Fill in the Ethernet header. Leave alone the source MAC. + // Fill in the Ethernet header. Leave alone the source MAC. // SyslogSendPacket will fill in the address for us. // Ether = (ETHER_HEAD *) Buf; @@ -374,7 +370,7 @@ SyslogBuildPacket ( BufLen, "<%d> %a %d %d:%d:%d ", Pri, - mMonthName [Time.Month-1], + mMonthName [Time.Month-1], Time.Day, Time.Hour, Time.Minute, @@ -383,9 +379,9 @@ SyslogBuildPacket ( Len--; Len += (UINT32) AsciiSPrint ( - Buf + Len, - BufLen - Len, - "Tiano %a: %a (Line: %d File: %a)", + Buf + Len, + BufLen - Len, + "Tiano %a: %a (Line: %d File: %a)", Module, Message, Line, @@ -407,23 +403,23 @@ SyslogBuildPacket ( } /** - Allocate a buffer, then format the message to it. This is a - help function for the NET_DEBUG_XXX macros. The PrintArg of - these macros treats the variable length print parameters as a + Allocate a buffer, then format the message to it. This is a + help function for the NET_DEBUG_XXX macros. The PrintArg of + these macros treats the variable length print parameters as a single parameter, and pass it to the NetDebugASPrint. For example, NET_DEBUG_TRACE ("Tcp", ("State transit to %a\n", Name)) - if extracted to: - + if extracted to: + NetDebugOutput ( - NETDEBUG_LEVEL_TRACE, - "Tcp", + NETDEBUG_LEVEL_TRACE, + "Tcp", __FILE__, __LINE__, - NetDebugASPrint ("State transit to %a\n", Name) - ) - + NetDebugASPrint ("State transit to %a\n", Name) + ) + @param Format The ASCII format string. - @param ... The variable length parameter whose format is determined + @param ... The variable length parameter whose format is determined by the Format string. @return The buffer containing the formatted message, @@ -466,12 +462,12 @@ NetDebugASPrint ( @retval EFI_INVALID_PARAMETER Any input parameter is invalid. @retval EFI_OUT_OF_RESOURCES Failed to allocate memory for the packet - @retval EFI_SUCCESS The log is discard because that it is more verbose + @retval EFI_SUCCESS The log is discard because that it is more verbose than the mNetDebugLevelMax. Or, it has been sent out. -**/ +**/ EFI_STATUS NetDebugOutput ( - IN UINT32 Level, + IN UINT32 Level, IN UINT8 *Module, IN UINT8 *File, IN UINT32 Line, @@ -493,7 +489,7 @@ NetDebugOutput ( Status = EFI_SUCCESS; goto ON_EXIT; } - + // // Allocate a maxium of 1024 bytes, the caller should ensure // that the message plus the ethernet/ip/udp header is shorter @@ -505,7 +501,7 @@ NetDebugOutput ( Status = EFI_OUT_OF_RESOURCES; goto ON_EXIT; } - + // // Build the message: Ethernet header + IP header + Udp Header + user data // @@ -528,8 +524,8 @@ ON_EXIT: return Status; } /** - Return the length of the mask. - + Return the length of the mask. + Return the length of the mask, the correct value is from 0 to 32. If the mask is invalid, return the invalid length 33, which is IP4_MASK_NUM. NetMask is in the host byte order. @@ -537,7 +533,7 @@ ON_EXIT: @param[in] NetMask The netmask to get the length from. @return The length of the netmask, IP4_MASK_NUM if the mask is invalid. - + **/ INTN EFIAPI @@ -561,19 +557,19 @@ NetGetMaskLength ( /** Return the class of the IP address, such as class A, B, C. Addr is in host byte order. - + The address of class A starts with 0. If the address belong to class A, return IP4_ADDR_CLASSA. - The address of class B starts with 10. + The address of class B starts with 10. If the address belong to class B, return IP4_ADDR_CLASSB. - The address of class C starts with 110. + The address of class C starts with 110. If the address belong to class C, return IP4_ADDR_CLASSC. - The address of class D starts with 1110. + The address of class D starts with 1110. If the address belong to class D, return IP4_ADDR_CLASSD. The address of class E starts with 1111. If the address belong to class E, return IP4_ADDR_CLASSE. - + @param[in] Addr The address to get the class from. @return IP address class, such as IP4_ADDR_CLASSA. @@ -611,10 +607,10 @@ NetGetIpClass ( /** Check whether the IP is a valid unicast address according to the netmask. If NetMask is zero, use the IP address's class to get the default mask. - + If Ip is 0, IP is not a valid unicast address. Class D address is used for multicasting and class E address is reserved for future. If Ip - belongs to class D or class E, IP is not a valid unicast address. + belongs to class D or class E, IP is not a valid unicast address. If all bits of the host address of IP are 0 or 1, IP is also not a valid unicast address. @param[in] Ip The IP to check against. @@ -656,21 +652,21 @@ NetIp4IsUnicast ( a valid unicast address. If the address is unspecified ::, it is not a valid unicast address to be assigned to any node. If the address is loopback address ::1, it is also not a valid unicast address to be assigned to any physical - interface. + interface. @param[in] Ip6 The IPv6 address to check against. @return TRUE if Ip6 is a valid unicast address on the network, otherwise FALSE. -**/ +**/ BOOLEAN NetIp6IsValidUnicast ( IN EFI_IPv6_ADDRESS *Ip6 - ) + ) { UINT8 Byte; UINT8 Index; - + if (Ip6->Addr[0] == 0xFF) { return FALSE; } @@ -687,7 +683,7 @@ NetIp6IsValidUnicast ( return FALSE; } - return TRUE; + return TRUE; } /** @@ -697,7 +693,7 @@ NetIp6IsValidUnicast ( @retval TRUE - Yes, unspecified @retval FALSE - No - + **/ BOOLEAN NetIp6IsUnspecifiedAddr ( @@ -722,7 +718,7 @@ NetIp6IsUnspecifiedAddr ( @retval TRUE - Yes, link-local address @retval FALSE - No - + **/ BOOLEAN NetIp6IsLinkLocalAddr ( @@ -730,13 +726,13 @@ NetIp6IsLinkLocalAddr ( ) { UINT8 Index; - + ASSERT (Ip6 != NULL); if (Ip6->Addr[0] != 0xFE) { return FALSE; } - + if (Ip6->Addr[1] != 0x80) { return FALSE; } @@ -759,7 +755,7 @@ NetIp6IsLinkLocalAddr ( @retval TRUE - Yes, connected. @retval FALSE - No. - + **/ BOOLEAN NetIp6IsNetEqual ( @@ -773,14 +769,14 @@ NetIp6IsNetEqual ( UINT8 Mask; ASSERT (Ip1 != NULL && Ip2 != NULL); - + if (PrefixLength == 0) { return TRUE; } Byte = (UINT8) (PrefixLength / 8); Bit = (UINT8) (PrefixLength % 8); - + if (CompareMem (Ip1, Ip2, Byte) != 0) { return FALSE; } @@ -790,9 +786,9 @@ NetIp6IsNetEqual ( if ((Ip1->Addr[Byte] & Mask) != (Ip2->Addr[Byte] & Mask)) { return FALSE; - } + } } - + return TRUE; } @@ -831,11 +827,11 @@ Ip6Swap128 ( /** Initialize a random seed using current time. - - Get current time first. Then initialize a random seed based on some basic - mathematics operation on the hour, day, minute, second, nanosecond and year + + Get current time first. Then initialize a random seed based on some basic + mathematics operation on the hour, day, minute, second, nanosecond and year of the current time. - + @return The random seed initialized with current time. **/ @@ -859,8 +855,8 @@ NetRandomInitSeed ( /** Extract a UINT32 from a byte stream. - - Copy a UINT32 from a byte stream, then converts it from Network + + Copy a UINT32 from a byte stream, then converts it from Network byte order to host byte order. Use this function to avoid alignment error. @param[in] Buf The buffer to extract the UINT32. @@ -882,14 +878,14 @@ NetGetUint32 ( /** - Put a UINT32 to the byte stream in network byte order. - - Converts a UINT32 from host byte order to network byte order. Then copy it to the + Put a UINT32 to the byte stream in network byte order. + + Converts a UINT32 from host byte order to network byte order. Then copy it to the byte stream. @param[in, out] Buf The buffer to put the UINT32. @param[in] Data The data to put. - + **/ VOID EFIAPI @@ -905,16 +901,16 @@ NetPutUint32 ( /** Remove the first node entry on the list, and return the removed node entry. - + Removes the first node Entry from a doubly linked list. It is up to the caller of this function to release the memory used by the first node if that is required. On - exit, the removed node is returned. + exit, the removed node is returned. If Head is NULL, then ASSERT(). If Head was not initialized, then ASSERT(). If PcdMaximumLinkedListLength is not zero, and the number of nodes in the linked list including the head node is greater than or equal to PcdMaximumLinkedListLength, - then ASSERT(). + then ASSERT(). @param[in, out] Head The list header. @@ -953,14 +949,14 @@ NetListRemoveHead ( Removes the last node entry from a doubly linked list. It is up to the caller of this function to release the memory used by the first node if that is required. On - exit, the removed node is returned. + exit, the removed node is returned. If Head is NULL, then ASSERT(). If Head was not initialized, then ASSERT(). If PcdMaximumLinkedListLength is not zero, and the number of nodes in the linked list including the head node is greater than or equal to PcdMaximumLinkedListLength, - then ASSERT(). - + then ASSERT(). + @param[in, out] Head The list head. @return The last node entry that is removed from the list, NULL if the list is empty. @@ -995,10 +991,10 @@ NetListRemoveTail ( /** Insert a new node entry after a designated node entry of a doubly linked list. - + Inserts a new node entry donated by NewEntry after the node entry donated by PrevEntry of the doubly linked list. - + @param[in, out] PrevEntry The previous entry to insert after. @param[in, out] NewEntry The new entry to insert. @@ -1019,10 +1015,10 @@ NetListInsertAfter ( /** Insert a new node entry before a designated node entry of a doubly linked list. - + Inserts a new node entry donated by NewEntry after the node entry donated by PostEntry of the doubly linked list. - + @param[in, out] PostEntry The entry to insert before. @param[in, out] NewEntry The new entry to insert. @@ -1043,15 +1039,15 @@ NetListInsertBefore ( /** Initialize the netmap. Netmap is a reposity to keep the pairs. - - Initialize the forward and backward links of two head nodes donated by Map->Used + + Initialize the forward and backward links of two head nodes donated by Map->Used and Map->Recycled of two doubly linked lists. Initializes the count of the pairs in the netmap to zero. - + If Map is NULL, then ASSERT(). If the address of Map->Used is NULL, then ASSERT(). If the address of Map->Recycled is NULl, then ASSERT(). - + @param[in, out] Map The netmap to initialize. **/ @@ -1071,13 +1067,13 @@ NetMapInit ( /** To clean up the netmap, that is, release allocated memories. - + Removes all nodes of the Used doubly linked list and free memory of all related netmap items. Removes all nodes of the Recycled doubly linked list and free memory of all related netmap items. The number of the pairs in the netmap is set to be zero. - + If Map is NULL, then ASSERT(). - + @param[in, out] Map The netmap to clean up. **/ @@ -1117,12 +1113,12 @@ NetMapClean ( /** Test whether the netmap is empty and return true if it is. - + If the number of the pairs in the netmap is zero, return TRUE. - + If Map is NULL, then ASSERT(). - - + + @param[in] Map The net map to test. @return TRUE if the netmap is empty, otherwise FALSE. @@ -1158,15 +1154,15 @@ NetMapGetCount ( /** - Return one allocated item. - - If the Recycled doubly linked list of the netmap is empty, it will try to allocate + Return one allocated item. + + If the Recycled doubly linked list of the netmap is empty, it will try to allocate a batch of items if there are enough resources and add corresponding nodes to the begining of the Recycled doubly linked list of the netmap. Otherwise, it will directly remove the fist node entry of the Recycled doubly linked list and return the corresponding item. - + If Map is NULL, then ASSERT(). - + @param[in, out] Map The netmap to allocate item for. @return The allocated item. If NULL, the @@ -1211,13 +1207,13 @@ NetMapAllocItem ( /** Allocate an item to save the pair to the head of the netmap. - + Allocate an item to save the pair and add corresponding node entry - to the beginning of the Used doubly linked list. The number of the + to the beginning of the Used doubly linked list. The number of the pairs in the netmap increase by 1. If Map is NULL, then ASSERT(). - + @param[in, out] Map The netmap to insert into. @param[in] Key The user's key. @param[in] Value The user's value for the key. @@ -1257,11 +1253,11 @@ NetMapInsertHead ( Allocate an item to save the pair to the tail of the netmap. Allocate an item to save the pair and add corresponding node entry - to the tail of the Used doubly linked list. The number of the + to the tail of the Used doubly linked list. The number of the pairs in the netmap increase by 1. If Map is NULL, then ASSERT(). - + @param[in, out] Map The netmap to insert into. @param[in] Key The user's key. @param[in] Value The user's value for the key. @@ -1327,12 +1323,12 @@ NetItemInMap ( /** Find the key in the netmap and returns the point to the item contains the Key. - - Iterate the Used doubly linked list of the netmap to get every item. Compare the key of every + + Iterate the Used doubly linked list of the netmap to get every item. Compare the key of every item with the key to search. It returns the point to the item contains the Key if found. If Map is NULL, then ASSERT(). - + @param[in] Map The netmap to search within. @param[in] Key The key to search. @@ -1365,16 +1361,16 @@ NetMapFindKey ( /** Remove the node entry of the item from the netmap and return the key of the removed item. - - Remove the node entry of the item from the Used doubly linked list of the netmap. - The number of the pairs in the netmap decrease by 1. Then add the node + + Remove the node entry of the item from the Used doubly linked list of the netmap. + The number of the pairs in the netmap decrease by 1. Then add the node entry of the item to the Recycled doubly linked list of the netmap. If Value is not NULL, Value will point to the value of the item. It returns the key of the removed item. - + If Map is NULL, then ASSERT(). If Item is NULL, then ASSERT(). if item in not in the netmap, then ASSERT(). - + @param[in, out] Map The netmap to remove the item from. @param[in, out] Item The item to remove. @param[out] Value The variable to receive the value if not NULL. @@ -1408,14 +1404,14 @@ NetMapRemoveItem ( /** Remove the first node entry on the netmap and return the key of the removed item. - Remove the first node entry from the Used doubly linked list of the netmap. - The number of the pairs in the netmap decrease by 1. Then add the node + Remove the first node entry from the Used doubly linked list of the netmap. + The number of the pairs in the netmap decrease by 1. Then add the node entry to the Recycled doubly linked list of the netmap. If parameter Value is not NULL, parameter Value will point to the value of the item. It returns the key of the removed item. - + If Map is NULL, then ASSERT(). If the Used doubly linked list is empty, then ASSERT(). - + @param[in, out] Map The netmap to remove the head from. @param[out] Value The variable to receive the value if not NULL. @@ -1453,14 +1449,14 @@ NetMapRemoveHead ( /** Remove the last node entry on the netmap and return the key of the removed item. - Remove the last node entry from the Used doubly linked list of the netmap. - The number of the pairs in the netmap decrease by 1. Then add the node + Remove the last node entry from the Used doubly linked list of the netmap. + The number of the pairs in the netmap decrease by 1. Then add the node entry to the Recycled doubly linked list of the netmap. If parameter Value is not NULL, parameter Value will point to the value of the item. It returns the key of the removed item. - + If Map is NULL, then ASSERT(). If the Used doubly linked list is empty, then ASSERT(). - + @param[in, out] Map The netmap to remove the tail from. @param[out] Value The variable to receive the value if not NULL. @@ -1497,14 +1493,14 @@ NetMapRemoveTail ( /** Iterate through the netmap and call CallBack for each item. - + It will contiue the traverse if CallBack returns EFI_SUCCESS, otherwise, break - from the loop. It returns the CallBack's last return value. This function is + from the loop. It returns the CallBack's last return value. This function is delete safe for the current item. If Map is NULL, then ASSERT(). If CallBack is NULL, then ASSERT(). - + @param[in] Map The Map to iterate through. @param[in] CallBack The callback function to call for each item. @param[in] Arg The opaque parameter to the callback. @@ -1555,7 +1551,7 @@ NetMapIterate ( Disconnect the driver specified by ImageHandle from all the devices in the handle database. Uninstall all the protocols installed in the driver entry point. - + @param[in] ImageHandle The drivers' driver image. @retval EFI_SUCCESS The image is unloaded. @@ -1669,12 +1665,12 @@ NetLibDefaultUnload ( /** Create a child of the service that is identified by ServiceBindingGuid. - + Get the ServiceBinding Protocol first, then use it to create a child. If ServiceBindingGuid is NULL, then ASSERT(). If ChildHandle is NULL, then ASSERT(). - + @param[in] Controller The controller which has the service installed. @param[in] Image The image handle used to open service. @param[in] ServiceBindingGuid The service's Guid. @@ -1725,11 +1721,11 @@ NetLibCreateServiceChild ( /** Destory a child of the service that is identified by ServiceBindingGuid. - + Get the ServiceBinding Protocol first, then use it to destroy a child. - + If ServiceBindingGuid is NULL, then ASSERT(). - + @param[in] Controller The controller which has the service installed. @param[in] Image The image handle used to open service. @param[in] ServiceBindingGuid The service's Guid. @@ -1793,7 +1789,7 @@ NetLibDestroyServiceChild ( get the simple network protocol. @param[out] MacString The pointer to store the address of the string representation of the mac address. - + @retval EFI_SUCCESS Convert the mac address a unicode string successfully. @retval EFI_OUT_OF_RESOURCES There are not enough memory resource. @retval Others Failed to open the simple network protocol. @@ -1811,6 +1807,7 @@ NetLibGetMacString ( EFI_SIMPLE_NETWORK_PROTOCOL *Snp; EFI_SIMPLE_NETWORK_MODE *Mode; CHAR16 *MacAddress; + UINT8 *HwAddress; UINTN Index; *MacString = NULL; @@ -1840,18 +1837,18 @@ NetLibGetMacString ( if (MacAddress == NULL) { return EFI_OUT_OF_RESOURCES; } + *MacString = MacAddress; // // Convert the mac address into a unicode string. // + HwAddress = Mode->CurrentAddress.Addr; for (Index = 0; Index < Mode->HwAddressSize; Index++) { - MacAddress[Index * 2] = (CHAR16) mNetLibHexStr[(Mode->CurrentAddress.Addr[Index] >> 4) & 0x0F]; - MacAddress[Index * 2 + 1] = (CHAR16) mNetLibHexStr[Mode->CurrentAddress.Addr[Index] & 0x0F]; + MacAddress += UnicodeValueToString (MacAddress, PREFIX_ZERO | RADIX_HEX, *(HwAddress++), 2); } MacAddress[Mode->HwAddressSize * 2] = L'\0'; - *MacString = MacAddress; return EFI_SUCCESS; } @@ -1860,11 +1857,11 @@ NetLibGetMacString ( Check the default address used by the IPv4 driver is static or dynamic (acquired from DHCP). - If the controller handle does not have the NIC Ip4 Config Protocol installed, the + If the controller handle does not have the NIC Ip4 Config Protocol installed, the default address is static. If the EFI variable to save the configuration is not found, - the default address is static. Otherwise, get the result from the EFI variable which + the default address is static. Otherwise, get the result from the EFI variable which saving the configuration. - + @param[in] Controller The controller handle which has the NIC Ip4 Config Protocol relative with the default address to judge. @@ -1911,7 +1908,7 @@ NetLibDefaultAddressIsStatic ( if (ConfigHdr == NULL) { return TRUE; } - + Len = StrLen (ConfigHdr); ConfigResp = AllocateZeroPool ((Len + NIC_ITEM_CONFIG_SIZE * 2 + 100) * sizeof (CHAR16)); if (ConfigResp == NULL) { @@ -1921,10 +1918,10 @@ NetLibDefaultAddressIsStatic ( String = ConfigResp + Len; UnicodeSPrint ( - String, - (8 + 4 + 7 + 4 + 1) * sizeof (CHAR16), - L"&OFFSET=%04X&WIDTH=%04X", - OFFSET_OF (NIC_IP4_CONFIG_INFO, Source), + String, + (8 + 4 + 7 + 4 + 1) * sizeof (CHAR16), + L"&OFFSET=%04X&WIDTH=%04X", + OFFSET_OF (NIC_IP4_CONFIG_INFO, Source), sizeof (UINT32) ); @@ -1957,7 +1954,7 @@ NetLibDefaultAddressIsStatic ( } IsStatic = (BOOLEAN) (ConfigInfo->Source == IP4_CONFIG_SOURCE_STATIC); - + ON_EXIT: if (AccessResults != NULL) { @@ -1978,7 +1975,7 @@ ON_EXIT: /** Create an IPv4 device path node. - + The header type of IPv4 device path node is MESSAGING_DEVICE_PATH. The header subtype of IPv4 device path node is MSG_IPv4_DP. The length of the IPv4 device path node in bytes is 19. @@ -2028,7 +2025,7 @@ NetLibCreateIPv4DPathNode ( /** Create an IPv6 device path node. - + The header type of IPv6 device path node is MESSAGING_DEVICE_PATH. The header subtype of IPv6 device path node is MSG_IPv6_DP. Get other info from parameters to make up the whole IPv6 device path node. @@ -2070,7 +2067,7 @@ NetLibCreateIPv6DPathNode ( /** Find the UNDI/SNP handle from controller and protocol GUID. - + For example, IP will open a MNP child to transmit/receive packets, when MNP is stopped, IP should also be stopped. IP needs to find its own private data which is related the IP's diff --git a/MdeModulePkg/Library/DxeNetLib/DxeNetLib.inf b/MdeModulePkg/Library/DxeNetLib/DxeNetLib.inf index 05d68d70e0..00ac82157f 100644 --- a/MdeModulePkg/Library/DxeNetLib/DxeNetLib.inf +++ b/MdeModulePkg/Library/DxeNetLib/DxeNetLib.inf @@ -54,6 +54,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. [Protocols] gEfiSimpleNetworkProtocolGuid # PROTOCOL ALWAYS_CONSUMED + gEfiManagedNetworkProtocolGuid # PROTOCOL ALWAYS_CONSUMED + gEfiManagedNetworkServiceBindingProtocolGuid # PROTOCOL ALWAYS_CONSUMED gEfiComponentNameProtocolGuid # PROTOCOL ALWAYS_CONSUMED gEfiComponentName2ProtocolGuid # PROTOCOL ALWAYS_CONSUMED gEfiHiiConfigRoutingProtocolGuid # PROTOCOL ALWAYS_CONSUMED diff --git a/MdeModulePkg/Library/DxeNetLib/NetBuffer.c b/MdeModulePkg/Library/DxeNetLib/NetBuffer.c index 42e308a5a3..eadffbb45d 100644 --- a/MdeModulePkg/Library/DxeNetLib/NetBuffer.c +++ b/MdeModulePkg/Library/DxeNetLib/NetBuffer.c @@ -1,6 +1,6 @@ /** @file Network library functions providing net buffer operation support. - + Copyright (c) 2005 - 2009, 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 @@ -22,16 +22,16 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. /** - Allocate and build up the sketch for a NET_BUF. - - The net buffer allocated has the BlockOpNum's NET_BLOCK_OP, and its associated + Allocate and build up the sketch for a NET_BUF. + + The net buffer allocated has the BlockOpNum's NET_BLOCK_OP, and its associated NET_VECTOR has the BlockNum's NET_BLOCK. But all the NET_BLOCK_OP and NET_BLOCK remain un-initialized. @param[in] BlockNum The number of NET_BLOCK in the vector of net buffer @param[in] BlockOpNum The number of NET_BLOCK_OP in the net buffer - @return Pointer to the allocated NET_BUF, or NULL if the + @return Pointer to the allocated NET_BUF, or NULL if the allocation failed due to resource limit. **/ @@ -88,7 +88,7 @@ FreeNbuf: @param[in] Len The length of the block. - @return Pointer to the allocated NET_BUF, or NULL if the + @return Pointer to the allocated NET_BUF, or NULL if the allocation failed due to resource limit. **/ @@ -137,11 +137,11 @@ FreeNBuf: } /** - Free the net vector. - - Decrease the reference count of the net vector by one. The real resource free - operation isn't performed until the reference count of the net vector is - decreased to 0. + Free the net vector. + + Decrease the reference count of the net vector by one. The real resource free + operation isn't performed until the reference count of the net vector is + decreased to 0. @param[in] Vector Pointer to the NET_VECTOR to be freed. @@ -190,13 +190,13 @@ NetbufFreeVector ( /** Free the net buffer and its associated NET_VECTOR. - + Decrease the reference count of the net buffer by one. Free the associated net - vector and itself if the reference count of the net buffer is decreased to 0. - The net vector free operation just decrease the reference count of the net + vector and itself if the reference count of the net buffer is decreased to 0. + The net vector free operation just decrease the reference count of the net vector by one and do the real resource free operation when the reference count - of the net vector is 0. - + of the net vector is 0. + @param[in] Nbuf Pointer to the NET_BUF to be freed. **/ @@ -224,10 +224,10 @@ NetbufFree ( /** - Create a copy of the net buffer that shares the associated net vector. - - The reference count of the newly created net buffer is set to 1. The reference - count of the associated net vector is increased by one. + Create a copy of the net buffer that shares the associated net vector. + + The reference count of the newly created net buffer is set to 1. The reference + count of the associated net vector is increased by one. @param[in] Nbuf Pointer to the net buffer to be cloned. @@ -274,12 +274,12 @@ NetbufClone ( /** Create a duplicated copy of the net buffer with data copied and HeadSpace bytes of head space reserved. - + The duplicated net buffer will allocate its own memory to hold the data of the source net buffer. - + @param[in] Nbuf Pointer to the net buffer to be duplicated from. - @param[in, out] Duplicate Pointer to the net buffer to duplicate to, if + @param[in, out] Duplicate Pointer to the net buffer to duplicate to, if NULL a new net buffer is allocated. @param[in] HeadSpace Length of the head space to reserve. @@ -352,16 +352,16 @@ NetbufFreeList ( /** - Get the index of NET_BLOCK_OP that contains the byte at Offset in the net - buffer. - - This can be used to, for example, retrieve the IP header in the packet. It - also can be used to get the fragment that contains the byte which is used - mainly by the library implementation itself. + Get the index of NET_BLOCK_OP that contains the byte at Offset in the net + buffer. + + This can be used to, for example, retrieve the IP header in the packet. It + also can be used to get the fragment that contains the byte which is used + mainly by the library implementation itself. @param[in] Nbuf Pointer to the net buffer. @param[in] Offset The offset of the byte. - @param[out] Index Index of the NET_BLOCK_OP that contains the byte at + @param[out] Index Index of the NET_BLOCK_OP that contains the byte at Offset. @return Pointer to the Offset'th byte of data in the net buffer, or NULL @@ -409,12 +409,12 @@ NetbufGetByte ( /** - Set the NET_BLOCK and corresponding NET_BLOCK_OP in the net buffer and + Set the NET_BLOCK and corresponding NET_BLOCK_OP in the net buffer and corresponding net vector according to the bulk pointer and bulk length. - - All the pointers in the Index'th NET_BLOCK and NET_BLOCK_OP are set to the - bulk's head and tail respectively. So, this function alone can't be used by - NetbufAlloc. + + All the pointers in the Index'th NET_BLOCK and NET_BLOCK_OP are set to the + bulk's head and tail respectively. So, this function alone can't be used by + NetbufAlloc. @param[in, out] Nbuf Pointer to the net buffer. @param[in] Bulk Pointer to the data. @@ -453,15 +453,15 @@ NetbufSetBlock ( /** Set the NET_BLOCK_OP in the net buffer. The corresponding NET_BLOCK - structure is left untouched. - - Some times, there is no 1:1 relationship between NET_BLOCK and NET_BLOCK_OP. - For example, that in NetbufGetFragment. + structure is left untouched. + + Some times, there is no 1:1 relationship between NET_BLOCK and NET_BLOCK_OP. + For example, that in NetbufGetFragment. @param[in, out] Nbuf Pointer to the net buffer. @param[in] Bulk Pointer to the data. @param[in] Len Length of the bulk data. - @param[in] Index The data block index in the net buffer the bulk + @param[in] Index The data block index in the net buffer the bulk data should belong to. **/ @@ -488,10 +488,10 @@ NetbufSetBlockOp ( /** - Helper function for NetbufGetFragment. NetbufGetFragment may allocate the - first block to reserve HeadSpace bytes header space. So it needs to create a - new net vector for the first block and can avoid copy for the remaining data - by sharing the old net vector. + Helper function for NetbufGetFragment. NetbufGetFragment may allocate the + first block to reserve HeadSpace bytes header space. So it needs to create a + new net vector for the first block and can avoid copy for the remaining data + by sharing the old net vector. @param[in] Arg Point to the old NET_VECTOR. @@ -510,19 +510,19 @@ NetbufGetFragmentFree ( /** - Create a NET_BUF structure which contains Len byte data of Nbuf starting from - Offset. - - A new NET_BUF structure will be created but the associated data in NET_VECTOR - is shared. This function exists to do IP packet fragmentation. + Create a NET_BUF structure which contains Len byte data of Nbuf starting from + Offset. + + A new NET_BUF structure will be created but the associated data in NET_VECTOR + is shared. This function exists to do IP packet fragmentation. @param[in] Nbuf Pointer to the net buffer to be extracted. - @param[in] Offset Starting point of the data to be included in the new + @param[in] Offset Starting point of the data to be included in the new net buffer. - @param[in] Len Bytes of data to be included in the new net buffer. - @param[in] HeadSpace Bytes of head space to reserve for protocol header. + @param[in] Len Bytes of data to be included in the new net buffer. + @param[in] HeadSpace Bytes of head space to reserve for protocol header. - @return Pointer to the cloned net buffer, or NULL if the + @return Pointer to the cloned net buffer, or NULL if the allocation failed due to resource limit. **/ @@ -694,8 +694,8 @@ FreeChild: /** - Build a NET_BUF from external blocks. - + Build a NET_BUF from external blocks. + A new NET_BUF structure will be created from external blocks. Additional block of memory will be allocated to hold reserved HeadSpace bytes of header room and existing HeadLen bytes of header but the external blocks are shared by the @@ -710,7 +710,7 @@ FreeChild: @param[in] Arg The argument passed to ExtFree when ExtFree is called. - @return Pointer to the net buffer built from the data blocks, + @return Pointer to the net buffer built from the data blocks, or NULL if the allocation failed due to resource limit. @@ -878,13 +878,13 @@ FreeFirstBlock: /** Build a fragment table to contain the fragments in the net buffer. This is the - opposite operation of the NetbufFromExt. - + opposite operation of the NetbufFromExt. + @param[in] Nbuf Point to the net buffer. @param[in, out] ExtFragment Pointer to the data block. @param[in, out] ExtNum The number of the data blocks. - @retval EFI_BUFFER_TOO_SMALL The number of non-empty block is bigger than + @retval EFI_BUFFER_TOO_SMALL The number of non-empty block is bigger than ExtNum. @retval EFI_SUCCESS Fragment table is built successfully. @@ -923,10 +923,10 @@ NetbufBuildExt ( /** Build a net buffer from a list of net buffers. - - All the fragments will be collected from the list of NEW_BUF and then a new - net buffer will be created through NetbufFromExt. - + + All the fragments will be collected from the list of NEW_BUF and then a new + net buffer will be created through NetbufFromExt. + @param[in] BufList A List of the net buffer. @param[in] HeadSpace The head space to be reserved. @param[in] HeaderLen The length of the protocol header, This function @@ -934,7 +934,7 @@ NetbufBuildExt ( @param[in] ExtFree Pointer to the caller provided free function. @param[in] Arg The argument passed to ExtFree when ExtFree is called. - @return Pointer to the net buffer built from the list of net + @return Pointer to the net buffer built from the list of net buffers. **/ @@ -1000,10 +1000,10 @@ NetbufFromBufList ( /** Reserve some space in the header room of the net buffer. - Upon allocation, all the space are in the tail room of the buffer. Call this + Upon allocation, all the space are in the tail room of the buffer. Call this function to move some space to the header room. This function is quite limited - in that it can only reserve space from the first block of an empty NET_BUF not - built from the external. But it should be enough for the network stack. + in that it can only reserve space from the first block of an empty NET_BUF not + built from the external. But it should be enough for the network stack. @param[in, out] Nbuf Pointer to the net buffer. @param[in] Len The length of buffer to be reserved from the header. @@ -1030,14 +1030,14 @@ NetbufReserve ( /** - Allocate Len bytes of space from the header or tail of the buffer. + Allocate Len bytes of space from the header or tail of the buffer. @param[in, out] Nbuf Pointer to the net buffer. @param[in] Len The length of the buffer to be allocated. - @param[in] FromHead The flag to indicate whether reserve the data + @param[in] FromHead The flag to indicate whether reserve the data from head (TRUE) or tail (FALSE). - @return Pointer to the first byte of the allocated buffer, + @return Pointer to the first byte of the allocated buffer, or NULL if there is no sufficient space. **/ @@ -1126,7 +1126,7 @@ NetbufAllocSpace ( @param[in, out] BlockOp Pointer to the NET_BLOCK. @param[in] Len The length of the data to be trimmed. - @param[in] FromHead The flag to indicate whether trim data from head + @param[in] FromHead The flag to indicate whether trim data from head (TRUE) or tail (FALSE). **/ @@ -1150,14 +1150,14 @@ NetblockTrim ( /** - Trim Len bytes from the header or tail of the net buffer. + Trim Len bytes from the header or tail of the net buffer. @param[in, out] Nbuf Pointer to the net buffer. @param[in] Len The length of the data to be trimmed. - @param[in] FromHead The flag to indicate whether trim data from head + @param[in] FromHead The flag to indicate whether trim data from head (TRUE) or tail (FALSE). - @return Length of the actually trimmed data, which is possible to be less + @return Length of the actually trimmed data, which is possible to be less than Len because the TotalSize of Nbuf is less than Len. **/ @@ -1216,11 +1216,11 @@ NetbufTrim ( /** - Copy Len bytes of data from the specific offset of the net buffer to the + Copy Len bytes of data from the specific offset of the net buffer to the destination memory. - + The Len bytes of data may cross the several fragments of the net buffer. - + @param[in] Nbuf Pointer to the net buffer. @param[in] Offset The sequence number of the first byte to copy. @param[in] Len Length of the data to copy. @@ -1368,10 +1368,10 @@ NetbufQueAlloc ( /** - Free a net buffer queue. - + Free a net buffer queue. + Decrease the reference count of the net buffer queue by one. The real resource - free operation isn't performed until the reference count of the net buffer + free operation isn't performed until the reference count of the net buffer queue is decreased to 0. @param[in] NbufQue Pointer to the net buffer queue to be freed. @@ -1424,7 +1424,7 @@ NetbufQueAppend ( @param[in, out] NbufQue Pointer to the net buffer queue. - @return Pointer to the net buffer removed from the specific queue, + @return Pointer to the net buffer removed from the specific queue, or NULL if there is no net buffer in the specific queue. **/ @@ -1455,16 +1455,16 @@ NetbufQueRemove ( /** Copy Len bytes of data from the net buffer queue at the specific offset to the destination memory. - + The copying operation is the same as NetbufCopy but applies to the net buffer queue instead of the net buffer. - + @param[in] NbufQue Pointer to the net buffer queue. @param[in] Offset The sequence number of the first byte to copy. @param[in] Len Length of the data to copy. @param[out] Dest The destination of the data to copy to. - @return The length of the actual copied data, or 0 if the offset + @return The length of the actual copied data, or 0 if the offset specified exceeds the total size of net buffer queue. **/ @@ -1557,9 +1557,9 @@ NetbufQueCopy ( /** - Trim Len bytes of data from the queue header, release any of the net buffer + Trim Len bytes of data from the queue header, release any of the net buffer whom is trimmed wholely. - + The trimming operation is the same as NetbufTrim but applies to the net buffer queue instead of the net buffer. @@ -1756,7 +1756,7 @@ NetbufChecksum ( // The checksum starts with an odd byte, swap // the checksum before added to total checksum // - BlockSum = (UINT16) NET_SWAP_SHORT (BlockSum); + BlockSum = SwapBytes16 (BlockSum); } TotalSum = NetAddChecksum (BlockSum, TotalSum); @@ -1768,8 +1768,8 @@ NetbufChecksum ( /** - Compute the checksum for TCP/UDP pseudo header. - + Compute the checksum for TCP/UDP pseudo header. + Src and Dst are in network byte order, and Len is in host byte order. @param[in] Src The source address of the packet. @@ -1805,8 +1805,8 @@ NetPseudoHeadChecksum ( } /** - Compute the checksum for TCP6/UDP6 pseudo header. - + Compute the checksum for TCP6/UDP6 pseudo header. + Src and Dst are in network byte order, and Len is in host byte order. @param[in] Src The source address of the packet. @@ -1836,7 +1836,7 @@ NetIp6PseudoHeadChecksum ( IP6_COPY_ADDRESS (&Hdr.DstIp, Dst); Hdr.NextHeader = NextHeader; - Hdr.Len = HTONL (Len); + Hdr.Len = HTONL (Len); return NetblockChecksum ((UINT8 *) &Hdr, sizeof (Hdr)); } diff --git a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiProto.c b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiProto.c index be339d8b08..ac0d8d821f 100644 --- a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiProto.c +++ b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiProto.c @@ -1857,7 +1857,7 @@ IScsiNewScsiCmdPdu ( CopyMem (ScsiCmd->Cdb, Packet->Cdb, sizeof (ScsiCmd->Cdb)); if (Packet->CdbLength > 16) { - Header->Length = NTOHS (Packet->CdbLength - 15); + Header->Length = NTOHS ((UINT16) (Packet->CdbLength - 15)); Header->Type = ISCSI_AHS_TYPE_EXT_CDB; CopyMem (Header + 1, (UINT8 *) Packet->Cdb + 16, Packet->CdbLength - 16); diff --git a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Icmp.c b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Icmp.c index 76208e071b..05609db185 100644 --- a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Icmp.c +++ b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Icmp.c @@ -105,6 +105,8 @@ Ip4ProcessIcmpRedirect ( IP4_ROUTE_CACHE_ENTRY *CacheEntry; IP4_INTERFACE *IpIf; IP4_ADDR Gateway; + IP4_ADDR Src; + IP4_ADDR Dst; // // Find the interface whose IP address is the source of the @@ -133,11 +135,9 @@ Ip4ProcessIcmpRedirect ( continue; } - CacheEntry = Ip4FindRouteCache ( - Ip4Instance->RouteTable, - NTOHL (Icmp->IpHead.Dst), - NTOHL (Icmp->IpHead.Src) - ); + Dst = NTOHL (Icmp->IpHead.Dst); + Src = NTOHL (Icmp->IpHead.Src); + CacheEntry = Ip4FindRouteCache (Ip4Instance->RouteTable, Dst, Src); // // Only update the route cache's gateway if the source of the diff --git a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Impl.c b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Impl.c index 0b570e2594..05fd96d634 100644 --- a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Impl.c +++ b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Impl.c @@ -561,6 +561,10 @@ Ip4AutoConfigCallBackDpc ( EFI_STATUS Status; UINTN Len; UINT32 Index; + IP4_ADDR StationAddress; + IP4_ADDR SubnetMask; + IP4_ADDR SubnetAddress; + IP4_ADDR GatewayAddress; IpSb = (IP4_SERVICE *) Context; NET_CHECK_SIGNATURE (IpSb, IP4_SERVICE_SIGNATURE); @@ -646,11 +650,9 @@ Ip4AutoConfigCallBackDpc ( // Set the default interface's address, then add a directed // route for it, that is, the route whose nexthop is zero. // - Status = Ip4SetAddress ( - IpIf, - EFI_NTOHL (Data->StationAddress), - EFI_NTOHL (Data->SubnetMask) - ); + StationAddress = EFI_NTOHL (Data->StationAddress); + SubnetMask = EFI_NTOHL (Data->SubnetMask); + Status = Ip4SetAddress (IpIf, StationAddress, SubnetMask); if (EFI_ERROR (Status)) { goto ON_EXIT; @@ -658,8 +660,8 @@ Ip4AutoConfigCallBackDpc ( Ip4AddRoute ( IpSb->DefaultRouteTable, - EFI_NTOHL (Data->StationAddress), - EFI_NTOHL (Data->SubnetMask), + StationAddress, + SubnetMask, IP4_ALLZERO_ADDRESS ); @@ -669,12 +671,10 @@ Ip4AutoConfigCallBackDpc ( for (Index = 0; Index < Data->RouteTableSize; Index++) { RouteEntry = &Data->RouteTable[Index]; - Ip4AddRoute ( - IpSb->DefaultRouteTable, - EFI_NTOHL (RouteEntry->SubnetAddress), - EFI_NTOHL (RouteEntry->SubnetMask), - EFI_NTOHL (RouteEntry->GatewayAddress) - ); + SubnetAddress = EFI_NTOHL (RouteEntry->SubnetAddress); + SubnetMask = EFI_NTOHL (RouteEntry->SubnetMask); + GatewayAddress = EFI_NTOHL (RouteEntry->GatewayAddress); + Ip4AddRoute (IpSb->DefaultRouteTable, SubnetAddress, SubnetMask, GatewayAddress); } IpSb->State = IP4_SERVICE_CONFIGED; diff --git a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Output.c b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Output.c index a8a6261cfd..dcbead5993 100644 --- a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Output.c +++ b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Output.c @@ -73,7 +73,7 @@ Ip4PrependHead ( PacketHead->Ver = 4; PacketHead->HeadLen = (UINT8) (HeadLen >> 2); PacketHead->Tos = Head->Tos; - PacketHead->TotalLen = HTONS (Packet->TotalSize); + PacketHead->TotalLen = HTONS ((UINT16) Packet->TotalSize); PacketHead->Id = HTONS (Head->Id); PacketHead->Fragment = HTONS (Head->Fragment); PacketHead->Checksum = 0; diff --git a/MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Input.c b/MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Input.c index b29e6cb672..9bea6b298b 100644 --- a/MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Input.c +++ b/MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Input.c @@ -799,7 +799,7 @@ TcpInput ( Tcb = TcpCloneTcb (Parent); if (Tcb == NULL) { DEBUG ((EFI_D_ERROR, "TcpInput: discard a segment because" - "failed to clone a child for TCB%x\n", Tcb)); + " failed to clone a child for TCB%x\n", Tcb)); goto DISCARD; } diff --git a/MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Misc.c b/MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Misc.c index 8c0293dccd..0014fc993f 100644 --- a/MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Misc.c +++ b/MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Misc.c @@ -1090,18 +1090,22 @@ TcpInstallDevicePath ( TCP_CB *Tcb; IPv4_DEVICE_PATH Ip4DPathNode; EFI_STATUS Status; + TCP_PORTNO LocalPort; + TCP_PORTNO RemotePort; TcpProto = (TCP4_PROTO_DATA *) Sock->ProtoReserved; TcpService = TcpProto->TcpService; Tcb = TcpProto->TcpPcb; + LocalPort = NTOHS (Tcb->LocalEnd.Port); + RemotePort = NTOHS (Tcb->RemoteEnd.Port); NetLibCreateIPv4DPathNode ( &Ip4DPathNode, TcpService->ControllerHandle, Tcb->LocalEnd.Ip, - NTOHS (Tcb->LocalEnd.Port), + LocalPort, Tcb->RemoteEnd.Ip, - NTOHS (Tcb->RemoteEnd.Port), + RemotePort, EFI_IP_PROTO_TCP, Tcb->UseDefaultAddr ); diff --git a/MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Main.c b/MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Main.c index f6f32585a5..265057e038 100644 --- a/MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Main.c +++ b/MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Main.c @@ -586,7 +586,7 @@ Udp4Transmit ( // Udp4Header->SrcPort = HTONS (ConfigData->StationPort); Udp4Header->DstPort = HTONS (ConfigData->RemotePort); - Udp4Header->Length = HTONS (Packet->TotalSize); + Udp4Header->Length = HTONS ((UINT16) Packet->TotalSize); Udp4Header->Checksum = 0; UdpSessionData = TxData->UdpSessionData; diff --git a/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcDhcp.c b/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcDhcp.c index de21a444ce..ed7ee73e91 100644 --- a/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcDhcp.c +++ b/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcDhcp.c @@ -1182,7 +1182,7 @@ PxeBcDiscvBootService ( Xid = NET_RANDOM (NetRandomInitSeed ()); Token.Packet->Dhcp4.Header.Xid = HTONL(Xid); - Token.Packet->Dhcp4.Header.Reserved = HTONS((IsBCast) ? 0x8000 : 0); + Token.Packet->Dhcp4.Header.Reserved = HTONS((UINT16) ((IsBCast) ? 0x8000 : 0)); CopyMem (&Token.Packet->Dhcp4.Header.ClientAddr, &Private->StationIp, sizeof (EFI_IPv4_ADDRESS)); Token.RemotePort = Sport;