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

Reply via email to