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