]> git.proxmox.com Git - mirror_edk2.git/blame - NetworkPkg/HttpBootDxe/HttpBootDhcp4.h
NetworkPkg: Fix some typos of "according"
[mirror_edk2.git] / NetworkPkg / HttpBootDxe / HttpBootDhcp4.h
CommitLineData
d933e70a
JW
1/** @file\r
2 Functions declaration related with DHCPv4 for HTTP boot driver.\r
3\r
fa848a40 4Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>\r
d933e70a
JW
5This program and the accompanying materials are licensed and made available under \r
6the terms and conditions of the BSD License that accompanies this distribution. \r
7The full text of the license may be found at\r
8http://opensource.org/licenses/bsd-license.php. \r
9 \r
10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
11WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12\r
13**/\r
14\r
15#ifndef __EFI_UEFI_HTTP_BOOT_DHCP4_H__\r
16#define __EFI_UEFI_HTTP_BOOT_DHCP4_H__\r
17\r
18#define HTTP_BOOT_DHCP4_OPTION_MAX_NUM 16\r
19#define HTTP_BOOT_DHCP4_OPTION_MAX_SIZE 312\r
20#define HTTP_BOOT_DHCP4_PACKET_MAX_SIZE 1472\r
21\r
22#define HTTP_BOOT_DHCP4_OPCODE_REQUEST 1\r
23#define HTTP_BOOT_DHCP4_OPCODE_REPLY 2\r
24#define HTTP_BOOT_DHCP4_MSG_TYPE_REQUEST 3\r
25#define HTTP_BOOT_DHCP4_MAGIC 0x63538263 // network byte order\r
26\r
d933e70a
JW
27#define HTTP_BOOT_DHCP4_OVERLOAD_FILE 1\r
28#define HTTP_BOOT_DHCP4_OVERLOAD_SERVER_NAME 2\r
29\r
30///\r
31/// HTTP Tag definition that identifies the processor \r
32/// and programming environment of the client system.\r
33/// These identifiers are defined by IETF:\r
34/// http://www.ietf.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xml\r
35///\r
36#if defined (MDE_CPU_IA32)\r
142c00c3 37#define EFI_HTTP_BOOT_CLIENT_SYSTEM_ARCHITECTURE HTTP_CLIENT_ARCH_IA32\r
d933e70a 38#elif defined (MDE_CPU_X64)\r
142c00c3 39#define EFI_HTTP_BOOT_CLIENT_SYSTEM_ARCHITECTURE HTTP_CLIENT_ARCH_X64\r
d933e70a 40#elif defined (MDE_CPU_ARM)\r
142c00c3 41#define EFI_HTTP_BOOT_CLIENT_SYSTEM_ARCHITECTURE HTTP_CLIENT_ARCH_ARM\r
d933e70a 42#elif defined (MDE_CPU_AARCH64)\r
142c00c3 43#define EFI_HTTP_BOOT_CLIENT_SYSTEM_ARCHITECTURE HTTP_CLIENT_ARCH_AARCH64\r
d933e70a 44#elif defined (MDE_CPU_EBC)\r
142c00c3 45#define EFI_HTTP_BOOT_CLIENT_SYSTEM_ARCHITECTURE HTTP_CLIENT_ARCH_EBC\r
d933e70a
JW
46#endif\r
47\r
48/// DHCP offer types among HTTP boot.\r
49/// Dhcp4 and Dhcp6 share this definition, and corresponding\r
50/// relatioinship is as follows:\r
51/// Dhcp4Discover <> Dhcp6Solicit\r
52/// Dhcp4Offer <> Dhcp6Advertise\r
53/// Dhcp4Request <> Dhcp6Request\r
54/// Dhcp4Ack <> DHcp6Reply\r
55///\r
56typedef enum {\r
57 //\r
fa848a40 58 // <IP address, IP expressed URI>\r
d933e70a
JW
59 //\r
60 HttpOfferTypeDhcpIpUri,\r
61 //\r
fa848a40
FS
62 // <IP address, IP expressed URI, Name-server>\r
63 //\r
64 HttpOfferTypeDhcpIpUriDns,\r
65 //\r
d933e70a
JW
66 // <IP address, Domain-name expressed URI, Name-server>\r
67 //\r
68 HttpOfferTypeDhcpNameUriDns,\r
69 //\r
70 // <IP address, Name-server>\r
71 //\r
72 HttpOfferTypeDhcpDns,\r
73 //\r
74 // <IP address>\r
75 //\r
76 HttpOfferTypeDhcpOnly,\r
77 //\r
78 // <Domain-name expressed URI> or\r
79 // <Domain-name expressed URI, Name-server (will be ignored)>\r
80 //\r
81 HttpOfferTypeProxyNameUri,\r
82 //\r
83 // <IP expressed URI> or\r
84 // <IP expressed URI, Name-server (will be ignored)>\r
85 //\r
86 HttpOfferTypeProxyIpUri,\r
87 //\r
88 // <IP address, Domain-name expressed URI>\r
89 //\r
90 HttpOfferTypeDhcpNameUri,\r
91 HttpOfferTypeMax\r
92} HTTP_BOOT_OFFER_TYPE;\r
93\r
94#define HTTP_BOOT_DHCP_RETRIES 4\r
95#define HTTP_BOOT_OFFER_MAX_NUM 16\r
96\r
97// The array index of the DHCP4 option tag interested\r
98//\r
99#define HTTP_BOOT_DHCP4_TAG_INDEX_BOOTFILE_LEN 0\r
100#define HTTP_BOOT_DHCP4_TAG_INDEX_OVERLOAD 1\r
101#define HTTP_BOOT_DHCP4_TAG_INDEX_MSG_TYPE 2\r
102#define HTTP_BOOT_DHCP4_TAG_INDEX_SERVER_ID 3\r
103#define HTTP_BOOT_DHCP4_TAG_INDEX_CLASS_ID 4\r
104#define HTTP_BOOT_DHCP4_TAG_INDEX_BOOTFILE 5\r
105#define HTTP_BOOT_DHCP4_TAG_INDEX_DNS_SERVER 6\r
106#define HTTP_BOOT_DHCP4_TAG_INDEX_MAX 7\r
107\r
108#pragma pack(1)\r
109\r
110typedef struct {\r
111 UINT8 ParaList[135];\r
112} HTTP_BOOT_DHCP4_OPTION_PARA;\r
113\r
114typedef struct {\r
115 UINT16 Size;\r
116} HTTP_BOOT_DHCP4_OPTION_MAX_MESG_SIZE;\r
117\r
118typedef struct {\r
119 UINT8 Type;\r
120 UINT8 MajorVer;\r
121 UINT8 MinorVer;\r
122} HTTP_BOOT_DHCP4_OPTION_UNDI;\r
123\r
124typedef struct {\r
125 UINT8 Type;\r
126} HTTP_BOOT_DHCP4_OPTION_MESG;\r
127\r
128typedef struct {\r
129 UINT16 Type;\r
130} HTTP_BOOT_DHCP4_OPTION_ARCH;\r
131\r
132typedef struct {\r
133 UINT8 ClassIdentifier[11];\r
134 UINT8 ArchitecturePrefix[5];\r
135 UINT8 ArchitectureType[5];\r
136 UINT8 Lit3[1];\r
137 UINT8 InterfaceName[4];\r
138 UINT8 Lit4[1];\r
139 UINT8 UndiMajor[3];\r
140 UINT8 UndiMinor[3];\r
141} HTTP_BOOT_DHCP4_OPTION_CLID;\r
142\r
143typedef struct {\r
144 UINT8 Type;\r
145 UINT8 Guid[16];\r
146} HTTP_BOOT_DHCP4_OPTION_UUID;\r
147\r
148typedef struct {\r
149 UINT16 Type;\r
150 UINT16 Layer;\r
151} HTTP_BOOT_OPTION_BOOT_ITEM;\r
152\r
153#pragma pack()\r
154\r
155typedef union {\r
156 HTTP_BOOT_DHCP4_OPTION_PARA *Para;\r
157 HTTP_BOOT_DHCP4_OPTION_UNDI *Undi;\r
158 HTTP_BOOT_DHCP4_OPTION_ARCH *Arch;\r
159 HTTP_BOOT_DHCP4_OPTION_CLID *Clid;\r
160 HTTP_BOOT_DHCP4_OPTION_UUID *Uuid;\r
161 HTTP_BOOT_DHCP4_OPTION_MESG *Mesg;\r
162 HTTP_BOOT_DHCP4_OPTION_MAX_MESG_SIZE *MaxMesgSize;\r
163} HTTP_BOOT_DHCP4_OPTION_ENTRY;\r
164\r
165#define GET_NEXT_DHCP_OPTION(Opt) \\r
166 (EFI_DHCP4_PACKET_OPTION *) ((UINT8 *) (Opt) + \\r
167 sizeof (EFI_DHCP4_PACKET_OPTION) + (Opt)->Length - 1)\r
168\r
169#define GET_OPTION_BUFFER_LEN(Pkt) \\r
170 ((Pkt)->Length - sizeof (EFI_DHCP4_HEADER) - 4)\r
171\r
172#define DEFAULT_CLASS_ID_DATA "HTTPClient:Arch:xxxxx:UNDI:003000"\r
173#define DEFAULT_UNDI_TYPE 1\r
174#define DEFAULT_UNDI_MAJOR 3\r
175#define DEFAULT_UNDI_MINOR 0\r
176\r
177typedef struct {\r
178 UINT32 Reserved;\r
179} HTTP_BOOT_VENDOR_OPTION;\r
180\r
632dcfd6
FS
181#define HTTP_CACHED_DHCP4_PACKET_MAX_SIZE (OFFSET_OF (EFI_DHCP4_PACKET, Dhcp4) + HTTP_BOOT_DHCP4_PACKET_MAX_SIZE)\r
182\r
d933e70a
JW
183typedef union {\r
184 EFI_DHCP4_PACKET Offer;\r
185 EFI_DHCP4_PACKET Ack;\r
632dcfd6 186 UINT8 Buffer[HTTP_CACHED_DHCP4_PACKET_MAX_SIZE];\r
d933e70a
JW
187} HTTP_BOOT_DHCP4_PACKET;\r
188\r
189typedef struct {\r
190 //\r
191 // URI component\r
192 //\r
193 CHAR8 *Scheme;\r
194 CHAR8 *Authority;\r
195 CHAR8 *Path;\r
196 CHAR8 *Query;\r
197 CHAR8 *Fragment; /// TODO: may not required in HTTP URL\r
198\r
199 CHAR8 *RegName; /// Point to somewhere in Authority\r
200 BOOLEAN AddrIsOk;\r
201 EFI_IP_ADDRESS Address;\r
202 UINT16 Port;\r
203} HTTP_BOOT_URI_CONTENT;\r
204\r
205typedef struct {\r
206 HTTP_BOOT_DHCP4_PACKET Packet;\r
207 HTTP_BOOT_OFFER_TYPE OfferType;\r
208 VOID *UriParser;\r
209 EFI_DHCP4_PACKET_OPTION *OptList[HTTP_BOOT_DHCP4_TAG_INDEX_MAX];\r
210} HTTP_BOOT_DHCP4_PACKET_CACHE;\r
211\r
b659408b
ZL
212/**\r
213 Select an DHCPv4 or DHCP6 offer, and record SelectIndex and SelectProxyType.\r
214\r
215 @param[in] Private Pointer to HTTP boot driver private data.\r
216\r
217**/\r
218VOID\r
219HttpBootSelectDhcpOffer (\r
220 IN HTTP_BOOT_PRIVATE_DATA *Private\r
221 );\r
222\r
d933e70a
JW
223/**\r
224 Start the D.O.R.A DHCPv4 process to acquire the IPv4 address and other Http boot information.\r
225\r
226 @param[in] Private Pointer to HTTP_BOOT private data.\r
227\r
228 @retval EFI_SUCCESS The D.O.R.A process successfully finished.\r
229 @retval Others Failed to finish the D.O.R.A process.\r
230\r
231**/\r
232EFI_STATUS\r
233HttpBootDhcp4Dora (\r
234 IN HTTP_BOOT_PRIVATE_DATA *Private\r
235 );\r
236\r
237/**\r
238 This function will register the default DNS addresses to the network device.\r
239 \r
240 @param[in] Private The pointer to HTTP_BOOT_PRIVATE_DATA.\r
241 @param[in] DataLength Size of the buffer pointed to by DnsServerData in bytes.\r
242 @param[in] DnsServerData Point a list of DNS server address in an array\r
243 of EFI_IPv4_ADDRESS instances.\r
244\r
245 @retval EFI_SUCCESS The DNS configuration has been configured successfully.\r
246 @retval Others Failed to configure the address.\r
247\r
248**/\r
249EFI_STATUS\r
250HttpBootRegisterIp4Dns (\r
251 IN HTTP_BOOT_PRIVATE_DATA *Private,\r
252 IN UINTN DataLength,\r
253 IN VOID *DnsServerData\r
254 );\r
255\r
256#endif\r