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