]> git.proxmox.com Git - mirror_edk2.git/blame - NetworkPkg/Ip6Dxe/Ip6ConfigImpl.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / NetworkPkg / Ip6Dxe / Ip6ConfigImpl.h
CommitLineData
a3bcde70 1/** @file\r
7de8045a 2 Definitions for EFI IPv6 Configuration Protocol implementation.\r
a3bcde70 3\r
f75a7f56 4 Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
a3bcde70 5\r
ecf98fbc 6 SPDX-License-Identifier: BSD-2-Clause-Patent\r
a3bcde70
HT
7\r
8**/\r
9\r
10#ifndef __IP6_CONFIG_IMPL_H__\r
11#define __IP6_CONFIG_IMPL_H__\r
12\r
d1050b9d
MK
13#define IP6_CONFIG_INSTANCE_SIGNATURE SIGNATURE_32 ('I', 'P', '6', 'C')\r
14#define IP6_FORM_CALLBACK_INFO_SIGNATURE SIGNATURE_32 ('I', 'F', 'C', 'I')\r
15#define IP6_CONFIG_VARIABLE_ATTRIBUTE (EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS)\r
a3bcde70 16\r
d1050b9d 17#define IP6_CONFIG_DEFAULT_DAD_XMITS 1\r
a3bcde70 18\r
d1050b9d
MK
19#define DATA_ATTRIB_SIZE_FIXED 0x1\r
20#define DATA_ATTRIB_VOLATILE 0x2\r
a3bcde70 21\r
d1050b9d
MK
22#define DATA_ATTRIB_SET(Attrib, Bits) (BOOLEAN)((Attrib) & (Bits))\r
23#define SET_DATA_ATTRIB(Attrib, Bits) ((Attrib) |= (Bits))\r
a3bcde70
HT
24\r
25typedef struct _IP6_CONFIG_INSTANCE IP6_CONFIG_INSTANCE;\r
26\r
27#define IP6_CONFIG_INSTANCE_FROM_PROTOCOL(Proto) \\r
28 CR ((Proto), \\r
29 IP6_CONFIG_INSTANCE, \\r
30 Ip6Config, \\r
31 IP6_CONFIG_INSTANCE_SIGNATURE \\r
32 )\r
33\r
a3bcde70
HT
34#define IP6_CONFIG_INSTANCE_FROM_FORM_CALLBACK(Callback) \\r
35 CR ((Callback), \\r
36 IP6_CONFIG_INSTANCE, \\r
37 CallbackInfo, \\r
38 IP6_CONFIG_INSTANCE_SIGNATURE \\r
39 )\r
40\r
41#define IP6_SERVICE_FROM_IP6_CONFIG_INSTANCE(Instance) \\r
42 CR ((Instance), \\r
43 IP6_SERVICE, \\r
44 Ip6ConfigInstance, \\r
45 IP6_SERVICE_SIGNATURE \\r
46 )\r
47\r
48#define IP6_FORM_CALLBACK_INFO_FROM_CONFIG_ACCESS(ConfigAccess) \\r
49 CR ((ConfigAccess), \\r
50 IP6_FORM_CALLBACK_INFO, \\r
51 HiiConfigAccess, \\r
52 IP6_FORM_CALLBACK_INFO_SIGNATURE \\r
53 )\r
54\r
55/**\r
56 The prototype of work function for EfiIp6ConfigSetData().\r
57\r
58 @param[in] Instance The pointer to the IP6 config instance data.\r
59 @param[in] DataSize In bytes, the size of the buffer pointed to by Data.\r
60 @param[in] Data The data buffer to set.\r
61\r
62 @retval EFI_BAD_BUFFER_SIZE The DataSize does not match the size of the type,\r
63 8 bytes.\r
64 @retval EFI_SUCCESS The specified configuration data for the EFI IPv6\r
65 network stack was set successfully.\r
f75a7f56 66\r
a3bcde70
HT
67**/\r
68typedef\r
69EFI_STATUS\r
70(*IP6_CONFIG_SET_DATA) (\r
71 IN IP6_CONFIG_INSTANCE *Instance,\r
72 IN UINTN DataSize,\r
73 IN VOID *Data\r
74 );\r
75\r
76/**\r
77 The prototype of work function for EfiIp6ConfigGetData().\r
78\r
79 @param[in] Instance The pointer to the IP6 config instance data.\r
80 @param[in, out] DataSize On input, in bytes, the size of Data. On output, in\r
81 bytes, the size of buffer required to store the specified\r
82 configuration data.\r
f75a7f56 83 @param[in] Data The data buffer in which the configuration data is returned.\r
a3bcde70
HT
84 Ignored if DataSize is ZERO.\r
85\r
86 @retval EFI_BUFFER_TOO_SMALL The size of Data is too small for the specified\r
f75a7f56 87 configuration data, and the required size is\r
a3bcde70 88 returned in DataSize.\r
f75a7f56
LG
89 @retval EFI_SUCCESS The specified configuration data was obtained successfully.\r
90\r
a3bcde70
HT
91**/\r
92typedef\r
93EFI_STATUS\r
94(*IP6_CONFIG_GET_DATA) (\r
95 IN IP6_CONFIG_INSTANCE *Instance,\r
96 IN OUT UINTN *DataSize,\r
97 IN VOID *Data OPTIONAL\r
98 );\r
99\r
100typedef union {\r
d1050b9d
MK
101 VOID *Ptr;\r
102 EFI_IP6_CONFIG_INTERFACE_INFO *IfInfo;\r
103 EFI_IP6_CONFIG_INTERFACE_ID *AltIfId;\r
104 EFI_IP6_CONFIG_POLICY *Policy;\r
105 EFI_IP6_CONFIG_DUP_ADDR_DETECT_TRANSMITS *DadXmits;\r
106 EFI_IP6_CONFIG_MANUAL_ADDRESS *ManualAddress;\r
107 EFI_IPv6_ADDRESS *Gateway;\r
108 EFI_IPv6_ADDRESS *DnsServers;\r
a3bcde70
HT
109} IP6_CONFIG_DATA;\r
110\r
111typedef struct {\r
d1050b9d
MK
112 IP6_CONFIG_SET_DATA SetData;\r
113 IP6_CONFIG_GET_DATA GetData;\r
114 EFI_STATUS Status;\r
115 UINT8 Attribute;\r
116 NET_MAP EventMap;\r
117 IP6_CONFIG_DATA Data;\r
118 UINTN DataSize;\r
a3bcde70
HT
119} IP6_CONFIG_DATA_ITEM;\r
120\r
121typedef struct {\r
d1050b9d
MK
122 UINT16 Offset;\r
123 UINT32 DataSize;\r
124 EFI_IP6_CONFIG_DATA_TYPE DataType;\r
a3bcde70
HT
125} IP6_CONFIG_DATA_RECORD;\r
126\r
127#pragma pack(1)\r
128\r
129//\r
130// heap data that contains the data for each data record.\r
131//\r
132// BOOLEAN IsAltIfIdSet;\r
133// EFI_IP6_CONFIG_POLICY Policy;\r
134// EFI_IP6_CONFIG_DUP_ADDR_DETECT_TRANSMITS DadXmits;\r
135// UINT32 ManualaddressCount;\r
136// UINT32 GatewayCount;\r
137// UINT32 DnsServersCount;\r
138// EFI_IP6_CONFIG_INTERFACE_ID AltIfId;\r
139// EFI_IP6_CONFIG_MANUAL_ADDRESS ManualAddress[];\r
140// EFI_IPv6_ADDRESS Gateway[];\r
141// EFI_IPv6_ADDRESS DnsServers[];\r
142//\r
143typedef struct {\r
d1050b9d
MK
144 UINT32 IaId;\r
145 UINT16 Checksum;\r
146 UINT16 DataRecordCount;\r
147 IP6_CONFIG_DATA_RECORD DataRecord[1];\r
a3bcde70
HT
148} IP6_CONFIG_VARIABLE;\r
149\r
150#pragma pack()\r
151\r
152typedef struct {\r
d1050b9d
MK
153 LIST_ENTRY Link;\r
154 EFI_IP6_ADDRESS_INFO AddrInfo;\r
a3bcde70
HT
155} IP6_ADDRESS_INFO_ENTRY;\r
156\r
157typedef struct {\r
d1050b9d
MK
158 EFI_IP6_CONFIG_POLICY Policy; ///< manual or automatic\r
159 EFI_IP6_CONFIG_DUP_ADDR_DETECT_TRANSMITS DadTransmitCount; ///< dad transmits count\r
160 EFI_IP6_CONFIG_INTERFACE_ID InterfaceId; ///< alternative interface id\r
161 LIST_ENTRY ManualAddress; ///< IP addresses\r
162 UINT32 ManualAddressCount; ///< IP addresses count\r
163 LIST_ENTRY GatewayAddress; ///< Gateway address\r
164 UINT32 GatewayAddressCount; ///< Gateway address count\r
165 LIST_ENTRY DnsAddress; ///< DNS server address\r
166 UINT32 DnsAddressCount; ///< DNS server address count\r
a3bcde70
HT
167} IP6_CONFIG_NVDATA;\r
168\r
169typedef struct _IP6_FORM_CALLBACK_INFO {\r
d1050b9d
MK
170 UINT32 Signature;\r
171 EFI_HANDLE ChildHandle;\r
172 EFI_HII_CONFIG_ACCESS_PROTOCOL HiiConfigAccess;\r
173 EFI_DEVICE_PATH_PROTOCOL *HiiVendorDevicePath;\r
174 EFI_HII_HANDLE RegisteredHandle;\r
a3bcde70
HT
175} IP6_FORM_CALLBACK_INFO;\r
176\r
177struct _IP6_CONFIG_INSTANCE {\r
d1050b9d
MK
178 UINT32 Signature;\r
179 BOOLEAN Configured;\r
180 LIST_ENTRY Link;\r
181 UINT16 IfIndex;\r
182\r
183 EFI_IP6_CONFIG_INTERFACE_INFO InterfaceInfo;\r
184 EFI_IP6_CONFIG_INTERFACE_ID AltIfId;\r
185 EFI_IP6_CONFIG_POLICY Policy;\r
186 EFI_IP6_CONFIG_DUP_ADDR_DETECT_TRANSMITS DadXmits;\r
187\r
188 IP6_CONFIG_DATA_ITEM DataItem[Ip6ConfigDataTypeMaximum];\r
189 NET_MAP DadFailedMap;\r
190 NET_MAP DadPassedMap;\r
191\r
192 EFI_IP6_CONFIG_PROTOCOL Ip6Config;\r
193\r
194 EFI_EVENT Dhcp6SbNotifyEvent;\r
195 VOID *Registration;\r
196 EFI_HANDLE Dhcp6Handle;\r
197 EFI_DHCP6_PROTOCOL *Dhcp6;\r
198 BOOLEAN OtherInfoOnly;\r
199 UINT32 IaId;\r
200 EFI_EVENT Dhcp6Event;\r
201 UINT32 FailedIaAddressCount;\r
202 EFI_IPv6_ADDRESS *DeclineAddress;\r
203 UINT32 DeclineAddressCount;\r
204\r
205 IP6_FORM_CALLBACK_INFO CallbackInfo;\r
206 IP6_CONFIG_NVDATA Ip6NvData;\r
a3bcde70
HT
207};\r
208\r
4720106b
JW
209/**\r
210 Read the configuration data from variable storage according to the VarName and\r
211 gEfiIp6ConfigProtocolGuid. It checks the integrity of variable data. If the\r
7de8045a 212 data is corrupted, it clears the variable data to ZERO. Otherwise, it outputs the\r
4720106b
JW
213 configuration data to IP6_CONFIG_INSTANCE.\r
214\r
215 @param[in] VarName The pointer to the variable name\r
216 @param[in, out] Instance The pointer to the IP6 config instance data.\r
217\r
218 @retval EFI_NOT_FOUND The variable can not be found or already corrupted.\r
219 @retval EFI_OUT_OF_RESOURCES Fail to allocate resource to complete the operation.\r
220 @retval EFI_SUCCESS The configuration data was retrieved successfully.\r
221\r
222**/\r
223EFI_STATUS\r
224Ip6ConfigReadConfigData (\r
225 IN CHAR16 *VarName,\r
226 IN OUT IP6_CONFIG_INSTANCE *Instance\r
227 );\r
228\r
a3bcde70
HT
229/**\r
230 The event process routine when the DHCPv6 server is answered with a reply packet\r
231 for an information request.\r
f75a7f56 232\r
a3bcde70
HT
233 @param[in] This Points to the EFI_DHCP6_PROTOCOL.\r
234 @param[in] Context The pointer to the IP6 configuration instance data.\r
235 @param[in] Packet The DHCPv6 reply packet.\r
236\r
237 @retval EFI_SUCCESS The DNS server address was retrieved from the reply packet.\r
f75a7f56 238 @retval EFI_NOT_READY The reply packet does not contain the DNS server option, or\r
a3bcde70
HT
239 the DNS server address is not valid.\r
240\r
241**/\r
242EFI_STATUS\r
243EFIAPI\r
244Ip6ConfigOnDhcp6Reply (\r
245 IN EFI_DHCP6_PROTOCOL *This,\r
246 IN VOID *Context,\r
247 IN EFI_DHCP6_PACKET *Packet\r
248 );\r
249\r
250/**\r
251 The work function to trigger the DHCPv6 process to perform a stateful autoconfiguration.\r
f75a7f56 252\r
a3bcde70
HT
253 @param[in] Instance Pointer to the IP6 config instance data.\r
254 @param[in] OtherInfoOnly If FALSE, get stateful address and other information\r
255 via DHCPv6. Otherwise, only get the other information.\r
256\r
257 @retval EFI_SUCCESS The operation finished successfully.\r
258 @retval EFI_UNSUPPORTED The DHCP6 driver is not available.\r
259\r
260**/\r
261EFI_STATUS\r
262Ip6ConfigStartStatefulAutoConfig (\r
263 IN IP6_CONFIG_INSTANCE *Instance,\r
264 IN BOOLEAN OtherInfoOnly\r
265 );\r
266\r
267/**\r
268 Initialize an IP6_CONFIG_INSTANCE.\r
269\r
270 @param[out] Instance The buffer of IP6_CONFIG_INSTANCE to be initialized.\r
f75a7f56 271\r
a3bcde70
HT
272 @retval EFI_OUT_OF_RESOURCES Failed to allocate resources to complete the operation.\r
273 @retval EFI_SUCCESS The IP6_CONFIG_INSTANCE initialized successfully.\r
f75a7f56 274\r
a3bcde70
HT
275**/\r
276EFI_STATUS\r
277Ip6ConfigInitInstance (\r
278 OUT IP6_CONFIG_INSTANCE *Instance\r
279 );\r
280\r
281/**\r
282 Release an IP6_CONFIG_INSTANCE.\r
283\r
284 @param[in, out] Instance The buffer of IP6_CONFIG_INSTANCE to be freed.\r
f75a7f56 285\r
a3bcde70
HT
286**/\r
287VOID\r
288Ip6ConfigCleanInstance (\r
289 IN OUT IP6_CONFIG_INSTANCE *Instance\r
290 );\r
291\r
292/**\r
75dce340 293 Destroy the Dhcp6 child in IP6_CONFIG_INSTANCE and release the resources.\r
a3bcde70
HT
294\r
295 @param[in, out] Instance The buffer of IP6_CONFIG_INSTANCE to be freed.\r
296\r
297 @retval EFI_SUCCESS The child was successfully destroyed.\r
75dce340 298 @retval Others Failed to destroy the child.\r
f75a7f56 299\r
a3bcde70
HT
300**/\r
301EFI_STATUS\r
302Ip6ConfigDestroyDhcp6 (\r
303 IN OUT IP6_CONFIG_INSTANCE *Instance\r
304 );\r
305\r
306#endif\r