Build a syslog packet, including the Ethernet/Ip/Udp headers\r
and user's message.\r
\r
- @param[in] Level Syslog servity level\r
+ @param[in] Level Syslog severity level\r
@param[in] Module The module that generates the log\r
@param[in] File The file that contains the current log\r
@param[in] Line The line of code in the File that contains the current log\r
This function will locate a instance of SNP then send the message through it.\r
Because it isn't open the SNP BY_DRIVER, apply caution when using it.\r
\r
- @param Level The servity level of the message.\r
+ @param Level The severity level of the message.\r
@param Module The Moudle that generates the log.\r
@param File The file that contains the log.\r
@param Line The exact line that contains the log.\r
Return the class of the IP address, such as class A, B, C.\r
Addr is in host byte order.\r
\r
+ [ATTENTION]\r
+ Classful addressing (IP class A/B/C) has been deprecated according to RFC4632.\r
+ Caller of this function could only check the returned value against\r
+ IP4_ADDR_CLASSD (multicast) or IP4_ADDR_CLASSE (reserved) now.\r
+\r
The address of class A starts with 0.\r
If the address belong to class A, return IP4_ADDR_CLASSA.\r
The address of class B starts with 10.\r
\r
/**\r
Check whether the IP is a valid unicast address according to\r
- the netmask. If NetMask is zero, use the IP address's class to get the default mask.\r
+ the netmask. \r
\r
- If Ip is 0, IP is not a valid unicast address.\r
- Class D address is used for multicasting and class E address is reserved for future. If Ip\r
- belongs to class D or class E, IP is not a valid unicast address.\r
+ ASSERT if NetMask is zero.\r
+ \r
If all bits of the host address of IP are 0 or 1, IP is also not a valid unicast address.\r
\r
@param[in] Ip The IP to check against.\r
IN IP4_ADDR NetMask\r
)\r
{\r
- INTN Class;\r
-\r
- Class = NetGetIpClass (Ip);\r
-\r
- if ((Ip == 0) || (Class >= IP4_ADDR_CLASSD)) {\r
+ ASSERT (NetMask != 0);\r
+ \r
+ if (Ip == 0 || IP4_IS_LOCAL_BROADCAST (Ip)) {\r
return FALSE;\r
}\r
-\r
- if (NetMask == 0) {\r
- NetMask = gIp4AllMasks[Class << 3];\r
- }\r
-\r
+ \r
if (((Ip &~NetMask) == ~NetMask) || ((Ip &~NetMask) == 0)) {\r
return FALSE;\r
}\r
@param[in] ChildHandleBuffer An array of child handles to be freed. May be NULL\r
if NumberOfChildren is 0.\r
\r
- @retval TURE Found the input Handle in ChildHandleBuffer.\r
+ @retval TRUE Found the input Handle in ChildHandleBuffer.\r
@retval FALSE Can't find the input Handle in ChildHandleBuffer.\r
\r
**/\r
/**\r
Iterate through the netmap and call CallBack for each item.\r
\r
- It will contiue the traverse if CallBack returns EFI_SUCCESS, otherwise, break\r
+ It will continue the traverse if CallBack returns EFI_SUCCESS, otherwise, break\r
from the loop. It returns the CallBack's last return value. This function is\r
delete safe for the current item.\r
\r
TempStr = Ip4Str;\r
\r
while ((*Ip4Str != '\0') && (*Ip4Str != '.')) {\r
+ if (Index != 3 && !NET_IS_DIGIT (*Ip4Str)) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ \r
+ //\r
+ // Allow the IPv4 with prefix case, e.g. 192.168.10.10/24 \r
+ //\r
+ if (Index == 3 && !NET_IS_DIGIT (*Ip4Str) && *Ip4Str != '/') {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ \r
Ip4Str++;\r
}\r
\r
\r
/**\r
Convert one Null-terminated ASCII string to EFI_IPv6_ADDRESS. The format of the\r
- string is defined in RFC 4291 - Text Pepresentation of Addresses.\r
+ string is defined in RFC 4291 - Text Representation of Addresses.\r
\r
@param[in] String The pointer to the Ascii string.\r
@param[out] Ip6Address The pointer to the converted IPv6 address.\r
TempStr = Ip6Str;\r
\r
while ((*Ip6Str != '\0') && (*Ip6Str != ':')) {\r
+ if (Index != 14 && !NET_IS_HEX (*Ip6Str)) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ \r
+ //\r
+ // Allow the IPv6 with prefix case, e.g. 2000:aaaa::10/24 \r
+ //\r
+ if (Index == 14 && !NET_IS_HEX (*Ip6Str) && *Ip6Str != '/') {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ \r
Ip6Str++;\r
}\r
\r
)\r
{\r
CHAR8 *Ip4Str;\r
+ UINTN StringSize;\r
EFI_STATUS Status;\r
\r
if ((String == NULL) || (Ip4Address == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- Ip4Str = (CHAR8 *) AllocatePool ((StrLen (String) + 1) * sizeof (CHAR8));\r
+ StringSize = StrLen (String) + 1;\r
+ Ip4Str = (CHAR8 *) AllocatePool (StringSize * sizeof (CHAR8));\r
if (Ip4Str == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
- UnicodeStrToAsciiStr (String, Ip4Str);\r
+ UnicodeStrToAsciiStrS (String, Ip4Str, StringSize);\r
\r
Status = NetLibAsciiStrToIp4 (Ip4Str, Ip4Address);\r
\r
\r
/**\r
Convert one Null-terminated Unicode string to EFI_IPv6_ADDRESS. The format of\r
- the string is defined in RFC 4291 - Text Pepresentation of Addresses.\r
+ the string is defined in RFC 4291 - Text Representation of Addresses.\r
\r
@param[in] String The pointer to the Ascii string.\r
@param[out] Ip6Address The pointer to the converted IPv6 address.\r
)\r
{\r
CHAR8 *Ip6Str;\r
+ UINTN StringSize;\r
EFI_STATUS Status;\r
\r
if ((String == NULL) || (Ip6Address == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- Ip6Str = (CHAR8 *) AllocatePool ((StrLen (String) + 1) * sizeof (CHAR8));\r
+ StringSize = StrLen (String) + 1;\r
+ Ip6Str = (CHAR8 *) AllocatePool (StringSize * sizeof (CHAR8));\r
if (Ip6Str == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
- UnicodeStrToAsciiStr (String, Ip6Str);\r
+ UnicodeStrToAsciiStrS (String, Ip6Str, StringSize);\r
\r
Status = NetLibAsciiStrToIp6 (Ip6Str, Ip6Address);\r
\r
\r
/**\r
Convert one Null-terminated Unicode string to EFI_IPv6_ADDRESS and prefix length.\r
- The format of the string is defined in RFC 4291 - Text Pepresentation of Addresses\r
+ The format of the string is defined in RFC 4291 - Text Representation of Addresses\r
Prefixes: ipv6-address/prefix-length.\r
\r
@param[in] String The pointer to the Ascii string.\r
)\r
{\r
CHAR8 *Ip6Str;\r
+ UINTN StringSize;\r
CHAR8 *PrefixStr;\r
CHAR8 *TempStr;\r
EFI_STATUS Status;\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- Ip6Str = (CHAR8 *) AllocatePool ((StrLen (String) + 1) * sizeof (CHAR8));\r
+ StringSize = StrLen (String) + 1;\r
+ Ip6Str = (CHAR8 *) AllocatePool (StringSize * sizeof (CHAR8));\r
if (Ip6Str == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
- UnicodeStrToAsciiStr (String, Ip6Str);\r
+ UnicodeStrToAsciiStrS (String, Ip6Str, StringSize);\r
\r
//\r
// Get the sub string describing prefix length.\r
*Tail = 0;\r
\r
return QueryName;\r
-}
\ No newline at end of file
+}\r