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