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