]> git.proxmox.com Git - mirror_edk2.git/blame - NetworkPkg/UefiPxeBcDxe/PxeBcDhcp6.h
NetworkPkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / NetworkPkg / UefiPxeBcDxe / PxeBcDhcp6.h
CommitLineData
a3bcde70
HT
1/** @file\r
2 Functions declaration related with DHCPv6 for UefiPxeBc Driver.\r
3\r
f75a7f56 4 Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
a3bcde70 5\r
ecf98fbc 6 SPDX-License-Identifier: BSD-2-Clause-Patent\r
a3bcde70
HT
7\r
8**/\r
9\r
10#ifndef __EFI_PXEBC_DHCP6_H__\r
11#define __EFI_PXEBC_DHCP6_H__\r
12\r
13#define PXEBC_DHCP6_OPTION_MAX_NUM 16\r
14#define PXEBC_DHCP6_OPTION_MAX_SIZE 312\r
632dcfd6 15#define PXEBC_DHCP6_PACKET_MAX_SIZE (sizeof (EFI_PXE_BASE_CODE_PACKET))\r
a3bcde70 16#define PXEBC_IP6_POLICY_MAX 0xff\r
ae97201c 17#define PXEBC_IP6_ROUTE_TABLE_TIMEOUT 10\r
a3bcde70
HT
18\r
19#define PXEBC_DHCP6_S_PORT 547\r
20#define PXEBC_DHCP6_C_PORT 546\r
21\r
a3bcde70
HT
22#define PXEBC_DHCP6_ENTERPRISE_NUM 343 // TODO: IANA TBD: temporarily using Intel's\r
23#define PXEBC_DHCP6_MAX_BOOT_FILE_SIZE 65535 // It's a limitation of bit length, 65535*512 bytes.\r
24\r
25\r
26#define PXEBC_DHCP6_IDX_IA_NA 0\r
27#define PXEBC_DHCP6_IDX_BOOT_FILE_URL 1\r
28#define PXEBC_DHCP6_IDX_BOOT_FILE_PARAM 2\r
29#define PXEBC_DHCP6_IDX_VENDOR_CLASS 3\r
6692d519
ZL
30#define PXEBC_DHCP6_IDX_DNS_SERVER 4\r
31#define PXEBC_DHCP6_IDX_MAX 5\r
a3bcde70
HT
32\r
33#define PXEBC_DHCP6_BOOT_FILE_URL_PREFIX "tftp://"\r
34#define PXEBC_TFTP_URL_SEPARATOR '/'\r
35#define PXEBC_ADDR_START_DELIMITER '['\r
36#define PXEBC_ADDR_END_DELIMITER ']'\r
37\r
38#define GET_NEXT_DHCP6_OPTION(Opt) \\r
39 (EFI_DHCP6_PACKET_OPTION *) ((UINT8 *) (Opt) + \\r
40 sizeof (EFI_DHCP6_PACKET_OPTION) + (NTOHS ((Opt)->OpLen)) - 1)\r
41\r
42#define GET_DHCP6_OPTION_SIZE(Pkt) \\r
43 ((Pkt)->Length - sizeof (EFI_DHCP6_HEADER))\r
44\r
45#define IS_PROXY_OFFER(Type) \\r
46 ((Type) == PxeOfferTypeProxyBinl || \\r
47 (Type) == PxeOfferTypeProxyPxe10 || \\r
48 (Type) == PxeOfferTypeProxyWfm11a)\r
49\r
50\r
51#pragma pack(1)\r
52typedef struct {\r
53 UINT16 OpCode[256];\r
54} PXEBC_DHCP6_OPTION_ORO;\r
55\r
56typedef struct {\r
57 UINT8 Type;\r
58 UINT8 MajorVer;\r
59 UINT8 MinorVer;\r
a3bcde70
HT
60} PXEBC_DHCP6_OPTION_UNDI;\r
61\r
62typedef struct {\r
63 UINT16 Type;\r
64} PXEBC_DHCP6_OPTION_ARCH;\r
65\r
66typedef struct {\r
67 UINT8 ClassIdentifier[10];\r
68 UINT8 ArchitecturePrefix[5];\r
69 UINT8 ArchitectureType[5];\r
70 UINT8 Lit3[1];\r
71 UINT8 InterfaceName[4];\r
72 UINT8 Lit4[1];\r
73 UINT8 UndiMajor[3];\r
74 UINT8 UndiMinor[3];\r
75} PXEBC_CLASS_ID;\r
76\r
77typedef struct {\r
78 UINT32 Vendor;\r
79 UINT16 ClassLen;\r
80 PXEBC_CLASS_ID ClassId;\r
81} PXEBC_DHCP6_OPTION_VENDOR_CLASS;\r
82\r
83#pragma pack()\r
84\r
85typedef union {\r
86 PXEBC_DHCP6_OPTION_ORO *Oro;\r
87 PXEBC_DHCP6_OPTION_UNDI *Undi;\r
88 PXEBC_DHCP6_OPTION_ARCH *Arch;\r
89 PXEBC_DHCP6_OPTION_VENDOR_CLASS *VendorClass;\r
90} PXEBC_DHCP6_OPTION_ENTRY;\r
91\r
92typedef struct {\r
93 LIST_ENTRY Link;\r
94 EFI_DHCP6_PACKET_OPTION *Option;\r
95 UINT8 Precedence;\r
96} PXEBC_DHCP6_OPTION_NODE;\r
97\r
632dcfd6
FS
98#define PXEBC_CACHED_DHCP6_PACKET_MAX_SIZE (OFFSET_OF (EFI_DHCP6_PACKET, Dhcp6) + PXEBC_DHCP6_PACKET_MAX_SIZE)\r
99\r
a3bcde70
HT
100typedef union {\r
101 EFI_DHCP6_PACKET Offer;\r
102 EFI_DHCP6_PACKET Ack;\r
632dcfd6 103 UINT8 Buffer[PXEBC_CACHED_DHCP6_PACKET_MAX_SIZE];\r
a3bcde70
HT
104} PXEBC_DHCP6_PACKET;\r
105\r
106typedef struct {\r
107 PXEBC_DHCP6_PACKET Packet;\r
108 PXEBC_OFFER_TYPE OfferType;\r
109 EFI_DHCP6_PACKET_OPTION *OptList[PXEBC_DHCP6_IDX_MAX];\r
110} PXEBC_DHCP6_PACKET_CACHE;\r
111\r
112\r
a3bcde70
HT
113\r
114\r
115/**\r
116 Parse the Boot File URL option.\r
117\r
6692d519 118 @param[in] Private Pointer to PxeBc private data.\r
a3bcde70
HT
119 @param[out] FileName The pointer to the boot file name.\r
120 @param[in, out] SrvAddr The pointer to the boot server address.\r
121 @param[in] BootFile The pointer to the boot file URL option data.\r
122 @param[in] Length Length of the boot file URL option data.\r
123\r
124 @retval EFI_ABORTED User canceled the operation.\r
125 @retval EFI_SUCCESS Selected the boot menu successfully.\r
126 @retval EFI_NOT_READY Read the input key from the keybroad has not finish.\r
127\r
128**/\r
129EFI_STATUS\r
130PxeBcExtractBootFileUrl (\r
6692d519 131 IN PXEBC_PRIVATE_DATA *Private,\r
a3bcde70
HT
132 OUT UINT8 **FileName,\r
133 IN OUT EFI_IPv6_ADDRESS *SrvAddr,\r
134 IN CHAR8 *BootFile,\r
135 IN UINT16 Length\r
136 );\r
137\r
138\r
139/**\r
140 Parse the Boot File Parameter option.\r
141\r
142 @param[in] BootFilePara The pointer to the boot file parameter option data.\r
143 @param[out] BootFileSize The pointer to the parsed boot file size.\r
144\r
145 @retval EFI_SUCCESS Successfully obtained the boot file size from parameter option.\r
146 @retval EFI_NOT_FOUND Failed to extract the boot file size from parameter option.\r
147\r
148**/\r
149EFI_STATUS\r
150PxeBcExtractBootFileParam (\r
151 IN CHAR8 *BootFilePara,\r
152 OUT UINT16 *BootFileSize\r
153 );\r
154\r
155\r
156/**\r
157 Parse the cached DHCPv6 packet, including all the options.\r
158\r
159 @param[in] Cache6 The pointer to a cached DHCPv6 packet.\r
160\r
161 @retval EFI_SUCCESS Parsed the DHCPv6 packet successfully.\r
162 @retval EFI_DEVICE_ERROR Failed to parse and invalid packet.\r
163\r
164**/\r
165EFI_STATUS\r
166PxeBcParseDhcp6Packet (\r
167 IN PXEBC_DHCP6_PACKET_CACHE *Cache6\r
168 );\r
169\r
170\r
171/**\r
172 Register the ready address by Ip6Config protocol.\r
173\r
174 @param[in] Private The pointer to the PxeBc private data.\r
175 @param[in] Address The pointer to the ready address.\r
176\r
177 @retval EFI_SUCCESS Registered the address succesfully.\r
178 @retval Others Failed to register the address.\r
179\r
180**/\r
181EFI_STATUS\r
182PxeBcRegisterIp6Address (\r
183 IN PXEBC_PRIVATE_DATA *Private,\r
184 IN EFI_IPv6_ADDRESS *Address\r
185 );\r
186\r
187\r
188/**\r
189 Unregister the address by Ip6Config protocol.\r
190\r
191 @param[in] Private The pointer to the PxeBc private data.\r
192\r
193**/\r
194VOID\r
195PxeBcUnregisterIp6Address (\r
196 IN PXEBC_PRIVATE_DATA *Private\r
197 );\r
198\r
199\r
200/**\r
201 Build and send out the request packet for the bootfile, and parse the reply.\r
202\r
203 @param[in] Private The pointer to the PxeBc private data.\r
204 @param[in] Type PxeBc option boot item type.\r
205 @param[in] Layer The pointer to the option boot item layer.\r
206 @param[in] UseBis Use BIS or not.\r
207 @param[in] DestIp The pointer to the server address.\r
208\r
209 @retval EFI_SUCCESS Successfully discovered theboot file.\r
210 @retval EFI_OUT_OF_RESOURCES Failed to allocate resource.\r
211 @retval EFI_NOT_FOUND Can't get the PXE reply packet.\r
212 @retval Others Failed to discover boot file.\r
213\r
214**/\r
215EFI_STATUS\r
216PxeBcDhcp6Discover (\r
217 IN PXEBC_PRIVATE_DATA *Private,\r
218 IN UINT16 Type,\r
219 IN UINT16 *Layer,\r
220 IN BOOLEAN UseBis,\r
221 IN EFI_IP_ADDRESS *DestIp\r
222 );\r
223\r
ae97201c
FS
224/**\r
225 Set the IP6 policy to Automatic.\r
226\r
227 @param[in] Private The pointer to PXEBC_PRIVATE_DATA.\r
228\r
229 @retval EFI_SUCCESS Switch the IP policy succesfully.\r
230 @retval Others Unexpect error happened.\r
231\r
232**/\r
233EFI_STATUS\r
234PxeBcSetIp6Policy (\r
235 IN PXEBC_PRIVATE_DATA *Private\r
236 );\r
237\r
238/**\r
239 This function will register the station IP address and flush IP instance to start using the new IP address.\r
f75a7f56 240\r
ae97201c
FS
241 @param[in] Private The pointer to PXEBC_PRIVATE_DATA.\r
242\r
243 @retval EFI_SUCCESS The new IP address has been configured successfully.\r
244 @retval Others Failed to configure the address.\r
245\r
246**/\r
247EFI_STATUS\r
248PxeBcSetIp6Address (\r
249 IN PXEBC_PRIVATE_DATA *Private\r
250 );\r
a3bcde70
HT
251\r
252/**\r
253 Start the DHCPv6 S.A.R.R. process to acquire the IPv6 address and other PXE boot information.\r
254\r
255 @param[in] Private The pointer to the PxeBc private data.\r
256 @param[in] Dhcp6 The pointer to EFI_DHCP6_PROTOCOL.\r
257\r
258 @retval EFI_SUCCESS The S.A.R.R. process successfully finished.\r
259 @retval Others Failed to finish the S.A.R.R. process.\r
260\r
261**/\r
262EFI_STATUS\r
263PxeBcDhcp6Sarr (\r
264 IN PXEBC_PRIVATE_DATA *Private,\r
265 IN EFI_DHCP6_PROTOCOL *Dhcp6\r
266 );\r
267\r
268#endif\r
269\r