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