blob: 524f44a4d52f63b0e5b76df1fe31f790a0579dd3 [file] [log] [blame]
/*
* WPA Supplicant - Sta network Aidl interface
* Copyright (c) 2021, Google Inc. All rights reserved.
*
* This software may be distributed under the terms of the BSD license.
* See README for more details.
*/
#ifndef WPA_SUPPLICANT_AIDL_STA_NETWORK_H
#define WPA_SUPPLICANT_AIDL_STA_NETWORK_H
#include <array>
#include <vector>
#include <android-base/macros.h>
#include <aidl/android/hardware/wifi/supplicant/BnSupplicantStaNetwork.h>
#include <aidl/android/hardware/wifi/supplicant/EapMethod.h>
#include <aidl/android/hardware/wifi/supplicant/EapPhase2Method.h>
#include <aidl/android/hardware/wifi/supplicant/ISupplicantStaNetworkCallback.h>
#include <aidl/android/hardware/wifi/supplicant/NetworkRequestEapSimUmtsAuthParams.h>
#include <aidl/android/hardware/wifi/supplicant/NetworkResponseEapSimUmtsAuthParams.h>
#include <aidl/android/hardware/wifi/supplicant/SaeH2eMode.h>
#include <aidl/android/hardware/wifi/supplicant/DppConnectionKeys.h>
extern "C"
{
#include "utils/common.h"
#include "utils/includes.h"
#include "config.h"
#include "wpa_supplicant_i.h"
#include "notify.h"
#include "eapol_supp/eapol_supp_sm.h"
#include "eap_peer/eap.h"
#include "rsn_supp/wpa.h"
}
namespace aidl {
namespace android {
namespace hardware {
namespace wifi {
namespace supplicant {
/**
* Implementation of StaNetwork aidl object. Each unique aidl
* object is used for control operations on a specific network
* controlled by wpa_supplicant.
*/
class StaNetwork : public BnSupplicantStaNetwork
{
public:
StaNetwork(
struct wpa_global* wpa_global, const char ifname[], int network_id);
~StaNetwork() override = default;
// Refer to |StaIface::invalidate()|.
void invalidate();
bool isValid();
// Aidl methods exposed.
::ndk::ScopedAStatus getId(int32_t* _aidl_return) override;
::ndk::ScopedAStatus getInterfaceName(std::string* _aidl_return) override;
::ndk::ScopedAStatus getType(IfaceType* _aidl_return) override;
::ndk::ScopedAStatus registerCallback(
const std::shared_ptr<ISupplicantStaNetworkCallback>& in_callback) override;
::ndk::ScopedAStatus setSsid(const std::vector<uint8_t>& in_ssid) override;
::ndk::ScopedAStatus setBssid(const std::vector<uint8_t>& in_bssid) override;
::ndk::ScopedAStatus setDppKeys(const DppConnectionKeys& in_keys) override;
::ndk::ScopedAStatus setScanSsid(bool in_enable) override;
::ndk::ScopedAStatus setKeyMgmt(KeyMgmtMask in_keyMgmtMask) override;
::ndk::ScopedAStatus setProto(ProtoMask in_protoMask) override;
::ndk::ScopedAStatus setAuthAlg(AuthAlgMask in_authAlgMask) override;
::ndk::ScopedAStatus setGroupCipher(GroupCipherMask in_groupCipherMask) override;
::ndk::ScopedAStatus setPairwiseCipher(
PairwiseCipherMask in_pairwiseCipherMask) override;
::ndk::ScopedAStatus setPskPassphrase(const std::string& in_psk) override;
::ndk::ScopedAStatus setPsk(const std::vector<uint8_t>& in_psk) override;
::ndk::ScopedAStatus setWepKey(
int32_t in_keyIdx, const std::vector<uint8_t>& in_wepKey) override;
::ndk::ScopedAStatus setWepTxKeyIdx(int32_t in_keyIdx) override;
::ndk::ScopedAStatus setRequirePmf(bool in_enable) override;
::ndk::ScopedAStatus setEapMethod(EapMethod in_method) override;
::ndk::ScopedAStatus setEapPhase2Method(EapPhase2Method in_method) override;
::ndk::ScopedAStatus setEapIdentity(
const std::vector<uint8_t>& in_identity) override;
::ndk::ScopedAStatus setEapEncryptedImsiIdentity(
const std::vector<uint8_t>& in_identity) override;
::ndk::ScopedAStatus setEapAnonymousIdentity(
const std::vector<uint8_t>& in_identity) override;
::ndk::ScopedAStatus setEapPassword(
const std::vector<uint8_t>& in_password) override;
::ndk::ScopedAStatus setEapCACert(const std::string& in_path) override;
::ndk::ScopedAStatus setEapCAPath(const std::string& in_path) override;
::ndk::ScopedAStatus setEapClientCert(const std::string& in_path) override;
::ndk::ScopedAStatus setEapPrivateKeyId(const std::string& in_id) override;
::ndk::ScopedAStatus setEapSubjectMatch(const std::string& in_match) override;
::ndk::ScopedAStatus setEapAltSubjectMatch(const std::string& in_match) override;
::ndk::ScopedAStatus setEapEngine(bool in_enable) override;
::ndk::ScopedAStatus setEapEngineID(const std::string& in_id) override;
::ndk::ScopedAStatus setEapDomainSuffixMatch(
const std::string& in_match) override;
::ndk::ScopedAStatus setProactiveKeyCaching(bool in_enable) override;
::ndk::ScopedAStatus setIdStr(const std::string& in_idStr) override;
::ndk::ScopedAStatus setUpdateIdentifier(int32_t in_id) override;
::ndk::ScopedAStatus setEdmg(bool in_enable) override;
::ndk::ScopedAStatus getSsid(std::vector<uint8_t>* _aidl_return) override;
::ndk::ScopedAStatus getBssid(std::vector<uint8_t>* _aidl_return) override;
::ndk::ScopedAStatus getScanSsid(bool* _aidl_return) override;
::ndk::ScopedAStatus getKeyMgmt(KeyMgmtMask* _aidl_return) override;
::ndk::ScopedAStatus getProto(ProtoMask* _aidl_return) override;
::ndk::ScopedAStatus getAuthAlg(AuthAlgMask* _aidl_return) override;
::ndk::ScopedAStatus getGroupCipher(GroupCipherMask* _aidl_return) override;
::ndk::ScopedAStatus getPairwiseCipher(PairwiseCipherMask* _aidl_return) override;
::ndk::ScopedAStatus getPskPassphrase(std::string* _aidl_return) override;
::ndk::ScopedAStatus getPsk(std::vector<uint8_t>* _aidl_return) override;
::ndk::ScopedAStatus getSaePassword(std::string* _aidl_return) override;
::ndk::ScopedAStatus getSaePasswordId(std::string* _aidl_return) override;
::ndk::ScopedAStatus getWepKey(
int32_t in_keyIdx, std::vector<uint8_t>* _aidl_return) override;
::ndk::ScopedAStatus getWepTxKeyIdx(int32_t* _aidl_return) override;
::ndk::ScopedAStatus getRequirePmf(bool* _aidl_return) override;
::ndk::ScopedAStatus getEapMethod(EapMethod* _aidl_return) override;
::ndk::ScopedAStatus getEapPhase2Method(EapPhase2Method* _aidl_return) override;
::ndk::ScopedAStatus getEapIdentity(std::vector<uint8_t>* _aidl_return) override;
::ndk::ScopedAStatus getEapAnonymousIdentity(
std::vector<uint8_t>* _aidl_return) override;
::ndk::ScopedAStatus getEapPassword(std::vector<uint8_t>* _aidl_return) override;
::ndk::ScopedAStatus getEapCACert(std::string* _aidl_return) override;
::ndk::ScopedAStatus getEapCAPath(std::string* _aidl_return) override;
::ndk::ScopedAStatus getEapClientCert(std::string* _aidl_return) override;
::ndk::ScopedAStatus getEapPrivateKeyId(std::string* _aidl_return) override;
::ndk::ScopedAStatus getEapSubjectMatch(std::string* _aidl_return) override;
::ndk::ScopedAStatus getEapAltSubjectMatch(std::string* _aidl_return) override;
::ndk::ScopedAStatus getEapEngine(bool* _aidl_return) override;
::ndk::ScopedAStatus getEapEngineId(std::string* _aidl_return) override;
::ndk::ScopedAStatus getEapDomainSuffixMatch(std::string* _aidl_return) override;
::ndk::ScopedAStatus getIdStr(std::string* _aidl_return) override;
::ndk::ScopedAStatus getWpsNfcConfigurationToken(
std::vector<uint8_t>* _aidl_return) override;
::ndk::ScopedAStatus getEdmg(bool* _aidl_return) override;
::ndk::ScopedAStatus enable(bool in_noConnect) override;
::ndk::ScopedAStatus disable() override;
::ndk::ScopedAStatus select() override;
::ndk::ScopedAStatus sendNetworkEapSimGsmAuthResponse(
const std::vector<NetworkResponseEapSimGsmAuthParams>& in_params) override;
::ndk::ScopedAStatus sendNetworkEapSimGsmAuthFailure() override;
::ndk::ScopedAStatus sendNetworkEapSimUmtsAuthResponse(
const NetworkResponseEapSimUmtsAuthParams& in_params) override;
::ndk::ScopedAStatus sendNetworkEapSimUmtsAutsResponse(
const std::vector<uint8_t>& in_auts) override;
::ndk::ScopedAStatus sendNetworkEapSimUmtsAuthFailure() override;
::ndk::ScopedAStatus sendNetworkEapIdentityResponse(
const std::vector<uint8_t>& in_identity,
const std::vector<uint8_t>& in_encryptedIdentity) override;
::ndk::ScopedAStatus setGroupMgmtCipher(
GroupMgmtCipherMask in_groupMgmtCipherMask) override;
::ndk::ScopedAStatus getGroupMgmtCipher(
GroupMgmtCipherMask* _aidl_return) override;
::ndk::ScopedAStatus enableTlsSuiteBEapPhase1Param(
bool in_enable) override;
::ndk::ScopedAStatus enableSuiteBEapOpenSslCiphers() override;
::ndk::ScopedAStatus setSaePassword(
const std::string& in_saePassword) override;
::ndk::ScopedAStatus setSaePasswordId(
const std::string& in_saePasswordId) override;
::ndk::ScopedAStatus setOcsp(OcspType in_ocspType) override;
::ndk::ScopedAStatus getOcsp(OcspType* _aidl_return) override;
::ndk::ScopedAStatus setPmkCache(
const std::vector<uint8_t>& in_serializedEntry) override;
::ndk::ScopedAStatus setWapiCertSuite(const std::string& in_suite) override;
::ndk::ScopedAStatus getWapiCertSuite(std::string* _aidl_return) override;
::ndk::ScopedAStatus setEapErp(bool in_enable) override;
::ndk::ScopedAStatus setSaeH2eMode(SaeH2eMode in_mode) override;
::ndk::ScopedAStatus enableSaePkOnlyMode(bool in_enable) override;
::ndk::ScopedAStatus setRoamingConsortiumSelection(
const std::vector<uint8_t>& in_selectedRcoi) override;
private:
// Corresponding worker functions for the AIDL methods.
std::pair<uint32_t, ndk::ScopedAStatus> getIdInternal();
std::pair<std::string, ndk::ScopedAStatus> getInterfaceNameInternal();
std::pair<IfaceType, ndk::ScopedAStatus> getTypeInternal();
ndk::ScopedAStatus registerCallbackInternal(
const std::shared_ptr<ISupplicantStaNetworkCallback>& callback);
ndk::ScopedAStatus setSsidInternal(const std::vector<uint8_t>& ssid);
ndk::ScopedAStatus setBssidInternal(const std::vector<uint8_t>& bssid);
ndk::ScopedAStatus setDppKeysInternal(const DppConnectionKeys& keys);
ndk::ScopedAStatus setScanSsidInternal(bool enable);
ndk::ScopedAStatus setKeyMgmtInternal(
KeyMgmtMask mask);
ndk::ScopedAStatus setProtoInternal(
ProtoMask mask);
ndk::ScopedAStatus setAuthAlgInternal(
AuthAlgMask mask);
ndk::ScopedAStatus setGroupCipherInternal(
GroupCipherMask mask);
ndk::ScopedAStatus setPairwiseCipherInternal(
PairwiseCipherMask mask);
ndk::ScopedAStatus setPskPassphraseInternal(const std::string& psk);
ndk::ScopedAStatus setPskInternal(const std::vector<uint8_t>& psk);
ndk::ScopedAStatus setWepKeyInternal(
uint32_t key_idx, const std::vector<uint8_t>& wep_key);
ndk::ScopedAStatus setWepTxKeyIdxInternal(uint32_t key_idx);
ndk::ScopedAStatus setRequirePmfInternal(bool enable);
ndk::ScopedAStatus setEapMethodInternal(
EapMethod method);
ndk::ScopedAStatus setEapPhase2MethodInternal(
EapPhase2Method method);
ndk::ScopedAStatus setEapIdentityInternal(
const std::vector<uint8_t>& identity);
ndk::ScopedAStatus setEapEncryptedImsiIdentityInternal(
const std::vector<uint8_t>& identity);
ndk::ScopedAStatus setEapAnonymousIdentityInternal(
const std::vector<uint8_t>& identity);
ndk::ScopedAStatus setEapPasswordInternal(
const std::vector<uint8_t>& password);
ndk::ScopedAStatus setEapCACertInternal(const std::string& path);
ndk::ScopedAStatus setEapCAPathInternal(const std::string& path);
ndk::ScopedAStatus setEapClientCertInternal(const std::string& path);
ndk::ScopedAStatus setEapPrivateKeyIdInternal(const std::string& id);
ndk::ScopedAStatus setEapSubjectMatchInternal(const std::string& match);
ndk::ScopedAStatus setEapAltSubjectMatchInternal(
const std::string& match);
ndk::ScopedAStatus setEapEngineInternal(bool enable);
ndk::ScopedAStatus setEapEngineIDInternal(const std::string& id);
ndk::ScopedAStatus setEapDomainSuffixMatchInternal(
const std::string& match);
ndk::ScopedAStatus setProactiveKeyCachingInternal(bool enable);
ndk::ScopedAStatus setIdStrInternal(const std::string& id_str);
ndk::ScopedAStatus setUpdateIdentifierInternal(uint32_t id);
ndk::ScopedAStatus setEdmgInternal(bool enable);
std::pair<std::vector<uint8_t>, ndk::ScopedAStatus> getSsidInternal();
std::pair<std::vector<uint8_t>, ndk::ScopedAStatus> getBssidInternal();
std::pair<bool, ndk::ScopedAStatus> getScanSsidInternal();
std::pair<KeyMgmtMask, ndk::ScopedAStatus> getKeyMgmtInternal();
std::pair<ProtoMask, ndk::ScopedAStatus> getProtoInternal();
std::pair<AuthAlgMask, ndk::ScopedAStatus> getAuthAlgInternal();
std::pair<GroupCipherMask, ndk::ScopedAStatus> getGroupCipherInternal();
std::pair<PairwiseCipherMask, ndk::ScopedAStatus> getPairwiseCipherInternal();
std::pair<std::string, ndk::ScopedAStatus> getPskPassphraseInternal();
std::pair<std::vector<uint8_t>, ndk::ScopedAStatus> getPskInternal();
std::pair<std::string, ndk::ScopedAStatus> getSaePasswordInternal();
std::pair<std::string, ndk::ScopedAStatus> getSaePasswordIdInternal();
std::pair<std::vector<uint8_t>, ndk::ScopedAStatus> getWepKeyInternal(
uint32_t key_idx);
std::pair<uint32_t, ndk::ScopedAStatus> getWepTxKeyIdxInternal();
std::pair<bool, ndk::ScopedAStatus> getRequirePmfInternal();
std::pair<EapMethod, ndk::ScopedAStatus> getEapMethodInternal();
std::pair<EapPhase2Method, ndk::ScopedAStatus>
getEapPhase2MethodInternal();
std::pair<std::vector<uint8_t>, ndk::ScopedAStatus>
getEapIdentityInternal();
std::pair<std::vector<uint8_t>, ndk::ScopedAStatus>
getEapAnonymousIdentityInternal();
std::pair<std::vector<uint8_t>, ndk::ScopedAStatus>
getEapPasswordInternal();
std::pair<std::string, ndk::ScopedAStatus> getEapCACertInternal();
std::pair<std::string, ndk::ScopedAStatus> getEapCAPathInternal();
std::pair<std::string, ndk::ScopedAStatus> getEapClientCertInternal();
std::pair<std::string, ndk::ScopedAStatus> getEapPrivateKeyIdInternal();
std::pair<std::string, ndk::ScopedAStatus> getEapSubjectMatchInternal();
std::pair<std::string, ndk::ScopedAStatus> getEapAltSubjectMatchInternal();
std::pair<bool, ndk::ScopedAStatus> getEapEngineInternal();
std::pair<std::string, ndk::ScopedAStatus> getEapEngineIdInternal();
std::pair<std::string, ndk::ScopedAStatus> getEapDomainSuffixMatchInternal();
std::pair<std::string, ndk::ScopedAStatus> getIdStrInternal();
std::pair<std::vector<uint8_t>, ndk::ScopedAStatus>
getWpsNfcConfigurationTokenInternal();
std::pair<bool, ndk::ScopedAStatus> getEdmgInternal();
ndk::ScopedAStatus enableInternal(bool no_connect);
ndk::ScopedAStatus disableInternal();
ndk::ScopedAStatus selectInternal();
ndk::ScopedAStatus sendNetworkEapSimGsmAuthResponseInternal(
const std::vector<NetworkResponseEapSimGsmAuthParams>&
vec_params);
ndk::ScopedAStatus sendNetworkEapSimGsmAuthFailureInternal();
ndk::ScopedAStatus sendNetworkEapSimUmtsAuthResponseInternal(
const NetworkResponseEapSimUmtsAuthParams& params);
ndk::ScopedAStatus sendNetworkEapSimUmtsAutsResponseInternal(
const std::vector<uint8_t>& auts);
ndk::ScopedAStatus sendNetworkEapSimUmtsAuthFailureInternal();
ndk::ScopedAStatus sendNetworkEapIdentityResponseInternal(
const std::vector<uint8_t>& identity,
const std::vector<uint8_t>& imsi_identity);
ndk::ScopedAStatus enableTlsSuiteBEapPhase1ParamInternal(bool enable);
ndk::ScopedAStatus enableSuiteBEapOpenSslCiphersInternal();
ndk::ScopedAStatus setSaePasswordInternal(
const std::string& sae_password);
ndk::ScopedAStatus setSaePasswordIdInternal(
const std::string& sae_password_id);
ndk::ScopedAStatus setGroupMgmtCipherInternal(
GroupMgmtCipherMask mask);
std::pair<GroupMgmtCipherMask, ndk::ScopedAStatus>
getGroupMgmtCipherInternal();
ndk::ScopedAStatus setOcspInternal(OcspType ocspType);
std::pair<OcspType, ndk::ScopedAStatus> getOcspInternal();
ndk::ScopedAStatus setPmkCacheInternal(const std::vector<uint8_t>& serializedEntry);
ndk::ScopedAStatus setWapiCertSuiteInternal(const std::string& suite);
std::pair<std::string, ndk::ScopedAStatus> getWapiCertSuiteInternal();
ndk::ScopedAStatus setWapiPskInternal(const std::vector<uint8_t>& psk);
std::pair<std::vector<uint8_t>, ndk::ScopedAStatus> getWapiPskInternal();
ndk::ScopedAStatus setSaeH2eModeInternal(SaeH2eMode mode);
ndk::ScopedAStatus enableSaePkOnlyModeInternal(bool enable);
ndk::ScopedAStatus setRoamingConsortiumSelectionInternal(
const std::vector<uint8_t>& selectedRcoi);
struct wpa_ssid* retrieveNetworkPtr();
struct wpa_supplicant* retrieveIfacePtr();
int isPskPassphraseValid(const std::string& psk);
void resetInternalStateAfterParamsUpdate();
int setStringFieldAndResetState(
const char* value, uint8_t** to_update_field,
const char* hexdump_prefix);
int setStringFieldAndResetState(
const char* value, char** to_update_field,
const char* hexdump_prefix);
int setStringKeyFieldAndResetState(
const char* value, char** to_update_field,
const char* hexdump_prefix);
int setByteArrayFieldAndResetState(
const uint8_t* value, const size_t value_len,
uint8_t** to_update_field, size_t* to_update_field_len,
const char* hexdump_prefix);
int setByteArrayKeyFieldAndResetState(
const uint8_t* value, const size_t value_len,
uint8_t** to_update_field, size_t* to_update_field_len,
const char* hexdump_prefix);
void setFastTransitionKeyMgmt(uint32_t &key_mgmt_mask);
void resetFastTransitionKeyMgmt(uint32_t &key_mgmt_mask);
ndk::ScopedAStatus setEapErpInternal(bool enable);
int setByteArrayField(
const uint8_t* value, const size_t value_len,
uint8_t** to_update_field, size_t* to_update_field_len,
const char* hexdump_prefix, bool resetState);
// Reference to the global wpa_struct. This is assumed to be valid
// for the lifetime of the process.
struct wpa_global* wpa_global_;
// Name of the iface this network belongs to.
const std::string ifname_;
// Id of the network this aidl object controls.
const int network_id_;
bool is_valid_;
DISALLOW_COPY_AND_ASSIGN(StaNetwork);
};
} // namespace supplicant
} // namespace wifi
} // namespace hardware
} // namespace android
} // namespace aidl
#endif // WPA_SUPPLICANT_AIDL_STA_NETWORK_H