Home | History | Annotate | Download | only in 1.0
      1 /*
      2  * Copyright 2016 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package android.hardware.wifi.supplicant@1.0;
     18 
     19 /**
     20  * Callback Interface exposed by the supplicant service
     21  * for each station mode interface (ISupplicantStaIface).
     22  *
     23  * Clients need to host an instance of this HIDL interface object and
     24  * pass a reference of the object to the supplicant via the
     25  * corresponding |ISupplicantStaIface.registerCallback| method.
     26  */
     27 interface ISupplicantStaIfaceCallback {
     28   /** Various states of the interface reported by |onStateChanged|.*/
     29   enum State : uint32_t {
     30     /**
     31      * This state indicates that client is not associated, but is likely to
     32      * start looking for an access point. This state is entered when a
     33      * connection is lost.
     34      */
     35     DISCONNECTED = 0,
     36     /**
     37      * This state is entered if the network interface is disabled, e.g.,
     38      * due to rfkill. the supplicant refuses any new operations that would
     39      * use the radio until the interface has been enabled.
     40      */
     41     IFACE_DISABLED = 1,
     42     /**
     43      * This state is entered if there are no enabled networks in the
     44      * configuration. the supplicant is not trying to associate with a new
     45      * network and external interaction (e.g., ctrl_iface call to add or
     46      * enable a network) is needed to start association.
     47      */
     48     INACTIVE = 2,
     49     /**
     50      * This state is entered when the supplicant starts scanning for a
     51      * network.
     52      */
     53     SCANNING = 3,
     54     /**
     55      * This state is entered when the supplicant has found a suitable BSS
     56      * to authenticate with and the driver is configured to try to
     57      * authenticate with this BSS. This state is used only with drivers
     58      * that use the supplicant as the SME.
     59      */
     60     AUTHENTICATING = 4,
     61     /**
     62      * This state is entered when the supplicant has found a suitable BSS
     63      * to associate with and the driver is configured to try to associate
     64      * with this BSS in ap_scan=1 mode. When using ap_scan=2 mode, this
     65      * state is entered when the driver is configured to try to associate
     66      * with a network using the configured SSID and security policy.
     67      */
     68     ASSOCIATING = 5,
     69     /**
     70      * This state is entered when the driver reports that association has
     71      * been successfully completed with an AP. If IEEE 802.1X is used
     72      * (with or without WPA/WPA2), the supplicant remains in this state
     73      * until the IEEE 802.1X/EAPOL authentication has been completed.
     74      */
     75     ASSOCIATED = 6,
     76     /**
     77      * This state is entered when WPA/WPA2 4-Way Handshake is started. In
     78      * case of WPA-PSK, this happens when receiving the first EAPOL-Key
     79      * frame after association. In case of WPA-EAP, this state is entered
     80      * when the IEEE 802.1X/EAPOL authentication has been completed.
     81      */
     82     FOURWAY_HANDSHAKE = 7,
     83     /**
     84      * This state is entered when 4-Way Key Handshake has been completed
     85      * (i.e., when the supplicant sends out message 4/4) and when Group
     86      * Key rekeying is started by the AP (i.e., when supplicant receives
     87      * message 1/2).
     88      */
     89     GROUP_HANDSHAKE = 8,
     90     /**
     91      * This state is entered when the full authentication process is
     92      * completed. In case of WPA2, this happens when the 4-Way Handshake is
     93      * successfully completed. With WPA, this state is entered after the
     94      * Group Key Handshake; with IEEE 802.1X (non-WPA) connection is
     95      * completed after dynamic keys are received (or if not used, after
     96      * the EAP authentication has been completed). With static WEP keys and
     97      * plaintext connections, this state is entered when an association
     98      * has been completed.
     99      *
    100      * This state indicates that the supplicant has completed its
    101      * processing for the association phase and that data connection is
    102      * fully configured.
    103      */
    104     COMPLETED = 9
    105   };
    106 
    107   /**
    108    * OSU Method. Refer to section 4.8.1.3 of the Hotspot 2.0 spec.
    109    */
    110   enum OsuMethod : uint8_t {
    111     OMA_DM = 0,
    112     SOAP_XML_SPP = 1
    113   };
    114 
    115   /**
    116    * ANQP data for IEEE Std 802.11u-2011.
    117    * The format of the data within these elements follows the IEEE
    118    * Std 802.11u-2011 standard.
    119    */
    120   struct AnqpData {
    121     vec<uint8_t> venueName;
    122     vec<uint8_t> roamingConsortium;
    123     vec<uint8_t> ipAddrTypeAvailability;
    124     vec<uint8_t> naiRealm;
    125     vec<uint8_t> anqp3gppCellularNetwork;
    126     vec<uint8_t> domainName;
    127   };
    128 
    129   /**
    130    * ANQP data for Hotspot 2.0.
    131    * The format of the data within these elements follows the Hotspot 2.0
    132    * standard.
    133    */
    134   struct Hs20AnqpData {
    135     vec<uint8_t> operatorFriendlyName;
    136     vec<uint8_t> wanMetrics;
    137     vec<uint8_t> connectionCapability;
    138     vec<uint8_t> osuProvidersList;
    139   };
    140 
    141   /**
    142    * WPS Configuration Error.
    143    */
    144   enum WpsConfigError : uint16_t {
    145     NO_ERROR = 0,
    146     OOB_IFACE_READ_ERROR = 1,
    147     DECRYPTION_CRC_FAILURE = 2,
    148     CHAN_24_NOT_SUPPORTED = 3,
    149     CHAN_50_NOT_SUPPORTED = 4,
    150     SIGNAL_TOO_WEAK = 5,
    151     NETWORK_AUTH_FAILURE = 6,
    152     NETWORK_ASSOC_FAILURE = 7,
    153     NO_DHCP_RESPONSE = 8,
    154     FAILED_DHCP_CONFIG = 9,
    155     IP_ADDR_CONFLICT = 10,
    156     NO_CONN_TO_REGISTRAR = 11,
    157     MULTIPLE_PBC_DETECTED = 12,
    158     ROGUE_SUSPECTED = 13,
    159     DEVICE_BUSY = 14,
    160     SETUP_LOCKED = 15,
    161     MSG_TIMEOUT = 16,
    162     REG_SESS_TIMEOUT = 17,
    163     DEV_PASSWORD_AUTH_FAILURE = 18,
    164     CHAN_60G_NOT_SUPPORTED = 19,
    165     PUBLIC_KEY_HASH_MISMATCH = 20
    166   };
    167 
    168   /**
    169    * Vendor specific Error Indication for WPS event messages.
    170    */
    171   enum WpsErrorIndication : uint16_t {
    172     NO_ERROR = 0,
    173     SECURITY_TKIP_ONLY_PROHIBITED = 1,
    174     SECURITY_WEP_PROHIBITED = 2,
    175     AUTH_FAILURE = 3
    176   };
    177 
    178   /**
    179    * Status codes (IEEE Std 802.11-2016, 9.4.1.9, Table 9-46).
    180    */
    181   enum StatusCode : uint32_t {
    182     SUCCESS = 0,
    183     UNSPECIFIED_FAILURE = 1,
    184     TDLS_WAKEUP_ALTERNATE = 2,
    185     TDLS_WAKEUP_REJECT = 3,
    186     SECURITY_DISABLED = 5,
    187     UNACCEPTABLE_LIFETIME = 6,
    188     NOT_IN_SAME_BSS = 7,
    189     CAPS_UNSUPPORTED = 10,
    190     REASSOC_NO_ASSOC = 11,
    191     ASSOC_DENIED_UNSPEC = 12,
    192     NOT_SUPPORTED_AUTH_ALG = 13,
    193     UNKNOWN_AUTH_TRANSACTION = 14,
    194     CHALLENGE_FAIL = 15,
    195     AUTH_TIMEOUT = 16,
    196     AP_UNABLE_TO_HANDLE_NEW_STA = 17,
    197     ASSOC_DENIED_RATES = 18,
    198     ASSOC_DENIED_NOSHORT = 19,
    199     SPEC_MGMT_REQUIRED = 22,
    200     PWR_CAPABILITY_NOT_VALID = 23,
    201     SUPPORTED_CHANNEL_NOT_VALID = 24,
    202     ASSOC_DENIED_NO_SHORT_SLOT_TIME = 25,
    203     ASSOC_DENIED_NO_HT = 27,
    204     R0KH_UNREACHABLE = 28,
    205     ASSOC_DENIED_NO_PCO = 29,
    206     ASSOC_REJECTED_TEMPORARILY = 30,
    207     ROBUST_MGMT_FRAME_POLICY_VIOLATION = 31,
    208     UNSPECIFIED_QOS_FAILURE = 32,
    209     DENIED_INSUFFICIENT_BANDWIDTH = 33,
    210     DENIED_POOR_CHANNEL_CONDITIONS = 34,
    211     DENIED_QOS_NOT_SUPPORTED = 35,
    212     REQUEST_DECLINED = 37,
    213     INVALID_PARAMETERS = 38,
    214     REJECTED_WITH_SUGGESTED_CHANGES = 39,
    215     INVALID_IE = 40,
    216     GROUP_CIPHER_NOT_VALID = 41,
    217     PAIRWISE_CIPHER_NOT_VALID = 42,
    218     AKMP_NOT_VALID = 43,
    219     UNSUPPORTED_RSN_IE_VERSION = 44,
    220     INVALID_RSN_IE_CAPAB = 45,
    221     CIPHER_REJECTED_PER_POLICY = 46,
    222     TS_NOT_CREATED = 47,
    223     DIRECT_LINK_NOT_ALLOWED = 48,
    224     DEST_STA_NOT_PRESENT = 49,
    225     DEST_STA_NOT_QOS_STA = 50,
    226     ASSOC_DENIED_LISTEN_INT_TOO_LARGE = 51,
    227     INVALID_FT_ACTION_FRAME_COUNT = 52,
    228     INVALID_PMKID = 53,
    229     INVALID_MDIE = 54,
    230     INVALID_FTIE = 55,
    231     REQUESTED_TCLAS_NOT_SUPPORTED = 56,
    232     INSUFFICIENT_TCLAS_PROCESSING_RESOURCES = 57,
    233     TRY_ANOTHER_BSS = 58,
    234     GAS_ADV_PROTO_NOT_SUPPORTED = 59,
    235     NO_OUTSTANDING_GAS_REQ = 60,
    236     GAS_RESP_NOT_RECEIVED = 61,
    237     STA_TIMED_OUT_WAITING_FOR_GAS_RESP = 62,
    238     GAS_RESP_LARGER_THAN_LIMIT = 63,
    239     REQ_REFUSED_HOME = 64,
    240     ADV_SRV_UNREACHABLE = 65,
    241     REQ_REFUSED_SSPN = 67,
    242     REQ_REFUSED_UNAUTH_ACCESS = 68,
    243     INVALID_RSNIE = 72,
    244     U_APSD_COEX_NOT_SUPPORTED = 73,
    245     U_APSD_COEX_MODE_NOT_SUPPORTED = 74,
    246     BAD_INTERVAL_WITH_U_APSD_COEX = 75,
    247     ANTI_CLOGGING_TOKEN_REQ = 76,
    248     FINITE_CYCLIC_GROUP_NOT_SUPPORTED = 77,
    249     CANNOT_FIND_ALT_TBTT = 78,
    250     TRANSMISSION_FAILURE = 79,
    251     REQ_TCLAS_NOT_SUPPORTED = 80,
    252     TCLAS_RESOURCES_EXCHAUSTED = 81,
    253     REJECTED_WITH_SUGGESTED_BSS_TRANSITION = 82,
    254     REJECT_WITH_SCHEDULE = 83,
    255     REJECT_NO_WAKEUP_SPECIFIED = 84,
    256     SUCCESS_POWER_SAVE_MODE = 85,
    257     PENDING_ADMITTING_FST_SESSION = 86,
    258     PERFORMING_FST_NOW = 87,
    259     PENDING_GAP_IN_BA_WINDOW = 88,
    260     REJECT_U_PID_SETTING = 89,
    261     REFUSED_EXTERNAL_REASON = 92,
    262     REFUSED_AP_OUT_OF_MEMORY = 93,
    263     REJECTED_EMERGENCY_SERVICE_NOT_SUPPORTED = 94,
    264     QUERY_RESP_OUTSTANDING = 95,
    265     REJECT_DSE_BAND = 96,
    266     TCLAS_PROCESSING_TERMINATED = 97,
    267     TS_SCHEDULE_CONFLICT = 98,
    268     DENIED_WITH_SUGGESTED_BAND_AND_CHANNEL = 99,
    269     MCCAOP_RESERVATION_CONFLICT = 100,
    270     MAF_LIMIT_EXCEEDED = 101,
    271     MCCA_TRACK_LIMIT_EXCEEDED = 102,
    272     DENIED_DUE_TO_SPECTRUM_MANAGEMENT = 103,
    273     ASSOC_DENIED_NO_VHT = 104,
    274     ENABLEMENT_DENIED = 105,
    275     RESTRICTION_FROM_AUTHORIZED_GDB = 106,
    276     AUTHORIZATION_DEENABLED = 107,
    277     FILS_AUTHENTICATION_FAILURE = 112,
    278     UNKNOWN_AUTHENTICATION_SERVER = 113
    279   };
    280 
    281   /**
    282    * Reason codes (IEEE Std 802.11-2016, 9.4.1.7, Table 9-45).
    283    */
    284   enum ReasonCode : uint32_t {
    285     UNSPECIFIED = 1,
    286     PREV_AUTH_NOT_VALID = 2,
    287     DEAUTH_LEAVING = 3,
    288     DISASSOC_DUE_TO_INACTIVITY = 4,
    289     DISASSOC_AP_BUSY = 5,
    290     CLASS2_FRAME_FROM_NONAUTH_STA = 6,
    291     CLASS3_FRAME_FROM_NONASSOC_STA = 7,
    292     DISASSOC_STA_HAS_LEFT = 8,
    293     STA_REQ_ASSOC_WITHOUT_AUTH = 9,
    294     PWR_CAPABILITY_NOT_VALID = 10,
    295     SUPPORTED_CHANNEL_NOT_VALID = 11,
    296     BSS_TRANSITION_DISASSOC = 12,
    297     INVALID_IE = 13,
    298     MICHAEL_MIC_FAILURE = 14,
    299     FOURWAY_HANDSHAKE_TIMEOUT = 15,
    300     GROUP_KEY_UPDATE_TIMEOUT = 16,
    301     IE_IN_4WAY_DIFFERS = 17,
    302     GROUP_CIPHER_NOT_VALID = 18,
    303     PAIRWISE_CIPHER_NOT_VALID = 19,
    304     AKMP_NOT_VALID = 20,
    305     UNSUPPORTED_RSN_IE_VERSION = 21,
    306     INVALID_RSN_IE_CAPAB = 22,
    307     IEEE_802_1X_AUTH_FAILED = 23,
    308     CIPHER_SUITE_REJECTED = 24,
    309     TDLS_TEARDOWN_UNREACHABLE = 25,
    310     TDLS_TEARDOWN_UNSPECIFIED = 26,
    311     SSP_REQUESTED_DISASSOC = 27,
    312     NO_SSP_ROAMING_AGREEMENT = 28,
    313     BAD_CIPHER_OR_AKM = 29,
    314     NOT_AUTHORIZED_THIS_LOCATION = 30,
    315     SERVICE_CHANGE_PRECLUDES_TS = 31,
    316     UNSPECIFIED_QOS_REASON = 32,
    317     NOT_ENOUGH_BANDWIDTH = 33,
    318     DISASSOC_LOW_ACK = 34,
    319     EXCEEDED_TXOP = 35,
    320     STA_LEAVING = 36,
    321     END_TS_BA_DLS = 37,
    322     UNKNOWN_TS_BA = 38,
    323     TIMEOUT = 39,
    324     PEERKEY_MISMATCH = 45,
    325     AUTHORIZED_ACCESS_LIMIT_REACHED = 46,
    326     EXTERNAL_SERVICE_REQUIREMENTS = 47,
    327     INVALID_FT_ACTION_FRAME_COUNT = 48,
    328     INVALID_PMKID = 49,
    329     INVALID_MDE = 50,
    330     INVALID_FTE = 51,
    331     MESH_PEERING_CANCELLED = 52,
    332     MESH_MAX_PEERS = 53,
    333     MESH_CONFIG_POLICY_VIOLATION = 54,
    334     MESH_CLOSE_RCVD = 55,
    335     MESH_MAX_RETRIES = 56,
    336     MESH_CONFIRM_TIMEOUT = 57,
    337     MESH_INVALID_GTK = 58,
    338     MESH_INCONSISTENT_PARAMS = 59,
    339     MESH_INVALID_SECURITY_CAP = 60,
    340     MESH_PATH_ERROR_NO_PROXY_INFO = 61,
    341     MESH_PATH_ERROR_NO_FORWARDING_INFO = 62,
    342     MESH_PATH_ERROR_DEST_UNREACHABLE = 63,
    343     MAC_ADDRESS_ALREADY_EXISTS_IN_MBSS = 64,
    344     MESH_CHANNEL_SWITCH_REGULATORY_REQ = 65,
    345     MESH_CHANNEL_SWITCH_UNSPECIFIED = 66
    346   };
    347 
    348   /**
    349    * BSSID change Reasons.
    350    */
    351   enum BssidChangeReason : uint8_t {
    352     /**
    353      * Started association with new bssid.
    354      */
    355     ASSOC_START = 0,
    356     /**
    357      * Completed association with new bssid.
    358      */
    359     ASSOC_COMPLETE = 1,
    360     /**
    361      * Dis-association with current bssid.
    362      */
    363     DISASSOC = 2
    364   };
    365 
    366   /**
    367    * Used to indicate that a new network has been added.
    368    *
    369    * @param id Network ID allocated to the corresponding network.
    370    */
    371   oneway onNetworkAdded(SupplicantNetworkId id);
    372 
    373   /**
    374    * Used to indicate that a network has been removed.
    375    *
    376    * @param id Network ID allocated to the corresponding network.
    377    */
    378   oneway onNetworkRemoved(SupplicantNetworkId id);
    379 
    380   /**
    381    * Used to indicate a state change event on this particular iface. If this
    382    * event is triggered by a particular network, the |SupplicantNetworkId|,
    383    * |ssid|, |bssid| parameters must indicate the parameters of the network/AP
    384    * which cased this state transition.
    385    *
    386    * @param newState New State of the interface. This must be one of the |State|
    387    *        values above.
    388    * @param bssid BSSID of the corresponding AP which caused this state
    389    *        change event. This must be zero'ed if this event is not
    390    *        specific to a particular network.
    391    * @param id ID of the corresponding network which caused this
    392    *        state change event. This must be invalid (UINT32_MAX) if this
    393    *        event is not specific to a particular network.
    394    * @param ssid SSID of the corresponding network which caused this state
    395    *        change event. This must be empty if this event is not specific
    396    *        to a particular network.
    397    */
    398   oneway onStateChanged(
    399       State newState, Bssid bssid, SupplicantNetworkId id, Ssid ssid);
    400 
    401   /**
    402    * Used to indicate the result of ANQP (either for IEEE 802.11u Interworking
    403    * or Hotspot 2.0) query.
    404    *
    405    * @param bssid BSSID of the access point.
    406    * @param data ANQP data fetched from the access point.
    407    *        All the fields in this struct must be empty if the query failed.
    408    * @param hs20Data ANQP data fetched from the Hotspot 2.0 access point.
    409    *        All the fields in this struct must be empty if the query failed.
    410    */
    411   oneway onAnqpQueryDone(Bssid bssid, AnqpData data, Hs20AnqpData hs20Data);
    412 
    413   /**
    414    * Used to indicate the result of Hotspot 2.0 Icon query.
    415    *
    416    * @param bssid BSSID of the access point.
    417    * @param fileName Name of the file that was requested.
    418    * @param data Icon data fetched from the access point.
    419    *        Must be empty if the query failed.
    420    */
    421   oneway onHs20IconQueryDone(Bssid bssid, string fileName, vec<uint8_t> data);
    422 
    423   /**
    424    * Used to indicate a Hotspot 2.0 subscription remediation event.
    425    *
    426    * @param bssid BSSID of the access point.
    427    * @param osuMethod OSU method.
    428    * @param url URL of the server.
    429    */
    430   oneway onHs20SubscriptionRemediation(Bssid bssid,
    431                                        OsuMethod osuMethod,
    432                                        string url);
    433 
    434   /**
    435    * Used to indicate a Hotspot 2.0 imminent deauth notice.
    436    *
    437    * @param bssid BSSID of the access point.
    438    * @param reasonCode Code to indicate the deauth reason.
    439    *        Refer to section 3.2.1.2 of the Hotspot 2.0 spec.
    440    * @param reAuthDelayInSec Delay before reauthenticating.
    441    * @param url URL of the server.
    442    */
    443   oneway onHs20DeauthImminentNotice(Bssid bssid,
    444                                     uint32_t reasonCode,
    445                                     uint32_t reAuthDelayInSec,
    446                                     string url);
    447 
    448   /**
    449    * Used to indicate the disconnection from the currently connected
    450    * network on this iface.
    451    *
    452    * @param bssid BSSID of the AP from which we disconnected.
    453    * @param locallyGenerated If the disconnect was triggered by
    454    *        wpa_supplicant.
    455    * @param reasonCode 802.11 code to indicate the disconnect reason
    456    *        from access point. Refer to section 8.4.1.7 of IEEE802.11 spec.
    457    */
    458   oneway onDisconnected(
    459           Bssid bssid, bool locallyGenerated, ReasonCode reasonCode);
    460 
    461   /**
    462    * Used to indicate an association rejection recieved from the AP
    463    * to which the connection is being attempted.
    464    *
    465    * @param bssid BSSID of the corresponding AP which sent this
    466    *        reject.
    467    * @param statusCode 802.11 code to indicate the reject reason.
    468    *        Refer to section 8.4.1.9 of IEEE 802.11 spec.
    469    * @param timedOut Whether failure is due to timeout rather
    470    *        than explicit rejection response from the AP.
    471    */
    472   oneway onAssociationRejected(Bssid bssid, StatusCode statusCode, bool timedOut);
    473 
    474   /**
    475    * Used to indicate the timeout of authentication to an AP.
    476    *
    477    * @param bssid BSSID of the corresponding AP.
    478    */
    479   oneway onAuthenticationTimeout(Bssid bssid);
    480 
    481   /**
    482    * Used to indicate an EAP authentication failure.
    483    */
    484   oneway onEapFailure();
    485 
    486   /**
    487    * Used to indicate the change of active bssid.
    488    * This is useful to figure out when the driver/firmware roams to a bssid
    489    * on its own.
    490    *
    491    * @param reason Reason why the bssid changed.
    492    * @param bssid BSSID of the corresponding AP.
    493    */
    494   oneway onBssidChanged(BssidChangeReason reason, Bssid bssid);
    495 
    496   /**
    497    * Used to indicate the success of a WPS connection attempt.
    498    */
    499   oneway onWpsEventSuccess();
    500 
    501   /**
    502    * Used to indicate the failure of a WPS connection attempt.
    503    *
    504    * @param bssid BSSID of the AP to which we initiated WPS
    505    *        connection.
    506    * @param configError Configuration error code.
    507    * @param errorInd Error indication code.
    508    */
    509   oneway onWpsEventFail(
    510       Bssid bssid, WpsConfigError configError, WpsErrorIndication errorInd);
    511 
    512   /**
    513    * Used to indicate the overlap of a WPS PBC connection attempt.
    514    */
    515   oneway onWpsEventPbcOverlap();
    516 
    517   /**
    518    * Used to indicate that the external radio work can start now.
    519    *
    520    * @return id Identifier generated for the radio work request.
    521    */
    522   oneway onExtRadioWorkStart(uint32_t id);
    523 
    524   /**
    525    * Used to indicate that the external radio work request has timed out.
    526    *
    527    * @return id Identifier generated for the radio work request.
    528    */
    529   oneway onExtRadioWorkTimeout(uint32_t id);
    530 };
    531