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