BaseTools:Change the path of the file that Binary Cache
[mirror_edk2.git] / MdeModulePkg / Universal / Network / Ip4Dxe / Ip4Config2Impl.h
1 /** @file\r
2   Definitions for EFI IPv4 Configuration II Protocol implementation.\r
3 \r
4   Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>\r
5   (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>\r
6 \r
7   SPDX-License-Identifier: BSD-2-Clause-Patent\r
8 \r
9 **/\r
10 \r
11 #ifndef __IP4_CONFIG2_IMPL_H__\r
12 #define __IP4_CONFIG2_IMPL_H__\r
13 \r
14 #define IP4_CONFIG2_INSTANCE_SIGNATURE    SIGNATURE_32 ('I', 'P', 'C', '2')\r
15 #define IP4_FORM_CALLBACK_INFO_SIGNATURE  SIGNATURE_32 ('I', 'F', 'C', 'I')\r
16 \r
17 #define IP4_CONFIG2_VARIABLE_ATTRIBUTE    (EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS)\r
18 \r
19 #define DATA_ATTRIB_SIZE_FIXED              0x1\r
20 #define DATA_ATTRIB_VOLATILE                0x2\r
21 \r
22 #define DATA_ATTRIB_SET(Attrib, Bits)       (BOOLEAN)((Attrib) & (Bits))\r
23 #define SET_DATA_ATTRIB(Attrib, Bits)       ((Attrib) |= (Bits))\r
24 #define REMOVE_DATA_ATTRIB(Attrib, Bits)    ((Attrib) &= (~Bits))\r
25 \r
26 typedef struct _IP4_CONFIG2_INSTANCE IP4_CONFIG2_INSTANCE;\r
27 \r
28 #define IP4_CONFIG2_INSTANCE_FROM_PROTOCOL(Proto) \\r
29   CR ((Proto), \\r
30       IP4_CONFIG2_INSTANCE, \\r
31       Ip4Config2, \\r
32       IP4_CONFIG2_INSTANCE_SIGNATURE \\r
33       )\r
34 \r
35 #define IP4_SERVICE_FROM_IP4_CONFIG2_INSTANCE(Instance) \\r
36   CR ((Instance), \\r
37       IP4_SERVICE, \\r
38       Ip4Config2Instance, \\r
39       IP4_SERVICE_SIGNATURE \\r
40       )\r
41 \r
42 #define IP4_CONFIG2_INSTANCE_FROM_FORM_CALLBACK(Callback) \\r
43   CR ((Callback), \\r
44       IP4_CONFIG2_INSTANCE, \\r
45       CallbackInfo, \\r
46       IP4_CONFIG2_INSTANCE_SIGNATURE \\r
47       )\r
48 \r
49 #define IP4_FORM_CALLBACK_INFO_FROM_CONFIG_ACCESS(ConfigAccess) \\r
50   CR ((ConfigAccess), \\r
51       IP4_FORM_CALLBACK_INFO, \\r
52       HiiConfigAccessProtocol, \\r
53       IP4_FORM_CALLBACK_INFO_SIGNATURE \\r
54       )\r
55 \r
56 /**\r
57   The prototype of work function for EfiIp4Config2SetData().\r
58 \r
59   @param[in]     Instance The pointer to the IP4 config2 instance data.\r
60   @param[in]     DataSize In bytes, the size of the buffer pointed to by Data.\r
61   @param[in]     Data     The data buffer to set.\r
62 \r
63   @retval EFI_BAD_BUFFER_SIZE  The DataSize does not match the size of the type,\r
64                                8 bytes.\r
65   @retval EFI_SUCCESS          The specified configuration data for the EFI IPv4\r
66                                network stack was set successfully.\r
67 \r
68 **/\r
69 typedef\r
70 EFI_STATUS\r
71 (*IP4_CONFIG2_SET_DATA) (\r
72   IN IP4_CONFIG2_INSTANCE *Instance,\r
73   IN UINTN                DataSize,\r
74   IN VOID                 *Data\r
75   );\r
76 \r
77 /**\r
78   The prototype of work function for EfiIp4Config2GetData().\r
79 \r
80   @param[in]      Instance The pointer to the IP4 config2 instance data.\r
81   @param[in, out] DataSize On input, in bytes, the size of Data. On output, in\r
82                            bytes, the size of buffer required to store the specified\r
83                            configuration data.\r
84   @param[in]      Data     The data buffer in which the configuration data is returned.\r
85                            Ignored if DataSize is ZERO.\r
86 \r
87   @retval EFI_BUFFER_TOO_SMALL The size of Data is too small for the specified\r
88                                configuration data, and the required size is\r
89                                returned in DataSize.\r
90   @retval EFI_SUCCESS          The specified configuration data was obtained successfully.\r
91 \r
92 **/\r
93 typedef\r
94 EFI_STATUS\r
95 (*IP4_CONFIG2_GET_DATA) (\r
96   IN IP4_CONFIG2_INSTANCE *Instance,\r
97   IN OUT UINTN            *DataSize,\r
98   IN VOID                 *Data      OPTIONAL\r
99   );\r
100 \r
101 typedef union {\r
102   VOID                                      *Ptr;\r
103   EFI_IP4_CONFIG2_INTERFACE_INFO            *IfInfo;\r
104   EFI_IP4_CONFIG2_POLICY                    *Policy;\r
105   EFI_IP4_CONFIG2_MANUAL_ADDRESS            *ManualAddress;\r
106   EFI_IPv4_ADDRESS                          *Gateway;\r
107   EFI_IPv4_ADDRESS                          *DnsServers;\r
108 } IP4_CONFIG2_DATA;\r
109 \r
110 typedef struct {\r
111   IP4_CONFIG2_SET_DATA SetData;\r
112   IP4_CONFIG2_GET_DATA GetData;\r
113   EFI_STATUS           Status;\r
114   UINT8                Attribute;\r
115   NET_MAP              EventMap;\r
116   IP4_CONFIG2_DATA     Data;\r
117   UINTN                DataSize;\r
118 } IP4_CONFIG2_DATA_ITEM;\r
119 \r
120 typedef struct {\r
121   UINT16                    Offset;\r
122   UINT32                    DataSize;\r
123   EFI_IP4_CONFIG2_DATA_TYPE DataType;\r
124 } IP4_CONFIG2_DATA_RECORD;\r
125 \r
126 #pragma pack(1)\r
127 \r
128 //\r
129 // heap data that contains the data for each data record.\r
130 //\r
131 //  EFI_IP4_CONFIG2_POLICY                    Policy;\r
132 //  UINT32                                    ManualaddressCount;\r
133 //  UINT32                                    GatewayCount;\r
134 //  UINT32                                    DnsServersCount;\r
135 //  EFI_IP4_CONFIG2_MANUAL_ADDRESS            ManualAddress[];\r
136 //  EFI_IPv4_ADDRESS                          Gateway[];\r
137 //  EFI_IPv4_ADDRESS                          DnsServers[];\r
138 //\r
139 typedef struct {\r
140   UINT16                  Checksum;\r
141   UINT16                  DataRecordCount;\r
142   IP4_CONFIG2_DATA_RECORD DataRecord[1];\r
143 } IP4_CONFIG2_VARIABLE;\r
144 \r
145 #pragma pack()\r
146 \r
147 typedef struct {\r
148   EFI_IP4_CONFIG2_POLICY                   Policy;               ///< manual or automatic\r
149   EFI_IP4_CONFIG2_MANUAL_ADDRESS           *ManualAddress;       ///< IP addresses\r
150   UINT32                                   ManualAddressCount;   ///< IP addresses count\r
151   EFI_IPv4_ADDRESS                         *GatewayAddress;      ///< Gateway address\r
152   UINT32                                   GatewayAddressCount;  ///< Gateway address count\r
153   EFI_IPv4_ADDRESS                         *DnsAddress;          ///< DNS server address\r
154   UINT32                                   DnsAddressCount;      ///< DNS server address count\r
155 } IP4_CONFIG2_NVDATA;\r
156 \r
157 typedef struct _IP4_FORM_CALLBACK_INFO {\r
158   UINT32                           Signature;\r
159   EFI_HANDLE                       ChildHandle;\r
160   EFI_HII_CONFIG_ACCESS_PROTOCOL   HiiConfigAccessProtocol;\r
161   EFI_DEVICE_PATH_PROTOCOL         *HiiVendorDevicePath;\r
162   EFI_HII_HANDLE                   RegisteredHandle;\r
163 } IP4_FORM_CALLBACK_INFO;\r
164 \r
165 struct _IP4_CONFIG2_INSTANCE {\r
166   UINT32                                    Signature;\r
167   BOOLEAN                                   Configured;\r
168   LIST_ENTRY                                Link;\r
169   UINT16                                    IfIndex;\r
170 \r
171   EFI_IP4_CONFIG2_PROTOCOL                  Ip4Config2;\r
172 \r
173   EFI_IP4_CONFIG2_INTERFACE_INFO            InterfaceInfo;\r
174   EFI_IP4_CONFIG2_POLICY                    Policy;\r
175   IP4_CONFIG2_DATA_ITEM                     DataItem[Ip4Config2DataTypeMaximum];\r
176 \r
177   EFI_EVENT                                 Dhcp4SbNotifyEvent;\r
178   VOID                                      *Registration;\r
179   EFI_HANDLE                                Dhcp4Handle;\r
180   EFI_DHCP4_PROTOCOL                        *Dhcp4;\r
181   BOOLEAN                                   DhcpSuccess;\r
182   BOOLEAN                                   OtherInfoOnly;\r
183   EFI_EVENT                                 Dhcp4Event;\r
184   UINT32                                    FailedIaAddressCount;\r
185   EFI_IPv4_ADDRESS                          *DeclineAddress;\r
186   UINT32                                    DeclineAddressCount;\r
187 \r
188   IP4_FORM_CALLBACK_INFO                    CallbackInfo;\r
189 \r
190   IP4_CONFIG2_NVDATA                        Ip4NvData;\r
191 };\r
192 \r
193 //\r
194 // Configure the DHCP to request the routers and netmask\r
195 // from server. The DHCP4_TAG_NETMASK is included in Head.\r
196 //\r
197 #pragma pack(1)\r
198 typedef struct {\r
199   EFI_DHCP4_PACKET_OPTION Head;\r
200   UINT8                   Route;\r
201   UINT8                   Dns;\r
202 } IP4_CONFIG2_DHCP4_OPTION;\r
203 #pragma pack()\r
204 \r
205 /**\r
206   Read the configuration data from variable storage according to the VarName and\r
207   gEfiIp4Config2ProtocolGuid. It checks the integrity of variable data. If the\r
208   data is corrupted, it clears the variable data to ZERO. Othewise, it outputs the\r
209   configuration data to IP4_CONFIG2_INSTANCE.\r
210 \r
211   @param[in]      VarName       The pointer to the variable name\r
212   @param[in, out] Instance      The pointer to the IP4 config2 instance data.\r
213 \r
214   @retval EFI_NOT_FOUND         The variable can not be found or already corrupted.\r
215   @retval EFI_OUT_OF_RESOURCES  Fail to allocate resource to complete the operation.\r
216   @retval EFI_SUCCESS           The configuration data was retrieved successfully.\r
217 \r
218 **/\r
219 EFI_STATUS\r
220 Ip4Config2ReadConfigData (\r
221   IN     CHAR16               *VarName,\r
222   IN OUT IP4_CONFIG2_INSTANCE *Instance\r
223   );\r
224 \r
225 /**\r
226   Start the DHCP configuration for this IP service instance.\r
227   It will locates the EFI_IP4_CONFIG2_PROTOCOL, then start the\r
228   DHCP configuration.\r
229 \r
230   @param[in]  Instance           The IP4 config2 instance to configure.\r
231 \r
232   @retval EFI_SUCCESS            The auto configuration is successfully started.\r
233   @retval Others                 Failed to start auto configuration.\r
234 \r
235 **/\r
236 EFI_STATUS\r
237 Ip4StartAutoConfig (\r
238   IN IP4_CONFIG2_INSTANCE   *Instance\r
239   );\r
240 \r
241 /**\r
242   Initialize an IP4_CONFIG2_INSTANCE.\r
243 \r
244   @param[out]    Instance       The buffer of IP4_CONFIG2_INSTANCE to be initialized.\r
245 \r
246   @retval EFI_OUT_OF_RESOURCES  Failed to allocate resources to complete the operation.\r
247   @retval EFI_SUCCESS           The IP4_CONFIG2_INSTANCE initialized successfully.\r
248 \r
249 **/\r
250 EFI_STATUS\r
251 Ip4Config2InitInstance (\r
252   OUT IP4_CONFIG2_INSTANCE  *Instance\r
253   );\r
254 \r
255 /**\r
256   Release an IP4_CONFIG2_INSTANCE.\r
257 \r
258   @param[in, out] Instance    The buffer of IP4_CONFIG2_INSTANCE to be freed.\r
259 \r
260 **/\r
261 VOID\r
262 Ip4Config2CleanInstance (\r
263   IN OUT IP4_CONFIG2_INSTANCE  *Instance\r
264   );\r
265 \r
266 /**\r
267   Request Ip4AutoReconfigCallBackDpc as a DPC at TPL_CALLBACK.\r
268 \r
269   @param Event     The event that is signalled.\r
270   @param Context   The IP4 service binding instance.\r
271 \r
272 **/\r
273 VOID\r
274 EFIAPI\r
275 Ip4AutoReconfigCallBack (\r
276   IN EFI_EVENT              Event,\r
277   IN VOID                   *Context\r
278   );\r
279 \r
280 /**\r
281   Destroy the Dhcp4 child in IP4_CONFIG2_INSTANCE and release the resources.\r
282 \r
283   @param[in, out] Instance    The buffer of IP4 config2 instance to be freed.\r
284 \r
285   @retval EFI_SUCCESS         The child was successfully destroyed.\r
286   @retval Others              Failed to destroy the child.\r
287 \r
288 **/\r
289 EFI_STATUS\r
290 Ip4Config2DestroyDhcp4 (\r
291   IN OUT IP4_CONFIG2_INSTANCE  *Instance\r
292   );\r
293 \r
294 #endif\r