-/** @file
- Functions declaration related with DHCPv4 for HTTP boot driver.
-
-Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
-This program and the accompanying materials are licensed and made available under
-the terms and conditions of the BSD License that accompanies this distribution.
-The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php.
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#ifndef __EFI_UEFI_HTTP_BOOT_DHCP4_H__
-#define __EFI_UEFI_HTTP_BOOT_DHCP4_H__
-
-#define HTTP_BOOT_DHCP4_OPTION_MAX_NUM 16
-#define HTTP_BOOT_DHCP4_OPTION_MAX_SIZE 312
-#define HTTP_BOOT_DHCP4_PACKET_MAX_SIZE 1472
-
-#define HTTP_BOOT_DHCP4_OPCODE_REQUEST 1
-#define HTTP_BOOT_DHCP4_OPCODE_REPLY 2
-#define HTTP_BOOT_DHCP4_MSG_TYPE_REQUEST 3
-#define HTTP_BOOT_DHCP4_MAGIC 0x63538263 // network byte order
-
-//
-// Dhcp Options
-//
-#define HTTP_BOOT_DHCP4_TAG_PAD 0 // Pad Option
-#define HTTP_BOOT_DHCP4_TAG_EOP 255 // End Option
-#define HTTP_BOOT_DHCP4_TAG_NETMASK 1 // Subnet Mask
-#define HTTP_BOOT_DHCP4_TAG_TIME_OFFSET 2 // Time Offset from UTC
-#define HTTP_BOOT_DHCP4_TAG_ROUTER 3 // Router option,
-#define HTTP_BOOT_DHCP4_TAG_TIME_SERVER 4 // Time Server
-#define HTTP_BOOT_DHCP4_TAG_NAME_SERVER 5 // Name Server
-#define HTTP_BOOT_DHCP4_TAG_DNS_SERVER 6 // Domain Name Server
-#define HTTP_BOOT_DHCP4_TAG_HOSTNAME 12 // Host Name
-#define HTTP_BOOT_DHCP4_TAG_BOOTFILE_LEN 13 // Boot File Size
-#define HTTP_BOOT_DHCP4_TAG_DUMP 14 // Merit Dump File
-#define HTTP_BOOT_DHCP4_TAG_DOMAINNAME 15 // Domain Name
-#define HTTP_BOOT_DHCP4_TAG_ROOTPATH 17 // Root path
-#define HTTP_BOOT_DHCP4_TAG_EXTEND_PATH 18 // Extensions Path
-#define HTTP_BOOT_DHCP4_TAG_EMTU 22 // Maximum Datagram Reassembly Size
-#define HTTP_BOOT_DHCP4_TAG_TTL 23 // Default IP Time-to-live
-#define HTTP_BOOT_DHCP4_TAG_BROADCAST 28 // Broadcast Address
-#define HTTP_BOOT_DHCP4_TAG_NIS_DOMAIN 40 // Network Information Service Domain
-#define HTTP_BOOT_DHCP4_TAG_NIS_SERVER 41 // Network Information Servers
-#define HTTP_BOOT_DHCP4_TAG_NTP_SERVER 42 // Network Time Protocol Servers
-#define HTTP_BOOT_DHCP4_TAG_VENDOR 43 // Vendor Specific Information
-#define HTTP_BOOT_DHCP4_TAG_REQUEST_IP 50 // Requested IP Address
-#define HTTP_BOOT_DHCP4_TAG_LEASE 51 // IP Address Lease Time
-#define HTTP_BOOT_DHCP4_TAG_OVERLOAD 52 // Option Overload
-#define HTTP_BOOT_DHCP4_TAG_MSG_TYPE 53 // DHCP Message Type
-#define HTTP_BOOT_DHCP4_TAG_SERVER_ID 54 // Server Identifier
-#define HTTP_BOOT_DHCP4_TAG_PARA_LIST 55 // Parameter Request List
-#define HTTP_BOOT_DHCP4_TAG_MAXMSG 57 // Maximum DHCP Message Size
-#define HTTP_BOOT_DHCP4_TAG_T1 58 // Renewal (T1) Time Value
-#define HTTP_BOOT_DHCP4_TAG_T2 59 // Rebinding (T2) Time Value
-#define HTTP_BOOT_DHCP4_TAG_CLASS_ID 60 // Vendor class identifier
-#define HTTP_BOOT_DHCP4_TAG_CLIENT_ID 61 // Client-identifier
-#define HTTP_BOOT_DHCP4_TAG_TFTP 66 // TFTP server name
-#define HTTP_BOOT_DHCP4_TAG_BOOTFILE 67 // Bootfile name
-#define HTTP_BOOT_DHCP4_TAG_ARCH 93
-#define HTTP_BOOT_DHCP4_TAG_UNDI 94
-#define HTTP_BOOT_DHCP4_TAG_UUID 97
-
-#define HTTP_BOOT_DHCP4_OVERLOAD_FILE 1
-#define HTTP_BOOT_DHCP4_OVERLOAD_SERVER_NAME 2
-
-///
-/// HTTP Tag definition that identifies the processor
-/// and programming environment of the client system.
-/// These identifiers are defined by IETF:
-/// http://www.ietf.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xml
-///
-#if defined (MDE_CPU_IA32)
-#define EFI_HTTP_BOOT_CLIENT_SYSTEM_ARCHITECTURE 0x000F
-#elif defined (MDE_CPU_X64)
-#define EFI_HTTP_BOOT_CLIENT_SYSTEM_ARCHITECTURE 0x0010
-#elif defined (MDE_CPU_ARM)
-#define EFI_HTTP_BOOT_CLIENT_SYSTEM_ARCHITECTURE 0x0012
-#elif defined (MDE_CPU_AARCH64)
-#define EFI_HTTP_BOOT_CLIENT_SYSTEM_ARCHITECTURE 0x0013
-#endif
-
-/// DHCP offer types among HTTP boot.
-/// Dhcp4 and Dhcp6 share this definition, and corresponding
-/// relatioinship is as follows:
-/// Dhcp4Discover <> Dhcp6Solicit
-/// Dhcp4Offer <> Dhcp6Advertise
-/// Dhcp4Request <> Dhcp6Request
-/// Dhcp4Ack <> DHcp6Reply
-///
-typedef enum {
- //
- // <IP address, IP expressed URI> or
- // <IP address, IP expressed URI, Name-server (will be ignored)>
- //
- HttpOfferTypeDhcpIpUri,
- //
- // <IP address, Domain-name expressed URI, Name-server>
- //
- HttpOfferTypeDhcpNameUriDns,
- //
- // <IP address, Name-server>
- //
- HttpOfferTypeDhcpDns,
- //
- // <IP address>
- //
- HttpOfferTypeDhcpOnly,
- //
- // <Domain-name expressed URI> or
- // <Domain-name expressed URI, Name-server (will be ignored)>
- //
- HttpOfferTypeProxyNameUri,
- //
- // <IP expressed URI> or
- // <IP expressed URI, Name-server (will be ignored)>
- //
- HttpOfferTypeProxyIpUri,
- //
- // <IP address, Domain-name expressed URI>
- //
- HttpOfferTypeDhcpNameUri,
- HttpOfferTypeMax
-} HTTP_BOOT_OFFER_TYPE;
-
-#define HTTP_BOOT_DHCP_RETRIES 4
-#define HTTP_BOOT_OFFER_MAX_NUM 16
-
-// The array index of the DHCP4 option tag interested
-//
-#define HTTP_BOOT_DHCP4_TAG_INDEX_BOOTFILE_LEN 0
-#define HTTP_BOOT_DHCP4_TAG_INDEX_OVERLOAD 1
-#define HTTP_BOOT_DHCP4_TAG_INDEX_MSG_TYPE 2
-#define HTTP_BOOT_DHCP4_TAG_INDEX_SERVER_ID 3
-#define HTTP_BOOT_DHCP4_TAG_INDEX_CLASS_ID 4
-#define HTTP_BOOT_DHCP4_TAG_INDEX_BOOTFILE 5
-#define HTTP_BOOT_DHCP4_TAG_INDEX_DNS_SERVER 6
-#define HTTP_BOOT_DHCP4_TAG_INDEX_MAX 7
-
-#pragma pack(1)
-
-typedef struct {
- UINT8 ParaList[135];
-} HTTP_BOOT_DHCP4_OPTION_PARA;
-
-typedef struct {
- UINT16 Size;
-} HTTP_BOOT_DHCP4_OPTION_MAX_MESG_SIZE;
-
-typedef struct {
- UINT8 Type;
- UINT8 MajorVer;
- UINT8 MinorVer;
-} HTTP_BOOT_DHCP4_OPTION_UNDI;
-
-typedef struct {
- UINT8 Type;
-} HTTP_BOOT_DHCP4_OPTION_MESG;
-
-typedef struct {
- UINT16 Type;
-} HTTP_BOOT_DHCP4_OPTION_ARCH;
-
-typedef struct {
- UINT8 ClassIdentifier[11];
- UINT8 ArchitecturePrefix[5];
- UINT8 ArchitectureType[5];
- UINT8 Lit3[1];
- UINT8 InterfaceName[4];
- UINT8 Lit4[1];
- UINT8 UndiMajor[3];
- UINT8 UndiMinor[3];
-} HTTP_BOOT_DHCP4_OPTION_CLID;
-
-typedef struct {
- UINT8 Type;
- UINT8 Guid[16];
-} HTTP_BOOT_DHCP4_OPTION_UUID;
-
-typedef struct {
- UINT16 Type;
- UINT16 Layer;
-} HTTP_BOOT_OPTION_BOOT_ITEM;
-
-#pragma pack()
-
-typedef union {
- HTTP_BOOT_DHCP4_OPTION_PARA *Para;
- HTTP_BOOT_DHCP4_OPTION_UNDI *Undi;
- HTTP_BOOT_DHCP4_OPTION_ARCH *Arch;
- HTTP_BOOT_DHCP4_OPTION_CLID *Clid;
- HTTP_BOOT_DHCP4_OPTION_UUID *Uuid;
- HTTP_BOOT_DHCP4_OPTION_MESG *Mesg;
- HTTP_BOOT_DHCP4_OPTION_MAX_MESG_SIZE *MaxMesgSize;
-} HTTP_BOOT_DHCP4_OPTION_ENTRY;
-
-#define GET_NEXT_DHCP_OPTION(Opt) \
- (EFI_DHCP4_PACKET_OPTION *) ((UINT8 *) (Opt) + \
- sizeof (EFI_DHCP4_PACKET_OPTION) + (Opt)->Length - 1)
-
-#define GET_OPTION_BUFFER_LEN(Pkt) \
- ((Pkt)->Length - sizeof (EFI_DHCP4_HEADER) - 4)
-
-#define DEFAULT_CLASS_ID_DATA "HTTPClient:Arch:xxxxx:UNDI:003000"
-#define DEFAULT_UNDI_TYPE 1
-#define DEFAULT_UNDI_MAJOR 3
-#define DEFAULT_UNDI_MINOR 0
-
-typedef struct {
- UINT32 Reserved;
-} HTTP_BOOT_VENDOR_OPTION;
-
-typedef union {
- EFI_DHCP4_PACKET Offer;
- EFI_DHCP4_PACKET Ack;
- UINT8 Buffer[HTTP_BOOT_DHCP4_PACKET_MAX_SIZE];
-} HTTP_BOOT_DHCP4_PACKET;
-
-typedef struct {
- //
- // URI component
- //
- CHAR8 *Scheme;
- CHAR8 *Authority;
- CHAR8 *Path;
- CHAR8 *Query;
- CHAR8 *Fragment; /// TODO: may not required in HTTP URL
-
- CHAR8 *RegName; /// Point to somewhere in Authority
- BOOLEAN AddrIsOk;
- EFI_IP_ADDRESS Address;
- UINT16 Port;
-} HTTP_BOOT_URI_CONTENT;
-
-typedef struct {
- HTTP_BOOT_DHCP4_PACKET Packet;
- HTTP_BOOT_OFFER_TYPE OfferType;
- VOID *UriParser;
- EFI_DHCP4_PACKET_OPTION *OptList[HTTP_BOOT_DHCP4_TAG_INDEX_MAX];
-} HTTP_BOOT_DHCP4_PACKET_CACHE;
-
-/**
- Start the D.O.R.A DHCPv4 process to acquire the IPv4 address and other Http boot information.
-
- @param[in] Private Pointer to HTTP_BOOT private data.
-
- @retval EFI_SUCCESS The D.O.R.A process successfully finished.
- @retval Others Failed to finish the D.O.R.A process.
-
-**/
-EFI_STATUS
-HttpBootDhcp4Dora (
- IN HTTP_BOOT_PRIVATE_DATA *Private
- );
-
-/**
- This function will register the default DNS addresses to the network device.
-
- @param[in] Private The pointer to HTTP_BOOT_PRIVATE_DATA.
- @param[in] DataLength Size of the buffer pointed to by DnsServerData in bytes.
- @param[in] DnsServerData Point a list of DNS server address in an array
- of EFI_IPv4_ADDRESS instances.
-
- @retval EFI_SUCCESS The DNS configuration has been configured successfully.
- @retval Others Failed to configure the address.
-
-**/
-EFI_STATUS
-HttpBootRegisterIp4Dns (
- IN HTTP_BOOT_PRIVATE_DATA *Private,
- IN UINTN DataLength,
- IN VOID *DnsServerData
- );
-
-#endif
+/** @file\r
+ Functions declaration related with DHCPv4 for HTTP boot driver.\r
+\r
+Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2020, Hewlett Packard Enterprise Development LP. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
+\r
+**/\r
+\r
+#ifndef __EFI_UEFI_HTTP_BOOT_DHCP4_H__\r
+#define __EFI_UEFI_HTTP_BOOT_DHCP4_H__\r
+\r
+#define HTTP_BOOT_DHCP4_OPTION_MAX_NUM 16\r
+#define HTTP_BOOT_DHCP4_OPTION_MAX_SIZE 312\r
+#define HTTP_BOOT_DHCP4_PACKET_MAX_SIZE 1472\r
+\r
+#define HTTP_BOOT_DHCP4_OPCODE_REQUEST 1\r
+#define HTTP_BOOT_DHCP4_OPCODE_REPLY 2\r
+#define HTTP_BOOT_DHCP4_MSG_TYPE_REQUEST 3\r
+#define HTTP_BOOT_DHCP4_MAGIC 0x63538263 // network byte order\r
+\r
+#define HTTP_BOOT_DHCP4_OVERLOAD_FILE 1\r
+#define HTTP_BOOT_DHCP4_OVERLOAD_SERVER_NAME 2\r
+\r
+///\r
+/// HTTP Tag definition that identifies the processor\r
+/// and programming environment of the client system.\r
+/// These identifiers are defined by IETF:\r
+/// http://www.ietf.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xml\r
+///\r
+#if defined (MDE_CPU_IA32)\r
+#define EFI_HTTP_BOOT_CLIENT_SYSTEM_ARCHITECTURE HTTP_CLIENT_ARCH_IA32\r
+#elif defined (MDE_CPU_X64)\r
+#define EFI_HTTP_BOOT_CLIENT_SYSTEM_ARCHITECTURE HTTP_CLIENT_ARCH_X64\r
+#elif defined (MDE_CPU_ARM)\r
+#define EFI_HTTP_BOOT_CLIENT_SYSTEM_ARCHITECTURE HTTP_CLIENT_ARCH_ARM\r
+#elif defined (MDE_CPU_AARCH64)\r
+#define EFI_HTTP_BOOT_CLIENT_SYSTEM_ARCHITECTURE HTTP_CLIENT_ARCH_AARCH64\r
+#elif defined (MDE_CPU_RISCV64)\r
+#define EFI_HTTP_BOOT_CLIENT_SYSTEM_ARCHITECTURE HTTP_CLIENT_ARCH_RISCV64\r
+#elif defined (MDE_CPU_EBC)\r
+#define EFI_HTTP_BOOT_CLIENT_SYSTEM_ARCHITECTURE HTTP_CLIENT_ARCH_EBC\r
+#endif\r
+\r
+/// DHCP offer types among HTTP boot.\r
+/// Dhcp4 and Dhcp6 share this definition, and corresponding\r
+/// relationship is as follows:\r
+/// Dhcp4Discover <> Dhcp6Solicit\r
+/// Dhcp4Offer <> Dhcp6Advertise\r
+/// Dhcp4Request <> Dhcp6Request\r
+/// Dhcp4Ack <> DHcp6Reply\r
+///\r
+typedef enum {\r
+ //\r
+ // <IP address, IP expressed URI>\r
+ //\r
+ HttpOfferTypeDhcpIpUri,\r
+ //\r
+ // <IP address, IP expressed URI, Name-server>\r
+ //\r
+ HttpOfferTypeDhcpIpUriDns,\r
+ //\r
+ // <IP address, Domain-name expressed URI, Name-server>\r
+ //\r
+ HttpOfferTypeDhcpNameUriDns,\r
+ //\r
+ // <IP address, Name-server>\r
+ //\r
+ HttpOfferTypeDhcpDns,\r
+ //\r
+ // <IP address>\r
+ //\r
+ HttpOfferTypeDhcpOnly,\r
+ //\r
+ // <Domain-name expressed URI> or\r
+ // <Domain-name expressed URI, Name-server (will be ignored)>\r
+ //\r
+ HttpOfferTypeProxyNameUri,\r
+ //\r
+ // <IP expressed URI> or\r
+ // <IP expressed URI, Name-server (will be ignored)>\r
+ //\r
+ HttpOfferTypeProxyIpUri,\r
+ //\r
+ // <IP address, Domain-name expressed URI>\r
+ //\r
+ HttpOfferTypeDhcpNameUri,\r
+ HttpOfferTypeMax\r
+} HTTP_BOOT_OFFER_TYPE;\r
+\r
+#define HTTP_BOOT_DHCP_RETRIES 4\r
+#define HTTP_BOOT_OFFER_MAX_NUM 16\r
+\r
+// The array index of the DHCP4 option tag interested\r
+//\r
+#define HTTP_BOOT_DHCP4_TAG_INDEX_BOOTFILE_LEN 0\r
+#define HTTP_BOOT_DHCP4_TAG_INDEX_OVERLOAD 1\r
+#define HTTP_BOOT_DHCP4_TAG_INDEX_MSG_TYPE 2\r
+#define HTTP_BOOT_DHCP4_TAG_INDEX_SERVER_ID 3\r
+#define HTTP_BOOT_DHCP4_TAG_INDEX_CLASS_ID 4\r
+#define HTTP_BOOT_DHCP4_TAG_INDEX_BOOTFILE 5\r
+#define HTTP_BOOT_DHCP4_TAG_INDEX_DNS_SERVER 6\r
+#define HTTP_BOOT_DHCP4_TAG_INDEX_MAX 7\r
+\r
+#pragma pack(1)\r
+\r
+typedef struct {\r
+ UINT8 ParaList[135];\r
+} HTTP_BOOT_DHCP4_OPTION_PARA;\r
+\r
+typedef struct {\r
+ UINT16 Size;\r
+} HTTP_BOOT_DHCP4_OPTION_MAX_MESG_SIZE;\r
+\r
+typedef struct {\r
+ UINT8 Type;\r
+ UINT8 MajorVer;\r
+ UINT8 MinorVer;\r
+} HTTP_BOOT_DHCP4_OPTION_UNDI;\r
+\r
+typedef struct {\r
+ UINT8 Type;\r
+} HTTP_BOOT_DHCP4_OPTION_MESG;\r
+\r
+typedef struct {\r
+ UINT16 Type;\r
+} HTTP_BOOT_DHCP4_OPTION_ARCH;\r
+\r
+typedef struct {\r
+ UINT8 ClassIdentifier[11];\r
+ UINT8 ArchitecturePrefix[5];\r
+ UINT8 ArchitectureType[5];\r
+ UINT8 Lit3[1];\r
+ UINT8 InterfaceName[4];\r
+ UINT8 Lit4[1];\r
+ UINT8 UndiMajor[3];\r
+ UINT8 UndiMinor[3];\r
+} HTTP_BOOT_DHCP4_OPTION_CLID;\r
+\r
+typedef struct {\r
+ UINT8 Type;\r
+ UINT8 Guid[16];\r
+} HTTP_BOOT_DHCP4_OPTION_UUID;\r
+\r
+typedef struct {\r
+ UINT16 Type;\r
+ UINT16 Layer;\r
+} HTTP_BOOT_OPTION_BOOT_ITEM;\r
+\r
+#pragma pack()\r
+\r
+typedef union {\r
+ HTTP_BOOT_DHCP4_OPTION_PARA *Para;\r
+ HTTP_BOOT_DHCP4_OPTION_UNDI *Undi;\r
+ HTTP_BOOT_DHCP4_OPTION_ARCH *Arch;\r
+ HTTP_BOOT_DHCP4_OPTION_CLID *Clid;\r
+ HTTP_BOOT_DHCP4_OPTION_UUID *Uuid;\r
+ HTTP_BOOT_DHCP4_OPTION_MESG *Mesg;\r
+ HTTP_BOOT_DHCP4_OPTION_MAX_MESG_SIZE *MaxMesgSize;\r
+} HTTP_BOOT_DHCP4_OPTION_ENTRY;\r
+\r
+#define GET_NEXT_DHCP_OPTION(Opt) \\r
+ (EFI_DHCP4_PACKET_OPTION *) ((UINT8 *) (Opt) + \\r
+ sizeof (EFI_DHCP4_PACKET_OPTION) + (Opt)->Length - 1)\r
+\r
+#define GET_OPTION_BUFFER_LEN(Pkt) \\r
+ ((Pkt)->Length - sizeof (EFI_DHCP4_HEADER) - 4)\r
+\r
+#define DEFAULT_CLASS_ID_DATA "HTTPClient:Arch:xxxxx:UNDI:003000"\r
+#define DEFAULT_UNDI_TYPE 1\r
+#define DEFAULT_UNDI_MAJOR 3\r
+#define DEFAULT_UNDI_MINOR 0\r
+\r
+typedef struct {\r
+ UINT32 Reserved;\r
+} HTTP_BOOT_VENDOR_OPTION;\r
+\r
+#define HTTP_CACHED_DHCP4_PACKET_MAX_SIZE (OFFSET_OF (EFI_DHCP4_PACKET, Dhcp4) + HTTP_BOOT_DHCP4_PACKET_MAX_SIZE)\r
+\r
+typedef union {\r
+ EFI_DHCP4_PACKET Offer;\r
+ EFI_DHCP4_PACKET Ack;\r
+ UINT8 Buffer[HTTP_CACHED_DHCP4_PACKET_MAX_SIZE];\r
+} HTTP_BOOT_DHCP4_PACKET;\r
+\r
+typedef struct {\r
+ //\r
+ // URI component\r
+ //\r
+ CHAR8 *Scheme;\r
+ CHAR8 *Authority;\r
+ CHAR8 *Path;\r
+ CHAR8 *Query;\r
+ CHAR8 *Fragment; /// TODO: may not required in HTTP URL\r
+\r
+ CHAR8 *RegName; /// Point to somewhere in Authority\r
+ BOOLEAN AddrIsOk;\r
+ EFI_IP_ADDRESS Address;\r
+ UINT16 Port;\r
+} HTTP_BOOT_URI_CONTENT;\r
+\r
+typedef struct {\r
+ HTTP_BOOT_DHCP4_PACKET Packet;\r
+ HTTP_BOOT_OFFER_TYPE OfferType;\r
+ VOID *UriParser;\r
+ EFI_DHCP4_PACKET_OPTION *OptList[HTTP_BOOT_DHCP4_TAG_INDEX_MAX];\r
+} HTTP_BOOT_DHCP4_PACKET_CACHE;\r
+\r
+/**\r
+ Select an DHCPv4 or DHCP6 offer, and record SelectIndex and SelectProxyType.\r
+\r
+ @param[in] Private Pointer to HTTP boot driver private data.\r
+\r
+**/\r
+VOID\r
+HttpBootSelectDhcpOffer (\r
+ IN HTTP_BOOT_PRIVATE_DATA *Private\r
+ );\r
+\r
+/**\r
+ Start the D.O.R.A DHCPv4 process to acquire the IPv4 address and other Http boot information.\r
+\r
+ @param[in] Private Pointer to HTTP_BOOT private data.\r
+\r
+ @retval EFI_SUCCESS The D.O.R.A process successfully finished.\r
+ @retval Others Failed to finish the D.O.R.A process.\r
+\r
+**/\r
+EFI_STATUS\r
+HttpBootDhcp4Dora (\r
+ IN HTTP_BOOT_PRIVATE_DATA *Private\r
+ );\r
+\r
+/**\r
+ This function will register the default DNS addresses to the network device.\r
+\r
+ @param[in] Private The pointer to HTTP_BOOT_PRIVATE_DATA.\r
+ @param[in] DataLength Size of the buffer pointed to by DnsServerData in bytes.\r
+ @param[in] DnsServerData Point a list of DNS server address in an array\r
+ of EFI_IPv4_ADDRESS instances.\r
+\r
+ @retval EFI_SUCCESS The DNS configuration has been configured successfully.\r
+ @retval Others Failed to configure the address.\r
+\r
+**/\r
+EFI_STATUS\r
+HttpBootRegisterIp4Dns (\r
+ IN HTTP_BOOT_PRIVATE_DATA *Private,\r
+ IN UINTN DataLength,\r
+ IN VOID *DnsServerData\r
+ );\r
+\r
+#endif\r