That's fine, thanks Siyuan. -----Original Message----- From: Fu, Siyuan Sent: Wednesday, February 17, 2016 12:17 PM To: Wu, Jiaxin <jiaxin...@intel.com>; edk2-devel@lists.01.org Cc: Hegde Nagaraj P <nagaraj-p.he...@hpe.com>; Ye, Ting <ting...@intel.com> Subject: RE: [Patch 1/2] MdeModulePkg: Define one function to create DNS QName
For public library interface, we should check the input parameters and return error code or NULL pointer if it's invalid, instead of use assert. > -----Original Message----- > From: Wu, Jiaxin > Sent: Wednesday, February 17, 2016 12:09 PM > To: Fu, Siyuan <siyuan...@intel.com>; edk2-devel@lists.01.org > Cc: Hegde Nagaraj P <nagaraj-p.he...@hpe.com>; Ye, Ting > <ting...@intel.com> > Subject: RE: [Patch 1/2] MdeModulePkg: Define one function to create > DNS QName > > Thanks Siyuan, > > I don't have strong opinion about the name DNS_MAX_BLKSIZE or > DNS_MAX_MESSAGE_SIZE. > > For comments 1 and 2, I agree the changes. > > For comments 3 and 4, according RFC1035 descriptions as below: > << > Various objects and parameters in the DNS have size limits. They are > listed below. Some could be easily changed, others are more fundamental. > 1. labels 63 octets or less > 2. names 255 octets or less > 3. TTL positive values of a signed 32 bit number. > 4. UDP messages 512 octets or less > ... > To simplify implementations, the total length of a domain name (i.e., > label octets and label length octets) is restricted to 255 octets or less. > >> > So, since the domain name is restricted to 255 octets or less, after > preprocessing, the total length must less than 512 octets or less. But > you are right, we'd better add a 'Assert' to assert the DomainName > length is restricted to 255 octets or less. > > Thanks. > Jiaxin > > > -----Original Message----- > From: Fu, Siyuan > Sent: Wednesday, February 17, 2016 11:24 AM > To: Wu, Jiaxin <jiaxin...@intel.com>; edk2-devel@lists.01.org > Cc: Hegde Nagaraj P <nagaraj-p.he...@hpe.com>; Ye, Ting > <ting...@intel.com> > Subject: RE: [Patch 1/2] MdeModulePkg: Define one function to create > DNS QName > > BTW, the DNS_MAX_BLKSIZE better to be DNS_MAX_MESSAGE_SIZE, according > to the words in RFC. > > > -----Original Message----- > > From: Fu, Siyuan > > Sent: Wednesday, February 17, 2016 11:20 AM > > To: Wu, Jiaxin <jiaxin...@intel.com>; edk2-devel@lists.01.org > > Cc: Hegde Nagaraj P <nagaraj-p.he...@hpe.com>; Ye, Ting > > <ting...@intel.com> > > Subject: RE: [Patch 1/2] MdeModulePkg: Define one function to create > > DNS QName > > > > Hi, Jiaxin > > > > Comments as below. > > 1. In the function description of NetLibCreateDnsQName(), whether > > below sentence > > The domain name terminates with the zero... > > Should be > > The QName terminates with the zero... > > > > The > > Caller should take responsibility to the buffer in QName. > > Should be > > Caller should take responsibility to free the buffer in returned > > pointer. > > > > 2. The @param mismatch with the parameter name DomainName. > > > > 3. There will be buffer overflow if the StrSize(DomainName) > > > DNS_MAX_BLKSIZE in NetLibCreateDnsQName(). > > > > 4. What the spec requirement if a label is large than 255, which > > exceed the max value of a UINT8? > > > > Best Regards > > Siyuan > > > > > > > > > > > -----Original Message----- > > > From: Wu, Jiaxin > > > Sent: Friday, January 22, 2016 1:54 AM > > > To: edk2-devel@lists.01.org > > > Cc: Hegde Nagaraj P <nagaraj-p.he...@hpe.com>; Ye, Ting > > > <ting...@intel.com>; Fu, Siyuan <siyuan...@intel.com> > > > Subject: [Patch 1/2] MdeModulePkg: Define one function to create > > > DNS QName > > > > > > This patch is used to define a general function to create DNS QName. > > > QName is a domain name represented as a sequence of labels, where > > > each label consists of a length octet followed by that number of > > > octets. The domain name terminates with the zero length octet for > > > the null label of the root. > > > > > > Cc: Hegde Nagaraj P <nagaraj-p.he...@hpe.com> > > > Cc: Ye Ting <ting...@intel.com> > > > Cc: Fu Siyuan <siyuan...@intel.com> > > > Contributed-under: TianoCore Contribution Agreement 1.0 > > > Signed-off-by: Jiaxin Wu <jiaxin...@intel.com> > > > --- > > > MdeModulePkg/Include/Library/NetLib.h | 21 +++++++++++ > > > MdeModulePkg/Library/DxeNetLib/DxeNetLib.c | 58 > > > +++++++++++++++++++++++++++++- > > > 2 files changed, 78 insertions(+), 1 deletion(-) > > > > > > diff --git a/MdeModulePkg/Include/Library/NetLib.h > > > b/MdeModulePkg/Include/Library/NetLib.h > > > index e4456fa..a257815 100644 > > > --- a/MdeModulePkg/Include/Library/NetLib.h > > > +++ b/MdeModulePkg/Include/Library/NetLib.h > > > @@ -35,10 +35,11 @@ typedef UINT16 TCP_PORTNO; > > > #define EFI_IP_PROTO_UDP 0x11 > > > #define EFI_IP_PROTO_TCP 0x06 > > > #define EFI_IP_PROTO_ICMP 0x01 > > > #define IP4_PROTO_IGMP 0x02 > > > #define IP6_ICMP 58 > > > +#define DNS_MAX_BLKSIZE 512 > > > > > > // > > > // The address classification > > > // > > > #define IP4_ADDR_CLASSA 1 > > > @@ -2154,6 +2155,26 @@ EFI_STATUS > > > EFIAPI > > > NetLibGetSystemGuid ( > > > OUT EFI_GUID *SystemGuid > > > ); > > > > > > +/** > > > + Create Dns QName according the queried domain name. > > > + QName is a domain name represented as a sequence of labels, > > > + where each label consists of a length octet followed by that > > > + number of octets. The domain name terminates with the zero > > > + length octet for the null label of the root. Caller should > > > + take responsibility to the buffer in QName. > > > + > > > + @param String The pointer to the queried Ascii string. > > > + > > > + @retval NULL Failed to fill QName. > > > + @return QName filled successfully. > > > + > > > +**/ > > > +CHAR8 * > > > +EFIAPI > > > +NetLibCreateDnsQName ( > > > + IN CHAR16 *DomainName > > > + ); > > > + > > > #endif > > > diff --git a/MdeModulePkg/Library/DxeNetLib/DxeNetLib.c > > > b/MdeModulePkg/Library/DxeNetLib/DxeNetLib.c > > > index e112d45..dd67a1c 100644 > > > --- a/MdeModulePkg/Library/DxeNetLib/DxeNetLib.c > > > +++ b/MdeModulePkg/Library/DxeNetLib/DxeNetLib.c > > > @@ -1,9 +1,9 @@ > > > /** @file > > > Network library. > > > > > > -Copyright (c) 2005 - 2015, Intel Corporation. All rights > > > reserved.<BR> > > > +Copyright (c) 2005 - 2016, Intel Corporation. All rights > > > +reserved.<BR> > > > (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR> > > > This program and the accompanying materials are licensed and made > > > available under the terms and conditions of the > > BSD > > > License > > > which accompanies this distribution. The full text of the > > > license may be found at > > > http://opensource.org/licenses/bsd-license.php > > > @@ -3324,5 +3324,61 @@ NetLibGetSystemGuid ( > > > } > > > } while (TRUE); > > > } while (Smbios.Raw < SmbiosEnd.Raw); > > > return EFI_NOT_FOUND; > > > } > > > + > > > +/** > > > + Create Dns QName according the queried domain name. > > > + QName is a domain name represented as a sequence of labels, > > > + where each label consists of a length octet followed by that > > > + number of octets. The domain name terminates with the zero > > > + length octet for the null label of the root. Caller should > > > + take responsibility to the buffer in QName. > > > + > > > + @param String The pointer to the queried Ascii string. > > > + > > > + @retval NULL Failed to fill QName. > > > + @return QName filled successfully. > > > + > > > +**/ > > > +CHAR8 * > > > +EFIAPI > > > +NetLibCreateDnsQName ( > > > + IN CHAR16 *DomainName > > > + ) > > > +{ > > > + CHAR8 *QueryName; > > > + CHAR8 *Header; > > > + CHAR8 *Tail; > > > + UINTN Len; > > > + UINTN Index; > > > + > > > + QueryName = NULL; > > > + Header = NULL; > > > + Tail = NULL; > > > + > > > + QueryName = AllocateZeroPool (DNS_MAX_BLKSIZE); if (QueryName > == > > > + NULL) { > > > + return NULL; > > > + } > > > + > > > + Header = QueryName; > > > + Tail = Header + 1; > > > + Len = 0; > > > + for (Index = 0; DomainName[Index] != 0; Index++) { > > > + *Tail = (CHAR8) DomainName[Index]; > > > + if (*Tail == '.') { > > > + *Header = (CHAR8) Len; > > > + Header = Tail; > > > + Tail ++; > > > + Len = 0; > > > + } else { > > > + Tail++; > > > + Len++; > > > + } > > > + } > > > + *Header = (CHAR8) Len; > > > + *Tail = 0; > > > + > > > + return QueryName; > > > +} > > > \ No newline at end of file > > > -- > > > 1.9.5.msysgit.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel