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