]>
Commit | Line | Data |
---|---|---|
1 | /** @file\r | |
2 | This file provides a definition of the EFI IPv4 Configuration II\r | |
3 | Protocol.\r | |
4 | \r | |
5 | Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>\r | |
6 | This program and the accompanying materials\r | |
7 | are licensed and made available under the terms and conditions of the BSD License\r | |
8 | which accompanies this distribution. The full text of the license may be found at<BR>\r | |
9 | http://opensource.org/licenses/bsd-license.php\r | |
10 | \r | |
11 | THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r | |
12 | WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r | |
13 | \r | |
14 | @par Revision Reference:\r | |
15 | This Protocol is introduced in UEFI Specification 2.5\r | |
16 | \r | |
17 | **/\r | |
18 | #ifndef __EFI_IP4CONFIG2_PROTOCOL_H__\r | |
19 | #define __EFI_IP4CONFIG2_PROTOCOL_H__\r | |
20 | \r | |
21 | #include <Protocol/Ip4.h>\r | |
22 | \r | |
23 | #define EFI_IP4_CONFIG2_PROTOCOL_GUID \\r | |
24 | { \\r | |
25 | 0x5b446ed1, 0xe30b, 0x4faa, {0x87, 0x1a, 0x36, 0x54, 0xec, 0xa3, 0x60, 0x80 } \\r | |
26 | }\r | |
27 | \r | |
28 | typedef struct _EFI_IP4_CONFIG2_PROTOCOL EFI_IP4_CONFIG2_PROTOCOL;\r | |
29 | \r | |
30 | \r | |
31 | ///\r | |
32 | /// EFI_IP4_CONFIG2_DATA_TYPE\r | |
33 | ///\r | |
34 | typedef enum {\r | |
35 | ///\r | |
36 | /// The interface information of the communication device this EFI \r | |
37 | /// IPv4 Configuration II Protocol instance manages. This type of \r | |
38 | /// data is read only. The corresponding Data is of type \r | |
39 | /// EFI_IP4_CONFIG2_INTERFACE_INFO.\r | |
40 | ///\r | |
41 | Ip4Config2DataTypeInterfaceInfo,\r | |
42 | ///\r | |
43 | /// The general configuration policy for the EFI IPv4 network stack \r | |
44 | /// running on the communication device this EFI IPv4 \r | |
45 | /// Configuration II Protocol instance manages. The policy will \r | |
46 | /// affect other configuration settings. The corresponding Data is of \r | |
47 | /// type EFI_IP4_CONFIG2_POLICY.\r | |
48 | ///\r | |
49 | Ip4Config2DataTypePolicy,\r | |
50 | ///\r | |
51 | /// The station addresses set manually for the EFI IPv4 network \r | |
52 | /// stack. It is only configurable when the policy is \r | |
53 | /// Ip4Config2PolicyStatic. The corresponding Data is of \r | |
54 | /// type EFI_IP4_CONFIG2_MANUAL_ADDRESS.\r | |
55 | ///\r | |
56 | Ip4Config2DataTypeManualAddress,\r | |
57 | ///\r | |
58 | /// The gateway addresses set manually for the EFI IPv4 network \r | |
59 | /// stack running on the communication device this EFI IPv4 \r | |
60 | /// Configuration II Protocol manages. It is not configurable when \r | |
61 | /// the policy is Ip4Config2PolicyDhcp. The gateway \r | |
62 | /// addresses must be unicast IPv4 addresses. The corresponding \r | |
63 | /// Data is a pointer to an array of EFI_IPv4_ADDRESS instances.\r | |
64 | ///\r | |
65 | Ip4Config2DataTypeGateway,\r | |
66 | ///\r | |
67 | /// The DNS server list for the EFI IPv4 network stack running on \r | |
68 | /// the communication device this EFI IPv4 Configuration II \r | |
69 | /// Protocol manages. It is not configurable when the policy is \r | |
70 | /// Ip4Config2PolicyDhcp. The DNS server addresses must be \r | |
71 | /// unicast IPv4 addresses. The corresponding Data is a pointer to \r | |
72 | /// an array of EFI_IPv4_ADDRESS instances.\r | |
73 | ///\r | |
74 | Ip4Config2DataTypeDnsServer,\r | |
75 | Ip4Config2DataTypeMaximum\r | |
76 | } EFI_IP4_CONFIG2_DATA_TYPE;\r | |
77 | \r | |
78 | ///\r | |
79 | /// EFI_IP4_CONFIG2_INTERFACE_INFO related definitions\r | |
80 | ///\r | |
81 | #define EFI_IP4_CONFIG2_INTERFACE_INFO_NAME_SIZE 32\r | |
82 | \r | |
83 | ///\r | |
84 | /// EFI_IP4_CONFIG2_INTERFACE_INFO\r | |
85 | ///\r | |
86 | typedef struct {\r | |
87 | ///\r | |
88 | /// The name of the interface. It is a NULL-terminated Unicode string.\r | |
89 | ///\r | |
90 | CHAR16 Name[EFI_IP4_CONFIG2_INTERFACE_INFO_NAME_SIZE];\r | |
91 | ///\r | |
92 | /// The interface type of the network interface. See RFC 1700, \r | |
93 | /// section "Number Hardware Type".\r | |
94 | ///\r | |
95 | UINT8 IfType;\r | |
96 | ///\r | |
97 | /// The size, in bytes, of the network interface's hardware address.\r | |
98 | ///\r | |
99 | UINT32 HwAddressSize;\r | |
100 | ///\r | |
101 | /// The hardware address for the network interface.\r | |
102 | ///\r | |
103 | EFI_MAC_ADDRESS HwAddress;\r | |
104 | ///\r | |
105 | /// The station IPv4 address of this EFI IPv4 network stack.\r | |
106 | ///\r | |
107 | EFI_IPv4_ADDRESS StationAddress;\r | |
108 | ///\r | |
109 | /// The subnet address mask that is associated with the station address.\r | |
110 | ///\r | |
111 | EFI_IPv4_ADDRESS SubnetMask;\r | |
112 | ///\r | |
113 | /// Size of the following RouteTable, in bytes. May be zero.\r | |
114 | ///\r | |
115 | UINT32 RouteTableSize;\r | |
116 | ///\r | |
117 | /// The route table of the IPv4 network stack runs on this interface. \r | |
118 | /// Set to NULL if RouteTableSize is zero. Type EFI_IP4_ROUTE_TABLE is defined in \r | |
119 | /// EFI_IP4_PROTOCOL.GetModeData().\r | |
120 | ///\r | |
121 | EFI_IP4_ROUTE_TABLE *RouteTable OPTIONAL;\r | |
122 | } EFI_IP4_CONFIG2_INTERFACE_INFO;\r | |
123 | \r | |
124 | ///\r | |
125 | /// EFI_IP4_CONFIG2_POLICY\r | |
126 | ///\r | |
127 | typedef enum {\r | |
128 | ///\r | |
129 | /// Under this policy, the Ip4Config2DataTypeManualAddress, \r | |
130 | /// Ip4Config2DataTypeGateway and Ip4Config2DataTypeDnsServer configuration \r | |
131 | /// data are required to be set manually. The EFI IPv4 Protocol will get all \r | |
132 | /// required configuration such as IPv4 address, subnet mask and \r | |
133 | /// gateway settings from the EFI IPv4 Configuration II protocol.\r | |
134 | ///\r | |
135 | Ip4Config2PolicyStatic,\r | |
136 | ///\r | |
137 | /// Under this policy, the Ip4Config2DataTypeManualAddress, \r | |
138 | /// Ip4Config2DataTypeGateway and Ip4Config2DataTypeDnsServer configuration data are \r | |
139 | /// not allowed to set via SetData(). All of these configurations are retrieved from DHCP \r | |
140 | /// server or other auto-configuration mechanism.\r | |
141 | ///\r | |
142 | Ip4Config2PolicyDhcp,\r | |
143 | Ip4Config2PolicyMax\r | |
144 | } EFI_IP4_CONFIG2_POLICY;\r | |
145 | \r | |
146 | ///\r | |
147 | /// EFI_IP4_CONFIG2_MANUAL_ADDRESS\r | |
148 | ///\r | |
149 | typedef struct {\r | |
150 | /// \r | |
151 | /// The IPv4 unicast address.\r | |
152 | ///\r | |
153 | EFI_IPv4_ADDRESS Address;\r | |
154 | ///\r | |
155 | /// The subnet mask. \r | |
156 | ///\r | |
157 | EFI_IPv4_ADDRESS SubnetMask;\r | |
158 | } EFI_IP4_CONFIG2_MANUAL_ADDRESS;\r | |
159 | \r | |
160 | /**\r | |
161 | Set the configuration for the EFI IPv4 network stack running on the communication device this EFI \r | |
162 | IPv4 Configuration II Protocol instance manages.\r | |
163 | \r | |
164 | This function is used to set the configuration data of type DataType for the EFI IPv4 network stack \r | |
165 | running on the communication device this EFI IPv4 Configuration II Protocol instance manages.\r | |
166 | The successfully configured data is valid after system reset or power-off.\r | |
167 | The DataSize is used to calculate the count of structure instances in the Data for some \r | |
168 | DataType that multiple structure instances are allowed.\r | |
169 | This function is always non-blocking. When setting some typeof configuration data, an \r | |
170 | asynchronous process is invoked to check the correctness of the data, such as doing address conflict \r | |
171 | detection on the manually set local IPv4 address. EFI_NOT_READY is returned immediately to \r | |
172 | indicate that such an asynchronous process is invoked and the process is not finished yet. The caller \r | |
173 | willing to get the result of the asynchronous process is required to call RegisterDataNotify()\r | |
174 | to register an event on the specified configuration data. Once the event is signaled, the caller can call \r | |
175 | GetData()to get back the configuration data in order to know the result. For other types of \r | |
176 | configuration data that do not require an asynchronous configuration process, the result of the \r | |
177 | operation is immediately returned. \r | |
178 | \r | |
179 | @param[in] This Pointer to the EFI_IP4_CONFIG2_PROTOCOL instance. \r | |
180 | @param[in] DataType The type of data to set.\r | |
181 | @param[in] DataSize Size of the buffer pointed to by Data in bytes.\r | |
182 | @param[in] Data The data buffer to set. The type ofthe data buffer is associated \r | |
183 | with the DataType. \r | |
184 | \r | |
185 | @retval EFI_SUCCESS The specified configuration data for the EFI IPv4 network stack is set \r | |
186 | successfully.\r | |
187 | @retval EFI_INVALID_PARAMETER One or more of the following are TRUE:\r | |
188 | This is NULL.\r | |
189 | Data is NULL.\r | |
190 | One or more fields in Data do not match the requirement of the data type \r | |
191 | indicated by DataType.\r | |
192 | @retval EFI_WRITE_PROTECTED The specified configuration data is read-only or the specified configuration \r | |
193 | data can not be set under the current policy.\r | |
194 | @retval EFI_ACCESS_DENIED Another set operation on the specified configuration data is already in process.\r | |
195 | @retval EFI_NOT_READY An asynchronous process is invoked to set the specified configuration data and \r | |
196 | the process is not finished yet.\r | |
197 | @retval EFI_BAD_BUFFER_SIZE The DataSize does not match the size of the type indicated by DataType. \r | |
198 | @retval EFI_UNSUPPORTED This DataType is not supported.\r | |
199 | @retval EFI_OUT_OF_RESOURCES Required system resources could not be allocated.\r | |
200 | @retval EFI_DEVICE_ERROR An unexpected system error or network error occurred.\r | |
201 | **/\r | |
202 | typedef \r | |
203 | EFI_STATUS\r | |
204 | (EFIAPI *EFI_IP4_CONFIG2_SET_DATA) (\r | |
205 | IN EFI_IP4_CONFIG2_PROTOCOL *This,\r | |
206 | IN EFI_IP4_CONFIG2_DATA_TYPE DataType,\r | |
207 | IN UINTN DataSize,\r | |
208 | IN VOID *Data\r | |
209 | );\r | |
210 | \r | |
211 | /**\r | |
212 | Get the configuration data for the EFI IPv4 network stack running on the communication device this \r | |
213 | EFI IPv4 Configuration II Protocol instance manages.\r | |
214 | \r | |
215 | This function returns the configuration data of type DataType for the EFI IPv4 network stack \r | |
216 | running on the communication device this EFI IPv4 Configuration II Protocol instance manages.\r | |
217 | The caller is responsible for allocating the buffer usedto return the specified configuration data and \r | |
218 | the required size will be returned to the caller if the size of the buffer is too small.\r | |
219 | EFI_NOT_READY is returned if the specified configuration data is not ready due to an already in \r | |
220 | progress asynchronous configuration process. The caller can call RegisterDataNotify() to \r | |
221 | register an event on the specified configuration data. Once the asynchronous configuration process is \r | |
222 | finished, the event will be signaled and a subsequent GetData() call will return the specified \r | |
223 | configuration data.\r | |
224 | \r | |
225 | @param[in] This Pointer to the EFI_IP4_CONFIG2_PROTOCOL instance. \r | |
226 | @param[in] DataType The type of data to get.\r | |
227 | @param[out] DataSize On input, in bytes, the size of Data. On output, in bytes, the size \r | |
228 | of buffer required to store the specified configuration data. \r | |
229 | @param[in] Data The data buffer in which the configuration data is returned. The \r | |
230 | type of the data buffer is associated with the DataType. Ignored \r | |
231 | if DataSize is 0. \r | |
232 | \r | |
233 | @retval EFI_SUCCESS The specified configuration data is got successfully.\r | |
234 | @retval EFI_INVALID_PARAMETER One or more of the followings are TRUE:\r | |
235 | This is NULL.\r | |
236 | DataSize is NULL.\r | |
237 | Data is NULL if *DataSizeis not zero.\r | |
238 | @retval EFI_BUFFER_TOO_SMALL The size of Data is too small for the specified configuration data \r | |
239 | and the required size is returned in DataSize.\r | |
240 | @retval EFI_NOT_READY The specified configuration data is not ready due to an already in \r | |
241 | progress asynchronous configuration process.\r | |
242 | @retval EFI_NOT_FOUND The specified configuration data is not found.\r | |
243 | **/\r | |
244 | typedef\r | |
245 | EFI_STATUS\r | |
246 | (EFIAPI *EFI_IP4_CONFIG2_GET_DATA) (\r | |
247 | IN EFI_IP4_CONFIG2_PROTOCOL *This,\r | |
248 | IN EFI_IP4_CONFIG2_DATA_TYPE DataType,\r | |
249 | IN OUT UINTN *DataSize,\r | |
250 | IN VOID *Data OPTIONAL\r | |
251 | );\r | |
252 | \r | |
253 | /**\r | |
254 | Register an event that is to be signaled whenever a configuration process on the specified \r | |
255 | configuration data is done.\r | |
256 | \r | |
257 | This function registers an event that is to be signaled whenever a configuration process on the \r | |
258 | specified configuration data is done. An event can be registered for different DataType\r | |
259 | simultaneously and the caller is responsible for determining which type of configuration data causes \r | |
260 | the signaling of the event in such case.\r | |
261 | \r | |
262 | @param[in] This Pointer to the EFI_IP4_CONFIG2_PROTOCOL instance. \r | |
263 | @param[in] DataType The type of data to unregister the event for.\r | |
264 | @param[in] Event The event to register.\r | |
265 | \r | |
266 | @retval EFI_SUCCESS The notification event for the specified configuration data is \r | |
267 | registered.\r | |
268 | @retval EFI_INVALID_PARAMETER This is NULL or Event is NULL.\r | |
269 | @retval EFI_UNSUPPORTED The configuration data type specified by DataType is not supported.\r | |
270 | @retval EFI_OUT_OF_RESOURCES Required system resources could not be allocated.\r | |
271 | @retval EFI_ACCESS_DENIED The Event is already registered for the DataType.\r | |
272 | **/\r | |
273 | typedef\r | |
274 | EFI_STATUS\r | |
275 | (EFIAPI *EFI_IP4_CONFIG2_REGISTER_NOTIFY) (\r | |
276 | IN EFI_IP4_CONFIG2_PROTOCOL *This,\r | |
277 | IN EFI_IP4_CONFIG2_DATA_TYPE DataType,\r | |
278 | IN EFI_EVENT Event\r | |
279 | );\r | |
280 | \r | |
281 | /**\r | |
282 | Remove a previously registered event for the specified configuration data.\r | |
283 | \r | |
284 | This function removes a previously registeredevent for the specified configuration data.\r | |
285 | \r | |
286 | @param[in] This Pointer to the EFI_IP4_CONFIG2_PROTOCOL instance. \r | |
287 | @param[in] DataType The type of data to remove the previously registered event for.\r | |
288 | @param[in] Event The event to unregister.\r | |
289 | \r | |
290 | @retval EFI_SUCCESS The event registered for the specified configuration data is removed.\r | |
291 | @retval EFI_INVALID_PARAMETER This is NULL or Event is NULL.\r | |
292 | @retval EFI_NOT_FOUND The Eventhas not been registered for the specified DataType.\r | |
293 | **/\r | |
294 | typedef\r | |
295 | EFI_STATUS\r | |
296 | (EFIAPI *EFI_IP4_CONFIG2_UNREGISTER_NOTIFY) (\r | |
297 | IN EFI_IP4_CONFIG2_PROTOCOL *This,\r | |
298 | IN EFI_IP4_CONFIG2_DATA_TYPE DataType,\r | |
299 | IN EFI_EVENT Event\r | |
300 | );\r | |
301 | \r | |
302 | ///\r | |
303 | /// The EFI_IP4_CONFIG2_PROTOCOL is designed to be the central repository for the common \r | |
304 | /// configurations and the administrator configurable settings for the EFI IPv4 network stack.\r | |
305 | /// An EFI IPv4 Configuration II Protocol instance will be installed on each communication device that \r | |
306 | /// the EFI IPv4 network stack runs on.\r | |
307 | ///\r | |
308 | struct _EFI_IP4_CONFIG2_PROTOCOL {\r | |
309 | EFI_IP4_CONFIG2_SET_DATA SetData;\r | |
310 | EFI_IP4_CONFIG2_GET_DATA GetData;\r | |
311 | EFI_IP4_CONFIG2_REGISTER_NOTIFY RegisterDataNotify;\r | |
312 | EFI_IP4_CONFIG2_UNREGISTER_NOTIFY UnregisterDataNotify;\r | |
313 | };\r | |
314 | \r | |
315 | extern EFI_GUID gEfiIp4Config2ProtocolGuid;\r | |
316 | \r | |
317 | #endif\r | |
318 | \r |