Home | History | Annotate | Download | only in Protocol
      1 /** @file
      2   EFI EAP Management Protocol Definition
      3   The EFI EAP Management Protocol is designed to provide ease of management and
      4   ease of test for EAPOL state machine. It is intended for the supplicant side.
      5   It conforms to IEEE 802.1x specification.
      6   The definitions in this file are defined in UEFI Specification 2.2, which have
      7   not been verified by one implementation yet.
      8 
      9   Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
     10   This program and the accompanying materials
     11   are licensed and made available under the terms and conditions of the BSD License
     12   which accompanies this distribution.  The full text of the license may be found at
     13   http://opensource.org/licenses/bsd-license.php
     14 
     15   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     16   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     17 
     18   @par Revision Reference:
     19   This Protocol is introduced in UEFI Specification 2.2
     20 
     21 **/
     22 
     23 #ifndef __EFI_EAP_MANAGEMENT_PROTOCOL_H__
     24 #define __EFI_EAP_MANAGEMENT_PROTOCOL_H__
     25 
     26 #include <Protocol/Eap.h>
     27 
     28 #define EFI_EAP_MANAGEMENT_PROTOCOL_GUID \
     29   { \
     30     0xbb62e663, 0x625d, 0x40b2, {0xa0, 0x88, 0xbb, 0xe8, 0x36, 0x23, 0xa2, 0x45 } \
     31   }
     32 
     33 typedef struct _EFI_EAP_MANAGEMENT_PROTOCOL EFI_EAP_MANAGEMENT_PROTOCOL;
     34 
     35 ///
     36 /// PAE Capabilities
     37 ///
     38 ///@{
     39 #define PAE_SUPPORT_AUTHENTICATOR       0x01
     40 #define PAE_SUPPORT_SUPPLICANT          0x02
     41 ///@}
     42 
     43 ///
     44 /// EFI_EAPOL_PORT_INFO
     45 ///
     46 typedef struct _EFI_EAPOL_PORT_INFO {
     47   ///
     48   /// The identification number assigned to the Port by the System in
     49   /// which the Port resides.
     50   ///
     51   EFI_PORT_HANDLE     PortNumber;
     52   ///
     53   /// The protocol version number of the EAPOL implementation
     54   /// supported by the Port.
     55   ///
     56   UINT8               ProtocolVersion;
     57   ///
     58   /// The capabilities of the PAE associated with the Port. This field
     59   /// indicates whether Authenticator functionality, Supplicant
     60   /// functionality, both, or neither, is supported by the Port's PAE.
     61   ///
     62   UINT8               PaeCapabilities;
     63 } EFI_EAPOL_PORT_INFO;
     64 
     65 ///
     66 /// Supplicant PAE state machine (IEEE Std 802.1X Section 8.5.10)
     67 ///
     68 typedef enum _EFI_EAPOL_SUPPLICANT_PAE_STATE {
     69   Logoff,
     70   Disconnected,
     71   Connecting,
     72   Acquired,
     73   Authenticating,
     74   Held,
     75   Authenticated,
     76   MaxSupplicantPaeState
     77 } EFI_EAPOL_SUPPLICANT_PAE_STATE;
     78 
     79 ///
     80 /// Definitions for ValidFieldMask
     81 ///
     82 ///@{
     83 #define AUTH_PERIOD_FIELD_VALID       0x01
     84 #define HELD_PERIOD_FIELD_VALID       0x02
     85 #define START_PERIOD_FIELD_VALID      0x04
     86 #define MAX_START_FIELD_VALID         0x08
     87 ///@}
     88 
     89 ///
     90 /// EFI_EAPOL_SUPPLICANT_PAE_CONFIGURATION
     91 ///
     92 typedef struct _EFI_EAPOL_SUPPLICANT_PAE_CONFIGURATION {
     93   ///
     94   /// Indicates which of the following fields are valid.
     95   ///
     96   UINT8       ValidFieldMask;
     97   ///
     98   /// The initial value for the authWhile timer. Its default value is 30s.
     99   ///
    100   UINTN       AuthPeriod;
    101   ///
    102   /// The initial value for the heldWhile timer. Its default value is 60s.
    103   ///
    104   UINTN       HeldPeriod;
    105   ///
    106   /// The initial value for the startWhen timer. Its default value is 30s.
    107   ///
    108   UINTN       StartPeriod;
    109   ///
    110   /// The maximum number of successive EAPOL-Start messages will
    111   /// be sent before the Supplicant assumes that there is no
    112   /// Authenticator present. Its default value is 3.
    113   ///
    114   UINTN       MaxStart;
    115 } EFI_EAPOL_SUPPLICANT_PAE_CONFIGURATION;
    116 
    117 ///
    118 /// Supplicant Statistics (IEEE Std 802.1X Section 9.5.2)
    119 ///
    120 typedef struct _EFI_EAPOL_SUPPLICANT_PAE_STATISTICS {
    121   ///
    122   /// The number of EAPOL frames of any type that have been received by this Supplican.
    123   ///
    124   UINTN     EapolFramesReceived;
    125   ///
    126   /// The number of EAPOL frames of any type that have been transmitted by this Supplicant.
    127   ///
    128   UINTN     EapolFramesTransmitted;
    129   ///
    130   /// The number of EAPOL Start frames that have been transmitted by this Supplicant.
    131   ///
    132   UINTN     EapolStartFramesTransmitted;
    133   ///
    134   /// The number of EAPOL Logoff frames that have been transmitted by this Supplicant.
    135   ///
    136   UINTN     EapolLogoffFramesTransmitted;
    137   ///
    138   /// The number of EAP Resp/Id frames that have been transmitted by this Supplicant.
    139   ///
    140   UINTN     EapRespIdFramesTransmitted;
    141   ///
    142   /// The number of valid EAP Response frames (other than Resp/Id frames) that have been
    143   /// transmitted by this Supplicant.
    144   ///
    145   UINTN     EapResponseFramesTransmitted;
    146   ///
    147   /// The number of EAP Req/Id frames that have been received by this Supplicant.
    148   ///
    149   UINTN     EapReqIdFramesReceived;
    150   ///
    151   /// The number of EAP Request frames (other than Rq/Id frames) that have been received
    152   /// by this Supplicant.
    153   ///
    154   UINTN     EapRequestFramesReceived;
    155   ///
    156   /// The number of EAPOL frames that have been received by this Supplicant in which the
    157   /// frame type is not recognized.
    158   ///
    159   UINTN     InvalidEapolFramesReceived;
    160   ///
    161   /// The number of EAPOL frames that have been received by this Supplicant in which the
    162   /// Packet Body Length field (7.5.5) is invalid.
    163   ///
    164   UINTN     EapLengthErrorFramesReceived;
    165   ///
    166   /// The protocol version number carried in the most recently received EAPOL frame.
    167   ///
    168   UINTN     LastEapolFrameVersion;
    169   ///
    170   /// The source MAC address carried in the most recently received EAPOL frame.
    171   ///
    172   UINTN     LastEapolFrameSource;
    173 } EFI_EAPOL_SUPPLICANT_PAE_STATISTICS;
    174 
    175 /**
    176   Read the system configuration information associated with the Port.
    177 
    178   The GetSystemConfiguration() function reads the system configuration
    179   information associated with the Port, including the value of the
    180   SystemAuthControl parameter of the System is returned in SystemAuthControl
    181   and the Port's information is returned in the buffer pointed to by PortInfo.
    182   The Port's information is optional.
    183   If PortInfo is NULL, then reading the Port's information is ignored.
    184 
    185   If SystemAuthControl is NULL, then EFI_INVALID_PARAMETER is returned.
    186 
    187   @param[in]  This               A pointer to the EFI_EAP_MANAGEMENT_PROTOCOL
    188                                  instance that indicates the calling context.
    189   @param[out] SystemAuthControl  Returns the value of the SystemAuthControl
    190                                  parameter of the System.
    191                                  TRUE means Enabled. FALSE means Disabled.
    192   @param[out] PortInfo           Returns EFI_EAPOL_PORT_INFO structure to describe
    193                                  the Port's information. This parameter can be NULL
    194                                  to ignore reading the Port's information.
    195 
    196   @retval EFI_SUCCESS            The system configuration information of the
    197                                  Port is read successfully.
    198   @retval EFI_INVALID_PARAMETER  SystemAuthControl is NULL.
    199 
    200 
    201 **/
    202 typedef
    203 EFI_STATUS
    204 (EFIAPI *EFI_EAP_GET_SYSTEM_CONFIGURATION)(
    205   IN EFI_EAP_MANAGEMENT_PROTOCOL          *This,
    206   OUT BOOLEAN                             *SystemAuthControl,
    207   OUT EFI_EAPOL_PORT_INFO                 *PortInfo OPTIONAL
    208   );
    209 
    210 /**
    211   Set the system configuration information associated with the Port.
    212 
    213   The SetSystemConfiguration() function sets the value of the SystemAuthControl
    214   parameter of the System to SystemAuthControl.
    215 
    216   @param[in] This                A pointer to the EFI_EAP_MANAGEMENT_PROTOCOL
    217                                  instance that indicates the calling context.
    218   @param[in] SystemAuthControl   The desired value of the SystemAuthControl
    219                                  parameter of the System.
    220                                  TRUE means Enabled. FALSE means Disabled.
    221 
    222   @retval EFI_SUCCESS            The system configuration information of the
    223                                  Port is set successfully.
    224 
    225 **/
    226 typedef
    227 EFI_STATUS
    228 (EFIAPI *EFI_EAP_SET_SYSTEM_CONFIGURATION)(
    229   IN EFI_EAP_MANAGEMENT_PROTOCOL          *This,
    230   IN BOOLEAN                              SystemAuthControl
    231   );
    232 
    233 /**
    234   Cause the EAPOL state machines for the Port to be initialized.
    235 
    236   The InitializePort() function causes the EAPOL state machines for the Port.
    237 
    238   @param[in] This                A pointer to the EFI_EAP_MANAGEMENT_PROTOCOL
    239                                  instance that indicates the calling context.
    240 
    241   @retval EFI_SUCCESS            The Port is initialized successfully.
    242 
    243 **/
    244 typedef
    245 EFI_STATUS
    246 (EFIAPI *EFI_EAP_INITIALIZE_PORT)(
    247   IN EFI_EAP_MANAGEMENT_PROTOCOL            *This
    248   );
    249 
    250 /**
    251   Notify the EAPOL state machines for the Port that the user of the System has
    252   logged on.
    253 
    254   The UserLogon() function notifies the EAPOL state machines for the Port.
    255 
    256   @param[in] This                A pointer to the EFI_EAP_MANAGEMENT_PROTOCOL
    257                                  instance that indicates the calling context.
    258 
    259   @retval EFI_SUCCESS            The Port is notified successfully.
    260 
    261 **/
    262 typedef
    263 EFI_STATUS
    264 (EFIAPI *EFI_EAP_USER_LOGON)(
    265   IN EFI_EAP_MANAGEMENT_PROTOCOL          *This
    266   );
    267 
    268 /**
    269   Notify the EAPOL state machines for the Port that the user of the System has
    270   logged off.
    271 
    272   The UserLogoff() function notifies the EAPOL state machines for the Port.
    273 
    274   @param[in] This                A pointer to the EFI_EAP_MANAGEMENT_PROTOCOL
    275                                  instance that indicates the calling context.
    276 
    277   @retval EFI_SUCCESS            The Port is notified successfully.
    278 
    279 **/
    280 typedef
    281 EFI_STATUS
    282 (EFIAPI *EFI_EAP_USER_LOGOFF)(
    283   IN EFI_EAP_MANAGEMENT_PROTOCOL          *This
    284   );
    285 
    286 /**
    287   Read the status of the Supplicant PAE state machine for the Port, including the
    288   current state and the configuration of the operational parameters.
    289 
    290   The GetSupplicantStatus() function reads the status of the Supplicant PAE state
    291   machine for the Port, including the current state CurrentState  and the configuration
    292   of the operational parameters Configuration. The configuration of the operational
    293   parameters is optional. If Configuration is NULL, then reading the configuration
    294   is ignored. The operational parameters in Configuration to be read can also be
    295   specified by Configuration.ValidFieldMask.
    296 
    297   If CurrentState is NULL, then EFI_INVALID_PARAMETER is returned.
    298 
    299   @param[in]      This           A pointer to the EFI_EAP_MANAGEMENT_PROTOCOL
    300                                  instance that indicates the calling context.
    301   @param[out]     CurrentState   Returns the current state of the Supplicant PAE
    302                                  state machine for the Port.
    303   @param[in, out] Configuration  Returns the configuration of the operational
    304                                  parameters of the Supplicant PAE state machine
    305                                  for the Port as required. This parameter can be
    306                                  NULL to ignore reading the configuration.
    307                                  On input, Configuration.ValidFieldMask specifies the
    308                                  operational parameters to be read.
    309                                  On output, Configuration returns the configuration
    310                                  of the required operational parameters.
    311 
    312   @retval EFI_SUCCESS            The configuration of the operational parameter
    313                                  of the Supplicant PAE state machine for the Port
    314                                  is set successfully.
    315   @retval EFI_INVALID_PARAMETER  CurrentState is NULL.
    316 
    317 **/
    318 typedef
    319 EFI_STATUS
    320 (EFIAPI *EFI_EAP_GET_SUPPLICANT_STATUS)(
    321   IN EFI_EAP_MANAGEMENT_PROTOCOL                  *This,
    322   OUT EFI_EAPOL_SUPPLICANT_PAE_STATE              *CurrentState,
    323   IN OUT EFI_EAPOL_SUPPLICANT_PAE_CONFIGURATION   *Configuration  OPTIONAL
    324   );
    325 
    326 /**
    327   Set the configuration of the operational parameter of the Supplicant PAE
    328   state machine for the Port.
    329 
    330   The SetSupplicantConfiguration() function sets the configuration of the
    331   operational Parameter of the Supplicant PAE state machine for the Port to
    332   Configuration. The operational parameters in Configuration to be set can be
    333   specified by Configuration.ValidFieldMask.
    334 
    335   If Configuration is NULL, then EFI_INVALID_PARAMETER is returned.
    336 
    337   @param[in] This                A pointer to the EFI_EAP_MANAGEMENT_PROTOCOL
    338                                  instance that indicates the calling context.
    339   @param[in] Configuration       The desired configuration of the operational
    340                                  parameters of the Supplicant PAE state machine
    341                                  for the Port as required.
    342 
    343   @retval EFI_SUCCESS            The configuration of the operational parameter
    344                                  of the Supplicant PAE state machine for the Port
    345                                  is set successfully.
    346   @retval EFI_INVALID_PARAMETER  Configuration is NULL.
    347 
    348 **/
    349 typedef
    350 EFI_STATUS
    351 (EFIAPI *EFI_EAP_SET_SUPPLICANT_CONFIGURATION)(
    352   IN EFI_EAP_MANAGEMENT_PROTOCOL              *This,
    353   IN EFI_EAPOL_SUPPLICANT_PAE_CONFIGURATION   *Configuration
    354   );
    355 
    356 /**
    357   Read the statistical information regarding the operation of the Supplicant
    358   associated with the Port.
    359 
    360   The GetSupplicantStatistics() function reads the statistical information
    361   Statistics regarding the operation of the Supplicant associated with the Port.
    362 
    363   If Statistics is NULL, then EFI_INVALID_PARAMETER is returned.
    364 
    365   @param[in]  This               A pointer to the EFI_EAP_MANAGEMENT_PROTOCOL
    366                                  instance that indicates the calling context.
    367   @param[out] Statistics         Returns the statistical information regarding the
    368                                  operation of the Supplicant for the Port.
    369 
    370   @retval EFI_SUCCESS            The statistical information regarding the operation
    371                                  of the Supplicant for the Port is read successfully.
    372   @retval EFI_INVALID_PARAMETER  Statistics is NULL.
    373 
    374 **/
    375 typedef
    376 EFI_STATUS
    377 (EFIAPI *EFI_EAP_GET_SUPPLICANT_STATISTICS)(
    378   IN EFI_EAP_MANAGEMENT_PROTOCOL              *This,
    379   OUT EFI_EAPOL_SUPPLICANT_PAE_STATISTICS     *Statistics
    380   );
    381 
    382 ///
    383 /// EFI_EAP_MANAGEMENT_PROTOCOL
    384 /// is used to control, configure and monitor EAPOL state machine on
    385 /// a Port. EAPOL state machine is built on a per-Port basis. Herein,
    386 /// a Port means a NIC. For the details of EAPOL, please refer to
    387 /// IEEE 802.1x specification.
    388 ///
    389 struct _EFI_EAP_MANAGEMENT_PROTOCOL {
    390   EFI_EAP_GET_SYSTEM_CONFIGURATION        GetSystemConfiguration;
    391   EFI_EAP_SET_SYSTEM_CONFIGURATION        SetSystemConfiguration;
    392   EFI_EAP_INITIALIZE_PORT                 InitializePort;
    393   EFI_EAP_USER_LOGON                      UserLogon;
    394   EFI_EAP_USER_LOGOFF                     UserLogoff;
    395   EFI_EAP_GET_SUPPLICANT_STATUS           GetSupplicantStatus;
    396   EFI_EAP_SET_SUPPLICANT_CONFIGURATION    SetSupplicantConfiguration;
    397   EFI_EAP_GET_SUPPLICANT_STATISTICS       GetSupplicantStatistics;
    398 };
    399 
    400 extern EFI_GUID gEfiEapManagementProtocolGuid;
    401 
    402 #endif
    403 
    404