]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/HttpBootDxe/HttpBootDhcp4.h
NetworkPkg/HttpBootDxe: Add RISC-V architecture for EDK2 CI.
[mirror_edk2.git] / NetworkPkg / HttpBootDxe / HttpBootDhcp4.h
index 47e07aaa855ece942b4cd7c075b8deffaba6c852..606a466aaed8a838e198140869505b2bc1b100e1 100644 (file)
-/** @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
-#elif defined (MDE_CPU_EBC)
-#define EFI_HTTP_BOOT_CLIENT_SYSTEM_ARCHITECTURE    0x0011
-#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