Home | History | Annotate | Download | only in 1.1
      1 /*
      2  * hidl interface for wpa_supplicant daemon
      3  * Copyright (c) 2004-2016, Jouni Malinen <j (at) w1.fi>
      4  * Copyright (c) 2004-2016, Roshan Pius <rpius (at) google.com>
      5  *
      6  * This software may be distributed under the terms of the BSD license.
      7  * See README for more details.
      8  */
      9 
     10 #ifndef WPA_SUPPLICANT_HIDL_HIDL_MANAGER_H
     11 #define WPA_SUPPLICANT_HIDL_HIDL_MANAGER_H
     12 
     13 #include <map>
     14 #include <string>
     15 
     16 #include <android/hardware/wifi/supplicant/1.0/ISupplicantCallback.h>
     17 #include <android/hardware/wifi/supplicant/1.0/ISupplicantP2pIfaceCallback.h>
     18 #include <android/hardware/wifi/supplicant/1.0/ISupplicantP2pNetworkCallback.h>
     19 #include <android/hardware/wifi/supplicant/1.1/ISupplicantStaIfaceCallback.h>
     20 #include <android/hardware/wifi/supplicant/1.0/ISupplicantStaNetworkCallback.h>
     21 
     22 #include "p2p_iface.h"
     23 #include "p2p_network.h"
     24 #include "sta_iface.h"
     25 #include "sta_network.h"
     26 #include "supplicant.h"
     27 
     28 extern "C" {
     29 #include "utils/common.h"
     30 #include "utils/includes.h"
     31 #include "wpa_supplicant_i.h"
     32 #include "driver_i.h"
     33 }
     34 
     35 namespace android {
     36 namespace hardware {
     37 namespace wifi {
     38 namespace supplicant {
     39 namespace V1_1 {
     40 namespace implementation {
     41 using namespace android::hardware::wifi::supplicant::V1_0;
     42 using namespace android::hardware::wifi::supplicant::V1_1;
     43 using V1_0::ISupplicantStaIfaceCallback;
     44 
     45 /**
     46  * HidlManager is responsible for managing the lifetime of all
     47  * hidl objects created by wpa_supplicant. This is a singleton
     48  * class which is created by the supplicant core and can be used
     49  * to get references to the hidl objects.
     50  */
     51 class HidlManager
     52 {
     53 public:
     54 	static HidlManager *getInstance();
     55 	static void destroyInstance();
     56 
     57 	// Methods called from wpa_supplicant core.
     58 	int registerHidlService(struct wpa_global *global);
     59 	int registerInterface(struct wpa_supplicant *wpa_s);
     60 	int unregisterInterface(struct wpa_supplicant *wpa_s);
     61 	int registerNetwork(
     62 	    struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid);
     63 	int unregisterNetwork(
     64 	    struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid);
     65 	int notifyStateChange(struct wpa_supplicant *wpa_s);
     66 	int notifyNetworkRequest(
     67 	    struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid, int type,
     68 	    const char *param);
     69 	void notifyAnqpQueryDone(
     70 	    struct wpa_supplicant *wpa_s, const u8 *bssid, const char *result,
     71 	    const struct wpa_bss_anqp *anqp);
     72 	void notifyHs20IconQueryDone(
     73 	    struct wpa_supplicant *wpa_s, const u8 *bssid,
     74 	    const char *file_name, const u8 *image, u32 image_length);
     75 	void notifyHs20RxSubscriptionRemediation(
     76 	    struct wpa_supplicant *wpa_s, const char *url, u8 osu_method);
     77 	void notifyHs20RxDeauthImminentNotice(
     78 	    struct wpa_supplicant *wpa_s, u8 code, u16 reauth_delay,
     79 	    const char *url);
     80 	void notifyDisconnectReason(struct wpa_supplicant *wpa_s);
     81 	void notifyAssocReject(struct wpa_supplicant *wpa_s);
     82 	void notifyAuthTimeout(struct wpa_supplicant *wpa_s);
     83 	void notifyBssidChanged(struct wpa_supplicant *wpa_s);
     84 	void notifyWpsEventFail(
     85 	    struct wpa_supplicant *wpa_s, uint8_t *peer_macaddr,
     86 	    uint16_t config_error, uint16_t error_indication);
     87 	void notifyWpsEventSuccess(struct wpa_supplicant *wpa_s);
     88 	void notifyWpsEventPbcOverlap(struct wpa_supplicant *wpa_s);
     89 	void notifyP2pDeviceFound(
     90 	    struct wpa_supplicant *wpa_s, const u8 *addr,
     91 	    const struct p2p_peer_info *info, const u8 *peer_wfd_device_info,
     92 	    u8 peer_wfd_device_info_len);
     93 	void notifyP2pDeviceLost(
     94 	    struct wpa_supplicant *wpa_s, const u8 *p2p_device_addr);
     95 	void notifyP2pFindStopped(struct wpa_supplicant *wpa_s);
     96 	void notifyP2pGoNegReq(
     97 	    struct wpa_supplicant *wpa_s, const u8 *src_addr, u16 dev_passwd_id,
     98 	    u8 go_intent);
     99 	void notifyP2pGoNegCompleted(
    100 	    struct wpa_supplicant *wpa_s, const struct p2p_go_neg_results *res);
    101 	void notifyP2pGroupFormationFailure(
    102 	    struct wpa_supplicant *wpa_s, const char *reason);
    103 	void notifyP2pGroupStarted(
    104 	    struct wpa_supplicant *wpa_group_s, const struct wpa_ssid *ssid,
    105 	    int persistent, int client);
    106 	void notifyP2pGroupRemoved(
    107 	    struct wpa_supplicant *wpa_group_s, const struct wpa_ssid *ssid,
    108 	    const char *role);
    109 	void notifyP2pInvitationReceived(
    110 	    struct wpa_supplicant *wpa_s, const u8 *sa, const u8 *go_dev_addr,
    111 	    const u8 *bssid, int id, int op_freq);
    112 	void notifyP2pInvitationResult(
    113 	    struct wpa_supplicant *wpa_s, int status, const u8 *bssid);
    114 	void notifyP2pProvisionDiscovery(
    115 	    struct wpa_supplicant *wpa_s, const u8 *dev_addr, int request,
    116 	    enum p2p_prov_disc_status status, u16 config_methods,
    117 	    unsigned int generated_pin);
    118 	void notifyP2pSdResponse(
    119 	    struct wpa_supplicant *wpa_s, const u8 *sa, u16 update_indic,
    120 	    const u8 *tlvs, size_t tlvs_len);
    121 	void notifyApStaAuthorized(
    122 	    struct wpa_supplicant *wpa_s, const u8 *sta,
    123 	    const u8 *p2p_dev_addr);
    124 	void notifyApStaDeauthorized(
    125 	    struct wpa_supplicant *wpa_s, const u8 *sta,
    126 	    const u8 *p2p_dev_addr);
    127 	void notifyEapError(
    128 	    struct wpa_supplicant *wpa_s, int error_code);
    129 
    130 	// Methods called from hidl objects.
    131 	void notifyExtRadioWorkStart(struct wpa_supplicant *wpa_s, uint32_t id);
    132 	void notifyExtRadioWorkTimeout(
    133 	    struct wpa_supplicant *wpa_s, uint32_t id);
    134 
    135 	int getP2pIfaceHidlObjectByIfname(
    136 	    const std::string &ifname,
    137 	    android::sp<ISupplicantP2pIface> *iface_object);
    138 	int getStaIfaceHidlObjectByIfname(
    139 	    const std::string &ifname,
    140 	    android::sp<ISupplicantStaIface> *iface_object);
    141 	int getP2pNetworkHidlObjectByIfnameAndNetworkId(
    142 	    const std::string &ifname, int network_id,
    143 	    android::sp<ISupplicantP2pNetwork> *network_object);
    144 	int getStaNetworkHidlObjectByIfnameAndNetworkId(
    145 	    const std::string &ifname, int network_id,
    146 	    android::sp<ISupplicantStaNetwork> *network_object);
    147 	int addSupplicantCallbackHidlObject(
    148 	    const android::sp<ISupplicantCallback> &callback);
    149 	int addP2pIfaceCallbackHidlObject(
    150 	    const std::string &ifname,
    151 	    const android::sp<ISupplicantP2pIfaceCallback> &callback);
    152 	int addStaIfaceCallbackHidlObject(
    153 	    const std::string &ifname,
    154 	    const android::sp<ISupplicantStaIfaceCallback> &callback);
    155 	int addP2pNetworkCallbackHidlObject(
    156 	    const std::string &ifname, int network_id,
    157 	    const android::sp<ISupplicantP2pNetworkCallback> &callback);
    158 	int addStaNetworkCallbackHidlObject(
    159 	    const std::string &ifname, int network_id,
    160 	    const android::sp<ISupplicantStaNetworkCallback> &callback);
    161 
    162 private:
    163 	HidlManager() = default;
    164 	~HidlManager() = default;
    165 	HidlManager(const HidlManager &) = default;
    166 	HidlManager &operator=(const HidlManager &) = default;
    167 
    168 	void removeSupplicantCallbackHidlObject(
    169 	    const android::sp<ISupplicantCallback> &callback);
    170 	void removeP2pIfaceCallbackHidlObject(
    171 	    const std::string &ifname,
    172 	    const android::sp<ISupplicantP2pIfaceCallback> &callback);
    173 	void removeStaIfaceCallbackHidlObject(
    174 	    const std::string &ifname,
    175 	    const android::sp<ISupplicantStaIfaceCallback> &callback);
    176 	void removeP2pNetworkCallbackHidlObject(
    177 	    const std::string &ifname, int network_id,
    178 	    const android::sp<ISupplicantP2pNetworkCallback> &callback);
    179 	void removeStaNetworkCallbackHidlObject(
    180 	    const std::string &ifname, int network_id,
    181 	    const android::sp<ISupplicantStaNetworkCallback> &callback);
    182 
    183 	void callWithEachSupplicantCallback(
    184 	    const std::function<android::hardware::Return<void>(
    185 		android::sp<ISupplicantCallback>)> &method);
    186 	void callWithEachP2pIfaceCallback(
    187 	    const std::string &ifname,
    188 	    const std::function<android::hardware::Return<void>(
    189 		android::sp<ISupplicantP2pIfaceCallback>)> &method);
    190 	void callWithEachStaIfaceCallback(
    191 	    const std::string &ifname,
    192 	    const std::function<android::hardware::Return<void>(
    193 		android::sp<ISupplicantStaIfaceCallback>)> &method);
    194 	void callWithEachStaIfaceCallback_1_1(
    195 	    const std::string &ifname,
    196 	    const std::function<android::hardware::Return<void>(
    197 		android::sp<V1_1::ISupplicantStaIfaceCallback>)> &method);
    198 	void callWithEachP2pNetworkCallback(
    199 	    const std::string &ifname, int network_id,
    200 	    const std::function<android::hardware::Return<void>(
    201 		android::sp<ISupplicantP2pNetworkCallback>)> &method);
    202 	void callWithEachStaNetworkCallback(
    203 	    const std::string &ifname, int network_id,
    204 	    const std::function<android::hardware::Return<void>(
    205 		android::sp<ISupplicantStaNetworkCallback>)> &method);
    206 
    207 	// Singleton instance of this class.
    208 	static HidlManager *instance_;
    209 	// The main hidl service object.
    210 	android::sp<Supplicant> supplicant_object_;
    211 	// Map of all the P2P interface specific hidl objects controlled by
    212 	// wpa_supplicant. This map is keyed in by the corresponding
    213 	// |ifname|.
    214 	std::map<const std::string, android::sp<P2pIface>>
    215 	    p2p_iface_object_map_;
    216 	// Map of all the STA interface specific hidl objects controlled by
    217 	// wpa_supplicant. This map is keyed in by the corresponding
    218 	// |ifname|.
    219 	std::map<const std::string, android::sp<StaIface>>
    220 	    sta_iface_object_map_;
    221 	// Map of all the P2P network specific hidl objects controlled by
    222 	// wpa_supplicant. This map is keyed in by the corresponding
    223 	// |ifname| & |network_id|.
    224 	std::map<const std::string, android::sp<P2pNetwork>>
    225 	    p2p_network_object_map_;
    226 	// Map of all the STA network specific hidl objects controlled by
    227 	// wpa_supplicant. This map is keyed in by the corresponding
    228 	// |ifname| & |network_id|.
    229 	std::map<const std::string, android::sp<StaNetwork>>
    230 	    sta_network_object_map_;
    231 
    232 	// Callback registered for the main hidl service object.
    233 	std::vector<android::sp<ISupplicantCallback>> supplicant_callbacks_;
    234 	// Map of all the callbacks registered for P2P interface specific
    235 	// hidl objects controlled by wpa_supplicant.  This map is keyed in by
    236 	// the corresponding |ifname|.
    237 	std::map<
    238 	    const std::string,
    239 	    std::vector<android::sp<ISupplicantP2pIfaceCallback>>>
    240 	    p2p_iface_callbacks_map_;
    241 	// Map of all the callbacks registered for STA interface specific
    242 	// hidl objects controlled by wpa_supplicant.  This map is keyed in by
    243 	// the corresponding |ifname|.
    244 	std::map<
    245 	    const std::string,
    246 	    std::vector<android::sp<ISupplicantStaIfaceCallback>>>
    247 	    sta_iface_callbacks_map_;
    248 	// Map of all the callbacks registered for P2P network specific
    249 	// hidl objects controlled by wpa_supplicant.  This map is keyed in by
    250 	// the corresponding |ifname| & |network_id|.
    251 	std::map<
    252 	    const std::string,
    253 	    std::vector<android::sp<ISupplicantP2pNetworkCallback>>>
    254 	    p2p_network_callbacks_map_;
    255 	// Map of all the callbacks registered for STA network specific
    256 	// hidl objects controlled by wpa_supplicant.  This map is keyed in by
    257 	// the corresponding |ifname| & |network_id|.
    258 	std::map<
    259 	    const std::string,
    260 	    std::vector<android::sp<ISupplicantStaNetworkCallback>>>
    261 	    sta_network_callbacks_map_;
    262 
    263 #if 0  // TODO(b/31632518): HIDL object death notifications.
    264 	/**
    265 	 * Helper class used to deregister the callback object reference from
    266 	 * our callback list on the death of the hidl object.
    267 	 * This class stores a reference of the callback hidl object and a
    268 	 * function to be called to indicate the death of the hidl object.
    269 	 */
    270 	template <class CallbackType>
    271 	class CallbackObjectDeathNotifier
    272 	    : public android::hardware::IBinder::DeathRecipient
    273 	{
    274 	public:
    275 		CallbackObjectDeathNotifier(
    276 		    const android::sp<CallbackType> &callback,
    277 		    const std::function<void(const android::sp<CallbackType> &)>
    278 			&on_hidl_died)
    279 		    : callback_(callback), on_hidl_died_(on_hidl_died)
    280 		{
    281 		}
    282 		void binderDied(const android::wp<android::hardware::IBinder>
    283 				    & /* who */) override
    284 		{
    285 			on_hidl_died_(callback_);
    286 		}
    287 
    288 	private:
    289 		// The callback hidl object reference.
    290 		const android::sp<CallbackType> callback_;
    291 		// Callback function to be called when the hidl dies.
    292 		const std::function<void(const android::sp<CallbackType> &)>
    293 		    on_hidl_died_;
    294 	};
    295 #endif
    296 };
    297 
    298 // The hidl interface uses some values which are the same as internal ones to
    299 // avoid nasty runtime conversion functions. So, adding compile time asserts
    300 // to guard against any internal changes breaking the hidl interface.
    301 static_assert(
    302     static_cast<uint32_t>(ISupplicant::DebugLevel::EXCESSIVE) == MSG_EXCESSIVE,
    303     "Debug level value mismatch");
    304 static_assert(
    305     static_cast<uint32_t>(ISupplicant::DebugLevel::ERROR) == MSG_ERROR,
    306     "Debug level value mismatch");
    307 
    308 static_assert(
    309     static_cast<uint32_t>(ISupplicantStaNetwork::KeyMgmtMask::NONE) ==
    310 	WPA_KEY_MGMT_NONE,
    311     "KeyMgmt value mismatch");
    312 static_assert(
    313     static_cast<uint32_t>(ISupplicantStaNetwork::KeyMgmtMask::WPA_PSK) ==
    314 	WPA_KEY_MGMT_PSK,
    315     "KeyMgmt value mismatch");
    316 static_assert(
    317     static_cast<uint32_t>(ISupplicantStaNetwork::KeyMgmtMask::WPA_EAP) ==
    318 	WPA_KEY_MGMT_IEEE8021X,
    319     "KeyMgmt value mismatch");
    320 static_assert(
    321     static_cast<uint32_t>(ISupplicantStaNetwork::KeyMgmtMask::IEEE8021X) ==
    322 	WPA_KEY_MGMT_IEEE8021X_NO_WPA,
    323     "KeyMgmt value mismatch");
    324 static_assert(
    325     static_cast<uint32_t>(ISupplicantStaNetwork::KeyMgmtMask::FT_EAP) ==
    326 	WPA_KEY_MGMT_FT_IEEE8021X,
    327     "KeyMgmt value mismatch");
    328 static_assert(
    329     static_cast<uint32_t>(ISupplicantStaNetwork::KeyMgmtMask::FT_PSK) ==
    330 	WPA_KEY_MGMT_FT_PSK,
    331     "KeyMgmt value mismatch");
    332 static_assert(
    333     static_cast<uint32_t>(ISupplicantStaNetwork::KeyMgmtMask::OSEN) ==
    334 	WPA_KEY_MGMT_OSEN,
    335     "KeyMgmt value mismatch");
    336 static_assert(
    337     static_cast<uint32_t>(ISupplicantStaNetwork::ProtoMask::WPA) ==
    338 	WPA_PROTO_WPA,
    339     "Proto value mismatch");
    340 static_assert(
    341     static_cast<uint32_t>(ISupplicantStaNetwork::ProtoMask::RSN) ==
    342 	WPA_PROTO_RSN,
    343     "Proto value mismatch");
    344 static_assert(
    345     static_cast<uint32_t>(ISupplicantStaNetwork::ProtoMask::OSEN) ==
    346 	WPA_PROTO_OSEN,
    347     "Proto value mismatch");
    348 static_assert(
    349     static_cast<uint32_t>(ISupplicantStaNetwork::AuthAlgMask::OPEN) ==
    350 	WPA_AUTH_ALG_OPEN,
    351     "AuthAlg value mismatch");
    352 static_assert(
    353     static_cast<uint32_t>(ISupplicantStaNetwork::AuthAlgMask::SHARED) ==
    354 	WPA_AUTH_ALG_SHARED,
    355     "AuthAlg value mismatch");
    356 static_assert(
    357     static_cast<uint32_t>(ISupplicantStaNetwork::AuthAlgMask::LEAP) ==
    358 	WPA_AUTH_ALG_LEAP,
    359     "AuthAlg value mismatch");
    360 static_assert(
    361     static_cast<uint32_t>(ISupplicantStaNetwork::GroupCipherMask::WEP40) ==
    362 	WPA_CIPHER_WEP40,
    363     "GroupCipher value mismatch");
    364 static_assert(
    365     static_cast<uint32_t>(ISupplicantStaNetwork::GroupCipherMask::WEP104) ==
    366 	WPA_CIPHER_WEP104,
    367     "GroupCipher value mismatch");
    368 static_assert(
    369     static_cast<uint32_t>(ISupplicantStaNetwork::GroupCipherMask::TKIP) ==
    370 	WPA_CIPHER_TKIP,
    371     "GroupCipher value mismatch");
    372 static_assert(
    373     static_cast<uint32_t>(ISupplicantStaNetwork::GroupCipherMask::CCMP) ==
    374 	WPA_CIPHER_CCMP,
    375     "GroupCipher value mismatch");
    376 static_assert(
    377     static_cast<uint32_t>(
    378 	ISupplicantStaNetwork::GroupCipherMask::GTK_NOT_USED) ==
    379 	WPA_CIPHER_GTK_NOT_USED,
    380     "GroupCipher value mismatch");
    381 static_assert(
    382     static_cast<uint32_t>(ISupplicantStaNetwork::PairwiseCipherMask::NONE) ==
    383 	WPA_CIPHER_NONE,
    384     "PairwiseCipher value mismatch");
    385 static_assert(
    386     static_cast<uint32_t>(ISupplicantStaNetwork::PairwiseCipherMask::TKIP) ==
    387 	WPA_CIPHER_TKIP,
    388     "PairwiseCipher value mismatch");
    389 static_assert(
    390     static_cast<uint32_t>(ISupplicantStaNetwork::PairwiseCipherMask::CCMP) ==
    391 	WPA_CIPHER_CCMP,
    392     "PairwiseCipher value mismatch");
    393 
    394 static_assert(
    395     static_cast<uint32_t>(ISupplicantStaIfaceCallback::State::DISCONNECTED) ==
    396 	WPA_DISCONNECTED,
    397     "State value mismatch");
    398 static_assert(
    399     static_cast<uint32_t>(ISupplicantStaIfaceCallback::State::COMPLETED) ==
    400 	WPA_COMPLETED,
    401     "State value mismatch");
    402 
    403 static_assert(
    404     static_cast<uint32_t>(ISupplicantStaIface::AnqpInfoId::VENUE_NAME) ==
    405 	ANQP_VENUE_NAME,
    406     "ANQP ID value mismatch");
    407 static_assert(
    408     static_cast<uint32_t>(
    409 	ISupplicantStaIface::AnqpInfoId::ROAMING_CONSORTIUM) ==
    410 	ANQP_ROAMING_CONSORTIUM,
    411     "ANQP ID value mismatch");
    412 static_assert(
    413     static_cast<uint32_t>(ISupplicantStaIface::AnqpInfoId::NAI_REALM) ==
    414 	ANQP_NAI_REALM,
    415     "ANQP ID value mismatch");
    416 static_assert(
    417     static_cast<uint32_t>(
    418 	ISupplicantStaIface::AnqpInfoId::IP_ADDR_TYPE_AVAILABILITY) ==
    419 	ANQP_IP_ADDR_TYPE_AVAILABILITY,
    420     "ANQP ID value mismatch");
    421 static_assert(
    422     static_cast<uint32_t>(
    423 	ISupplicantStaIface::AnqpInfoId::ANQP_3GPP_CELLULAR_NETWORK) ==
    424 	ANQP_3GPP_CELLULAR_NETWORK,
    425     "ANQP ID value mismatch");
    426 static_assert(
    427     static_cast<uint32_t>(ISupplicantStaIface::AnqpInfoId::DOMAIN_NAME) ==
    428 	ANQP_DOMAIN_NAME,
    429     "ANQP ID value mismatch");
    430 static_assert(
    431     static_cast<uint32_t>(
    432 	ISupplicantStaIface::Hs20AnqpSubtypes::OPERATOR_FRIENDLY_NAME) ==
    433 	HS20_STYPE_OPERATOR_FRIENDLY_NAME,
    434     "HS Subtype value mismatch");
    435 static_assert(
    436     static_cast<uint32_t>(ISupplicantStaIface::Hs20AnqpSubtypes::WAN_METRICS) ==
    437 	HS20_STYPE_WAN_METRICS,
    438     "HS Subtype value mismatch");
    439 static_assert(
    440     static_cast<uint32_t>(
    441 	ISupplicantStaIface::Hs20AnqpSubtypes::CONNECTION_CAPABILITY) ==
    442 	HS20_STYPE_CONNECTION_CAPABILITY,
    443     "HS Subtype value mismatch");
    444 static_assert(
    445     static_cast<uint32_t>(
    446 	ISupplicantStaIface::Hs20AnqpSubtypes::OSU_PROVIDERS_LIST) ==
    447 	HS20_STYPE_OSU_PROVIDERS_LIST,
    448     "HS Subtype value mismatch");
    449 
    450 static_assert(
    451     static_cast<uint16_t>(
    452 	ISupplicantStaIfaceCallback::WpsConfigError::NO_ERROR) ==
    453 	WPS_CFG_NO_ERROR,
    454     "Wps config error value mismatch");
    455 static_assert(
    456     static_cast<uint16_t>(ISupplicantStaIfaceCallback::WpsConfigError::
    457 			      PUBLIC_KEY_HASH_MISMATCH) ==
    458 	WPS_CFG_PUBLIC_KEY_HASH_MISMATCH,
    459     "Wps config error value mismatch");
    460 static_assert(
    461     static_cast<uint16_t>(
    462 	ISupplicantStaIfaceCallback::WpsErrorIndication::NO_ERROR) ==
    463 	WPS_EI_NO_ERROR,
    464     "Wps error indication value mismatch");
    465 static_assert(
    466     static_cast<uint16_t>(
    467 	ISupplicantStaIfaceCallback::WpsErrorIndication::AUTH_FAILURE) ==
    468 	WPS_EI_AUTH_FAILURE,
    469     "Wps error indication value mismatch");
    470 
    471 static_assert(
    472     static_cast<uint32_t>(WpsConfigMethods::USBA) == WPS_CONFIG_USBA,
    473     "Wps config value mismatch");
    474 static_assert(
    475     static_cast<uint32_t>(WpsConfigMethods::ETHERNET) == WPS_CONFIG_ETHERNET,
    476     "Wps config value mismatch");
    477 static_assert(
    478     static_cast<uint32_t>(WpsConfigMethods::LABEL) == WPS_CONFIG_LABEL,
    479     "Wps config value mismatch");
    480 static_assert(
    481     static_cast<uint32_t>(WpsConfigMethods::DISPLAY) == WPS_CONFIG_DISPLAY,
    482     "Wps config value mismatch");
    483 static_assert(
    484     static_cast<uint32_t>(WpsConfigMethods::INT_NFC_TOKEN) ==
    485 	WPS_CONFIG_INT_NFC_TOKEN,
    486     "Wps config value mismatch");
    487 static_assert(
    488     static_cast<uint32_t>(WpsConfigMethods::EXT_NFC_TOKEN) ==
    489 	WPS_CONFIG_EXT_NFC_TOKEN,
    490     "Wps config value mismatch");
    491 static_assert(
    492     static_cast<uint32_t>(WpsConfigMethods::NFC_INTERFACE) ==
    493 	WPS_CONFIG_NFC_INTERFACE,
    494     "Wps config value mismatch");
    495 static_assert(
    496     static_cast<uint32_t>(WpsConfigMethods::PUSHBUTTON) ==
    497 	WPS_CONFIG_PUSHBUTTON,
    498     "Wps config value mismatch");
    499 static_assert(
    500     static_cast<uint32_t>(WpsConfigMethods::KEYPAD) == WPS_CONFIG_KEYPAD,
    501     "Wps config value mismatch");
    502 static_assert(
    503     static_cast<uint32_t>(WpsConfigMethods::VIRT_PUSHBUTTON) ==
    504 	WPS_CONFIG_VIRT_PUSHBUTTON,
    505     "Wps config value mismatch");
    506 static_assert(
    507     static_cast<uint32_t>(WpsConfigMethods::PHY_PUSHBUTTON) ==
    508 	WPS_CONFIG_PHY_PUSHBUTTON,
    509     "Wps config value mismatch");
    510 static_assert(
    511     static_cast<uint32_t>(WpsConfigMethods::P2PS) == WPS_CONFIG_P2PS,
    512     "Wps config value mismatch");
    513 static_assert(
    514     static_cast<uint32_t>(WpsConfigMethods::VIRT_DISPLAY) ==
    515 	WPS_CONFIG_VIRT_DISPLAY,
    516     "Wps config value mismatch");
    517 static_assert(
    518     static_cast<uint32_t>(WpsConfigMethods::PHY_DISPLAY) ==
    519 	WPS_CONFIG_PHY_DISPLAY,
    520     "Wps config value mismatch");
    521 
    522 static_assert(
    523     static_cast<uint32_t>(P2pGroupCapabilityMask::GROUP_OWNER) ==
    524 	P2P_GROUP_CAPAB_GROUP_OWNER,
    525     "P2P capability value mismatch");
    526 static_assert(
    527     static_cast<uint32_t>(P2pGroupCapabilityMask::PERSISTENT_GROUP) ==
    528 	P2P_GROUP_CAPAB_PERSISTENT_GROUP,
    529     "P2P capability value mismatch");
    530 static_assert(
    531     static_cast<uint32_t>(P2pGroupCapabilityMask::GROUP_LIMIT) ==
    532 	P2P_GROUP_CAPAB_GROUP_LIMIT,
    533     "P2P capability value mismatch");
    534 static_assert(
    535     static_cast<uint32_t>(P2pGroupCapabilityMask::INTRA_BSS_DIST) ==
    536 	P2P_GROUP_CAPAB_INTRA_BSS_DIST,
    537     "P2P capability value mismatch");
    538 static_assert(
    539     static_cast<uint32_t>(P2pGroupCapabilityMask::CROSS_CONN) ==
    540 	P2P_GROUP_CAPAB_CROSS_CONN,
    541     "P2P capability value mismatch");
    542 static_assert(
    543     static_cast<uint32_t>(P2pGroupCapabilityMask::PERSISTENT_RECONN) ==
    544 	P2P_GROUP_CAPAB_PERSISTENT_RECONN,
    545     "P2P capability value mismatch");
    546 static_assert(
    547     static_cast<uint32_t>(P2pGroupCapabilityMask::GROUP_FORMATION) ==
    548 	P2P_GROUP_CAPAB_GROUP_FORMATION,
    549     "P2P capability value mismatch");
    550 
    551 static_assert(
    552     static_cast<uint16_t>(
    553 	ISupplicantP2pIfaceCallback::WpsDevPasswordId::DEFAULT) ==
    554 	DEV_PW_DEFAULT,
    555     "Wps dev password id value mismatch");
    556 static_assert(
    557     static_cast<uint16_t>(
    558 	ISupplicantP2pIfaceCallback::WpsDevPasswordId::USER_SPECIFIED) ==
    559 	DEV_PW_USER_SPECIFIED,
    560     "Wps dev password id value mismatch");
    561 static_assert(
    562     static_cast<uint16_t>(
    563 	ISupplicantP2pIfaceCallback::WpsDevPasswordId::MACHINE_SPECIFIED) ==
    564 	DEV_PW_MACHINE_SPECIFIED,
    565     "Wps dev password id value mismatch");
    566 static_assert(
    567     static_cast<uint16_t>(
    568 	ISupplicantP2pIfaceCallback::WpsDevPasswordId::REKEY) == DEV_PW_REKEY,
    569     "Wps dev password id value mismatch");
    570 static_assert(
    571     static_cast<uint16_t>(
    572 	ISupplicantP2pIfaceCallback::WpsDevPasswordId::PUSHBUTTON) ==
    573 	DEV_PW_PUSHBUTTON,
    574     "Wps dev password id value mismatch");
    575 static_assert(
    576     static_cast<uint16_t>(
    577 	ISupplicantP2pIfaceCallback::WpsDevPasswordId::REGISTRAR_SPECIFIED) ==
    578 	DEV_PW_REGISTRAR_SPECIFIED,
    579     "Wps dev password id value mismatch");
    580 static_assert(
    581     static_cast<uint16_t>(ISupplicantP2pIfaceCallback::WpsDevPasswordId::
    582 			      NFC_CONNECTION_HANDOVER) ==
    583 	DEV_PW_NFC_CONNECTION_HANDOVER,
    584     "Wps dev password id value mismatch");
    585 static_assert(
    586     static_cast<uint16_t>(
    587 	ISupplicantP2pIfaceCallback::WpsDevPasswordId::P2PS_DEFAULT) ==
    588 	DEV_PW_P2PS_DEFAULT,
    589     "Wps dev password id value mismatch");
    590 
    591 static_assert(
    592     static_cast<uint16_t>(
    593 	ISupplicantP2pIfaceCallback::P2pStatusCode::SUCCESS) == P2P_SC_SUCCESS,
    594     "P2P status code value mismatch");
    595 static_assert(
    596     static_cast<uint16_t>(ISupplicantP2pIfaceCallback::P2pStatusCode::
    597 			      FAIL_INFO_CURRENTLY_UNAVAILABLE) ==
    598 	P2P_SC_FAIL_INFO_CURRENTLY_UNAVAILABLE,
    599     "P2P status code value mismatch");
    600 static_assert(
    601     static_cast<uint16_t>(
    602 	ISupplicantP2pIfaceCallback::P2pStatusCode::FAIL_INCOMPATIBLE_PARAMS) ==
    603 	P2P_SC_FAIL_INCOMPATIBLE_PARAMS,
    604     "P2P status code value mismatch");
    605 static_assert(
    606     static_cast<uint16_t>(
    607 	ISupplicantP2pIfaceCallback::P2pStatusCode::FAIL_LIMIT_REACHED) ==
    608 	P2P_SC_FAIL_LIMIT_REACHED,
    609     "P2P status code value mismatch");
    610 static_assert(
    611     static_cast<uint16_t>(
    612 	ISupplicantP2pIfaceCallback::P2pStatusCode::FAIL_INVALID_PARAMS) ==
    613 	P2P_SC_FAIL_INVALID_PARAMS,
    614     "P2P status code value mismatch");
    615 static_assert(
    616     static_cast<uint16_t>(ISupplicantP2pIfaceCallback::P2pStatusCode::
    617 			      FAIL_UNABLE_TO_ACCOMMODATE) ==
    618 	P2P_SC_FAIL_UNABLE_TO_ACCOMMODATE,
    619     "P2P status code value mismatch");
    620 static_assert(
    621     static_cast<uint16_t>(
    622 	ISupplicantP2pIfaceCallback::P2pStatusCode::FAIL_PREV_PROTOCOL_ERROR) ==
    623 	P2P_SC_FAIL_PREV_PROTOCOL_ERROR,
    624     "P2P status code value mismatch");
    625 static_assert(
    626     static_cast<uint16_t>(
    627 	ISupplicantP2pIfaceCallback::P2pStatusCode::FAIL_NO_COMMON_CHANNELS) ==
    628 	P2P_SC_FAIL_NO_COMMON_CHANNELS,
    629     "P2P status code value mismatch");
    630 static_assert(
    631     static_cast<uint16_t>(
    632 	ISupplicantP2pIfaceCallback::P2pStatusCode::FAIL_UNKNOWN_GROUP) ==
    633 	P2P_SC_FAIL_UNKNOWN_GROUP,
    634     "P2P status code value mismatch");
    635 static_assert(
    636     static_cast<uint16_t>(
    637 	ISupplicantP2pIfaceCallback::P2pStatusCode::FAIL_BOTH_GO_INTENT_15) ==
    638 	P2P_SC_FAIL_BOTH_GO_INTENT_15,
    639     "P2P status code value mismatch");
    640 static_assert(
    641     static_cast<uint16_t>(ISupplicantP2pIfaceCallback::P2pStatusCode::
    642 			      FAIL_INCOMPATIBLE_PROV_METHOD) ==
    643 	P2P_SC_FAIL_INCOMPATIBLE_PROV_METHOD,
    644     "P2P status code value mismatch");
    645 static_assert(
    646     static_cast<uint16_t>(
    647 	ISupplicantP2pIfaceCallback::P2pStatusCode::FAIL_REJECTED_BY_USER) ==
    648 	P2P_SC_FAIL_REJECTED_BY_USER,
    649     "P2P status code value mismatch");
    650 static_assert(
    651     static_cast<uint16_t>(
    652 	ISupplicantP2pIfaceCallback::P2pStatusCode::SUCCESS_DEFERRED) ==
    653 	P2P_SC_SUCCESS_DEFERRED,
    654     "P2P status code value mismatch");
    655 
    656 static_assert(
    657     static_cast<uint16_t>(
    658 	ISupplicantP2pIfaceCallback::P2pProvDiscStatusCode::SUCCESS) ==
    659 	P2P_PROV_DISC_SUCCESS,
    660     "P2P status code value mismatch");
    661 static_assert(
    662     static_cast<uint16_t>(
    663 	ISupplicantP2pIfaceCallback::P2pProvDiscStatusCode::TIMEOUT) ==
    664 	P2P_PROV_DISC_TIMEOUT,
    665     "P2P status code value mismatch");
    666 static_assert(
    667     static_cast<uint16_t>(
    668 	ISupplicantP2pIfaceCallback::P2pProvDiscStatusCode::REJECTED) ==
    669 	P2P_PROV_DISC_REJECTED,
    670     "P2P status code value mismatch");
    671 static_assert(
    672     static_cast<uint16_t>(
    673 	ISupplicantP2pIfaceCallback::P2pProvDiscStatusCode::TIMEOUT_JOIN) ==
    674 	P2P_PROV_DISC_TIMEOUT_JOIN,
    675     "P2P status code value mismatch");
    676 static_assert(
    677     static_cast<uint16_t>(
    678 	ISupplicantP2pIfaceCallback::P2pProvDiscStatusCode::INFO_UNAVAILABLE) ==
    679 	P2P_PROV_DISC_INFO_UNAVAILABLE,
    680     "P2P status code value mismatch");
    681 }  // namespace implementation
    682 }  // namespace V1_1
    683 }  // namespace wifi
    684 }  // namespace supplicant
    685 }  // namespace hardware
    686 }  // namespace android
    687 #endif  // WPA_SUPPLICANT_HIDL_HIDL_MANAGER_H
    688