]> git.proxmox.com Git - mirror_edk2.git/blob - NetworkPkg/HttpBootDxe/HttpBootDhcp6.h
UefiCpuPkg/Application/Cpuid: Remove unnecessary code check
[mirror_edk2.git] / NetworkPkg / HttpBootDxe / HttpBootDhcp6.h
1 /** @file
2 Functions declaration related with DHCPv6 for HTTP boot driver.
3
4 Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials are licensed and made available under
6 the terms and conditions of the BSD License that accompanies this distribution.
7 The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php.
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13 **/
14
15
16 #ifndef __EFI_HTTP_BOOT_DHCP6_H__
17 #define __EFI_HTTP_BOOT_DHCP6_H__
18
19 #define HTTP_BOOT_OFFER_MAX_NUM 16
20 #define HTTP_BOOT_DHCP6_OPTION_MAX_NUM 16
21 #define HTTP_BOOT_DHCP6_OPTION_MAX_SIZE 312
22 #define HTTP_BOOT_DHCP6_PACKET_MAX_SIZE 1472
23 #define HTTP_BOOT_IP6_ROUTE_TABLE_TIMEOUT 10
24 #define HTTP_BOOT_DEFAULT_HOPLIMIT 64
25 #define HTTP_BOOT_DEFAULT_LIFETIME 50000
26
27
28 #define HTTP_BOOT_DHCP6_OPT_CLIENT_ID 1
29 #define HTTP_BOOT_DHCP6_OPT_SERVER_ID 2
30 #define HTTP_BOOT_DHCP6_OPT_IA_NA 3
31 #define HTTP_BOOT_DHCP6_OPT_IA_TA 4
32 #define HTTP_BOOT_DHCP6_OPT_IAADDR 5
33 #define HTTP_BOOT_DHCP6_OPT_ORO 6
34 #define HTTP_BOOT_DHCP6_OPT_PREFERENCE 7
35 #define HTTP_BOOT_DHCP6_OPT_ELAPSED_TIME 8
36 #define HTTP_BOOT_DHCP6_OPT_REPLAY_MSG 9
37 #define HTTP_BOOT_DHCP6_OPT_AUTH 11
38 #define HTTP_BOOT_DHCP6_OPT_UNICAST 12
39 #define HTTP_BOOT_DHCP6_OPT_STATUS_CODE 13
40 #define HTTP_BOOT_DHCP6_OPT_RAPID_COMMIT 14
41 #define HTTP_BOOT_DHCP6_OPT_USER_CLASS 15
42 #define HTTP_BOOT_DHCP6_OPT_VENDOR_CLASS 16
43 #define HTTP_BOOT_DHCP6_OPT_VENDOR_OPTS 17
44 #define HTTP_BOOT_DHCP6_OPT_INTERFACE_ID 18
45 #define HTTP_BOOT_DHCP6_OPT_RECONFIG_MSG 19
46 #define HTTP_BOOT_DHCP6_OPT_RECONFIG_ACCEPT 20
47 #define HTTP_BOOT_DHCP6_OPT_DNS_SERVERS 23
48 #define HTTP_BOOT_DHCP6_OPT_BOOT_FILE_URL 59 // Assigned by IANA, RFC 5970
49 #define HTTP_BOOT_DHCP6_OPT_BOOT_FILE_PARAM 60 // Assigned by IANA, RFC 5970
50 #define HTTP_BOOT_DHCP6_OPT_ARCH 61 // Assigned by IANA, RFC 5970
51 #define HTTP_BOOT_DHCP6_OPT_UNDI 62 // Assigned by IANA, RFC 5970
52 #define HTTP_BOOT_DHCP6_ENTERPRISE_NUM 343 // TODO: IANA TBD: temporarily using Intel's
53 #define HTTP_BOOT_DHCP6_MAX_BOOT_FILE_SIZE 65535 // It's a limitation of bit length, 65535*512 bytes.
54
55 #define HTTP_BOOT_DHCP6_IDX_IA_NA 0
56 #define HTTP_BOOT_DHCP6_IDX_BOOT_FILE_URL 1
57 #define HTTP_BOOT_DHCP6_IDX_BOOT_FILE_PARAM 2
58 #define HTTP_BOOT_DHCP6_IDX_VENDOR_CLASS 3
59 #define HTTP_BOOT_DHCP6_IDX_DNS_SERVER 4
60 #define HTTP_BOOT_DHCP6_IDX_MAX 5
61
62 #pragma pack(1)
63 typedef struct {
64 UINT16 OpCode[256];
65 } HTTP_BOOT_DHCP6_OPTION_ORO;
66
67 typedef struct {
68 UINT8 Type;
69 UINT8 MajorVer;
70 UINT8 MinorVer;
71 } HTTP_BOOT_DHCP6_OPTION_UNDI;
72
73 typedef struct {
74 UINT16 Type;
75 } HTTP_BOOT_DHCP6_OPTION_ARCH;
76
77 typedef struct {
78 UINT8 ClassIdentifier[10];
79 UINT8 ArchitecturePrefix[5];
80 UINT8 ArchitectureType[5];
81 UINT8 Lit3[1];
82 UINT8 InterfaceName[4];
83 UINT8 Lit4[1];
84 UINT8 UndiMajor[3];
85 UINT8 UndiMinor[3];
86 } HTTP_BOOT_CLASS_ID;
87
88 typedef struct {
89 UINT32 Vendor;
90 UINT16 ClassLen;
91 HTTP_BOOT_CLASS_ID ClassId;
92 } HTTP_BOOT_DHCP6_OPTION_VENDOR_CLASS;
93
94 #pragma pack()
95
96 typedef union {
97 HTTP_BOOT_DHCP6_OPTION_ORO *Oro;
98 HTTP_BOOT_DHCP6_OPTION_UNDI *Undi;
99 HTTP_BOOT_DHCP6_OPTION_ARCH *Arch;
100 HTTP_BOOT_DHCP6_OPTION_VENDOR_CLASS *VendorClass;
101 } HTTP_BOOT_DHCP6_OPTION_ENTRY;
102
103 typedef union {
104 EFI_DHCP6_PACKET Offer;
105 EFI_DHCP6_PACKET Ack;
106 UINT8 Buffer[HTTP_BOOT_DHCP6_PACKET_MAX_SIZE];
107 } HTTP_BOOT_DHCP6_PACKET;
108
109 typedef struct {
110 HTTP_BOOT_DHCP6_PACKET Packet;
111 HTTP_BOOT_OFFER_TYPE OfferType;
112 EFI_DHCP6_PACKET_OPTION *OptList[HTTP_BOOT_DHCP6_IDX_MAX];
113 VOID *UriParser;
114 } HTTP_BOOT_DHCP6_PACKET_CACHE;
115
116 #define GET_NEXT_DHCP6_OPTION(Opt) \
117 (EFI_DHCP6_PACKET_OPTION *) ((UINT8 *) (Opt) + \
118 sizeof (EFI_DHCP6_PACKET_OPTION) + (NTOHS ((Opt)->OpLen)) - 1)
119
120 #define GET_DHCP6_OPTION_SIZE(Pkt) \
121 ((Pkt)->Length - sizeof (EFI_DHCP6_HEADER))
122
123 /**
124 Start the S.A.R.R DHCPv6 process to acquire the IPv6 address and other Http boot information.
125
126 @param[in] Private Pointer to HTTP_BOOT private data.
127
128 @retval EFI_SUCCESS The S.A.R.R process successfully finished.
129 @retval Others Failed to finish the S.A.R.R process.
130
131 **/
132 EFI_STATUS
133 HttpBootDhcp6Sarr (
134 IN HTTP_BOOT_PRIVATE_DATA *Private
135 );
136
137 /**
138 Set the IP6 policy to Automatic.
139
140 @param[in] Private The pointer to HTTP_BOOT_PRIVATE_DATA.
141
142 @retval EFI_SUCCESS Switch the IP policy succesfully.
143 @retval Others Unexpect error happened.
144
145 **/
146 EFI_STATUS
147 HttpBootSetIp6Policy (
148 IN HTTP_BOOT_PRIVATE_DATA *Private
149 );
150
151 /**
152 This function will register the default DNS addresses to the network device.
153
154 @param[in] Private The pointer to HTTP_BOOT_PRIVATE_DATA.
155 @param[in] DataLength Size of the buffer pointed to by DnsServerData in bytes.
156 @param[in] DnsServerData Point a list of DNS server address in an array
157 of EFI_IPv6_ADDRESS instances.
158
159 @retval EFI_SUCCESS The DNS configuration has been configured successfully.
160 @retval Others Failed to configure the address.
161
162 **/
163 EFI_STATUS
164 HttpBootSetIp6Dns (
165 IN HTTP_BOOT_PRIVATE_DATA *Private,
166 IN UINTN DataLength,
167 IN VOID *DnsServerData
168 );
169
170 /**
171 This function will register the IPv6 gateway address to the network device.
172
173 @param[in] Private The pointer to HTTP_BOOT_PRIVATE_DATA.
174
175 @retval EFI_SUCCESS The new IP configuration has been configured successfully.
176 @retval Others Failed to configure the address.
177
178 **/
179 EFI_STATUS
180 HttpBootSetIp6Gateway (
181 IN HTTP_BOOT_PRIVATE_DATA *Private
182 );
183
184 /**
185 This function will register the station IP address.
186
187 @param[in] Private The pointer to HTTP_BOOT_PRIVATE_DATA.
188
189 @retval EFI_SUCCESS The new IP address has been configured successfully.
190 @retval Others Failed to configure the address.
191
192 **/
193 EFI_STATUS
194 HttpBootSetIp6Address (
195 IN HTTP_BOOT_PRIVATE_DATA *Private
196 );
197
198 #endif