From b76dbbef4f5ccebc28b47a52da170e1c696979f1 Mon Sep 17 00:00:00 2001 From: Roshan Pius Date: Wed, 9 Nov 2016 09:55:42 -0800 Subject: supplicant(interface): Add support for Hotspot 2.0 HIDL interface to a) Initiate ANQP queries & icon queries for hotspot 2.0 b) Add callbacks for the reception of WNM frames (hotspot remediation, deauth imminent notice). Bug: 31116047 Test: ./hardware/interfaces/update-makefiles.sh Change-Id: Ib3353f04b493f50c6415d1f3475efa957d921540 --- wifi/supplicant/1.0/ISupplicantStaIface.hal | 60 ++++++++++++++++ .../supplicant/1.0/ISupplicantStaIfaceCallback.hal | 79 ++++++++++++++++++++++ 2 files changed, 139 insertions(+) (limited to 'wifi') diff --git a/wifi/supplicant/1.0/ISupplicantStaIface.hal b/wifi/supplicant/1.0/ISupplicantStaIface.hal index a68e961d8..868758ec9 100644 --- a/wifi/supplicant/1.0/ISupplicantStaIface.hal +++ b/wifi/supplicant/1.0/ISupplicantStaIface.hal @@ -24,6 +24,30 @@ import ISupplicantStaIfaceCallback; * interface (e.g wlan0) it controls. */ interface ISupplicantStaIface extends ISupplicantIface { + /** + * Access Network Query Protocol info ID elements + * for IEEE Std 802.11u-2011. + */ + enum AnqpInfoId : uint32_t { + VENUE_NAME = 258, + ROAMING_CONSORTIUM = 261, + IP_ADDR_TYPE_AVAILABILITY = 262, + NAI_REALM = 263, + ANQP_3GPP_CELLULAR_NETWORK = 264, + DOMAIN_NAME = 268 + }; + + /** + * Access Network Query Protocol subtype elements + * for Hotspot 2.0. + */ + enum Hs20AnqpSubtypes : uint32_t { + OPERATOR_FRIENDLY_NAME = 2, + WAN_METRICS = 4, + CONNECTION_CAPABILITY = 5, + OSU_PROVIDERS_LIST = 8, + }; + /** * Register for callbacks from this interface. * @@ -133,4 +157,40 @@ interface ISupplicantStaIface extends ISupplicantIface { */ initiateTdlsTeardown(MacAddress macAddress) generates (SupplicantStatus status); + + /** + * Initiate ANQP (for IEEE 802.11u Interworking/Hotspot 2.0) queries with the + * specified access point. + * The ANQP data fetched must be returned in the + * |ISupplicantStaIfaceCallback.onAnqpQueryDone| callback. + * + * @param macAddress MAC address of the access point. + * @param infoElements List of information elements to query for. + * @param subtypes List of HS20 subtypes to query for. + * @return status Status of the operation. + * Possible status codes: + * |SupplicantStatusCode.SUCCESS|, + * |SupplicantStatusCode.FAILURE_UNKNOWN|, + * |SupplicantStatusCode.FAILURE_IFACE_INVALID| + */ + initiateAnqpQuery(MacAddress macAddress, + vec infoElements, + vec subTypes) + generates (SupplicantStatus status); + + /** + * Initiate the Hotspot 2.0 icon query with the specified accesss point. + * The icon data fetched must be returned in the + * |ISupplicantStaIfaceCallback.onHs20IconQueryDone| callback. + * + * @param macAddress MAC address of the access point. + * @param fileName Name of the file to request from the access point. + * @return status Status of the operation. + * Possible status codes: + * |SupplicantStatusCode.SUCCESS|, + * |SupplicantStatusCode.FAILURE_UNKNOWN|, + * |SupplicantStatusCode.FAILURE_IFACE_INVALID| + */ + initiateHs20IconQuery(MacAddress macAddress, string fileName) + generates (SupplicantStatus status); }; diff --git a/wifi/supplicant/1.0/ISupplicantStaIfaceCallback.hal b/wifi/supplicant/1.0/ISupplicantStaIfaceCallback.hal index 77423ed46..471744195 100644 --- a/wifi/supplicant/1.0/ISupplicantStaIfaceCallback.hal +++ b/wifi/supplicant/1.0/ISupplicantStaIfaceCallback.hal @@ -104,6 +104,40 @@ interface ISupplicantStaIfaceCallback { COMPLETED = 9 }; + /** + * OSU Method. Refer to section 4.8.1.3 of the Hotspot 2.0 spec. + */ + enum OsuMethod : uint8_t { + OMA_DM = 0, + SOAP_XML_SPP = 1 + }; + + /** + * ANQP data for IEEE Std 802.11u-2011. + * The format of the data within these elements follows the IEEE + * Std 802.11u-2011 standard. + */ + struct AnqpData { + vec venueName; + vec roamingConsortium; + vec ipAddrTypeAvailability; + vec naiRealm; + vec anqp3gppCellularNetwork; + vec domainName; + }; + + /** + * ANQP data for Hotspot 2.0. + * The format of the data within these elements follows the Hotspot 2.0 + * standard. + */ + struct Hs20AnqpData { + vec operatorFriendlyName; + vec wanMetrics; + vec connectionCapability; + vec osuProvidersList; + }; + /** * Used to indicate that a new network has been added. * @@ -138,4 +172,49 @@ interface ISupplicantStaIfaceCallback { */ oneway onStateChanged( State newState, Bssid bssid, SupplicantNetworkId id, Ssid ssid); + + /** + * Used to indicate the result of ANQP (either for IEEE 802.11u Interworking + * or Hotspot 2.0) query. + * + * @param macAddress MAC address of the access point. + * @param data ANQP data fetched from the access point. + * All the fields in this struct must be empty if the query failed. + * @param hs20Data ANQP data fetched from the Hotspot 2.0 access point. + * All the fields in this struct must be empty if the query failed. + */ + oneway onAnqpQueryDone(MacAddress macAddress, + AnqpData data, + Hs20AnqpData hs20Data); + + /** + * Used to indicate the result of Hotspot 2.0 Icon query. + * + * @param macAddress MAC address of the access point. + * @param fileName Name of the file that was requested. + * @param data Icon data fetched from the access point. + * Must be empty if the query failed. + */ + oneway onHs20IconQueryDone(MacAddress macAddress, + string fileName, + vec data); + + /** + * Used to indicate a Hotspot 2.0 subscription remediation event. + * + * @param osuMethod OSU method. + * @param url URL of the server. + */ + oneway onHs20SubscriptionRemediation(OsuMethod osuMethod, string url); + + /** + * Used to indicate a Hotspot 2.0 imminent deauth notice. + * @param code Code to indicate the deauth reason. + * Refer to section 3.2.1.2 of the Hotspot 2.0 spec. + * @param reAuthDelayInSec Delay before reauthenticating. + * @param url URL of the server. + */ + oneway onHs20DeauthImminentNotice(uint32_t code, + uint32_t reAuthDelayInSec, + string url); }; -- cgit v1.2.3