1/*
2 * Copyright 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.hardware.wifi.supplicant@1.0;
18
19import ISupplicantNetwork;
20import ISupplicantStaNetworkCallback;
21
22/**
23 * Interface exposed by the supplicant for each station mode network
24 * configuration it controls.
25 */
26interface ISupplicantStaNetwork extends ISupplicantNetwork {
27  /**
28   * Size limits for some of the params used in this interface.
29   */
30  enum ParamSizeLimits : uint32_t {
31    /** Max length of SSID param. */
32    SSID_MAX_LEN_IN_BYTES = 32,
33
34    /** Min length of PSK passphrase param. */
35    PSK_PASSPHRASE_MIN_LEN_IN_BYTES = 8,
36
37    /** Max length of PSK passphrase param. */
38    PSK_PASSPHRASE_MAX_LEN_IN_BYTES = 63,
39
40    /** Max number of WEP keys param. */
41    WEP_KEYS_MAX_NUM = 4,
42
43    /** Length of each WEP40 keys param. */
44    WEP40_KEY_LEN_IN_BYTES = 5,
45    /** Length of each WEP104 keys param. */
46    WEP104_KEY_LEN_IN_BYTES = 13,
47  };
48
49  /** Possble mask of values for KeyMgmt param. */
50  enum KeyMgmtMask : uint32_t {
51    WPA_EAP = 1 << 0,
52    WPA_PSK = 1 << 1,
53    NONE = 1 << 2,
54    IEEE8021X = 1 << 3,
55    FT_EAP = 1 << 5,
56    FT_PSK = 1 << 6,
57    OSEN = 1 << 15
58  };
59
60  /** Possble mask of values for Proto param. */
61  enum ProtoMask : uint32_t {
62    WPA = 1 << 0,
63    RSN = 1 << 1,
64    /** Unused 1 << 2 */
65    OSEN = 1 << 3
66  };
67
68  /** Possble mask of values for AuthAlg param. */
69  enum AuthAlgMask : uint32_t {
70    OPEN = 1 << 0,
71    SHARED = 1 << 1,
72    LEAP = 1 << 2
73  };
74
75  /** Possble mask of values for GroupCipher param. */
76  enum GroupCipherMask : uint32_t {
77    WEP40 = 1 << 1,
78    WEP104 = 1 << 2,
79    TKIP = 1 << 3,
80    CCMP = 1 << 4,
81    GTK_NOT_USED = 1 << 14
82  };
83
84  /** Possble mask of values for PairwiseCipher param. */
85  enum PairwiseCipherMask : uint32_t {
86    NONE = 1 << 0,
87    TKIP = 1 << 3,
88    CCMP = 1 << 4
89  };
90
91  /** Possble values for EapMethod param. */
92  enum EapMethod : uint32_t {
93    PEAP = 0,
94    TLS = 1,
95    TTLS = 2,
96    PWD = 3,
97    SIM = 4,
98    AKA = 5,
99    AKA_PRIME = 6,
100    WFA_UNAUTH_TLS = 7
101  };
102
103  /** Possble values for Phase2Method param. */
104  enum EapPhase2Method : uint32_t {
105    NONE = 0,
106    PAP = 1,
107    MSPAP = 2,
108    MSPAPV2 = 3,
109    GTC = 4,
110    SIM = 5,
111    AKA = 6,
112    AKA_PRIME = 7
113  };
114
115  /** Params of |sendNetworkEapSimGsmAuthResponse| request. (Refer RFC 4186) */
116  struct NetworkResponseEapSimGsmAuthParams {
117    uint8_t[8] kc;
118    uint8_t[4] sres;
119  };
120
121  /** Params of |sendNetworkEapSimUmtsAuthResponse| request. (Refer RFC 4187) */
122  struct NetworkResponseEapSimUmtsAuthParams {
123    vec<uint8_t> res;
124    uint8_t[16] ik;
125    uint8_t[16] ck;
126  };
127
128  /**
129   * Register for callbacks from this network.
130   *
131   * These callbacks are invoked for events that are specific to this network.
132   * Registration of multiple callback objects is supported. These objects must
133   * be automatically deleted when the corresponding client process is dead or
134   * if this network is removed.
135   *
136   * @param callback An instance of the |ISupplicantStaNetworkCallback| HIDL
137   *        interface object.
138   * @return status Status of the operation.
139   *         Possible status codes:
140   *         |SupplicantStatusCode.SUCCESS|,
141   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
142   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
143   */
144  registerCallback(ISupplicantStaNetworkCallback callback)
145      generates (SupplicantStatus status);
146
147  /**
148   * Setters for the various network params.
149   * These correspond to elements of |wpa_sssid| struct used internally by
150   * the supplicant to represent each network.
151   */
152  /**
153   * Set SSID for this network.
154   *
155   * @param ssid value to set.
156   *        Max length of |ParamSizeLimits.SSID_MAX_LEN_IN_BYTES|.
157   * @return status Status of the operation.
158   *         Possible status codes:
159   *         |SupplicantStatusCode.SUCCESS|,
160   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
161   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
162   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
163   */
164  setSsid(Ssid ssid) generates (SupplicantStatus status);
165
166  /**
167   * Set the network to only connect to an AP with provided BSSID.
168   *
169   * @param bssid value to set.
170   * @return status Status of the operation.
171   *         Possible status codes:
172   *         |SupplicantStatusCode.SUCCESS|,
173   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
174   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
175   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
176   */
177  setBssid(Bssid bssid) generates (SupplicantStatus status);
178
179  /**
180   * Set whether to send probe requests for this network (hidden).
181   *
182   * @param enable true to set, false otherwise.
183   * @return status Status of the operation.
184   *         Possible status codes:
185   *         |SupplicantStatusCode.SUCCESS|,
186   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
187   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
188   */
189  setScanSsid(bool enable) generates (SupplicantStatus status);
190
191  /**
192   * Set key management mask for the network.
193   *
194   * @param keyMgmtMask value to set.
195   *        Combination of |KeyMgmtMask| values.
196   * @return status Status of the operation.
197   *         Possible status codes:
198   *         |SupplicantStatusCode.SUCCESS|,
199   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
200   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
201   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
202   */
203  setKeyMgmt(bitfield<KeyMgmtMask> keyMgmtMask) generates (SupplicantStatus status);
204
205  /**
206   * Set proto mask for the network.
207   *
208   * @param protoMask value to set.
209   *        Combination of |ProtoMask| values.
210   * @return status Status of the operation.
211   *         Possible status codes:
212   *         |SupplicantStatusCode.SUCCESS|,
213   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
214   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
215   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
216   */
217  setProto(bitfield<ProtoMask> protoMask) generates (SupplicantStatus status);
218
219  /**
220   * Set auth alg mask for the network.
221   *
222   * @param authAlgMask value to set.
223   *        Combination of |ProtoMask| values.
224   * @return status Status of the operation.
225   *         Possible status codes:
226   *         |SupplicantStatusCode.SUCCESS|,
227   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
228   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
229   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
230   */
231  setAuthAlg(bitfield<AuthAlgMask> authAlgMask) generates (SupplicantStatus status);
232
233  /**
234   * Set group cipher mask for the network.
235   *
236   * @param groupCipherMask value to set.
237   *        Combination of |ProtoMask| values.
238   * @return status Status of the operation.
239   *         Possible status codes:
240   *         |SupplicantStatusCode.SUCCESS|,
241   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
242   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
243   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
244   */
245  setGroupCipher(bitfield<GroupCipherMask> groupCipherMask)
246      generates (SupplicantStatus status);
247
248  /**
249   * Set pairwise cipher mask for the network.
250   *
251   * @param pairwiseCipherMask value to set.
252   *        Combination of |ProtoMask| values.
253   * @return status Status of the operation.
254   *         Possible status codes:
255   *         |SupplicantStatusCode.SUCCESS|,
256   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
257   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
258   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
259   */
260  setPairwiseCipher(bitfield<PairwiseCipherMask> pairwiseCipherMask)
261      generates (SupplicantStatus status);
262
263  /**
264   * Set passphrase for WPA_PSK network.
265   *
266   * @param psk value to set.
267   *        Length of value must be between
268   *        |ParamSizeLimits.PSK_PASSPHRASE_MIN_LEN_IN_BYTES| and
269   *        |ParamSizeLimits.PSK_PASSPHRASE_MAX_LEN_IN_BYTES|.
270   * @return status Status of the operation.
271   *         Possible status codes:
272   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
273   *         |SupplicantStatusCode.SUCCESS|,
274   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
275   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
276   */
277  setPskPassphrase(string psk) generates (SupplicantStatus status);
278
279  /**
280   * Set raw psk for WPA_PSK network.
281   *
282   * @param psk value to set as specified in IEEE 802.11i-2004 standard.
283   *        This is the calculated using 'wpa_passphrase <ssid> [passphrase]'
284   * @return status Status of the operation.
285   *         Possible status codes:
286   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
287   *         |SupplicantStatusCode.SUCCESS|,
288   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
289   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
290   */
291  setPsk(uint8_t[32] psk) generates (SupplicantStatus status);
292
293  /**
294   * Set WEP key for WEP network.
295   *
296   * @param keyIdx Index of wep key to set.
297   *        Max of |ParamSizeLimits.WEP_KEYS_MAX_NUM|.
298   * @param wepKey value to set.
299   *        Length of each key must be either
300   *        |ParamSizeLimits.WEP40_KEY_LEN_IN_BYTES| or
301   *        |ParamSizeLimits.WEP104_KEY_LEN_IN_BYTES|.
302   * @return status Status of the operation.
303   *         Possible status codes:
304   *         |SupplicantStatusCode.SUCCESS|,
305   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
306   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
307   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
308   */
309  setWepKey(uint32_t keyIdx, vec<uint8_t> wepKey)
310      generates (SupplicantStatus status);
311
312  /**
313   * Set default Tx key index for WEP network.
314   *
315   * @param KeyIdx value to set.
316   *        Max of |ParamSizeLimits.WEP_KEYS_MAX_NUM|.
317   * @return status Status of the operation.
318   *         Possible status codes:
319   *         |SupplicantStatusCode.SUCCESS|,
320   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
321   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
322   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
323   */
324  setWepTxKeyIdx(uint32_t keyIdx)
325      generates (SupplicantStatus status);
326
327  /**
328   * Set whether RequirePmf is enabled for this network.
329   *
330   * @param enable true to set, false otherwise.
331   * @return status Status of the operation.
332   *         Possible status codes:
333   *         |SupplicantStatusCode.SUCCESS|,
334   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
335   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
336   */
337  setRequirePmf(bool enable) generates (SupplicantStatus status);
338
339  /**
340   * Set EAP Method for this network.
341   *
342   * @param method value to be set.
343   *        Must be one of |EapMethod| values.
344   * @return status Status of the operation.
345   *         Possible status codes:
346   *         |SupplicantStatusCode.SUCCESS|,
347   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
348   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
349   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
350   */
351  setEapMethod(EapMethod method)
352      generates (SupplicantStatus status);
353
354  /**
355   * Set EAP Phase2 Method for this network.
356   *
357   * EAP method needs to be set for this to work.
358   *
359   * @param method value to set.
360   *        Must be one of |EapPhase2Method| values.
361   * @return status Status of the operation.
362   *         Possible status codes:
363   *         |SupplicantStatusCode.SUCCESS|,
364   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
365   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
366   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
367   */
368  setEapPhase2Method(EapPhase2Method method)
369      generates (SupplicantStatus status);
370
371  /**
372   * Set EAP Identity for this network.
373   *
374   * @param identity value to set.
375   * @return status Status of the operation.
376   *         Possible status codes:
377   *         |SupplicantStatusCode.SUCCESS|,
378   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
379   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
380   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
381   */
382  setEapIdentity(vec<uint8_t> identity)
383      generates (SupplicantStatus status);
384
385  /**
386   * Set EAP Anonymous Identity for this network.
387   *
388   * @param identity value to set.
389   * @return status Status of the operation.
390   *         Possible status codes:
391   *         |SupplicantStatusCode.SUCCESS|,
392   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
393   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
394   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
395   */
396  setEapAnonymousIdentity(vec<uint8_t> identity)
397      generates (SupplicantStatus status);
398
399  /**
400   * Set EAP Password for this network.
401   *
402   * @param password value to set.
403   * @return status Status of the operation.
404   *         Possible status codes:
405   *         |SupplicantStatusCode.SUCCESS|,
406   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
407   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
408   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
409   */
410  setEapPassword(vec<uint8_t> password)
411      generates (SupplicantStatus status);
412
413  /**
414   * Set EAP CA certificate file path for this network.
415   *
416   * @param path value to set.
417   * @return status Status of the operation.
418   *         Possible status codes:
419   *         |SupplicantStatusCode.SUCCESS|,
420   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
421   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
422   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
423   */
424  setEapCACert(string path) generates (SupplicantStatus status);
425
426  /**
427   * Set EAP CA certificate directory path for this network.
428   *
429   * @param path value to set.
430   * @return status Status of the operation.
431   *         Possible status codes:
432   *         |SupplicantStatusCode.SUCCESS|,
433   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
434   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
435   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
436   */
437  setEapCAPath(string path) generates (SupplicantStatus status);
438
439  /**
440   * Set EAP Client certificate file path for this network.
441   *
442   * @param path value to set.
443   * @return status Status of the operation.
444   *         Possible status codes:
445   *         |SupplicantStatusCode.SUCCESS|,
446   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
447   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
448   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
449   */
450  setEapClientCert(string path) generates (SupplicantStatus status);
451
452  /**
453   * Set EAP private key Id for this network.
454   * This is used if private key operations for EAP-TLS are performed
455   * using a smartcard.
456   *
457   * @param id value to set.
458   * @return status Status of the operation.
459   *         Possible status codes:
460   *         |SupplicantStatusCode.SUCCESS|,
461   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
462   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
463   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
464   */
465  setEapPrivateKeyId(string id) generates (SupplicantStatus status);
466
467  /**
468   * Set EAP subject match for this network.
469   *
470   * @param match value to set.
471   * @return status Status of the operation.
472   *         Possible status codes:
473   *         |SupplicantStatusCode.SUCCESS|,
474   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
475   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
476   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
477   */
478  setEapSubjectMatch(string match) generates (SupplicantStatus status);
479
480  /**
481   * Set EAP Alt subject match for this network.
482   *
483   * @param match value to set.
484   * @return status Status of the operation.
485   *         Possible status codes:
486   *         |SupplicantStatusCode.SUCCESS|,
487   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
488   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
489   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
490   */
491  setEapAltSubjectMatch(string match)
492      generates (SupplicantStatus status);
493
494  /**
495   * Enable EAP Open SSL Engine for this network.
496   *
497   * @param enable true to set, false otherwise.
498   * @return status Status of the operation.
499   *         Possible status codes:
500   *         |SupplicantStatusCode.SUCCESS|,
501   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
502   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
503   */
504  setEapEngine(bool enable) generates (SupplicantStatus status);
505
506  /**
507   * Set EAP Open SSL Engine ID for this network.
508   *
509   * @param id value to set.
510   * @return status Status of the operation.
511   *         Possible status codes:
512   *         |SupplicantStatusCode.SUCCESS|,
513   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
514   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
515   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
516   */
517  setEapEngineID(string id) generates (SupplicantStatus status);
518
519  /**
520   * Set EAP Domain suffix match for this network.
521   *
522   * @param match value to set.
523   * @return status Status of the operation.
524   *         Possible status codes:
525   *         |SupplicantStatusCode.SUCCESS|,
526   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
527   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
528   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
529   */
530  setEapDomainSuffixMatch(string match)
531      generates (SupplicantStatus status);
532
533  /**
534   * This field can be used to enable proactive key caching which is also
535   * known as opportunistic PMKSA caching for WPA2. This is disabled (0)
536   * by default unless default value is changed with the global okc=1
537   * parameter.
538   *
539   * Proactive key caching is used to make supplicant assume that the APs
540   * are using the same PMK and generate PMKSA cache entries without
541   * doing RSN pre-authentication. This requires support from the AP side
542   * and is normally used with wireless switches that co-locate the
543   * authenticator.
544   *
545   * @param enable true to set, false otherwise.
546   * @return status Status of the operation.
547   *         Possible status codes:
548   *         |SupplicantStatusCode.SUCCESS|,
549   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
550   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
551   */
552  setProactiveKeyCaching(bool enable) generates (SupplicantStatus status);
553
554  /**
555   * Set ID string for this network.
556   * Network identifier string for external scripts.
557   *
558   * @return idStr ID string value to set.
559   * @return status Status of the operation.
560   *         Possible status codes:
561   *         |SupplicantStatusCode.SUCCESS|,
562   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
563   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
564   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
565   */
566  setIdStr(string idStr) generates (SupplicantStatus status);
567
568  /**
569   * Set PPS MO ID for this network.
570   * (Hotspot 2.0 PerProviderSubscription/UpdateIdentifier)
571   *
572   * @return id ID value to set.
573   * @return status Status of the operation.
574   *         Possible status codes:
575   *         |SupplicantStatusCode.SUCCESS|,
576   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
577   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
578   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
579   */
580  setUpdateIdentifier(uint32_t id) generates (SupplicantStatus status);
581
582  /**
583   * Getters for the various network params.
584   */
585  /**
586   * Get SSID for this network.
587   *
588   * @return status Status of the operation.
589   *         Possible status codes:
590   *         |SupplicantStatusCode.SUCCESS|,
591   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
592   * @return ssid value set.
593   */
594  getSsid() generates (SupplicantStatus status, Ssid ssid);
595
596  /**
597   * Get the BSSID set for this network.
598   *
599   * @return status Status of the operation.
600   *         Possible status codes:
601   *         |SupplicantStatusCode.SUCCESS|,
602   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
603   * @return bssid value set.
604   */
605  getBssid() generates (SupplicantStatus status, Bssid bssid);
606
607  /**
608   * Get whether Probe Requests are being sent for this network (hidden).
609   *
610   * @return status Status of the operation.
611   *         Possible status codes:
612   *         |SupplicantStatusCode.SUCCESS|,
613   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
614   * @return enabled true if set, false otherwise.
615   */
616  getScanSsid() generates (SupplicantStatus status, bool enabled);
617
618  /**
619   * Get the key mgmt mask set for the network.
620   *
621   * @return status Status of the operation.
622   *         Possible status codes:
623   *         |SupplicantStatusCode.SUCCESS|,
624   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
625   * @return keyMgmtMask Combination of |KeyMgmtMask| values.
626   */
627  getKeyMgmt()
628      generates (SupplicantStatus status, bitfield<KeyMgmtMask> keyMgmtMask);
629
630  /**
631   * Get the proto mask set for the network.
632   *
633   * @return status Status of the operation.
634   *         Possible status codes:
635   *         |SupplicantStatusCode.SUCCESS|,
636   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
637   * @return protoMask Combination of |ProtoMask| values.
638   */
639  getProto() generates (SupplicantStatus status, bitfield<ProtoMask> protoMask);
640
641  /**
642   * Get the auth alg mask set for the network.
643   *
644   * @return status Status of the operation.
645   *         Possible status codes:
646   *         |SupplicantStatusCode.SUCCESS|,
647   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
648   * @return authAlgMask Combination of |AuthAlgMask| values.
649   */
650  getAuthAlg()
651      generates (SupplicantStatus status, bitfield<AuthAlgMask> authAlgMask);
652
653  /**
654   * Get the group cipher mask set for the network.
655   *
656   * @return status Status of the operation.
657   *         Possible status codes:
658   *         |SupplicantStatusCode.SUCCESS|,
659   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
660   * @return groupCipherMask Combination of |GroupCipherMask| values.
661   */
662  getGroupCipher()
663      generates (SupplicantStatus status,
664                 bitfield<GroupCipherMask> groupCipherMask);
665
666  /**
667   * Get the pairwise cipher mask set for the network.
668   *
669   * @return status Status of the operation.
670   *         Possible status codes:
671   *         |SupplicantStatusCode.SUCCESS|,
672   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
673   * @return pairwiseCipherMask Combination of |PairwiseCipherMask| values.
674   */
675  getPairwiseCipher()
676      generates (SupplicantStatus status,
677                 bitfield<PairwiseCipherMask> pairwiseCipherMask);
678
679  /**
680   * Get passphrase for WPA_PSK network.
681   * Must return a failure if network has no passphrase set (use |getPsk| if
682   * network was configured with raw psk instead).
683   *
684   * @return status Status of the operation.
685   *         Possible status codes:
686   *         |SupplicantStatusCode.SUCCESS|,
687   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
688   * @return psk value set.
689   */
690  getPskPassphrase() generates (SupplicantStatus status, string psk);
691
692  /**
693   * Get raw psk for WPA_PSK network.
694   *
695   * @return status Status of the operation.
696   *         Possible status codes:
697   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
698   *         |SupplicantStatusCode.SUCCESS|,
699   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
700   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
701   * @param psk value set.
702   */
703  getPsk() generates (SupplicantStatus status, uint8_t[32] psk);
704
705  /**
706   * Get WEP key for WEP network.
707   *
708   * @param keyIdx Index of wep key to be fetched.
709   *        Max of |WEP_KEYS_MAX_NUM|.
710   * @return status Status of the operation.
711   *         Possible status codes:
712   *         |SupplicantStatusCode.SUCCESS|,
713   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
714   * @return wepKey value set.
715   */
716  getWepKey(uint32_t keyIdx)
717      generates (SupplicantStatus status, vec<uint8_t> wepKey);
718
719  /**
720   * Get default Tx key index for WEP network.
721   *
722   * @return status Status of the operation.
723   *         Possible status codes:
724   *         |SupplicantStatusCode.SUCCESS|,
725   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
726   * @return keyIdx value set.
727   */
728  getWepTxKeyIdx()
729      generates (SupplicantStatus status, uint32_t keyIdx);
730
731  /**
732   * Get whether RequirePmf is enabled for this network.
733   *
734   * @return status Status of the operation.
735   *         Possible status codes:
736   *         |SupplicantStatusCode.SUCCESS|,
737   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
738   * @return enabled true if set, false otherwise.
739   */
740  getRequirePmf() generates (SupplicantStatus status, bool enabled);
741
742  /**
743   * Get EAP Method set for this network.
744   *
745   * @return status Status of the operation.
746   *         Possible status codes:
747   *         |SupplicantStatusCode.SUCCESS|,
748   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
749   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
750   * @return method value set.
751   *        Must be one of |EapMethod| values.
752   */
753  getEapMethod()
754      generates (SupplicantStatus status, EapMethod method);
755
756  /**
757   * Get EAP Phase2 Method set for this network.
758   *
759   * @return status Status of the operation.
760   *         Possible status codes:
761   *         |SupplicantStatusCode.SUCCESS|,
762   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
763   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
764   * @return method value set.
765   *        Must be one of |EapPhase2Method| values.
766   */
767  getEapPhase2Method()
768      generates (SupplicantStatus status, EapPhase2Method method);
769
770  /**
771   * Get EAP Identity set for this network.
772   *
773   * @return status Status of the operation.
774   *         Possible status codes:
775   *         |SupplicantStatusCode.SUCCESS|,
776   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
777   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
778   * @return identity value set.
779   */
780  getEapIdentity()
781      generates (SupplicantStatus status, vec<uint8_t> identity);
782
783  /**
784   * Get EAP Anonymous Identity set for this network.
785   *
786   * @return status Status of the operation.
787   *         Possible status codes:
788   *         |SupplicantStatusCode.SUCCESS|,
789   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
790   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
791   * @return identity value set.
792   */
793  getEapAnonymousIdentity()
794      generates (SupplicantStatus status, vec<uint8_t> identity);
795
796  /**
797   * Get EAP Password set for this network.
798   *
799   * @return status Status of the operation.
800   *         Possible status codes:
801   *         |SupplicantStatusCode.SUCCESS|,
802   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
803   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
804   * @return password value set.
805   */
806  getEapPassword()
807      generates (SupplicantStatus status, vec<uint8_t> password);
808
809  /**
810   * Get EAP CA certificate file path set for this network.
811   *
812   * @return status Status of the operation.
813   *         Possible status codes:
814   *         |SupplicantStatusCode.SUCCESS|,
815   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
816   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
817   * @return path value set.
818   */
819  getEapCACert() generates (SupplicantStatus status, string path);
820
821  /**
822   * Get EAP CA certificate directory path set for this network.
823   *
824   * @return status Status of the operation.
825   *         Possible status codes:
826   *         |SupplicantStatusCode.SUCCESS|,
827   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
828   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
829   * @return path value set.
830   */
831  getEapCAPath() generates (SupplicantStatus status, string path);
832
833  /**
834   * Get EAP Client certificate file path set for this network.
835   *
836   * @return status Status of the operation.
837   *         Possible status codes:
838   *         |SupplicantStatusCode.SUCCESS|,
839   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
840   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
841   * @return path value set.
842   */
843  getEapClientCert() generates (SupplicantStatus status, string path);
844
845  /**
846   * Get EAP private key Id set for this network.
847   *
848   * @return status Status of the operation.
849   *         Possible status codes:
850   *         |SupplicantStatusCode.SUCCESS|,
851   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
852   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
853   * @return id value set.
854   */
855  getEapPrivateKeyId() generates (SupplicantStatus status, string id);
856
857  /**
858   * Get EAP subject match set for this network.
859   *
860   * @return status Status of the operation.
861   *         Possible status codes:
862   *         |SupplicantStatusCode.SUCCESS|,
863   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
864   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
865   * @return match value set.
866   */
867  getEapSubjectMatch() generates (SupplicantStatus status, string match);
868
869  /**
870   * Get EAP Alt subject match set for this network.
871   *
872   * @return status Status of the operation.
873   *         Possible status codes:
874   *         |SupplicantStatusCode.SUCCESS|,
875   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
876   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
877   * @return match value set.
878   */
879  getEapAltSubjectMatch()
880      generates (SupplicantStatus status, string match);
881
882  /**
883   * Get if EAP Open SSL Engine is enabled for this network.
884   *
885   * @return status Status of the operation.
886   *         Possible status codes:
887   *         |SupplicantStatusCode.SUCCESS|,
888   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
889   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
890   * @return enabled true if set, false otherwise.
891   */
892  getEapEngine() generates (SupplicantStatus status, bool enabled);
893
894  /**
895   * Get EAP Open SSL Engine ID set for this network.
896   *
897   * @return status Status of the operation.
898   *         Possible status codes:
899   *         |SupplicantStatusCode.SUCCESS|,
900   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
901   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
902   * @return id value set.
903   */
904  getEapEngineID() generates (SupplicantStatus status, string id);
905
906  /**
907   * Get EAP Domain suffix match set for this network.
908   *
909   * @return status Status of the operation.
910   *         Possible status codes:
911   *         |SupplicantStatusCode.SUCCESS|,
912   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
913   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
914   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
915   * @return match value set.
916   */
917  getEapDomainSuffixMatch()
918      generates (SupplicantStatus status, string match);
919
920  /**
921   * Get ID string set for this network.
922   * Network identifier string for external scripts.
923   *
924   * @return status Status of the operation.
925   *         Possible status codes:
926   *         |SupplicantStatusCode.SUCCESS|,
927   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
928   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
929   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
930   * @return idStr ID string set.
931   */
932  getIdStr() generates (SupplicantStatus status, string idStr);
933
934  /**
935   * Retrieves a WPS-NFC configuration token for this network.
936   *
937   * @return status Status of the operation.
938   *         Possible status codes:
939   *         |SupplicantStatusCode.SUCCESS|,
940   *         |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
941   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
942   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
943   * @return token Bytes representing WPS-NFC configuration token.
944   *         This is a dump of all the WPS atrributes of the AP configuration
945   *         as specified in the Wi-Fi Protected Setup Specification.
946   */
947  getWpsNfcConfigurationToken()
948      generates (SupplicantStatus status, vec<uint8_t> token);
949
950  /**
951   * Enable the network for connection purposes.
952   *
953   * This must trigger a connection to the network if:
954   * a) |noConnect| is false, and
955   * b) This is the only network configured, and
956   * c) Is visible in the current scan results.
957   *
958   * @param noConnect Only enable the network, dont trigger a connect.
959   * @return status Status of the operation.
960   *         Possible status codes:
961   *         |SupplicantStatusCode.SUCCESS|,
962   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
963   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
964   */
965  enable(bool noConnect) generates (SupplicantStatus status);
966
967  /**
968   * Disable the network for connection purposes.
969   *
970   * This must trigger a disconnection from the network, if currently
971   * connected to this one.
972   *
973   * @return status Status of the operation.
974   *         Possible status codes:
975   *         |SupplicantStatusCode.SUCCESS|,
976   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
977   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
978   */
979  disable() generates (SupplicantStatus status);
980
981  /**
982   * Initiate connection to this network.
983   *
984   * @return status Status of the operation.
985   *         Possible status codes:
986   *         |SupplicantStatusCode.SUCCESS|,
987   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
988   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
989   */
990  select() generates (SupplicantStatus status);
991
992  /**
993   * Used to send a response to the
994   * |ISupplicantNetworkCallback.onNetworkEapSimGsmAuthRequest| request.
995   *
996   * @param params Params to be used for EAP GSM authentication.
997   * @return status Status of the operation.
998   *         Possible status codes:
999   *         |SupplicantStatusCode.SUCCESS|,
1000   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
1001   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
1002   */
1003  sendNetworkEapSimGsmAuthResponse(vec<NetworkResponseEapSimGsmAuthParams> params)
1004      generates (SupplicantStatus status);
1005
1006  /**
1007   * Used to send a response to the
1008   * |ISupplicantNetworkCallback.onNetworkEapSimGsmAuthRequest| request.
1009   *
1010   * @return status Status of the operation.
1011   *         Possible status codes:
1012   *         |SupplicantStatusCode.SUCCESS|,
1013   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
1014   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
1015   */
1016  sendNetworkEapSimGsmAuthFailure() generates (SupplicantStatus status);
1017
1018  /**
1019   * Used to send a response to the
1020   * |ISupplicantNetworkCallback.onNetworkEapSimUmtsAuthRequest| request.
1021   *
1022   * @param params Params to be used for EAP UMTS authentication.
1023   * @return status Status of the operation.
1024   *         Possible status codes:
1025   *         |SupplicantStatusCode.SUCCESS|,
1026   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
1027   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
1028   */
1029  sendNetworkEapSimUmtsAuthResponse(NetworkResponseEapSimUmtsAuthParams params)
1030      generates (SupplicantStatus status);
1031
1032  /**
1033   * Used to send a response to the
1034   * |ISupplicantNetworkCallback.onNetworkEapSimUmtsAuthRequest| request.
1035   *
1036   * @param auts Params to be used for EAP UMTS authentication.
1037   * @return status Status of the operation.
1038   *         Possible status codes:
1039   *         |SupplicantStatusCode.SUCCESS|,
1040   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
1041   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
1042   */
1043  sendNetworkEapSimUmtsAutsResponse(uint8_t[14] auts)
1044      generates (SupplicantStatus status);
1045
1046  /**
1047   * Used to send a response to the
1048   * |ISupplicantNetworkCallback.onNetworkEapSimUmtsAuthRequest| request.
1049   *
1050   * @return status Status of the operation.
1051   *         Possible status codes:
1052   *         |SupplicantStatusCode.SUCCESS|,
1053   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
1054   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
1055   */
1056  sendNetworkEapSimUmtsAuthFailure() generates (SupplicantStatus status);
1057
1058  /**
1059   * Used to send a response to the
1060   * |ISupplicantNetworkCallback.onNetworkEapIdentityRequest| request.
1061   *
1062   * @param identity Identity to be used for the network.
1063   * @return status Status of the operation.
1064   *         Possible status codes:
1065   *         |SupplicantStatusCode.SUCCESS|,
1066   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
1067   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
1068   */
1069  sendNetworkEapIdentityResponse(vec<uint8_t> identity)
1070      generates (SupplicantStatus status);
1071};
1072