]> git.proxmox.com Git - mirror_edk2.git/blame - NetworkPkg/HttpBootDxe/HttpBootDhcp6.h
NetworkPkg: Apply uncrustify changes
[mirror_edk2.git] / NetworkPkg / HttpBootDxe / HttpBootDhcp6.h
CommitLineData
b659408b
ZL
1/** @file\r
2 Functions declaration related with DHCPv6 for HTTP boot driver.\r
3\r
f75a7f56 4Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>\r
ecf98fbc 5SPDX-License-Identifier: BSD-2-Clause-Patent\r
b659408b
ZL
6\r
7**/\r
8\r
b659408b
ZL
9#ifndef __EFI_HTTP_BOOT_DHCP6_H__\r
10#define __EFI_HTTP_BOOT_DHCP6_H__\r
11\r
d1050b9d
MK
12#define HTTP_BOOT_OFFER_MAX_NUM 16\r
13#define HTTP_BOOT_DHCP6_OPTION_MAX_NUM 16\r
14#define HTTP_BOOT_DHCP6_OPTION_MAX_SIZE 312\r
15#define HTTP_BOOT_DHCP6_PACKET_MAX_SIZE 1472\r
16#define HTTP_BOOT_IP6_ROUTE_TABLE_TIMEOUT 10\r
17#define HTTP_BOOT_DEFAULT_HOPLIMIT 64\r
18#define HTTP_BOOT_DEFAULT_LIFETIME 50000\r
b659408b 19\r
d1050b9d
MK
20#define HTTP_BOOT_DHCP6_ENTERPRISE_NUM 343 // TODO: IANA TBD: temporarily using Intel's\r
21#define HTTP_BOOT_DHCP6_MAX_BOOT_FILE_SIZE 65535 // It's a limitation of bit length, 65535*512 bytes.\r
b659408b 22\r
d1050b9d
MK
23#define HTTP_BOOT_DHCP6_IDX_IA_NA 0\r
24#define HTTP_BOOT_DHCP6_IDX_BOOT_FILE_URL 1\r
25#define HTTP_BOOT_DHCP6_IDX_BOOT_FILE_PARAM 2\r
26#define HTTP_BOOT_DHCP6_IDX_VENDOR_CLASS 3\r
27#define HTTP_BOOT_DHCP6_IDX_DNS_SERVER 4\r
28#define HTTP_BOOT_DHCP6_IDX_MAX 5\r
b659408b
ZL
29\r
30#pragma pack(1)\r
31typedef struct {\r
d1050b9d 32 UINT16 OpCode[256];\r
b659408b
ZL
33} HTTP_BOOT_DHCP6_OPTION_ORO;\r
34\r
35typedef struct {\r
d1050b9d
MK
36 UINT8 Type;\r
37 UINT8 MajorVer;\r
38 UINT8 MinorVer;\r
b659408b
ZL
39} HTTP_BOOT_DHCP6_OPTION_UNDI;\r
40\r
41typedef struct {\r
d1050b9d 42 UINT16 Type;\r
b659408b
ZL
43} HTTP_BOOT_DHCP6_OPTION_ARCH;\r
44\r
45typedef struct {\r
d1050b9d
MK
46 UINT8 ClassIdentifier[11];\r
47 UINT8 ArchitecturePrefix[5];\r
48 UINT8 ArchitectureType[5];\r
49 UINT8 Lit3[1];\r
50 UINT8 InterfaceName[4];\r
51 UINT8 Lit4[1];\r
52 UINT8 UndiMajor[3];\r
53 UINT8 UndiMinor[3];\r
b659408b
ZL
54} HTTP_BOOT_CLASS_ID;\r
55\r
56typedef struct {\r
d1050b9d
MK
57 UINT32 Vendor;\r
58 UINT16 ClassLen;\r
59 HTTP_BOOT_CLASS_ID ClassId;\r
b659408b
ZL
60} HTTP_BOOT_DHCP6_OPTION_VENDOR_CLASS;\r
61\r
62#pragma pack()\r
63\r
64typedef union {\r
d1050b9d
MK
65 HTTP_BOOT_DHCP6_OPTION_ORO *Oro;\r
66 HTTP_BOOT_DHCP6_OPTION_UNDI *Undi;\r
67 HTTP_BOOT_DHCP6_OPTION_ARCH *Arch;\r
68 HTTP_BOOT_DHCP6_OPTION_VENDOR_CLASS *VendorClass;\r
b659408b
ZL
69} HTTP_BOOT_DHCP6_OPTION_ENTRY;\r
70\r
632dcfd6
FS
71#define HTTP_CACHED_DHCP6_PACKET_MAX_SIZE (OFFSET_OF (EFI_DHCP6_PACKET, Dhcp6) + HTTP_BOOT_DHCP6_PACKET_MAX_SIZE)\r
72\r
b659408b 73typedef union {\r
d1050b9d
MK
74 EFI_DHCP6_PACKET Offer;\r
75 EFI_DHCP6_PACKET Ack;\r
76 UINT8 Buffer[HTTP_CACHED_DHCP6_PACKET_MAX_SIZE];\r
b659408b
ZL
77} HTTP_BOOT_DHCP6_PACKET;\r
78\r
79typedef struct {\r
d1050b9d
MK
80 HTTP_BOOT_DHCP6_PACKET Packet;\r
81 HTTP_BOOT_OFFER_TYPE OfferType;\r
82 EFI_DHCP6_PACKET_OPTION *OptList[HTTP_BOOT_DHCP6_IDX_MAX];\r
83 VOID *UriParser;\r
b659408b
ZL
84} HTTP_BOOT_DHCP6_PACKET_CACHE;\r
85\r
86#define GET_NEXT_DHCP6_OPTION(Opt) \\r
87 (EFI_DHCP6_PACKET_OPTION *) ((UINT8 *) (Opt) + \\r
88 sizeof (EFI_DHCP6_PACKET_OPTION) + (NTOHS ((Opt)->OpLen)) - 1)\r
89\r
90#define GET_DHCP6_OPTION_SIZE(Pkt) \\r
91 ((Pkt)->Length - sizeof (EFI_DHCP6_HEADER))\r
92\r
93/**\r
94 Start the S.A.R.R DHCPv6 process to acquire the IPv6 address and other Http boot information.\r
95\r
96 @param[in] Private Pointer to HTTP_BOOT private data.\r
97\r
98 @retval EFI_SUCCESS The S.A.R.R process successfully finished.\r
99 @retval Others Failed to finish the S.A.R.R process.\r
100\r
101**/\r
102EFI_STATUS\r
103HttpBootDhcp6Sarr (\r
d1050b9d 104 IN HTTP_BOOT_PRIVATE_DATA *Private\r
b659408b
ZL
105 );\r
106\r
107/**\r
108 Set the IP6 policy to Automatic.\r
109\r
110 @param[in] Private The pointer to HTTP_BOOT_PRIVATE_DATA.\r
111\r
c36b7b51
AC
112 @retval EFI_SUCCESS Switch the IP policy successfully.\r
113 @retval Others Unexpected error happened.\r
b659408b
ZL
114\r
115**/\r
116EFI_STATUS\r
117HttpBootSetIp6Policy (\r
d1050b9d 118 IN HTTP_BOOT_PRIVATE_DATA *Private\r
b659408b
ZL
119 );\r
120\r
121/**\r
122 This function will register the default DNS addresses to the network device.\r
f75a7f56 123\r
b659408b
ZL
124 @param[in] Private The pointer to HTTP_BOOT_PRIVATE_DATA.\r
125 @param[in] DataLength Size of the buffer pointed to by DnsServerData in bytes.\r
126 @param[in] DnsServerData Point a list of DNS server address in an array\r
127 of EFI_IPv6_ADDRESS instances.\r
128\r
129 @retval EFI_SUCCESS The DNS configuration has been configured successfully.\r
130 @retval Others Failed to configure the address.\r
131\r
132**/\r
133EFI_STATUS\r
134HttpBootSetIp6Dns (\r
d1050b9d
MK
135 IN HTTP_BOOT_PRIVATE_DATA *Private,\r
136 IN UINTN DataLength,\r
137 IN VOID *DnsServerData\r
b659408b
ZL
138 );\r
139\r
140/**\r
141 This function will register the IPv6 gateway address to the network device.\r
f75a7f56 142\r
b659408b
ZL
143 @param[in] Private The pointer to HTTP_BOOT_PRIVATE_DATA.\r
144\r
145 @retval EFI_SUCCESS The new IP configuration has been configured successfully.\r
146 @retval Others Failed to configure the address.\r
147\r
148**/\r
149EFI_STATUS\r
150HttpBootSetIp6Gateway (\r
d1050b9d 151 IN HTTP_BOOT_PRIVATE_DATA *Private\r
b659408b
ZL
152 );\r
153\r
154/**\r
155 This function will register the station IP address.\r
f75a7f56 156\r
b659408b
ZL
157 @param[in] Private The pointer to HTTP_BOOT_PRIVATE_DATA.\r
158\r
159 @retval EFI_SUCCESS The new IP address has been configured successfully.\r
160 @retval Others Failed to configure the address.\r
161\r
162**/\r
163EFI_STATUS\r
164HttpBootSetIp6Address (\r
d1050b9d 165 IN HTTP_BOOT_PRIVATE_DATA *Private\r
b659408b
ZL
166 );\r
167\r
168#endif\r