MdeModulePkg/DxeNetLib: Add parameter check and ASSERT handling.
* Library API should check the input parameters before use, or ASSERT to tell it has to meet some requirements. But in DxeNetLib, not all functions follows this rule. * ASSERT shouldn't be used as error handling, add some handling code for errors. * Add some ASSERT commence in function notes. Cc: Fu Siyuan <siyuan.fu@intel.com> Cc: Ye Ting <ting.ye@intel.com> Cc: Jiaxin Wu <jiaxin.wu@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Wang Fan <fan.wang@intel.com> Reviewed-by: Jiaxin Wu <jiaxin.wu@intel.com>
This commit is contained in:
		| @@ -1,7 +1,7 @@ | |||||||
| /** @file | /** @file | ||||||
|   Network library. |   Network library. | ||||||
|  |  | ||||||
| Copyright (c) 2005 - 2017, Intel Corporation. All rights reserved.<BR> | Copyright (c) 2005 - 2018, Intel Corporation. All rights reserved.<BR> | ||||||
| (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR> | (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR> | ||||||
| This program and the accompanying materials | This program and the accompanying materials | ||||||
| are licensed and made available under the terms and conditions of the BSD License | are licensed and made available under the terms and conditions of the BSD License | ||||||
| @@ -198,6 +198,7 @@ SyslogLocateSnp ( | |||||||
|   fill in the source MAC because it will try to locate a SNP each |   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. |   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. | ||||||
|  |   If Packet is NULL, then ASSERT(). | ||||||
|  |  | ||||||
|   @param[in] Packet          The Syslog packet |   @param[in] Packet          The Syslog packet | ||||||
|   @param[in] Length          The length of the packet |   @param[in] Length          The length of the packet | ||||||
| @@ -219,6 +220,8 @@ SyslogSendPacket ( | |||||||
|   EFI_EVENT                   TimeoutEvent; |   EFI_EVENT                   TimeoutEvent; | ||||||
|   UINT8                       *TxBuf; |   UINT8                       *TxBuf; | ||||||
|  |  | ||||||
|  |   ASSERT (Packet != NULL); | ||||||
|  |  | ||||||
|   Snp = SyslogLocateSnp (); |   Snp = SyslogLocateSnp (); | ||||||
|  |  | ||||||
|   if (Snp == NULL) { |   if (Snp == NULL) { | ||||||
| @@ -310,7 +313,7 @@ ON_EXIT: | |||||||
|   @param[in]  BufLen    The lenght of the Buf |   @param[in]  BufLen    The lenght of the Buf | ||||||
|   @param[out] Buf       The buffer to put the packet data |   @param[out] Buf       The buffer to put the packet data | ||||||
|  |  | ||||||
|   @return The length of the syslog packet built. |   @return The length of the syslog packet built, 0 represents no packet is built. | ||||||
|  |  | ||||||
| **/ | **/ | ||||||
| UINT32 | UINT32 | ||||||
| @@ -324,6 +327,7 @@ SyslogBuildPacket ( | |||||||
|   OUT CHAR8                 *Buf |   OUT CHAR8                 *Buf | ||||||
|   ) |   ) | ||||||
| { | { | ||||||
|  |   EFI_STATUS                Status; | ||||||
|   ETHER_HEAD                *Ether; |   ETHER_HEAD                *Ether; | ||||||
|   IP4_HEAD                  *Ip4; |   IP4_HEAD                  *Ip4; | ||||||
|   EFI_UDP_HEADER            *Udp4; |   EFI_UDP_HEADER            *Udp4; | ||||||
| @@ -379,8 +383,10 @@ SyslogBuildPacket ( | |||||||
|   // Build the syslog message body with <PRI> Timestamp  machine module Message |   // Build the syslog message body with <PRI> Timestamp  machine module Message | ||||||
|   // |   // | ||||||
|   Pri = ((NET_SYSLOG_FACILITY & 31) << 3) | (Level & 7); |   Pri = ((NET_SYSLOG_FACILITY & 31) << 3) | (Level & 7); | ||||||
|   gRT->GetTime (&Time, NULL); |   Status = gRT->GetTime (&Time, NULL); | ||||||
|   ASSERT ((Time.Month <= 12) && (Time.Month >= 1)); |   if (EFI_ERROR (Status)) { | ||||||
|  |     return 0; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   // |   // | ||||||
|   // Use %a to format the ASCII strings, %s to format UNICODE strings |   // Use %a to format the ASCII strings, %s to format UNICODE strings | ||||||
| @@ -439,6 +445,8 @@ SyslogBuildPacket ( | |||||||
|            NetDebugASPrint ("State transit to %a\n", Name) |            NetDebugASPrint ("State transit to %a\n", Name) | ||||||
|          ) |          ) | ||||||
|  |  | ||||||
|  |   If Format is NULL, then ASSERT(). | ||||||
|  |  | ||||||
|   @param Format  The ASCII format string. |   @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. |                  by the Format string. | ||||||
| @@ -457,6 +465,8 @@ NetDebugASPrint ( | |||||||
|   VA_LIST                   Marker; |   VA_LIST                   Marker; | ||||||
|   CHAR8                     *Buf; |   CHAR8                     *Buf; | ||||||
|  |  | ||||||
|  |   ASSERT (Format != NULL); | ||||||
|  |  | ||||||
|   Buf = (CHAR8 *) AllocatePool (NET_DEBUG_MSG_LEN); |   Buf = (CHAR8 *) AllocatePool (NET_DEBUG_MSG_LEN); | ||||||
|  |  | ||||||
|   if (Buf == NULL) { |   if (Buf == NULL) { | ||||||
| @@ -483,7 +493,8 @@ NetDebugASPrint ( | |||||||
|   @param Message  The user message to log. |   @param Message  The user message to log. | ||||||
|  |  | ||||||
|   @retval EFI_INVALID_PARAMETER Any input parameter is invalid. |   @retval EFI_INVALID_PARAMETER Any input parameter is invalid. | ||||||
|   @retval EFI_OUT_OF_RESOURCES  Failed to allocate memory for the packet |   @retval EFI_OUT_OF_RESOURCES  Failed to allocate memory for the packet. | ||||||
|  |   @retval EFI_DEVICE_ERROR      Device error occurs. | ||||||
|   @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. |                                 than the mNetDebugLevelMax. Or, it has been sent out. | ||||||
| **/ | **/ | ||||||
| @@ -504,7 +515,7 @@ NetDebugOutput ( | |||||||
|   // |   // | ||||||
|   // Check whether the message should be sent out |   // Check whether the message should be sent out | ||||||
|   // |   // | ||||||
|   if (Message == NULL) { |   if (Message == NULL || File == NULL || Module == NULL) { | ||||||
|     return EFI_INVALID_PARAMETER; |     return EFI_INVALID_PARAMETER; | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -537,9 +548,13 @@ NetDebugOutput ( | |||||||
|           NET_SYSLOG_PACKET_LEN, |           NET_SYSLOG_PACKET_LEN, | ||||||
|           Packet |           Packet | ||||||
|           ); |           ); | ||||||
|  |   if (Len == 0) { | ||||||
|  |     Status = EFI_DEVICE_ERROR; | ||||||
|  |   } else { | ||||||
|     mSyslogPacketSeq++; |     mSyslogPacketSeq++; | ||||||
|     Status = SyslogSendPacket (Packet, Len); |     Status = SyslogSendPacket (Packet, Len); | ||||||
|  |   } | ||||||
|  |  | ||||||
|   FreePool (Packet); |   FreePool (Packet); | ||||||
|  |  | ||||||
| ON_EXIT: | ON_EXIT: | ||||||
| @@ -675,6 +690,8 @@ NetIp4IsUnicast ( | |||||||
| /** | /** | ||||||
|   Check whether the incoming IPv6 address is a valid unicast address. |   Check whether the incoming IPv6 address is a valid unicast address. | ||||||
|  |  | ||||||
|  |   ASSERT if Ip6 is NULL. | ||||||
|  |  | ||||||
|   If the address is a multicast address has binary 0xFF at the start, it is not |   If the address is a multicast address has binary 0xFF at the start, it is not | ||||||
|   a valid unicast address. If the address is unspecified ::, it is not a valid |   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 |   unicast address to be assigned to any node. If the address is loopback address | ||||||
| @@ -695,6 +712,8 @@ NetIp6IsValidUnicast ( | |||||||
|   UINT8 Byte; |   UINT8 Byte; | ||||||
|   UINT8 Index; |   UINT8 Index; | ||||||
|  |  | ||||||
|  |   ASSERT (Ip6 != NULL); | ||||||
|  |  | ||||||
|   if (Ip6->Addr[0] == 0xFF) { |   if (Ip6->Addr[0] == 0xFF) { | ||||||
|     return FALSE; |     return FALSE; | ||||||
|   } |   } | ||||||
| @@ -717,6 +736,8 @@ NetIp6IsValidUnicast ( | |||||||
| /** | /** | ||||||
|   Check whether the incoming Ipv6 address is the unspecified address or not. |   Check whether the incoming Ipv6 address is the unspecified address or not. | ||||||
|  |  | ||||||
|  |   ASSERT if Ip6 is NULL. | ||||||
|  |  | ||||||
|   @param[in] Ip6   - Ip6 address, in network order. |   @param[in] Ip6   - Ip6 address, in network order. | ||||||
|  |  | ||||||
|   @retval TRUE     - Yes, unspecified |   @retval TRUE     - Yes, unspecified | ||||||
| @@ -731,6 +752,8 @@ NetIp6IsUnspecifiedAddr ( | |||||||
| { | { | ||||||
|   UINT8 Index; |   UINT8 Index; | ||||||
|  |  | ||||||
|  |   ASSERT (Ip6 != NULL); | ||||||
|  |  | ||||||
|   for (Index = 0; Index < 16; Index++) { |   for (Index = 0; Index < 16; Index++) { | ||||||
|     if (Ip6->Addr[Index] != 0) { |     if (Ip6->Addr[Index] != 0) { | ||||||
|       return FALSE; |       return FALSE; | ||||||
| @@ -743,6 +766,8 @@ NetIp6IsUnspecifiedAddr ( | |||||||
| /** | /** | ||||||
|   Check whether the incoming Ipv6 address is a link-local address. |   Check whether the incoming Ipv6 address is a link-local address. | ||||||
|  |  | ||||||
|  |   ASSERT if Ip6 is NULL. | ||||||
|  |  | ||||||
|   @param[in] Ip6   - Ip6 address, in network order. |   @param[in] Ip6   - Ip6 address, in network order. | ||||||
|  |  | ||||||
|   @retval TRUE  - Yes, link-local address |   @retval TRUE  - Yes, link-local address | ||||||
| @@ -779,6 +804,9 @@ NetIp6IsLinkLocalAddr ( | |||||||
| /** | /** | ||||||
|   Check whether the Ipv6 address1 and address2 are on the connected network. |   Check whether the Ipv6 address1 and address2 are on the connected network. | ||||||
|  |  | ||||||
|  |   ASSERT if Ip1 or Ip2 is NULL. | ||||||
|  |   ASSERT if PrefixLength exceeds IP6_PREFIX_MAX. | ||||||
|  |  | ||||||
|   @param[in] Ip1          - Ip6 address1, in network order. |   @param[in] Ip1          - Ip6 address1, in network order. | ||||||
|   @param[in] Ip2          - Ip6 address2, in network order. |   @param[in] Ip2          - Ip6 address2, in network order. | ||||||
|   @param[in] PrefixLength - The prefix length of the checking net. |   @param[in] PrefixLength - The prefix length of the checking net. | ||||||
| @@ -815,7 +843,6 @@ NetIp6IsNetEqual ( | |||||||
|   if (Bit > 0) { |   if (Bit > 0) { | ||||||
|     Mask = (UINT8) (0xFF << (8 - Bit)); |     Mask = (UINT8) (0xFF << (8 - Bit)); | ||||||
|  |  | ||||||
|     ASSERT (Byte < 16); |  | ||||||
|     if ((Ip1->Addr[Byte] & Mask) != (Ip2->Addr[Byte] & Mask)) { |     if ((Ip1->Addr[Byte] & Mask) != (Ip2->Addr[Byte] & Mask)) { | ||||||
|       return FALSE; |       return FALSE; | ||||||
|     } |     } | ||||||
| @@ -828,6 +855,8 @@ NetIp6IsNetEqual ( | |||||||
| /** | /** | ||||||
|   Switches the endianess of an IPv6 address |   Switches the endianess of an IPv6 address | ||||||
|  |  | ||||||
|  |   ASSERT if Ip6 is NULL. | ||||||
|  |  | ||||||
|   This function swaps the bytes in a 128-bit IPv6 address to switch the value |   This function swaps the bytes in a 128-bit IPv6 address to switch the value | ||||||
|   from little endian to big endian or vice versa. The byte swapped value is |   from little endian to big endian or vice versa. The byte swapped value is | ||||||
|   returned. |   returned. | ||||||
| @@ -846,6 +875,8 @@ Ip6Swap128 ( | |||||||
|   UINT64 High; |   UINT64 High; | ||||||
|   UINT64 Low; |   UINT64 Low; | ||||||
|  |  | ||||||
|  |   ASSERT (Ip6 != NULL); | ||||||
|  |  | ||||||
|   CopyMem (&High, Ip6, sizeof (UINT64)); |   CopyMem (&High, Ip6, sizeof (UINT64)); | ||||||
|   CopyMem (&Low, &Ip6->Addr[8], sizeof (UINT64)); |   CopyMem (&Low, &Ip6->Addr[8], sizeof (UINT64)); | ||||||
|  |  | ||||||
| @@ -893,6 +924,8 @@ NetRandomInitSeed ( | |||||||
| /** | /** | ||||||
|   Extract a UINT32 from a byte stream. |   Extract a UINT32 from a byte stream. | ||||||
|  |  | ||||||
|  |   ASSERT if Buf is NULL. | ||||||
|  |  | ||||||
|   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. |   byte order to host byte order. Use this function to avoid alignment error. | ||||||
|  |  | ||||||
| @@ -909,6 +942,8 @@ NetGetUint32 ( | |||||||
| { | { | ||||||
|   UINT32                    Value; |   UINT32                    Value; | ||||||
|  |  | ||||||
|  |   ASSERT (Buf != NULL); | ||||||
|  |  | ||||||
|   CopyMem (&Value, Buf, sizeof (UINT32)); |   CopyMem (&Value, Buf, sizeof (UINT32)); | ||||||
|   return NTOHL (Value); |   return NTOHL (Value); | ||||||
| } | } | ||||||
| @@ -917,6 +952,8 @@ NetGetUint32 ( | |||||||
| /** | /** | ||||||
|   Put a UINT32 to the byte stream in network byte order. |   Put a UINT32 to the byte stream in network byte order. | ||||||
|  |  | ||||||
|  |   ASSERT if Buf is NULL. | ||||||
|  |  | ||||||
|   Converts a UINT32 from host byte order to network byte order. Then copy it to the |   Converts a UINT32 from host byte order to network byte order. Then copy it to the | ||||||
|   byte stream. |   byte stream. | ||||||
|  |  | ||||||
| @@ -931,6 +968,8 @@ NetPutUint32 ( | |||||||
|   IN     UINT32                Data |   IN     UINT32                Data | ||||||
|   ) |   ) | ||||||
| { | { | ||||||
|  |   ASSERT (Buf != NULL); | ||||||
|  |  | ||||||
|   Data = HTONL (Data); |   Data = HTONL (Data); | ||||||
|   CopyMem (Buf, &Data, sizeof (UINT32)); |   CopyMem (Buf, &Data, sizeof (UINT32)); | ||||||
| } | } | ||||||
| @@ -1029,6 +1068,8 @@ NetListRemoveTail ( | |||||||
| /** | /** | ||||||
|   Insert a new node entry after a designated node entry of a doubly linked list. |   Insert a new node entry after a designated node entry of a doubly linked list. | ||||||
|  |  | ||||||
|  |   ASSERT if PrevEntry or NewEntry is NULL. | ||||||
|  |  | ||||||
|   Inserts a new node entry donated by NewEntry after the node entry donated by PrevEntry |   Inserts a new node entry donated by NewEntry after the node entry donated by PrevEntry | ||||||
|   of the doubly linked list. |   of the doubly linked list. | ||||||
|  |  | ||||||
| @@ -1043,6 +1084,8 @@ NetListInsertAfter ( | |||||||
|   IN OUT LIST_ENTRY         *NewEntry |   IN OUT LIST_ENTRY         *NewEntry | ||||||
|   ) |   ) | ||||||
| { | { | ||||||
|  |   ASSERT (PrevEntry != NULL && NewEntry != NULL); | ||||||
|  |  | ||||||
|   NewEntry->BackLink                = PrevEntry; |   NewEntry->BackLink                = PrevEntry; | ||||||
|   NewEntry->ForwardLink             = PrevEntry->ForwardLink; |   NewEntry->ForwardLink             = PrevEntry->ForwardLink; | ||||||
|   PrevEntry->ForwardLink->BackLink  = NewEntry; |   PrevEntry->ForwardLink->BackLink  = NewEntry; | ||||||
| @@ -1053,6 +1096,8 @@ NetListInsertAfter ( | |||||||
| /** | /** | ||||||
|   Insert a new node entry before a designated node entry of a doubly linked list. |   Insert a new node entry before a designated node entry of a doubly linked list. | ||||||
|  |  | ||||||
|  |   ASSERT if PostEntry or NewEntry is NULL. | ||||||
|  |  | ||||||
|   Inserts a new node entry donated by NewEntry after the node entry donated by PostEntry |   Inserts a new node entry donated by NewEntry after the node entry donated by PostEntry | ||||||
|   of the doubly linked list. |   of the doubly linked list. | ||||||
|  |  | ||||||
| @@ -1067,6 +1112,8 @@ NetListInsertBefore ( | |||||||
|   IN OUT LIST_ENTRY     *NewEntry |   IN OUT LIST_ENTRY     *NewEntry | ||||||
|   ) |   ) | ||||||
| { | { | ||||||
|  |   ASSERT (PostEntry != NULL && NewEntry != NULL); | ||||||
|  |  | ||||||
|   NewEntry->ForwardLink             = PostEntry; |   NewEntry->ForwardLink             = PostEntry; | ||||||
|   NewEntry->BackLink                = PostEntry->BackLink; |   NewEntry->BackLink                = PostEntry->BackLink; | ||||||
|   PostEntry->BackLink->ForwardLink  = NewEntry; |   PostEntry->BackLink->ForwardLink  = NewEntry; | ||||||
| @@ -1265,7 +1312,6 @@ NetMapClean ( | |||||||
|  |  | ||||||
|   If Map is NULL, then ASSERT(). |   If Map is NULL, then ASSERT(). | ||||||
|  |  | ||||||
|  |  | ||||||
|   @param[in]  Map                   The net map to test. |   @param[in]  Map                   The net map to test. | ||||||
|  |  | ||||||
|   @return TRUE if the netmap is empty, otherwise FALSE. |   @return TRUE if the netmap is empty, otherwise FALSE. | ||||||
| @@ -1285,6 +1331,8 @@ NetMapIsEmpty ( | |||||||
| /** | /** | ||||||
|   Return the number of the <Key, Value> pairs in the netmap. |   Return the number of the <Key, Value> pairs in the netmap. | ||||||
|  |  | ||||||
|  |   If Map is NULL, then ASSERT(). | ||||||
|  |  | ||||||
|   @param[in]  Map                   The netmap to get the entry number. |   @param[in]  Map                   The netmap to get the entry number. | ||||||
|  |  | ||||||
|   @return The entry number in the netmap. |   @return The entry number in the netmap. | ||||||
| @@ -1296,6 +1344,7 @@ NetMapGetCount ( | |||||||
|   IN NET_MAP                *Map |   IN NET_MAP                *Map | ||||||
|   ) |   ) | ||||||
| { | { | ||||||
|  |   ASSERT (Map != NULL); | ||||||
|   return Map->Count; |   return Map->Count; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1360,6 +1409,7 @@ NetMapAllocItem ( | |||||||
|   pairs in the netmap increase by 1. |   pairs in the netmap increase by 1. | ||||||
|  |  | ||||||
|   If Map is NULL, then ASSERT(). |   If Map is NULL, then ASSERT(). | ||||||
|  |   If Key is NULL, then ASSERT(). | ||||||
|  |  | ||||||
|   @param[in, out]  Map                   The netmap to insert into. |   @param[in, out]  Map                   The netmap to insert into. | ||||||
|   @param[in]       Key                   The user's key. |   @param[in]       Key                   The user's key. | ||||||
| @@ -1379,7 +1429,7 @@ NetMapInsertHead ( | |||||||
| { | { | ||||||
|   NET_MAP_ITEM              *Item; |   NET_MAP_ITEM              *Item; | ||||||
|  |  | ||||||
|   ASSERT (Map != NULL); |   ASSERT (Map != NULL && Key != NULL); | ||||||
|  |  | ||||||
|   Item = NetMapAllocItem (Map); |   Item = NetMapAllocItem (Map); | ||||||
|  |  | ||||||
| @@ -1404,6 +1454,7 @@ NetMapInsertHead ( | |||||||
|   pairs in the netmap increase by 1. |   pairs in the netmap increase by 1. | ||||||
|  |  | ||||||
|   If Map is NULL, then ASSERT(). |   If Map is NULL, then ASSERT(). | ||||||
|  |   If Key is NULL, then ASSERT(). | ||||||
|  |  | ||||||
|   @param[in, out]  Map                   The netmap to insert into. |   @param[in, out]  Map                   The netmap to insert into. | ||||||
|   @param[in]       Key                   The user's key. |   @param[in]       Key                   The user's key. | ||||||
| @@ -1423,7 +1474,7 @@ NetMapInsertTail ( | |||||||
| { | { | ||||||
|   NET_MAP_ITEM              *Item; |   NET_MAP_ITEM              *Item; | ||||||
|  |  | ||||||
|   ASSERT (Map != NULL); |   ASSERT (Map != NULL && Key != NULL); | ||||||
|  |  | ||||||
|   Item = NetMapAllocItem (Map); |   Item = NetMapAllocItem (Map); | ||||||
|  |  | ||||||
| @@ -1444,6 +1495,9 @@ NetMapInsertTail ( | |||||||
| /** | /** | ||||||
|   Check whether the item is in the Map and return TRUE if it is. |   Check whether the item is in the Map and return TRUE if it is. | ||||||
|  |  | ||||||
|  |   If Map is NULL, then ASSERT(). | ||||||
|  |   If Item is NULL, then ASSERT(). | ||||||
|  |  | ||||||
|   @param[in]  Map                   The netmap to search within. |   @param[in]  Map                   The netmap to search within. | ||||||
|   @param[in]  Item                  The item to search. |   @param[in]  Item                  The item to search. | ||||||
|  |  | ||||||
| @@ -1458,6 +1512,8 @@ NetItemInMap ( | |||||||
| { | { | ||||||
|   LIST_ENTRY            *ListEntry; |   LIST_ENTRY            *ListEntry; | ||||||
|  |  | ||||||
|  |   ASSERT (Map != NULL && Item != NULL); | ||||||
|  |  | ||||||
|   NET_LIST_FOR_EACH (ListEntry, &Map->Used) { |   NET_LIST_FOR_EACH (ListEntry, &Map->Used) { | ||||||
|     if (ListEntry == &Item->Link) { |     if (ListEntry == &Item->Link) { | ||||||
|       return TRUE; |       return TRUE; | ||||||
| @@ -1475,6 +1531,7 @@ NetItemInMap ( | |||||||
|   item with the key to search. It returns the point to the item contains the Key if found. |   item with the key to search. It returns the point to the item contains the Key if found. | ||||||
|  |  | ||||||
|   If Map is NULL, then ASSERT(). |   If Map is NULL, then ASSERT(). | ||||||
|  |   If Key is NULL, then ASSERT(). | ||||||
|  |  | ||||||
|   @param[in]  Map                   The netmap to search within. |   @param[in]  Map                   The netmap to search within. | ||||||
|   @param[in]  Key                   The key to search. |   @param[in]  Key                   The key to search. | ||||||
| @@ -1492,7 +1549,7 @@ NetMapFindKey ( | |||||||
|   LIST_ENTRY              *Entry; |   LIST_ENTRY              *Entry; | ||||||
|   NET_MAP_ITEM            *Item; |   NET_MAP_ITEM            *Item; | ||||||
|  |  | ||||||
|   ASSERT (Map != NULL); |   ASSERT (Map != NULL && Key != NULL); | ||||||
|  |  | ||||||
|   NET_LIST_FOR_EACH (Entry, &Map->Used) { |   NET_LIST_FOR_EACH (Entry, &Map->Used) { | ||||||
|     Item = NET_LIST_USER_STRUCT (Entry, NET_MAP_ITEM, Link); |     Item = NET_LIST_USER_STRUCT (Entry, NET_MAP_ITEM, Link); | ||||||
| @@ -2095,6 +2152,9 @@ NetLibGetVlanHandle ( | |||||||
| /** | /** | ||||||
|   Get MAC address associated with the network service handle. |   Get MAC address associated with the network service handle. | ||||||
|  |  | ||||||
|  |   If MacAddress is NULL, then ASSERT(). | ||||||
|  |   If AddressSize is NULL, then ASSERT(). | ||||||
|  |  | ||||||
|   There should be MNP Service Binding Protocol installed on the input ServiceHandle. |   There should be MNP Service Binding Protocol installed on the input ServiceHandle. | ||||||
|   If SNP is installed on the ServiceHandle or its parent handle, MAC address will |   If SNP is installed on the ServiceHandle or its parent handle, MAC address will | ||||||
|   be retrieved from SNP. If no SNP found, try to get SNP mode data use MNP. |   be retrieved from SNP. If no SNP found, try to get SNP mode data use MNP. | ||||||
| @@ -2199,6 +2259,8 @@ NetLibGetMacAddress ( | |||||||
|   Convert MAC address of the NIC associated with specified Service Binding Handle |   Convert MAC address of the NIC associated with specified Service Binding Handle | ||||||
|   to a unicode string. Callers are responsible for freeing the string storage. |   to a unicode string. Callers are responsible for freeing the string storage. | ||||||
|  |  | ||||||
|  |   If MacString is NULL, then ASSERT(). | ||||||
|  |  | ||||||
|   Locate simple network protocol associated with the Service Binding Handle and |   Locate simple network protocol associated with the Service Binding Handle and | ||||||
|   get the mac address from SNP. Then convert the mac address into a unicode |   get the mac address from SNP. Then convert the mac address into a unicode | ||||||
|   string. It takes 2 unicode characters to represent a 1 byte binary buffer. |   string. It takes 2 unicode characters to represent a 1 byte binary buffer. | ||||||
| @@ -2298,6 +2360,8 @@ NetLibGetMacString ( | |||||||
| /** | /** | ||||||
|   Detect media status for specified network device. |   Detect media status for specified network device. | ||||||
|  |  | ||||||
|  |   If MediaPresent is NULL, then ASSERT(). | ||||||
|  |  | ||||||
|   The underlying UNDI driver may or may not support reporting media status from |   The underlying UNDI driver may or may not support reporting media status from | ||||||
|   GET_STATUS command (PXE_STATFLAGS_GET_STATUS_NO_MEDIA_SUPPORTED). This routine |   GET_STATUS command (PXE_STATFLAGS_GET_STATUS_NO_MEDIA_SUPPORTED). This routine | ||||||
|   will try to invoke Snp->GetStatus() to get the media status: if media already |   will try to invoke Snp->GetStatus() to get the media status: if media already | ||||||
| @@ -2406,6 +2470,10 @@ NetLibDetectMedia ( | |||||||
|                       Snp->Mode->MCastFilter |                       Snp->Mode->MCastFilter | ||||||
|                       ); |                       ); | ||||||
|       ASSERT (MCastFilter != NULL); |       ASSERT (MCastFilter != NULL); | ||||||
|  |       if (MCastFilter == NULL) { | ||||||
|  |         Status = EFI_OUT_OF_RESOURCES; | ||||||
|  |         goto Exit; | ||||||
|  |       } | ||||||
|  |  | ||||||
|       ResetMCastFilters = FALSE; |       ResetMCastFilters = FALSE; | ||||||
|     } |     } | ||||||
| @@ -2737,6 +2805,8 @@ ON_EXIT: | |||||||
| /** | /** | ||||||
|   Create an IPv4 device path node. |   Create an IPv4 device path node. | ||||||
|  |  | ||||||
|  |   If Node is NULL, then ASSERT(). | ||||||
|  |  | ||||||
|   The header type of IPv4 device path node is MESSAGING_DEVICE_PATH. |   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 header subtype of IPv4 device path node is MSG_IPv4_DP. | ||||||
|   Get other info from parameters to make up the whole IPv4 device path node. |   Get other info from parameters to make up the whole IPv4 device path node. | ||||||
| @@ -2764,6 +2834,8 @@ NetLibCreateIPv4DPathNode ( | |||||||
|   IN BOOLEAN               UseDefaultAddress |   IN BOOLEAN               UseDefaultAddress | ||||||
|   ) |   ) | ||||||
| { | { | ||||||
|  |   ASSERT (Node != NULL); | ||||||
|  |  | ||||||
|   Node->Header.Type    = MESSAGING_DEVICE_PATH; |   Node->Header.Type    = MESSAGING_DEVICE_PATH; | ||||||
|   Node->Header.SubType = MSG_IPv4_DP; |   Node->Header.SubType = MSG_IPv4_DP; | ||||||
|   SetDevicePathNodeLength (&Node->Header, sizeof (IPv4_DEVICE_PATH)); |   SetDevicePathNodeLength (&Node->Header, sizeof (IPv4_DEVICE_PATH)); | ||||||
| @@ -2794,6 +2866,10 @@ NetLibCreateIPv4DPathNode ( | |||||||
| /** | /** | ||||||
|   Create an IPv6 device path node. |   Create an IPv6 device path node. | ||||||
|  |  | ||||||
|  |   If Node is NULL, then ASSERT(). | ||||||
|  |   If LocalIp is NULL, then ASSERT(). | ||||||
|  |   If RemoteIp is NULL, then ASSERT(). | ||||||
|  |  | ||||||
|   The header type of IPv6 device path node is MESSAGING_DEVICE_PATH. |   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 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. |   Get other info from parameters to make up the whole IPv6 device path node. | ||||||
| @@ -2819,6 +2895,8 @@ NetLibCreateIPv6DPathNode ( | |||||||
|   IN UINT16                Protocol |   IN UINT16                Protocol | ||||||
|   ) |   ) | ||||||
| { | { | ||||||
|  |   ASSERT (Node != NULL && LocalIp != NULL && RemoteIp != NULL); | ||||||
|  |  | ||||||
|   Node->Header.Type    = MESSAGING_DEVICE_PATH; |   Node->Header.Type    = MESSAGING_DEVICE_PATH; | ||||||
|   Node->Header.SubType = MSG_IPv6_DP; |   Node->Header.SubType = MSG_IPv6_DP; | ||||||
|   SetDevicePathNodeLength (&Node->Header, sizeof (IPv6_DEVICE_PATH)); |   SetDevicePathNodeLength (&Node->Header, sizeof (IPv6_DEVICE_PATH)); | ||||||
| @@ -2843,6 +2921,8 @@ NetLibCreateIPv6DPathNode ( | |||||||
| /** | /** | ||||||
|   Find the UNDI/SNP handle from controller and protocol GUID. |   Find the UNDI/SNP handle from controller and protocol GUID. | ||||||
|  |  | ||||||
|  |   If ProtocolGuid is NULL, then ASSERT(). | ||||||
|  |  | ||||||
|   For example, IP will open a MNP child to transmit/receive |   For example, IP will open a MNP child to transmit/receive | ||||||
|   packets, when MNP is stopped, IP should also be stopped. IP |   packets, when MNP is stopped, IP should also be stopped. IP | ||||||
|   needs to find its own private data which is related the IP's |   needs to find its own private data which is related the IP's | ||||||
| @@ -2870,6 +2950,8 @@ NetLibGetNicHandle ( | |||||||
|   UINTN                               OpenCount; |   UINTN                               OpenCount; | ||||||
|   UINTN                               Index; |   UINTN                               Index; | ||||||
|  |  | ||||||
|  |   ASSERT (ProtocolGuid != NULL); | ||||||
|  |  | ||||||
|   Status = gBS->OpenProtocolInformation ( |   Status = gBS->OpenProtocolInformation ( | ||||||
|                   Controller, |                   Controller, | ||||||
|                   ProtocolGuid, |                   ProtocolGuid, | ||||||
| @@ -3151,6 +3233,8 @@ NetLibIp6ToStr ( | |||||||
| /** | /** | ||||||
|   This function obtains the system guid from the smbios table. |   This function obtains the system guid from the smbios table. | ||||||
|  |  | ||||||
|  |   If SystemGuid is NULL, then ASSERT(). | ||||||
|  |  | ||||||
|   @param[out]  SystemGuid     The pointer of the returned system guid. |   @param[out]  SystemGuid     The pointer of the returned system guid. | ||||||
|  |  | ||||||
|   @retval EFI_SUCCESS         Successfully obtained the system guid. |   @retval EFI_SUCCESS         Successfully obtained the system guid. | ||||||
| @@ -3170,6 +3254,8 @@ NetLibGetSystemGuid ( | |||||||
|   SMBIOS_STRUCTURE_POINTER      SmbiosEnd; |   SMBIOS_STRUCTURE_POINTER      SmbiosEnd; | ||||||
|   CHAR8                         *String; |   CHAR8                         *String; | ||||||
|  |  | ||||||
|  |   ASSERT (SystemGuid != NULL); | ||||||
|  |  | ||||||
|   SmbiosTable = NULL; |   SmbiosTable = NULL; | ||||||
|   Status = EfiGetSystemConfigurationTable (&gEfiSmbios3TableGuid, (VOID **) &Smbios30Table); |   Status = EfiGetSystemConfigurationTable (&gEfiSmbios3TableGuid, (VOID **) &Smbios30Table); | ||||||
|   if (!(EFI_ERROR (Status) || Smbios30Table == NULL)) { |   if (!(EFI_ERROR (Status) || Smbios30Table == NULL)) { | ||||||
| @@ -3237,6 +3323,9 @@ NetLibGetSystemGuid ( | |||||||
|  |  | ||||||
| /** | /** | ||||||
|   Create Dns QName according the queried domain name. |   Create Dns QName according the queried domain name. | ||||||
|  |  | ||||||
|  |   If DomainName is NULL, then ASSERT(). | ||||||
|  |    | ||||||
|   QName is a domain name represented as a sequence of labels,  |   QName is a domain name represented as a sequence of labels,  | ||||||
|   where each label consists of a length octet followed by that  |   where each label consists of a length octet followed by that  | ||||||
|   number of octets. The QName terminates with the zero  |   number of octets. The QName terminates with the zero  | ||||||
| @@ -3262,6 +3351,8 @@ NetLibCreateDnsQName ( | |||||||
|   UINTN                 Len; |   UINTN                 Len; | ||||||
|   UINTN                 Index; |   UINTN                 Index; | ||||||
|  |  | ||||||
|  |   ASSERT (DomainName != NULL); | ||||||
|  |  | ||||||
|   QueryName     = NULL; |   QueryName     = NULL; | ||||||
|   QueryNameSize = 0; |   QueryNameSize = 0; | ||||||
|   Header        = NULL; |   Header        = NULL; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user