| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| library fuchsia.wlan.sme; |
| |
| using fuchsia.wlan.common; |
| using fuchsia.wlan.ieee80211 as ieee80211; |
| using fuchsia.wlan.internal; |
| using fuchsia.wlan.mesh; |
| |
| /// Security protection which should mirror the Protection enum defined in wlan lib common |
| enum Protection { |
| UNKNOWN = 0; |
| OPEN = 1; |
| WEP = 2; |
| WPA1 = 3; |
| WPA1_WPA2_PERSONAL_TKIP_ONLY = 4; |
| WPA2_PERSONAL_TKIP_ONLY = 5; |
| WPA1_WPA2_PERSONAL = 6; |
| WPA2_PERSONAL = 7; |
| WPA2_WPA3_PERSONAL = 8; |
| WPA3_PERSONAL = 9; |
| WPA2_ENTERPRISE = 10; |
| WPA3_ENTERPRISE = 11; |
| }; |
| |
| enum UserDisconnectReason { |
| UNKNOWN = 0; |
| FAILED_TO_CONNECT = 1; |
| FIDL_CONNECT_REQUEST = 2; |
| FIDL_STOP_CLIENT_CONNECTIONS_REQUEST = 3; |
| PROACTIVE_NETWORK_SWITCH = 4; |
| DISCONNECT_DETECTED_FROM_SME = 5; |
| REGULATORY_REGION_CHANGE = 6; |
| STARTUP = 7; |
| NETWORK_UNSAVED = 8; |
| NETWORK_CONFIG_UPDATED = 9; |
| |
| // The following reasons should only be used for development and testing. |
| WLANSTACK_UNIT_TESTING = 124; |
| WLAN_SME_UNIT_TESTING = 125; |
| WLAN_SERVICE_UTIL_TESTING = 126; |
| WLAN_DEV_TOOL = 127; |
| }; |
| |
| struct BssInfo { |
| array<uint8>:6 bssid; |
| vector<uint8>:ieee80211.MAX_SSID_BYTE_LEN ssid; |
| int8 rssi_dbm; |
| int8 snr_db; |
| fuchsia.wlan.common.WlanChan channel; |
| Protection protection; |
| bool compatible; |
| fuchsia.wlan.internal.BssDescription? bss_desc; |
| }; |
| |
| enum ScanErrorCode { |
| NOT_SUPPORTED = 1; |
| INTERNAL_ERROR = 2; |
| SHOULD_WAIT = 3; |
| CANCELED_BY_DRIVER_OR_FIRMWARE = 4; |
| }; |
| |
| struct ScanError { |
| ScanErrorCode code; |
| string message; |
| }; |
| |
| protocol ScanTransaction { |
| // Can be called several times to deliver incremental scan results |
| -> OnResult(vector<BssInfo> aps); |
| -> OnFinished(); |
| -> OnError(ScanError error); |
| }; |
| |
| union ScanRequest { |
| 1: ActiveScanRequest active; |
| 2: PassiveScanRequest passive; |
| }; |
| |
| struct PassiveScanRequest { |
| }; |
| |
| struct ActiveScanRequest { |
| // The SSIDs to scan for. Leave empty for a wildcard active scan. |
| vector<vector<uint8>:ieee80211.MAX_SSID_BYTE_LEN>:16 ssids; |
| // Channels to scan on. Leave empty for all supported channels. |
| vector<uint8>:500 channels; |
| }; |
| |
| enum ConnectResultCode { |
| // Connected successfully |
| SUCCESS = 0; |
| // The request was superseded by another connect or disconnect command |
| CANCELED = 1; |
| // Failed to join for some reason |
| FAILED = 2; |
| // Failed to join because the authenticator rejected the credentials. |
| CREDENTIAL_REJECTED = 3; |
| }; |
| |
| protocol ConnectTransaction { |
| // Could add more events here to notify the client of the progress |
| -> OnFinished(ConnectResultCode code); |
| }; |
| |
| struct RadioConfig { |
| bool override_phy; |
| fuchsia.wlan.common.PHY phy; |
| bool override_cbw; |
| fuchsia.wlan.common.CBW cbw; |
| bool override_primary_chan; |
| uint8 primary_chan; |
| }; |
| |
| /// Empty struct used as credential value for open networks. |
| struct Empty { |
| }; |
| |
| /// Information required to connect to a protected network. |
| flexible union Credential { |
| /// The network does not use credentials (open networks). |
| 1: Empty none; |
| |
| /// Plaintext password (handled as binary data). |
| 2: bytes password; |
| |
| /// Hash representation of the network passphrase (handled as binary data). |
| 3: bytes psk; |
| }; |
| |
| struct ConnectRequest { |
| vector<uint8>:ieee80211.MAX_SSID_BYTE_LEN ssid; |
| /// If provided, SME may connect directly to this BSS without a join scan. |
| fuchsia.wlan.internal.BssDescription? bss_desc; |
| /// Informs SME whether multiple candidates were available, for metrics. |
| bool multiple_bss_candidates; |
| Credential credential; |
| |
| RadioConfig radio_cfg; |
| /// Deprecated. SME makes internal decision on whether to perform a passive or active |
| /// scan during connect. Setting this field will not affect anything for FullMAC, but |
| /// currently SoftMAC still honor this argument. |
| fuchsia.wlan.common.ScanType deprecated_scan_type; |
| }; |
| |
| struct ClientStatusResponse { |
| BssInfo? connected_to; |
| // If non-empty, this is the SSID we are currently trying to connect to |
| vector<uint8>:ieee80211.MAX_SSID_BYTE_LEN connecting_to_ssid; |
| }; |
| |
| protocol ClientSme { |
| Scan(ScanRequest req, request<ScanTransaction> txn); |
| Connect(ConnectRequest req, request<ConnectTransaction>? txn); |
| Disconnect(UserDisconnectReason reason) -> (); |
| Status() -> (ClientStatusResponse resp); |
| WmmStatus() -> (fuchsia.wlan.internal.WmmStatusResponse resp) error int32; |
| }; |
| |
| struct ApConfig { |
| vector<uint8>:ieee80211.MAX_SSID_BYTE_LEN ssid; |
| vector<uint8>:64 password; |
| RadioConfig radio_cfg; |
| }; |
| |
| enum StartApResultCode { |
| // TODO(porce): Fix naming style. |
| SUCCESS = 0; |
| ALREADY_STARTED = 1; |
| INTERNAL_ERROR = 2; |
| CANCELED = 3; |
| TIMED_OUT = 4; |
| PREVIOUS_START_IN_PROGRESS = 5; |
| INVALID_ARGUMENTS = 6; |
| DFS_UNSUPPORTED = 7; |
| }; |
| |
| enum StopApResultCode { |
| SUCCESS = 0; |
| INTERNAL_ERROR = 1; |
| TIMED_OUT = 2; |
| }; |
| |
| struct Ap { |
| vector<uint8>:ieee80211.MAX_SSID_BYTE_LEN ssid; |
| uint8 channel; |
| uint16 num_clients; |
| }; |
| |
| struct ApStatusResponse { |
| Ap? running_ap; |
| }; |
| |
| protocol ApSme { |
| Start(ApConfig config) -> (StartApResultCode code); |
| Stop() -> (StopApResultCode code); |
| Status() -> (ApStatusResponse resp); |
| }; |
| |
| struct MeshConfig { |
| vector<uint8>:32 mesh_id; |
| uint8 channel; |
| }; |
| |
| enum JoinMeshResultCode { |
| SUCCESS = 0; |
| CANCELED = 1; |
| INTERNAL_ERROR = 2; |
| INVALID_ARGUMENTS = 3; |
| DFS_UNSUPPORTED = 4; |
| }; |
| |
| enum LeaveMeshResultCode { |
| SUCCESS = 0; |
| INTERNAL_ERROR = 1; |
| }; |
| |
| enum GetMeshPathTableResultCode { |
| SUCCESS = 0; |
| INTERNAL_ERROR = 1; |
| }; |
| |
| protocol MeshSme { |
| Join(MeshConfig config) -> (JoinMeshResultCode code); |
| Leave() -> (LeaveMeshResultCode code); |
| GetMeshPathTable() -> (GetMeshPathTableResultCode code, fuchsia.wlan.mesh.MeshPathTable path); |
| }; |