diff --git a/wifi/supplicant/1.0/ISupplicantStaIface.hal b/wifi/supplicant/1.0/ISupplicantStaIface.hal index a68e961d8b..868758ec9d 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 77423ed46e..4717441958 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); };