wifi(hidl): Add supplicant HIDL interface

Convert the existing AIDL binder interface of wpa_supplicant to HIDL.

Summary of changes:
1. Every HIDL method returns an instance of |SupplicantStatus|
along with any others params (for getters). This is needed to return the
equivalent of |Binder::Status| to indicate errors in the args passed,
stale proxy, etc.
2. All constants are changed to enums. There were some constants which
should have been enums in the first place, but wasn't because AIDL did
not support enums. But, there are others which should be standalone
constants, but are enums now because constants are not supported in HIDL.
3. Conform to HIDL style guide.

Bug: 31365276
Test: `mmm -j32 hardware/interfaces/wifi/1.0/`
Change-Id: Iba753e279fd260788d8628ea2f5c2281b5844095
diff --git a/wifi/1.0/ISupplicantNetwork.hal b/wifi/1.0/ISupplicantNetwork.hal
new file mode 100644
index 0000000..f816799
--- /dev/null
+++ b/wifi/1.0/ISupplicantNetwork.hal
@@ -0,0 +1,739 @@
+/*
+ * Copyright 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.hardware.wifi@1.0;
+
+import ISupplicantNetworkCallback;
+
+/**
+ * Interface exposed by wpa_supplicant for each network configuration it
+ * controls.
+ * A network is wpa_supplicant's way of representing the configuration
+ * parameters of a Wifi service set. Service sets are identified by their
+ * service set identitifier (SSID). The parameters for a network includes the
+ * credentials, bssid, etc.
+ */
+interface ISupplicantNetwork {
+  /**
+   * Size limits for some of the params used in this interface.
+   */
+  enum ParamSizeLimits : uint32_t {
+    /** Max length of SSID param. */
+    SSID_MAX_LEN_IN_BYTES = 32,
+
+    /** Min length of PSK passphrase param. */
+    PSK_PASSPHRASE_MIN_LEN_IN_BYTES = 8,
+
+    /** Max length of PSK passphrase param. */
+    PSK_PASSPHRASE_MAX_LEN_IN_BYTES = 63,
+
+    /** Max number of WEP keys param. */
+    WEP_KEYS_MAX_NUM = 4,
+
+    /** Length of each WEP40 keys param. */
+    WEP40_KEY_LEN_IN_BYTES = 5,
+    /** Length of each WEP104 keys param. */
+    WEP104_KEY_LEN_IN_BYTES = 13,
+  };
+
+  /** Possble mask of values for KeyMgmt param. */
+  enum KeyMgmtMask : uint32_t {
+    WPA_EAP = 1 << 0,
+    WPA_PSK = 1 << 1,
+    NONE = 1 << 2,
+    IEEE8021X = 1 << 3
+  };
+
+  /** Possble mask of values for Proto param. */
+  enum ProtoMask : uint32_t {
+    WPA = 1 << 0,
+    RSN = 1 << 1,
+    /** Unused 1 << 2 */
+    OSEN = 1 << 3
+  };
+
+  /** Possble mask of values for AuthAlg param. */
+  enum AuthAlgMask : uint32_t {
+    OPEN = 1 << 0,
+    SHARED = 1 << 1,
+    LEAP = 1 << 2
+  };
+
+  /** Possble mask of values for GroupCipher param. */
+  enum GroupCipherMask : uint32_t {
+    WEP40 = 1 << 1,
+    WEP104 = 1 << 2,
+    TKIP = 1 << 3,
+    CCMP = 1 << 4
+  };
+
+  /** Possble mask of values for PairwiseCipher param. */
+  enum PairwiseCipherMask : uint32_t {
+    NONE = 1 << 0,
+    TKIP = 1 << 3,
+    CCMP = 1 << 4
+  };
+
+  /** Possble values for EapMethod param. */
+  enum EapMethod : uint32_t {
+    PEAP = 0,
+    TLS = 1,
+    TTLS = 2,
+    PWD = 3,
+    SIM = 4,
+    AKA = 5,
+    AKA_PRIME = 6,
+    WFA_UNAUTH_TLS = 7
+  };
+
+  /** Possble values for Phase2Method param. */
+  enum EapPhase2Method : uint32_t {
+    NONE = 0,
+    PAP = 1,
+    MSPAP = 2,
+    MSPAPV2 = 3,
+    GTC = 4
+  };
+
+  /** Params of |sendNetworkEapSimGsmAuthResponse| request. (Refer RFC 4186) */
+  struct NetworkResponseEapSimGsmAuthParams {
+    uint8_t[8] kc;
+    uint8_t[4] sres;
+  };
+
+  /** Params of |sendNetworkEapSimUmtsAuthResponse| request. (Refer RFC 4187) */
+  struct NetworkResponseEapSimUmtsAuthParams {
+    vec<uint8_t> res;
+    uint8_t[16] ik;
+    uint8_t[16] ck;
+  };
+
+  /**
+   * Retrieves the ID allocated to this network by wpa_supplicant.
+   *
+   * This is not the |SSID| of the network, but an internal identifier for
+   * this network used by wpa_supplicant.
+   *
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   * @return id Network ID.
+   */
+  getId() generates (SupplicantStatus status, SupplicantNetworkId id);
+
+  /**
+   * Retrieves the name of the interface this network belongs to.
+   *
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   * @return Name of the network interface, e.g., wlan0
+   */
+  getInterfaceName() generates (SupplicantStatus status, string name);
+
+  /**
+   * Register for callbacks from this network.
+   *
+   * These callbacks are invoked for events that are specific to this network.
+   * Registration of multiple callback objects is supported. These objects must
+   * be automatically deleted when the corresponding client process is dead or
+   * if this network is removed.
+   *
+   * @param callback An instance of the |ISupplicantNetworkCallback| HIDL
+   *        interface object.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  registerCallback(ISupplicantNetworkCallback callback)
+      generates (SupplicantStatus status);
+
+  /**
+   * Setters for the various network params.
+   * These correspond to elements of |wpa_sssid| struct used internally by
+   * wpa_supplicant to represent each network.
+   */
+  /**
+   * Set SSID for this network.
+   *
+   * @param ssid value to set.
+   *        Max length of |ParamSizeLimits.SSID_MAX_LEN_IN_BYTES|.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  setSsid(Ssid ssid) generates (SupplicantStatus status);
+
+  /**
+   * Set the network to only connect to an AP with provided BSSID.
+   *
+   * @param bssid value to set.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  setBssid(Bssid bssid) generates (SupplicantStatus status);
+
+  /**
+   * Set whether to send probe requests for this network (hidden).
+   *
+   * @param enable true to set, false otherwise.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  setScanSsid(bool enable) generates (SupplicantStatus status);
+
+  /**
+   * Set key management mask for the network.
+   *
+   * @param keyMgmtMask value to set.
+   *        Combination of |KeyMgmtMask| values.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  setKeyMgmt(uint32_t keyMgmtMask) generates (SupplicantStatus status);
+
+  /**
+   * Set proto mask for the network.
+   *
+   * @param protoMask value to set.
+   *        Combination of |ProtoMask| values.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  setProto(uint32_t protoMask) generates (SupplicantStatus status);
+
+  /**
+   * Set auth alg mask for the network.
+   *
+   * @param authAlgMask value to set.
+   *        Combination of |ProtoMask| values.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  setAuthAlg(uint32_t authAlgMask) generates (SupplicantStatus status);
+
+  /**
+   * Set group cipher mask for the network.
+   *
+   * @param groupCipherMask value to set.
+   *        Combination of |ProtoMask| values.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  setGroupCipher(uint32_t groupCipherMask)
+      generates (SupplicantStatus status);
+
+  /**
+   * Set pairwise cipher mask for the network.
+   *
+   * @param pairwiseCipherMask value to set.
+   *        Combination of |ProtoMask| values.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  setPairwiseCipher(uint32_t pairwiseCipherMask)
+      generates (SupplicantStatus status);
+
+  /**
+   * Set passphrase for WPA_PSK network.
+   *
+   * @param psk value to set.
+   *        Length of value must be between
+   *        |ParamSizeLimits.PSK_PASSPHRASE_MIN_LEN_IN_BYTES| and
+   *        |ParamSizeLimits.PSK_PASSPHRASE_MAX_LEN_IN_BYTES|.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  setPskPassphrase(string psk) generates (SupplicantStatus status);
+
+  /**
+   * Set WEP key for WEP network.
+   *
+   * @param keyIdx Index of wep key to set.
+   *        Max of |ParamSizeLimits.WEP_KEYS_MAX_NUM|.
+   * @param wepKey value to set.
+   *        Length of each key must be either
+   *        |ParamSizeLimits.WEP40_KEY_LEN_IN_BYTES| or
+   *        |ParamSizeLimits.WEP104_KEY_LEN_IN_BYTES|.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  setWepKey(uint32_t keyIdx, vec<uint8_t> wepKey)
+      generates (SupplicantStatus status);
+
+  /**
+   * Set default Tx key index for WEP network.
+   *
+   * @param KeyIdx value to set.
+   *        Max of |ParamSizeLimits.WEP_KEYS_MAX_NUM|.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  setWepTxKeyIdx(uint32_t keyIdx)
+      generates (SupplicantStatus status);
+
+  /**
+   * Set whether RequirePmf is enabled for this network.
+   *
+   * @param enable true to set, false otherwise.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  setRequirePmf(bool enable) generates (SupplicantStatus status);
+
+  /**
+   * Set EAP Method for this network.
+   *
+   * @param method value to be set.
+   *        Must be one of |EapMethod| values.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  setEapMethod(EapMethod method)
+      generates (SupplicantStatus status);
+
+  /**
+   * Set EAP Phase2 Method for this network.
+   *
+   * @param method value to set.
+   *        Must be one of |EapPhase2Method| values.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  setEapPhase2Method(EapPhase2Method method)
+      generates (SupplicantStatus status);
+
+  /**
+   * Set EAP Identity for this network.
+   *
+   * @param identity value to set.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  setEapIdentity(vec<uint8_t> identity)
+      generates (SupplicantStatus status);
+
+  /**
+   * Set EAP Anonymous Identity for this network.
+   *
+   * @param identity value to set.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  setEapAnonymousIdentity(vec<uint8_t> identity)
+      generates (SupplicantStatus status);
+
+  /**
+   * Set EAP Password for this network.
+   *
+   * @param password value to set.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  setEapPassword(vec<uint8_t> password)
+      generates (SupplicantStatus status);
+
+  /**
+   * Set EAP CA certificate file path for this network.
+   *
+   * @param path value to set.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  setEapCACert(string path) generates (SupplicantStatus status);
+
+  /**
+   * Set EAP CA certificate directory path for this network.
+   *
+   * @param path value to set.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  setEapCAPath(string path) generates (SupplicantStatus status);
+
+  /**
+   * Set EAP Client certificate file path for this network.
+   *
+   * @param path value to set.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  setEapClientCert(string path) generates (SupplicantStatus status);
+
+  /**
+   * Set EAP private key file path for this network.
+   *
+   * @param path value to set.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  setEapPrivateKey(string path) generates (SupplicantStatus status);
+
+  /**
+   * Set EAP subject match for this network.
+   *
+   * @param match value to set.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  setEapSubjectMatch(string match) generates (SupplicantStatus status);
+
+  /**
+   * Set EAP Altsubject match for this network.
+   *
+   * @param match value to set.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  setEapAltSubjectMatch(string match)
+      generates (SupplicantStatus status);
+
+  /**
+   * Enable EAP Open SSL Engine for this network.
+   *
+   * @param enable true to set, false otherwise.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  setEapEngine(bool enable) generates (SupplicantStatus status);
+
+  /**
+   * Set EAP Open SSL Engine ID for this network.
+   *
+   * @param id value to set.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  setEapEngineID(string id) generates (SupplicantStatus status);
+
+  /**
+   * Set EAP Domain suffix match for this network.
+   *
+   * @param match value to set.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  setEapDomainSuffixMatch(string match)
+      generates (SupplicantStatus status);
+
+  /**
+   * Getters for the various network params.
+   */
+  /**
+   * Get SSID for this network.
+   *
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   * @return ssid value set.
+   */
+  getSsid() generates (SupplicantStatus status, Ssid ssid);
+
+  /**
+   * Get the BSSID set for this network.
+   *
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   * @return bssid value set.
+   */
+  getBssid() generates (SupplicantStatus status, Bssid bssid);
+
+  /**
+   * Get whether Probe Requests are being sent for this network (hidden).
+   *
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   * @return enabled true if set, false otherwise.
+   */
+  getScanSsid() generates (SupplicantStatus status, bool enabled);
+
+  /**
+   * Get the key mgmt mask set for the network.
+   *
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   * @return keyMgmtMask Combination of |KeyMgmtMask| values.
+   */
+  getKeyMgmt()
+      generates (SupplicantStatus status, uint32_t keyMgmtMask);
+
+  /**
+   * Get the proto mask set for the network.
+   *
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   * @return protoMask Combination of |ProtoMask| values.
+   */
+  getProto() generates (SupplicantStatus status, uint32_t protoMask);
+
+  /**
+   * Get the auth alg mask set for the network.
+   *
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   * @return authAlgMask Combination of |AuthAlgMask| values.
+   */
+  getAuthAlg()
+      generates (SupplicantStatus status, uint32_t authAlgMask);
+
+  /**
+   * Get the group cipher mask set for the network.
+   *
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   * @return groupCipherMask Combination of |GroupCipherMask| values.
+   */
+  getGroupCipher()
+      generates (SupplicantStatus status, uint32_t groupCipherMask);
+
+  /**
+   * Get the pairwise cipher mask set for the network.
+   *
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   * @return pairwiseCipherMask Combination of |PairwiseCipherMask| values.
+   */
+  getPairwiseCipher()
+      generates (SupplicantStatus status, uint32_t pairwiseCipherMask);
+
+  /**
+   * Get passphrase for WPA_PSK network.
+   *
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   * @return psk value set.
+   */
+  getPskPassphrase() generates (SupplicantStatus status, string psk);
+
+  /**
+   * Get WEP key for WEP network.
+   *
+   * @param keyIdx Index of wep key to be fetched.
+   *        Max of |WEP_KEYS_MAX_NUM|.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   * @return wepKey value set.
+   */
+  getWepKey(uint32_t keyIdx)
+      generates (SupplicantStatus status, vec<uint8_t> wepKey);
+
+  /**
+   * Get default Tx key index for WEP network.
+   *
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   * @return keyIdx value set.
+   */
+  getWepTxKeyIdx()
+      generates (SupplicantStatus status, uint32_t keyIdx);
+
+  /**
+   * Get whether RequirePmf is enabled for this network.
+   *
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   * @return enabled true if set, false otherwise.
+   */
+  getRequirePmf() generates (SupplicantStatus status, bool enabled);
+
+  /**
+   * Enable the network for connection purposes.
+   *
+   * This must trigger a connection to the network if:
+   * a) |noConnect| is false, and
+   * b) This is the only network configured, and
+   * c) Is visible in the current scan results.
+   *
+   * @param noConnect Only enable the network, dont trigger a connect.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  enable(bool noConnect) generates (SupplicantStatus status);
+
+  /**
+   * Disable the network for connection purposes.
+   *
+   * This must trigger a disconnection from the network, if currently
+   * connected to this one.
+   *
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  disable() generates (SupplicantStatus status);
+
+  /**
+   * Initiate connection to this network.
+   *
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  select() generates (SupplicantStatus status);
+
+  /**
+   * Used to send a response to the
+   * |ISupplicantNetworkCallback.onNetworkEapSimGsmAuthRequest| request.
+   *
+   * @param params Params to be used for EAP GSM authentication.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  sendNetworkEapSimGsmAuthResponse(NetworkResponseEapSimGsmAuthParams params)
+      generates (SupplicantStatus status);
+
+  /**
+   * Used to send a response to the
+   * |ISupplicantNetworkCallback.onNetworkEapSimUmtsAuthRequest| request.
+   *
+   * @param params Params to be used for EAP UMTS authentication.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  sendNetworkEapSimUmtsAuthResponse(NetworkResponseEapSimUmtsAuthParams params)
+      generates (SupplicantStatus status);
+
+  /**
+   * Used to send a response to the
+   * |ISupplicantNetworkCallback.onNetworkEapIdentityRequest| request.
+   *
+   * @param identity Identity to be used for the network.
+   * @return status Status of the operation.
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
+   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
+   */
+  sendNetworkEapIdentityResponse(vec<uint8_t> identity)
+      generates (SupplicantStatus status);
+};