1*f334afcfSToomas Soome /** @file
2*f334afcfSToomas Soome   This file provides a definition of the EFI IPv6 Configuration
3*f334afcfSToomas Soome   Protocol.
4*f334afcfSToomas Soome 
5*f334afcfSToomas Soome Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>
6*f334afcfSToomas Soome SPDX-License-Identifier: BSD-2-Clause-Patent
7*f334afcfSToomas Soome 
8*f334afcfSToomas Soome **/
9*f334afcfSToomas Soome 
10*f334afcfSToomas Soome #ifndef __EFI_IP6CONFIG_PROTOCOL_H__
11*f334afcfSToomas Soome #define __EFI_IP6CONFIG_PROTOCOL_H__
12*f334afcfSToomas Soome 
13*f334afcfSToomas Soome #include <Protocol/Ip6.h>
14*f334afcfSToomas Soome 
15*f334afcfSToomas Soome #define EFI_IP6_CONFIG_PROTOCOL_GUID \
16*f334afcfSToomas Soome   { \
17*f334afcfSToomas Soome     0x937fe521, 0x95ae, 0x4d1a, {0x89, 0x29, 0x48, 0xbc, 0xd9, 0x0a, 0xd3, 0x1a } \
18*f334afcfSToomas Soome   }
19*f334afcfSToomas Soome 
20*f334afcfSToomas Soome typedef struct _EFI_IP6_CONFIG_PROTOCOL EFI_IP6_CONFIG_PROTOCOL;
21*f334afcfSToomas Soome 
22*f334afcfSToomas Soome ///
23*f334afcfSToomas Soome /// EFI_IP6_CONFIG_DATA_TYPE
24*f334afcfSToomas Soome ///
25*f334afcfSToomas Soome typedef enum {
26*f334afcfSToomas Soome   ///
27*f334afcfSToomas Soome   /// The interface information of the communication
28*f334afcfSToomas Soome   /// device this EFI IPv6 Configuration Protocol instance manages.
29*f334afcfSToomas Soome   /// This type of data is read only.The corresponding Data is of type
30*f334afcfSToomas Soome   /// EFI_IP6_CONFIG_INTERFACE_INFO.
31*f334afcfSToomas Soome   ///
32*f334afcfSToomas Soome   Ip6ConfigDataTypeInterfaceInfo,
33*f334afcfSToomas Soome   ///
34*f334afcfSToomas Soome   /// The alternative interface ID for the
35*f334afcfSToomas Soome   /// communication device this EFI IPv6 Configuration Protocol
36*f334afcfSToomas Soome   /// instance manages if the link local IPv6 address generated from
37*f334afcfSToomas Soome   /// the interfaced ID based on the default source the EFI IPv6
38*f334afcfSToomas Soome   /// Protocol uses is a duplicate address. The length of the interface
39*f334afcfSToomas Soome   /// ID is 64 bit. The corresponding Data is of type
40*f334afcfSToomas Soome   /// EFI_IP6_CONFIG_INTERFACE_ID.
41*f334afcfSToomas Soome   ///
42*f334afcfSToomas Soome   Ip6ConfigDataTypeAltInterfaceId,
43*f334afcfSToomas Soome   ///
44*f334afcfSToomas Soome   /// The general configuration policy for the EFI IPv6 network
45*f334afcfSToomas Soome   /// stack running on the communication device this EFI IPv6
46*f334afcfSToomas Soome   /// Configuration Protocol instance manages. The policy will affect
47*f334afcfSToomas Soome   /// other configuration settings. The corresponding Data is of type
48*f334afcfSToomas Soome   /// EFI_IP6_CONFIG_POLICY.
49*f334afcfSToomas Soome   ///
50*f334afcfSToomas Soome   Ip6ConfigDataTypePolicy,
51*f334afcfSToomas Soome   ///
52*f334afcfSToomas Soome   /// The number of consecutive
53*f334afcfSToomas Soome   /// Neighbor Solicitation messages sent while performing Duplicate
54*f334afcfSToomas Soome   /// Address Detection on a tentative address. A value of zero
55*f334afcfSToomas Soome   /// indicates that Duplicate Address Detection will not be performed
56*f334afcfSToomas Soome   /// on tentative addresses. The corresponding Data is of type
57*f334afcfSToomas Soome   /// EFI_IP6_CONFIG_DUP_ADDR_DETECT_TRANSMITS.
58*f334afcfSToomas Soome   ///
59*f334afcfSToomas Soome   Ip6ConfigDataTypeDupAddrDetectTransmits,
60*f334afcfSToomas Soome   ///
61*f334afcfSToomas Soome   /// The station addresses set manually for the EFI
62*f334afcfSToomas Soome   /// IPv6 network stack. It is only configurable when the policy is
63*f334afcfSToomas Soome   /// Ip6ConfigPolicyManual. The corresponding Data is a
64*f334afcfSToomas Soome   /// pointer to an array of EFI_IPv6_ADDRESS instances. When
65*f334afcfSToomas Soome   /// DataSize is 0 and Data is NULL, the existing configuration
66*f334afcfSToomas Soome   /// is cleared from the EFI IPv6 Configuration Protocol instance.
67*f334afcfSToomas Soome   ///
68*f334afcfSToomas Soome   Ip6ConfigDataTypeManualAddress,
69*f334afcfSToomas Soome   ///
70*f334afcfSToomas Soome   /// The gateway addresses set manually for the EFI IPv6
71*f334afcfSToomas Soome   /// network stack running on the communication device this EFI
72*f334afcfSToomas Soome   /// IPv6 Configuration Protocol manages. It is not configurable when
73*f334afcfSToomas Soome   /// the policy is Ip6ConfigPolicyAutomatic. The gateway
74*f334afcfSToomas Soome   /// addresses must be unicast IPv6 addresses. The corresponding
75*f334afcfSToomas Soome   /// Data is a pointer to an array of EFI_IPv6_ADDRESS instances.
76*f334afcfSToomas Soome   /// When DataSize is 0 and Data is NULL, the existing configuration
77*f334afcfSToomas Soome   /// is cleared from the EFI IPv6 Configuration Protocol instance.
78*f334afcfSToomas Soome   ///
79*f334afcfSToomas Soome   Ip6ConfigDataTypeGateway,
80*f334afcfSToomas Soome   ///
81*f334afcfSToomas Soome   /// The DNS server list for the EFI IPv6 network stack
82*f334afcfSToomas Soome   /// running on the communication device this EFI IPv6
83*f334afcfSToomas Soome   /// Configuration Protocol manages. It is not configurable when the
84*f334afcfSToomas Soome   /// policy is Ip6ConfigPolicyAutomatic.The DNS server
85*f334afcfSToomas Soome   /// addresses must be unicast IPv6 addresses. The corresponding
86*f334afcfSToomas Soome   /// Data is a pointer to an array of EFI_IPv6_ADDRESS instances.
87*f334afcfSToomas Soome   /// When DataSize is 0 and Data is NULL, the existing configuration
88*f334afcfSToomas Soome   /// is cleared from the EFI IPv6 Configuration Protocol instance.
89*f334afcfSToomas Soome   ///
90*f334afcfSToomas Soome   Ip6ConfigDataTypeDnsServer,
91*f334afcfSToomas Soome   ///
92*f334afcfSToomas Soome   /// The number of this enumeration memebers.
93*f334afcfSToomas Soome   ///
94*f334afcfSToomas Soome   Ip6ConfigDataTypeMaximum
95*f334afcfSToomas Soome } EFI_IP6_CONFIG_DATA_TYPE;
96*f334afcfSToomas Soome 
97*f334afcfSToomas Soome ///
98*f334afcfSToomas Soome /// EFI_IP6_CONFIG_INTERFACE_INFO
99*f334afcfSToomas Soome /// describes the operational state of the interface this
100*f334afcfSToomas Soome /// EFI IPv6 Configuration Protocol instance manages.
101*f334afcfSToomas Soome ///
102*f334afcfSToomas Soome typedef struct {
103*f334afcfSToomas Soome   ///
104*f334afcfSToomas Soome   /// The name of the interface. It is a NULL-terminated string.
105*f334afcfSToomas Soome   ///
106*f334afcfSToomas Soome   CHAR16                  Name[32];
107*f334afcfSToomas Soome   ///
108*f334afcfSToomas Soome   /// The interface type of the network interface.
109*f334afcfSToomas Soome   ///
110*f334afcfSToomas Soome   UINT8                   IfType;
111*f334afcfSToomas Soome   ///
112*f334afcfSToomas Soome   /// The size, in bytes, of the network interface's hardware address.
113*f334afcfSToomas Soome   ///
114*f334afcfSToomas Soome   UINT32                  HwAddressSize;
115*f334afcfSToomas Soome   ///
116*f334afcfSToomas Soome   /// The hardware address for the network interface.
117*f334afcfSToomas Soome   ///
118*f334afcfSToomas Soome   EFI_MAC_ADDRESS         HwAddress;
119*f334afcfSToomas Soome   ///
120*f334afcfSToomas Soome   /// Number of EFI_IP6_ADDRESS_INFO structures pointed to by AddressInfo.
121*f334afcfSToomas Soome   ///
122*f334afcfSToomas Soome   UINT32                  AddressInfoCount;
123*f334afcfSToomas Soome   ///
124*f334afcfSToomas Soome   /// Pointer to an array of EFI_IP6_ADDRESS_INFO instances
125*f334afcfSToomas Soome   /// which contain the local IPv6 addresses and the corresponding
126*f334afcfSToomas Soome   /// prefix length information. Set to NULL if AddressInfoCount
127*f334afcfSToomas Soome   /// is zero.
128*f334afcfSToomas Soome   ///
129*f334afcfSToomas Soome   EFI_IP6_ADDRESS_INFO    *AddressInfo;
130*f334afcfSToomas Soome   ///
131*f334afcfSToomas Soome   /// Number of route table entries in the following RouteTable.
132*f334afcfSToomas Soome   ///
133*f334afcfSToomas Soome   UINT32                  RouteCount;
134*f334afcfSToomas Soome   ///
135*f334afcfSToomas Soome   /// The route table of the IPv6 network stack runs on this interface.
136*f334afcfSToomas Soome   /// Set to NULL if RouteCount is zero.
137*f334afcfSToomas Soome   ///
138*f334afcfSToomas Soome   EFI_IP6_ROUTE_TABLE     *RouteTable;
139*f334afcfSToomas Soome } EFI_IP6_CONFIG_INTERFACE_INFO;
140*f334afcfSToomas Soome 
141*f334afcfSToomas Soome ///
142*f334afcfSToomas Soome /// EFI_IP6_CONFIG_INTERFACE_ID
143*f334afcfSToomas Soome /// describes the 64-bit interface ID.
144*f334afcfSToomas Soome ///
145*f334afcfSToomas Soome typedef struct {
146*f334afcfSToomas Soome   UINT8    Id[8];
147*f334afcfSToomas Soome } EFI_IP6_CONFIG_INTERFACE_ID;
148*f334afcfSToomas Soome 
149*f334afcfSToomas Soome ///
150*f334afcfSToomas Soome /// EFI_IP6_CONFIG_POLICY
151*f334afcfSToomas Soome /// defines the general configuration policy the EFI IPv6
152*f334afcfSToomas Soome /// Configuration Protocol supports.
153*f334afcfSToomas Soome ///
154*f334afcfSToomas Soome typedef enum {
155*f334afcfSToomas Soome   ///
156*f334afcfSToomas Soome   /// Under this policy, the IpI6ConfigDataTypeManualAddress,
157*f334afcfSToomas Soome   /// Ip6ConfigDataTypeGateway and Ip6ConfigDataTypeDnsServer
158*f334afcfSToomas Soome   /// configuration data are required to be set manually.
159*f334afcfSToomas Soome   /// The EFI IPv6 Protocol will get all required configuration
160*f334afcfSToomas Soome   /// such as address, prefix and gateway settings from the EFI
161*f334afcfSToomas Soome   /// IPv6 Configuration protocol.
162*f334afcfSToomas Soome   ///
163*f334afcfSToomas Soome   Ip6ConfigPolicyManual,
164*f334afcfSToomas Soome   ///
165*f334afcfSToomas Soome   /// Under this policy, the IpI6ConfigDataTypeManualAddress,
166*f334afcfSToomas Soome   /// Ip6ConfigDataTypeGateway and Ip6ConfigDataTypeDnsServer
167*f334afcfSToomas Soome   /// configuration data are not allowed to set via SetData().
168*f334afcfSToomas Soome   /// All of these configurations are retrieved from some auto
169*f334afcfSToomas Soome   /// configuration mechanism.
170*f334afcfSToomas Soome   /// The EFI IPv6 Protocol will use the IPv6 stateless address
171*f334afcfSToomas Soome   /// autoconfiguration mechanism and/or the IPv6 stateful address
172*f334afcfSToomas Soome   /// autoconfiguration mechanism described in the related RFCs to
173*f334afcfSToomas Soome   /// get address and other configuration information
174*f334afcfSToomas Soome   ///
175*f334afcfSToomas Soome   Ip6ConfigPolicyAutomatic
176*f334afcfSToomas Soome } EFI_IP6_CONFIG_POLICY;
177*f334afcfSToomas Soome 
178*f334afcfSToomas Soome ///
179*f334afcfSToomas Soome /// EFI_IP6_CONFIG_DUP_ADDR_DETECT_TRANSMITS
180*f334afcfSToomas Soome /// describes the number of consecutive Neighbor Solicitation messages sent
181*f334afcfSToomas Soome /// while performing Duplicate Address Detection on a tentative address.
182*f334afcfSToomas Soome /// The default value for a newly detected communication device is 1.
183*f334afcfSToomas Soome ///
184*f334afcfSToomas Soome typedef struct {
185*f334afcfSToomas Soome   UINT32    DupAddrDetectTransmits;  ///< The number of consecutive Neighbor Solicitation messages sent.
186*f334afcfSToomas Soome } EFI_IP6_CONFIG_DUP_ADDR_DETECT_TRANSMITS;
187*f334afcfSToomas Soome 
188*f334afcfSToomas Soome ///
189*f334afcfSToomas Soome /// EFI_IP6_CONFIG_MANUAL_ADDRESS
190*f334afcfSToomas Soome /// is used to set the station address information for the EFI IPv6 network
191*f334afcfSToomas Soome /// stack manually when the policy is Ip6ConfigPolicyManual.
192*f334afcfSToomas Soome ///
193*f334afcfSToomas Soome typedef struct {
194*f334afcfSToomas Soome   EFI_IPv6_ADDRESS    Address;         ///< The IPv6 unicast address.
195*f334afcfSToomas Soome   BOOLEAN             IsAnycast;       ///< Set to TRUE if Address is anycast.
196*f334afcfSToomas Soome   UINT8               PrefixLength;    ///< The length, in bits, of the prefix associated with this Address.
197*f334afcfSToomas Soome } EFI_IP6_CONFIG_MANUAL_ADDRESS;
198*f334afcfSToomas Soome 
199*f334afcfSToomas Soome /**
200*f334afcfSToomas Soome   Set the configuration for the EFI IPv6 network stack running on the communication
201*f334afcfSToomas Soome   device this EFI IPv6 Configuration Protocol instance manages.
202*f334afcfSToomas Soome 
203*f334afcfSToomas Soome   This function is used to set the configuration data of type DataType for the EFI
204*f334afcfSToomas Soome   IPv6 network stack running on the communication device this EFI IPv6 Configuration
205*f334afcfSToomas Soome   Protocol instance manages.
206*f334afcfSToomas Soome 
207*f334afcfSToomas Soome   The DataSize is used to calculate the count of structure instances in the Data for
208*f334afcfSToomas Soome   some DataType that multiple structure instances are allowed.
209*f334afcfSToomas Soome 
210*f334afcfSToomas Soome   This function is always non-blocking. When setting some type of configuration data,
211*f334afcfSToomas Soome   an asynchronous process is invoked to check the correctness of the data, such as
212*f334afcfSToomas Soome   doing Duplicate Address Detection on the manually set local IPv6 addresses.
213*f334afcfSToomas Soome   EFI_NOT_READY is returned immediately to indicate that such an asynchronous process
214*f334afcfSToomas Soome   is invoked and the process is not finished yet. The caller willing to get the result
215*f334afcfSToomas Soome   of the asynchronous process is required to call RegisterDataNotify() to register an
216*f334afcfSToomas Soome   event on the specified configuration data. Once the event is signaled, the caller
217*f334afcfSToomas Soome   can call GetData() to get back the configuration data in order to know the result.
218*f334afcfSToomas Soome   For other types of configuration data that do not require an asynchronous configuration
219*f334afcfSToomas Soome   process, the result of the operation is immediately returned.
220*f334afcfSToomas Soome 
221*f334afcfSToomas Soome   @param[in]     This           Pointer to the EFI_IP6_CONFIG_PROTOCOL instance.
222*f334afcfSToomas Soome   @param[in]     DataType       The type of data to set.
223*f334afcfSToomas Soome   @param[in]     DataSize       Size of the buffer pointed to by Data in bytes.
224*f334afcfSToomas Soome   @param[in]     Data           The data buffer to set. The type of the data buffer is
225*f334afcfSToomas Soome                                 associated with the DataType.
226*f334afcfSToomas Soome 
227*f334afcfSToomas Soome   @retval EFI_SUCCESS           The specified configuration data for the EFI IPv6
228*f334afcfSToomas Soome                                 network stack is set successfully.
229*f334afcfSToomas Soome   @retval EFI_INVALID_PARAMETER One or more of the following are TRUE:
230*f334afcfSToomas Soome                                 - This is NULL.
231*f334afcfSToomas Soome                                 - One or more fields in Data and DataSize do not match the
232*f334afcfSToomas Soome                                   requirement of the data type indicated by DataType.
233*f334afcfSToomas Soome   @retval EFI_WRITE_PROTECTED   The specified configuration data is read-only or the specified
234*f334afcfSToomas Soome                                 configuration data can not be set under the current policy
235*f334afcfSToomas Soome   @retval EFI_ACCESS_DENIED     Another set operation on the specified configuration
236*f334afcfSToomas Soome                                 data is already in process.
237*f334afcfSToomas Soome   @retval EFI_NOT_READY         An asynchronous process is invoked to set the specified
238*f334afcfSToomas Soome                                 configuration data and the process is not finished yet.
239*f334afcfSToomas Soome   @retval EFI_BAD_BUFFER_SIZE   The DataSize does not match the size of the type
240*f334afcfSToomas Soome                                 indicated by DataType.
241*f334afcfSToomas Soome   @retval EFI_UNSUPPORTED       This DataType is not supported.
242*f334afcfSToomas Soome   @retval EFI_OUT_OF_RESOURCES  Required system resources could not be allocated.
243*f334afcfSToomas Soome   @retval EFI_DEVICE_ERROR      An unexpected system error or network error occurred.
244*f334afcfSToomas Soome 
245*f334afcfSToomas Soome **/
246*f334afcfSToomas Soome typedef
247*f334afcfSToomas Soome EFI_STATUS
248*f334afcfSToomas Soome (EFIAPI *EFI_IP6_CONFIG_SET_DATA)(
249*f334afcfSToomas Soome   IN EFI_IP6_CONFIG_PROTOCOL    *This,
250*f334afcfSToomas Soome   IN EFI_IP6_CONFIG_DATA_TYPE   DataType,
251*f334afcfSToomas Soome   IN UINTN                      DataSize,
252*f334afcfSToomas Soome   IN VOID                       *Data
253*f334afcfSToomas Soome   );
254*f334afcfSToomas Soome 
255*f334afcfSToomas Soome /**
256*f334afcfSToomas Soome   Get the configuration data for the EFI IPv6 network stack running on the communication
257*f334afcfSToomas Soome   device this EFI IPv6 Configuration Protocol instance manages.
258*f334afcfSToomas Soome 
259*f334afcfSToomas Soome   This function returns the configuration data of type DataType for the EFI IPv6 network
260*f334afcfSToomas Soome   stack running on the communication device this EFI IPv6 Configuration Protocol instance
261*f334afcfSToomas Soome   manages.
262*f334afcfSToomas Soome 
263*f334afcfSToomas Soome   The caller is responsible for allocating the buffer used to return the specified
264*f334afcfSToomas Soome   configuration data and the required size will be returned to the caller if the size of
265*f334afcfSToomas Soome   the buffer is too small.
266*f334afcfSToomas Soome 
267*f334afcfSToomas Soome   EFI_NOT_READY is returned if the specified configuration data is not ready due to an
268*f334afcfSToomas Soome   already in progress asynchronous configuration process. The caller can call RegisterDataNotify()
269*f334afcfSToomas Soome   to register an event on the specified configuration data. Once the asynchronous configuration
270*f334afcfSToomas Soome   process is finished, the event will be signaled and a subsequent GetData() call will return
271*f334afcfSToomas Soome   the specified configuration data.
272*f334afcfSToomas Soome 
273*f334afcfSToomas Soome   @param[in]     This           Pointer to the EFI_IP6_CONFIG_PROTOCOL instance.
274*f334afcfSToomas Soome   @param[in]     DataType       The type of data to get.
275*f334afcfSToomas Soome   @param[in,out] DataSize       On input, in bytes, the size of Data. On output, in bytes, the
276*f334afcfSToomas Soome                                 size of buffer required to store the specified configuration data.
277*f334afcfSToomas Soome   @param[in]     Data           The data buffer in which the configuration data is returned. The
278*f334afcfSToomas Soome                                 type of the data buffer is associated with the DataType.
279*f334afcfSToomas Soome 
280*f334afcfSToomas Soome   @retval EFI_SUCCESS           The specified configuration data is got successfully.
281*f334afcfSToomas Soome   @retval EFI_INVALID_PARAMETER One or more of the followings are TRUE:
282*f334afcfSToomas Soome                                 - This is NULL.
283*f334afcfSToomas Soome                                 - DataSize is NULL.
284*f334afcfSToomas Soome                                 - Data is NULL if *DataSize is not zero.
285*f334afcfSToomas Soome   @retval EFI_BUFFER_TOO_SMALL  The size of Data is too small for the specified configuration data
286*f334afcfSToomas Soome                                 and the required size is returned in DataSize.
287*f334afcfSToomas Soome   @retval EFI_NOT_READY         The specified configuration data is not ready due to an already in
288*f334afcfSToomas Soome                                 progress asynchronous configuration process.
289*f334afcfSToomas Soome   @retval EFI_NOT_FOUND         The specified configuration data is not found.
290*f334afcfSToomas Soome 
291*f334afcfSToomas Soome **/
292*f334afcfSToomas Soome typedef
293*f334afcfSToomas Soome EFI_STATUS
294*f334afcfSToomas Soome (EFIAPI *EFI_IP6_CONFIG_GET_DATA)(
295*f334afcfSToomas Soome   IN EFI_IP6_CONFIG_PROTOCOL    *This,
296*f334afcfSToomas Soome   IN EFI_IP6_CONFIG_DATA_TYPE   DataType,
297*f334afcfSToomas Soome   IN OUT UINTN                  *DataSize,
298*f334afcfSToomas Soome   IN VOID                       *Data   OPTIONAL
299*f334afcfSToomas Soome   );
300*f334afcfSToomas Soome 
301*f334afcfSToomas Soome /**
302*f334afcfSToomas Soome   Register an event that is to be signaled whenever a configuration process on the specified
303*f334afcfSToomas Soome   configuration data is done.
304*f334afcfSToomas Soome 
305*f334afcfSToomas Soome   This function registers an event that is to be signaled whenever a configuration process
306*f334afcfSToomas Soome   on the specified configuration data is done. An event can be registered for different DataType
307*f334afcfSToomas Soome   simultaneously and the caller is responsible for determining which type of configuration data
308*f334afcfSToomas Soome   causes the signaling of the event in such case.
309*f334afcfSToomas Soome 
310*f334afcfSToomas Soome   @param[in]     This           Pointer to the EFI_IP6_CONFIG_PROTOCOL instance.
311*f334afcfSToomas Soome   @param[in]     DataType       The type of data to unregister the event for.
312*f334afcfSToomas Soome   @param[in]     Event          The event to register.
313*f334afcfSToomas Soome 
314*f334afcfSToomas Soome   @retval EFI_SUCCESS           The notification event for the specified configuration data is
315*f334afcfSToomas Soome                                 registered.
316*f334afcfSToomas Soome   @retval EFI_INVALID_PARAMETER This is NULL or Event is NULL.
317*f334afcfSToomas Soome   @retval EFI_UNSUPPORTED       The configuration data type specified by DataType is not
318*f334afcfSToomas Soome                                 supported.
319*f334afcfSToomas Soome   @retval EFI_OUT_OF_RESOURCES  Required system resources could not be allocated.
320*f334afcfSToomas Soome   @retval EFI_ACCESS_DENIED     The Event is already registered for the DataType.
321*f334afcfSToomas Soome 
322*f334afcfSToomas Soome **/
323*f334afcfSToomas Soome typedef
324*f334afcfSToomas Soome EFI_STATUS
325*f334afcfSToomas Soome (EFIAPI *EFI_IP6_CONFIG_REGISTER_NOTIFY)(
326*f334afcfSToomas Soome   IN EFI_IP6_CONFIG_PROTOCOL    *This,
327*f334afcfSToomas Soome   IN EFI_IP6_CONFIG_DATA_TYPE   DataType,
328*f334afcfSToomas Soome   IN EFI_EVENT                  Event
329*f334afcfSToomas Soome   );
330*f334afcfSToomas Soome 
331*f334afcfSToomas Soome /**
332*f334afcfSToomas Soome   Remove a previously registered event for the specified configuration data.
333*f334afcfSToomas Soome 
334*f334afcfSToomas Soome   This function removes a previously registered event for the specified configuration data.
335*f334afcfSToomas Soome 
336*f334afcfSToomas Soome   @param[in]     This           Pointer to the EFI_IP6_CONFIG_PROTOCOL instance.
337*f334afcfSToomas Soome   @param[in]     DataType       The type of data to remove the previously registered event for.
338*f334afcfSToomas Soome   @param[in]     Event          The event to unregister.
339*f334afcfSToomas Soome 
340*f334afcfSToomas Soome   @retval EFI_SUCCESS           The event registered for the specified configuration data is removed.
341*f334afcfSToomas Soome   @retval EFI_INVALID_PARAMETER This is NULL or Event is NULL.
342*f334afcfSToomas Soome   @retval EFI_NOT_FOUND         The Event has not been registered for the specified
343*f334afcfSToomas Soome                                 DataType.
344*f334afcfSToomas Soome 
345*f334afcfSToomas Soome **/
346*f334afcfSToomas Soome typedef
347*f334afcfSToomas Soome EFI_STATUS
348*f334afcfSToomas Soome (EFIAPI *EFI_IP6_CONFIG_UNREGISTER_NOTIFY)(
349*f334afcfSToomas Soome   IN EFI_IP6_CONFIG_PROTOCOL    *This,
350*f334afcfSToomas Soome   IN EFI_IP6_CONFIG_DATA_TYPE   DataType,
351*f334afcfSToomas Soome   IN EFI_EVENT                  Event
352*f334afcfSToomas Soome   );
353*f334afcfSToomas Soome 
354*f334afcfSToomas Soome ///
355*f334afcfSToomas Soome /// The EFI_IP6_CONFIG_PROTOCOL provides the mechanism to set and get various
356*f334afcfSToomas Soome /// types of configurations for the EFI IPv6 network stack.
357*f334afcfSToomas Soome ///
358*f334afcfSToomas Soome struct _EFI_IP6_CONFIG_PROTOCOL {
359*f334afcfSToomas Soome   EFI_IP6_CONFIG_SET_DATA             SetData;
360*f334afcfSToomas Soome   EFI_IP6_CONFIG_GET_DATA             GetData;
361*f334afcfSToomas Soome   EFI_IP6_CONFIG_REGISTER_NOTIFY      RegisterDataNotify;
362*f334afcfSToomas Soome   EFI_IP6_CONFIG_UNREGISTER_NOTIFY    UnregisterDataNotify;
363*f334afcfSToomas Soome };
364*f334afcfSToomas Soome 
365*f334afcfSToomas Soome extern EFI_GUID  gEfiIp6ConfigProtocolGuid;
366*f334afcfSToomas Soome 
367*f334afcfSToomas Soome #endif
368