Siyuan, I mean the string of Dns() can't be input as param and the library is inner function of UefiDevicePathLibConvertTextToDeviceNode(). So, the error code for such string looks weird. Moreover, other libraries also don't have such check (e.g. DevPathFromTextIPv4/ DevPathFromTextVlan/...).
What do you think? Thanks, Jiaxin > -----Original Message----- > From: Fu, Siyuan > Sent: Wednesday, July 26, 2017 10:13 AM > To: Wu, Jiaxin <jiaxin...@intel.com>; edk2-devel@lists.01.org > Cc: Ye, Ting <ting...@intel.com> > Subject: RE: [Patch 2/4] MdePkg/UefiDevicePathLib: Add > DevPathFromTextDns and DevPathToTextDns libraries > > Jiaxin, > > If "Dns()" is not a valid test represent device path node, I think > DevPathFromTextDns() should return an error code for this. > > Best Regards, > Siyuan > > -----Original Message----- > From: Wu, Jiaxin > Sent: Wednesday, July 26, 2017 10:08 AM > To: Fu, Siyuan <siyuan...@intel.com>; edk2-devel@lists.01.org > Cc: Ye, Ting <ting...@intel.com> > Subject: RE: [Patch 2/4] MdePkg/UefiDevicePathLib: Add > DevPathFromTextDns and DevPathToTextDns libraries > > Hi Siyuan, > > For DevPathFromTextDns(), it's impossible to input the string with "Dns()". > The input param is in pair of parentheses follow the given node name. > > For example, given the "Dns(192.168.10.12,192.168.10.16)" and NodeName > "Dns", the param is "192.168.10.12,192.168.10.16". > > We can check the detailed implementation from > UefiDevicePathLibConvertTextToDeviceNode() function. > > > Thanks, > Jiaxin > > > -----Original Message----- > > From: Fu, Siyuan > > Sent: Wednesday, July 26, 2017 8:43 AM > > To: Wu, Jiaxin <jiaxin...@intel.com>; edk2-devel@lists.01.org > > Cc: Ye, Ting <ting...@intel.com> > > Subject: RE: [Patch 2/4] MdePkg/UefiDevicePathLib: Add > > DevPathFromTextDns and DevPathToTextDns libraries > > > > Hi, Jiaxin > > > > Is an empty DNS text node a valid representation, like "Dns()"? > > Can below code handle such kind of input string? > > > > + DeviceNodeStr = TextDeviceNode; > > + DnsServerIpCount = 0; > > + while (DeviceNodeStr != NULL) { > > + GetNextParamStr (&DeviceNodeStr); > > + DnsServerIpCount ++; > > + } > > > > Best Regards, > > Siyuan > > > > -----Original Message----- > > From: Wu, Jiaxin > > Sent: Tuesday, July 25, 2017 8:13 PM > > To: edk2-devel@lists.01.org > > Cc: Ye, Ting <ting...@intel.com>; Fu, Siyuan <siyuan...@intel.com>; Wu, > > Jiaxin <jiaxin...@intel.com> > > Subject: [Patch 2/4] MdePkg/UefiDevicePathLib: Add > DevPathFromTextDns > > and DevPathToTextDns libraries > > > > Cc: Ye Ting <ting...@intel.com> > > Cc: Fu Siyuan <siyuan...@intel.com> > > Contributed-under: TianoCore Contribution Agreement 1.0 > > Signed-off-by: Wu Jiaxin <jiaxin...@intel.com> > > --- > > .../Library/UefiDevicePathLib/DevicePathFromText.c | 72 > > ++++++++++++++++++++++ > > .../Library/UefiDevicePathLib/DevicePathToText.c | 46 ++++++++++++++ > > 2 files changed, 118 insertions(+) > > > > diff --git a/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c > > b/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c > > index f50c11c..60057ec 100644 > > --- a/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c > > +++ b/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c > > @@ -2723,10 +2723,81 @@ DevPathFromTextBluetoothLE ( > > ); > > return (EFI_DEVICE_PATH_PROTOCOL *) BluetoothLeDp; > > } > > > > /** > > + Converts a text device path node to DNS device path structure. > > + > > + @param TextDeviceNode The input Text device path node. > > + > > + @return A pointer to the newly-created DNS device path structure. > > + > > +**/ > > +EFI_DEVICE_PATH_PROTOCOL * > > +DevPathFromTextDns ( > > + IN CHAR16 *TextDeviceNode > > + ) > > +{ > > + CHAR16 *DeviceNodeStr; > > + UINT32 DnsServerIpCount; > > + UINT16 DnsDeviceNodeLength; > > + DNS_DEVICE_PATH *DnsDeviceNode; > > + UINT32 DnsServerIpIndex; > > + CHAR16 *DnsServerIp; > > + > > + > > + // > > + // Count the DNS server address number. > > + // > > + DeviceNodeStr = TextDeviceNode; > > + DnsServerIpCount = 0; > > + while (DeviceNodeStr != NULL) { > > + GetNextParamStr (&DeviceNodeStr); > > + DnsServerIpCount ++; > > + } > > + > > + // > > + // Create the DNS DeviceNode. > > + // > > + DnsDeviceNodeLength = (UINT16) (sizeof > (EFI_DEVICE_PATH_PROTOCOL) > > + sizeof (UINT8) + DnsServerIpCount * sizeof (EFI_IP_ADDRESS)); > > + DnsDeviceNode = (DNS_DEVICE_PATH *) CreateDeviceNode ( > > + MESSAGING_DEVICE_PATH, > > + MSG_DNS_DP, > > + DnsDeviceNodeLength > > + ); > > + > > + // > > + // Confirm the DNS server address is IPv4 or IPv6 type. > > + // > > + DeviceNodeStr = TextDeviceNode; > > + while (!IS_NULL (*DeviceNodeStr)) { > > + if (*DeviceNodeStr == L'.') { > > + DnsDeviceNode->IsIPv6 = 0x00; > > + break; > > + } > > + > > + if (*DeviceNodeStr == L':') { > > + DnsDeviceNode->IsIPv6 = 0x01; > > + break; > > + } > > + > > + DeviceNodeStr++; > > + } > > + > > + for (DnsServerIpIndex = 0; DnsServerIpIndex < DnsServerIpCount; > > DnsServerIpIndex++) { > > + DnsServerIp = GetNextParamStr (&TextDeviceNode); > > + if (DnsDeviceNode->IsIPv6 == 0x00) { > > + StrToIpv4Address (DnsServerIp, NULL, &(DnsDeviceNode- > > >DnsServerIp[DnsServerIpIndex].v4), NULL); > > + } else { > > + StrToIpv6Address (DnsServerIp, NULL, &(DnsDeviceNode- > > >DnsServerIp[DnsServerIpIndex].v6), NULL); > > + } > > + } > > + > > + return (EFI_DEVICE_PATH_PROTOCOL *) DnsDeviceNode; > > +} > > + > > +/** > > Converts a text device path node to URI device path structure. > > > > @param TextDeviceNode The input Text device path node. > > > > @return A pointer to the newly-created URI device path structure. > > @@ -3395,10 +3466,11 @@ GLOBAL_REMOVE_IF_UNREFERENCED > > DEVICE_PATH_FROM_TEXT_TABLE mUefiDevicePathLibDevP > > {L"UsbTestAndMeasurement", > > DevPathFromTextUsbTestAndMeasurement }, > > {L"UsbWwid", DevPathFromTextUsbWwid }, > > {L"Unit", DevPathFromTextUnit }, > > {L"iSCSI", DevPathFromTextiSCSI }, > > {L"Vlan", DevPathFromTextVlan }, > > + {L"Dns", DevPathFromTextDns }, > > {L"Uri", DevPathFromTextUri }, > > {L"Bluetooth", DevPathFromTextBluetooth }, > > {L"Wi-Fi", DevPathFromTextWiFi }, > > {L"BluetoothLE", DevPathFromTextBluetoothLE }, > > {L"MediaPath", DevPathFromTextMediaPath }, > > diff --git a/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c > > b/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c > > index b8d9491..63542db 100644 > > --- a/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c > > +++ b/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c > > @@ -1695,10 +1695,55 @@ DevPathToTextBluetoothLE ( > > BluetoothLE->Address.Type > > ); > > } > > > > /** > > + Converts a DNS device path structure to its string representative. > > + > > + @param Str The string representative of input device. > > + @param DevPath The input device path structure. > > + @param DisplayOnly If DisplayOnly is TRUE, then the shorter text > > representation > > + of the display node is used, where applicable. If > > DisplayOnly > > + is FALSE, then the longer text representation of > > the display > > node > > + is used. > > + @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut > > forms of text > > + representation for a device node can be used, > > where > > applicable. > > + > > +**/ > > +VOID > > +DevPathToTextDns ( > > + IN OUT POOL_PRINT *Str, > > + IN VOID *DevPath, > > + IN BOOLEAN DisplayOnly, > > + IN BOOLEAN AllowShortcuts > > + ) > > +{ > > + DNS_DEVICE_PATH *DnsDevPath; > > + UINT32 DnsServerIpCount; > > + UINT32 DnsServerIpIndex; > > + > > + DnsDevPath = DevPath; > > + DnsServerIpCount = (UINT32) (DevicePathNodeLength(DnsDevPath) - > > sizeof (EFI_DEVICE_PATH_PROTOCOL) - sizeof (DnsDevPath->IsIPv6)) / > > sizeof (EFI_IP_ADDRESS); > > + > > + UefiDevicePathLibCatPrint (Str, L"Dns("); > > + > > + for (DnsServerIpIndex = 0; DnsServerIpIndex < DnsServerIpCount; > > DnsServerIpIndex++) { > > + if (DnsDevPath->IsIPv6 == 0x00) { > > + CatIPv4Address (Str, &(DnsDevPath- > > >DnsServerIp[DnsServerIpIndex].v4)); > > + } else { > > + CatIPv6Address (Str, &(DnsDevPath- > > >DnsServerIp[DnsServerIpIndex].v6)); > > + } > > + > > + if (DnsServerIpIndex < DnsServerIpCount - 1) { > > + UefiDevicePathLibCatPrint (Str, L","); > > + } > > + } > > + > > + UefiDevicePathLibCatPrint (Str, L")"); > > +} > > + > > +/** > > Converts a URI device path structure to its string representative. > > > > @param Str The string representative of input device. > > @param DevPath The input device path structure. > > @param DisplayOnly If DisplayOnly is TRUE, then the shorter text > > representation > > @@ -2223,10 +2268,11 @@ GLOBAL_REMOVE_IF_UNREFERENCED const > > DEVICE_PATH_TO_TEXT_TABLE mUefiDevicePathLib > > {MESSAGING_DEVICE_PATH, MSG_INFINIBAND_DP, > > DevPathToTextInfiniBand }, > > {MESSAGING_DEVICE_PATH, MSG_UART_DP, > > DevPathToTextUart }, > > {MESSAGING_DEVICE_PATH, MSG_VENDOR_DP, > > DevPathToTextVendor }, > > {MESSAGING_DEVICE_PATH, MSG_ISCSI_DP, > > DevPathToTextiSCSI }, > > {MESSAGING_DEVICE_PATH, MSG_VLAN_DP, > > DevPathToTextVlan }, > > + {MESSAGING_DEVICE_PATH, MSG_DNS_DP, > > DevPathToTextDns }, > > {MESSAGING_DEVICE_PATH, MSG_URI_DP, > > DevPathToTextUri }, > > {MESSAGING_DEVICE_PATH, MSG_BLUETOOTH_DP, > > DevPathToTextBluetooth }, > > {MESSAGING_DEVICE_PATH, MSG_WIFI_DP, > > DevPathToTextWiFi }, > > {MESSAGING_DEVICE_PATH, MSG_BLUETOOTH_LE_DP, > > DevPathToTextBluetoothLE }, > > {MEDIA_DEVICE_PATH, MEDIA_HARDDRIVE_DP, > > DevPathToTextHardDrive }, > > -- > > 1.9.5.msysgit.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel