| /* |
| * 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; |
| |
| /** |
| * Enum values indicating the status of operation. |
| */ |
| enum WifiStatusCode : uint32_t { |
| /** No errors. */ |
| SUCCESS, |
| /** Method invoked on an invalid |IWifiChip| object. */ |
| ERROR_WIFI_CHIP_INVALID, |
| /** Method invoked on an invalid |IWifiIface| object. */ |
| ERROR_WIFI_IFACE_INVALID, |
| /** Method invoked on an invalid |IWifiRttController| object. */ |
| ERROR_WIFI_RTT_CONTROLLER_INVALID, |
| ERROR_NOT_SUPPORTED, |
| ERROR_NOT_AVAILABLE, |
| ERROR_NOT_STARTED, |
| ERROR_INVALID_ARGS, |
| ERROR_BUSY, |
| ERROR_UNKNOWN |
| }; |
| |
| /** |
| * Generic structure to return the status of an operation. |
| */ |
| struct WifiStatus { |
| WifiStatusCode code; |
| /** |
| * A vendor specific error message from the vendor to provide more |
| * information beyond the reason code. |
| */ |
| string description; |
| }; |
| |
| /** |
| * List of Iface types supported. |
| */ |
| enum IfaceType : uint32_t { |
| STA, |
| AP, |
| P2P, |
| /** |
| * NAN control interface. Datapath support must be queried and created |
| * through this interface. |
| */ |
| NAN, |
| }; |
| |
| /** |
| * An identifier assigned to every chip on the device. |
| */ |
| typedef uint32_t ChipId; |
| |
| /** |
| * An identifier for a mode that the chip can be put in. |
| */ |
| typedef uint32_t ChipModeId; |
| |
| /** |
| * A unique handle provided by the client to identify individual invocations of |
| * certain API's like |IWifiStaIface.startBackgroundScan|, |
| * |IWifiStaIface.installApfPacketFilter|, etc. |
| */ |
| typedef uint32_t CommandId; |
| |
| /** |
| * Channel frequency in Mhz. |
| */ |
| typedef uint32_t WifiChannelInMhz; |
| |
| /** |
| * Channel operating width in Mhz. |
| */ |
| enum WifiChannelWidthInMhz : uint32_t { |
| WIDTH_20 = 0, |
| WIDTH_40 = 1, |
| WIDTH_80 = 2, |
| WIDTH_160 = 3, |
| WIDTH_80P80 = 4, |
| WIDTH_5 = 5, |
| WIDTH_10 = 6, |
| WIDTH_INVALID = -1 |
| }; |
| |
| /** |
| * Channel information. |
| */ |
| struct WifiChannelInfo { |
| /** |
| * Channel width (20, 40, 80, 80+80, 160). |
| */ |
| WifiChannelWidthInMhz width; |
| /** |
| * Primary 20 MHz channel. |
| */ |
| WifiChannelInMhz centerFreq; |
| /** |
| * Center frequency (MHz) first segment. |
| */ |
| WifiChannelInMhz centerFreq0; |
| /** |
| * Center frequency (MHz) second segment. |
| */ |
| WifiChannelInMhz centerFreq1; |
| }; |
| |
| /** |
| * RSSI information. |
| */ |
| typedef int32_t Rssi; |
| |
| /** |
| * Mac Address type. 6 octets representing physical address of a device. |
| */ |
| typedef uint8_t[6] MacAddress; |
| |
| /** |
| * SSID type. 32 octets representing the network. |
| */ |
| typedef uint8_t[32] Ssid; |
| |
| /** |
| * BSSID type. 6 octets representing the physical address of an AP. |
| */ |
| typedef MacAddress Bssid; |
| |
| /** |
| * TimeStamp in milliseconds (ms). |
| */ |
| typedef uint64_t TimeStampInMs; |
| |
| /** |
| * TimeStamp in microseconds (us). |
| */ |
| typedef uint64_t TimeStampInUs; |
| |
| /** |
| * TimeStamp in picoseconds (ps). |
| */ |
| typedef uint64_t TimeSpanInPs; |
| |
| /** |
| * Information elements contained within the |ScanResult| structure. |
| * These elements correspond to the IEEE_802.11 standard. |
| */ |
| struct WifiInformationElement { |
| uint8_t id; |
| vec<uint8_t> data; |
| }; |
| |
| enum WifiRatePreamble : uint32_t { |
| OFDM = 0, |
| CCK = 1, |
| HT = 2, |
| VHT = 3, |
| RESERVED = 4 |
| }; |
| |
| /** |
| * Number of spatial streams in VHT/HT. |
| */ |
| enum WifiRateNss : uint32_t { |
| NSS_1x1 = 0, |
| NSS_2x2 = 1, |
| NSS_3x3 = 2, |
| NSS_4x4 = 3 |
| }; |
| |
| /** |
| * Wifi rate info. |
| */ |
| struct WifiRateInfo { |
| /** |
| * Preamble used for RTT measurements. |
| */ |
| WifiRatePreamble preamble; |
| /** |
| * Number of spatial streams. |
| */ |
| WifiRateNss nss; |
| /** |
| * Bandwidth of channel. |
| */ |
| WifiChannelWidthInMhz bw; |
| /** |
| * OFDM/CCK rate code would be as per ieee std in the units of 0.5mbps. |
| * HT/VHT it would be mcs index. |
| */ |
| uint8_t rateMcsIdx; |
| /** |
| * Bitrate in units of 100 Kbps. |
| */ |
| uint32_t bitRateInKbps; |
| }; |
| |
| /** |
| * Wifi bands defined in 80211 spec. |
| */ |
| enum WifiBand : uint32_t { |
| BAND_UNSPECIFIED = 0, |
| /** |
| * 2.4 GHz. |
| */ |
| BAND_24GHZ = 1, |
| /** |
| * 5 GHz without DFS. |
| */ |
| BAND_5GHZ = 2, |
| /** |
| * 5 GHz DFS only. |
| */ |
| BAND_5GHZ_DFS = 4, |
| /** |
| * 5 GHz with DFS. |
| */ |
| BAND_5GHZ_WITH_DFS = 6, |
| /** |
| * 2.4 GHz + 5 GHz; no DFS. |
| */ |
| BAND_24GHZ_5GHZ = 3, |
| /** |
| * 2.4 GHz + 5 GHz with DFS |
| */ |
| BAND_24GHZ_5GHZ_WITH_DFS = 7 |
| }; |
| |
| /** |
| * STA specific types. |
| * TODO(b/32159498): Move to a separate sta_types.hal. |
| */ |
| /** |
| * Parameters to specify the APF capabilities of this iface. |
| */ |
| struct StaApfPacketFilterCapabilities { |
| /** |
| * Version of the packet filter interpreter supported |
| */ |
| uint32_t version; |
| /** |
| * Maximum size of the filter bytecodes in byte for an iface. |
| */ |
| uint32_t maxLength; |
| }; |
| |
| /** |
| * Parameters to specify the Background Scan capabilities of this iface. |
| */ |
| struct StaBackgroundScanCapabilities { |
| /** |
| * Maximum number of byte available for cached scan results |
| */ |
| uint32_t maxCacheSize; |
| /** |
| * Maximum number of buckets that can be supplied for a scan |
| */ |
| uint32_t maxBuckets; |
| /** |
| * Maximum number of APs that must be stored for each scan. |
| */ |
| uint32_t maxApCachePerScan; |
| /** |
| * Max reporting number of scans threshold that can be specified in the scan |
| * parameters. |
| */ |
| int32_t maxReportingThreshold; |
| }; |
| |
| /** |
| * Mask of event reporting schemes that can be specified in background scan |
| * requests. |
| */ |
| enum StaBackgroundScanBucketEventReportSchemeMask : uint32_t { |
| /** |
| * Report a scan completion event after scan. If this is not set then scan |
| * completion events must be reported if report_threshold_percent or |
| * report_threshold_num_scans is reached. |
| */ |
| EACH_SCAN = 1 << 0, |
| /** |
| * Forward scan results (beacons/probe responses + IEs) in real time to HAL, |
| * in addition to completion events. |
| * Note: To keep backward compatibility, fire completion events regardless |
| * of REPORT_EVENTS_EACH_SCAN. |
| */ |
| FULL_RESULTS = 1 << 1, |
| /** |
| * Controls if scans for this bucket must be placed in the results buffer. |
| */ |
| NO_BATCH = 1 << 2, |
| }; |
| |
| /** |
| * Max limits for background scan. |
| */ |
| enum StaScanLimits : uint32_t { |
| MAX_CHANNELS = 16, |
| MAX_BUCKETS = 16, |
| MAX_AP_CACHE_PER_SCAN = 32 |
| }; |
| |
| /** |
| * Background Scan parameters per bucket that can be specified in background |
| * scan requests. |
| */ |
| struct StaBackgroundScanBucketParameters { |
| /** |
| * Bucket index. This index is used to report results in |
| * |StaScanData.bucketsScanned|. |
| */ |
| uint32_t bucketIdx; |
| /** |
| * Bands to scan or |BAND_UNSPECIFIED| if frequencies list must be used |
| * instead. |
| */ |
| WifiBand band; |
| /** |
| * Channel frequencies (in Mhz) to scan if |band| is set to |
| * |BAND_UNSPECIFIED|. |
| * Max length: |StaScanLimits.MAX_CHANNELS|. |
| */ |
| vec<WifiChannelInMhz> frequencies; |
| /** |
| * Period at which this bucket must be scanned (in milliseconds). Must be an integer |
| * multiple of the |basePeriodInMs| specified in the BackgroundScanParameters. |
| */ |
| uint32_t periodInMs; |
| /** |
| * Bitset of |StaBackgroundScanBucketEventReportSchemeMask| values controlling |
| * when events for this bucket must be reported. |
| */ |
| bitfield<StaBackgroundScanBucketEventReportSchemeMask> eventReportScheme; |
| /** |
| * For exponential back off. If |exponentialMaxPeriodInMs| is non zero or |
| * different than period, then this bucket is an exponential backoff bucket |
| * and the scan period must grow exponentially as per formula: |
| * actual_period(N) = period * (base ^ (N/step_count)) |
| * to this maximum period (in milliseconds). |
| */ |
| uint32_t exponentialMaxPeriodInMs; |
| /** |
| * For exponential back off. multiplier: new_period=old_period * base |
| */ |
| uint32_t exponentialBase; |
| /** |
| * For exponential back off. Number of scans to perform for a given |
| * period. |
| */ |
| uint32_t exponentialStepCount; |
| }; |
| |
| /** |
| * Background Scan parameters that can be specified in background scan |
| * requests. |
| */ |
| struct StaBackgroundScanParameters { |
| /** |
| * GCD of all bucket periods (in milliseconds). |
| */ |
| uint32_t basePeriodInMs; |
| /** |
| * Maximum number of APs that must be stored for each scan. If the maximum |
| * is reached the highest RSSI results must be returned. |
| * Max length: |StaScanLimits.MAX_AP_CACHE_PER_SCAN|. |
| */ |
| uint32_t maxApPerScan; |
| /** |
| * % cache buffer filled threshold at which the host must be notified of |
| * batched scan results. |
| */ |
| uint32_t reportThresholdPercent; |
| /** |
| * Threshold at which the AP must be woken up, in number of scans. |
| */ |
| uint32_t reportThresholdNumScans; |
| /** |
| * List of buckets to be scheduled. |
| * Max length: |StaScanLimits.MAX_BUCKETS|. |
| */ |
| vec<StaBackgroundScanBucketParameters> buckets; |
| }; |
| |
| /** |
| * Packet stats for different traffic categories. |
| */ |
| struct StaLinkLayerIfacePacketStats { |
| /** |
| * Number of received unicast data packets. |
| */ |
| uint64_t rxMpdu; |
| /** |
| * Number of successfully transmitted unicast data pkts (ACK rcvd). |
| */ |
| uint64_t txMpdu; |
| /** |
| * Number of transmitted unicast data pkt losses (no ACK). |
| */ |
| uint64_t lostMpdu; |
| /** |
| * Number of transmitted unicast data retry pkts. |
| */ |
| uint64_t retries; |
| }; |
| |
| /** |
| * Iface statistics for the current connection. |
| */ |
| struct StaLinkLayerIfaceStats { |
| /** |
| * Number beacons received from the connected AP. |
| */ |
| uint32_t beaconRx; |
| /** |
| * Access Point Beacon and Management frames RSSI (averaged). |
| */ |
| int32_t avgRssiMgmt; |
| /** |
| * WME Best Effort Access Category packet counters. |
| */ |
| StaLinkLayerIfacePacketStats wmeBePktStats; |
| /** |
| * WME Background Access Category packet counters. |
| */ |
| StaLinkLayerIfacePacketStats wmeBkPktStats; |
| /** |
| * WME Video Access Category packet counters. |
| */ |
| StaLinkLayerIfacePacketStats wmeViPktStats; |
| /** |
| * WME Voice Access Category packet counters. |
| */ |
| StaLinkLayerIfacePacketStats wmeVoPktStats; |
| }; |
| |
| /** |
| * Cumulative radio statistics since collection was enabled. |
| */ |
| struct StaLinkLayerRadioStats { |
| /** |
| * Time for which the radio is awake. |
| */ |
| uint32_t onTimeInMs; |
| /** |
| * Total time for which the radio is in active transmission. |
| */ |
| uint32_t txTimeInMs; |
| /** |
| * Time for which the radio is in active tranmission per tx level. |
| */ |
| vec<uint32_t> txTimeInMsPerLevel; |
| /** |
| * Time for which the radio is in active receive. |
| */ |
| uint32_t rxTimeInMs; |
| /** |
| * Total time for which the radio is awake due to scan. |
| */ |
| uint32_t onTimeInMsForScan; |
| }; |
| |
| /** |
| * Link layer stats retrieved via |getLinkLayerStats|. |
| */ |
| struct StaLinkLayerStats { |
| StaLinkLayerIfaceStats iface; |
| vec<StaLinkLayerRadioStats> radios; |
| /** |
| * TimeStamp for each stats sample. |
| * This is the absolute milliseconds from boot when these stats were |
| * sampled. |
| */ |
| TimeStampInMs timeStampInMs; |
| }; |
| |
| /** |
| * Structure describing all the information about a single access point seen |
| * during the scan. |
| */ |
| struct StaScanResult { |
| TimeStampInUs timeStampInUs; |
| vec<uint8_t> ssid; |
| Bssid bssid; |
| Rssi rssi; |
| WifiChannelInMhz frequency; |
| uint16_t beaconPeriodInMs; |
| uint16_t capability; |
| vec<WifiInformationElement> informationElements; |
| }; |
| |
| /** |
| * Mask of flags set in the |ScanData| instance. |
| */ |
| enum StaScanDataFlagMask : int32_t { |
| /** |
| * Indicates that a scan was interrupted/did not occur so results may be |
| * incomplete. |
| */ |
| INTERRUPTED = 1 << 0, |
| }; |
| |
| /** |
| * Structure describing all the information about all the access points seen during |
| * the scan. |
| */ |
| struct StaScanData { |
| /** |
| * Bitset containing |ScanDataFlagMask| values. |
| */ |
| bitfield<StaScanDataFlagMask> flags; |
| /** |
| * Bitset where each bit indicates if the bucket with that index (starting at |
| * 0) was scanned. |
| */ |
| uint32_t bucketsScanned; |
| /** |
| * List of scan results. |
| */ |
| vec<StaScanResult> results; |
| }; |
| |
| /** |
| * Structure describing the roaming control capabilities supported. |
| */ |
| struct StaRoamingCapabilities { |
| /** |
| * Maximum number of BSSID's that may be blacklisted. |
| */ |
| uint32_t maxBlacklistSize; |
| /** |
| * Maximum number of SSID's that may be whitelisted. |
| */ |
| uint32_t maxWhitelistSize; |
| }; |
| |
| /** |
| * Structure describing the roaming control configuration. |
| */ |
| struct StaRoamingConfig { |
| /** |
| * List of BSSID's that are blacklisted for roaming. |
| */ |
| vec<Bssid> bssidBlacklist; |
| /** |
| * List of SSID's that are whitelisted for roaming. |
| */ |
| vec<Ssid> ssidWhitelist; |
| }; |
| |
| /** |
| * Enum describing the various states to set the roaming |
| * control to. |
| */ |
| enum StaRoamingState : uint8_t { |
| /** |
| * Driver/Firmware must not perform any roaming. |
| */ |
| DISABLED = 0, |
| /** |
| * Driver/Firmware is allowed to perform roaming respecting |
| * the |StaRoamingConfig| parameters set using |configureRoaming|. |
| */ |
| ENABLED = 1 |
| }; |
| |
| /** |
| * NAN specific types. |
| * TODO(b/32159498): Move to a separate nan_types.hal. |
| * |
| * References to "NAN Spec" are to the Wi-Fi Alliance "Wi-Fi Neighbor Awareness |
| * Networking (NAN) Technical Specification". |
| */ |
| |
| /** |
| * Size limits for parameters used in the NAN interface. |
| */ |
| @export |
| enum NanParamSizeLimits : uint32_t { |
| /** Minimum length of Passphrase argument for data-path configuration */ |
| MIN_PASSPHRASE_LENGTH = 8, |
| |
| /** Maximum length of Passphrase argument for data-path configuration */ |
| MAX_PASSPHRASE_LENGTH = 63, |
| }; |
| |
| /** |
| * A unique short handle provided by the client to identify individual invocations of |
| * certain API's like |IWifiNanIface.*|. |
| */ |
| typedef uint16_t CommandIdShort; |
| |
| /** |
| * NAN API response codes used in request notifications and events. |
| */ |
| enum NanStatusType : uint32_t { |
| SUCCESS = 0, |
| /** NAN Discovery Engine/Host driver failures */ |
| INTERNAL_FAILURE = 1, |
| /** NAN OTA failures */ |
| PROTOCOL_FAILURE = 2, |
| /** The publish/subscribe discovery session id is invalid */ |
| INVALID_SESSION_ID = 3, |
| /** Out of resources to fufill request */ |
| NO_RESOURCES_AVAILABLE = 4, |
| /** Invalid arguments passed */ |
| INVALID_ARGS = 5, |
| /** Invalid peer id */ |
| INVALID_PEER_ID = 6, |
| /** Invalid NAN data-path (ndp) id */ |
| INVALID_NDP_ID = 7, |
| /** Attempting to enable NAN when not available, e.g. wifi is disabled */ |
| NAN_NOT_ALLOWED = 8, |
| /** Over the air ACK not received */ |
| NO_OTA_ACK = 9, |
| /** Attempting to enable NAN when already enabled */ |
| ALREADY_ENABLED = 10, |
| /** Can't queue tx followup message foor transmission */ |
| FOLLOWUP_TX_QUEUE_FULL = 11, |
| /** Unsupported concurrency of NAN and another feature - NAN disabled */ |
| UNSUPPORTED_CONCURRENCY_NAN_DISABLED = 12 |
| }; |
| |
| /** |
| * The discovery bands supported by NAN. |
| */ |
| enum NanBandIndex : uint32_t { |
| NAN_BAND_24GHZ = 0, |
| NAN_BAND_5GHZ |
| }; |
| |
| /** |
| * The status information returned in NAN notifications. |
| */ |
| struct WifiNanStatus { |
| /** |
| * Status of the command request. |
| */ |
| NanStatusType status; |
| /** |
| * Further description of the issue causing a failure. |
| */ |
| string description; |
| }; |
| |
| /** |
| * NAN Match indication type: control how often to trigger |IWifiNanIfaceEventCallback.eventMatch| |
| * for a single discovery session - i.e. continuously discovering the same publisher with no new |
| * data. |
| */ |
| enum NanMatchAlg : uint32_t { |
| MATCH_ONCE = 0, // Only trigger |IWifiNanIfaceEventCallback.eventMatch| once |
| MATCH_CONTINUOUS, // Trigger |IWifiNanIfaceEventCallback.eventMatch| every time |
| MATCH_NEVER, // Never trigger |IWifiNanIfaceEventCallback.eventMatch| |
| }; |
| |
| /** |
| * NAN publish discovery session types. |
| */ |
| enum NanPublishType : uint32_t { |
| UNSOLICITED = 0, // Publish session broadcasts discovery packets |
| SOLICITED, // Publish session silent, responds to active subscribes queries |
| UNSOLICITED_SOLICITED, // Both |
| }; |
| |
| /** |
| * NAN transmit type used in |NanPublishType.SOLICITED| or |NanPublishType.UNSOLICITED_SOLICITED| |
| * publish discovery sessions. Describes the addressing of the packet responding to an ACTIVE |
| * subscribe query. |
| */ |
| enum NanTxType : uint32_t { |
| BROADCAST = 0, // Respond with a broadcast packet |
| UNICAST, // Respond with a unicast packet |
| }; |
| |
| /** |
| * NAN subscribe discovery session types. |
| */ |
| enum NanSubscribeType : uint32_t { |
| PASSIVE = 0, // Subscribe session scans for |NanPublishType.UNSOLICITED| publish sessions. |
| ACTIVE, // Subscribe session probes for |NanPublishType.SOLICITED| publish sessions. |
| }; |
| |
| /** |
| * NAN Service Response Filter Attribute Bit. |
| */ |
| enum NanSrfType : uint32_t { |
| BLOOM_FILTER = 0, // Use a Bloom filter. |
| PARTIAL_MAC_ADDR, // Use a list of MAC addresses. |
| }; |
| |
| /** |
| * NAN DP (data-path) channel config options. |
| */ |
| enum NanDataPathChannelCfg : uint32_t { |
| CHANNEL_NOT_REQUESTED = 0, // No channel request is specified. |
| REQUEST_CHANNEL_SETUP, // Channel request is specified - but may be overridden by firmware. |
| FORCE_CHANNEL_SETUP, // Channel request is specified and must be respected. If the firmware |
| // cannot honor the request then the data-path request is rejected. |
| }; |
| |
| /** |
| * NAN DP (data-path) security configuration options. |
| */ |
| enum NanDataPathSecurityType : uint32_t { |
| OPEN, // no security |
| PMK, // security: PMK |
| PASSPHRASE, // security: passphrase |
| }; |
| |
| /** |
| * NAN band-specific configuration. |
| */ |
| struct NanBandSpecificConfig { |
| /** |
| * RSSI values controlling clustering behavior per spec. RSSI values are specified without a sign, |
| * e.g. a value of -65dBm would be specified as 65. |
| */ |
| uint8_t rssiClose; // NAN Spec: RSSI_close |
| uint8_t rssiMiddle; // NAN Spec: RSSI_middle |
| /** |
| * RSSI value determining whether discovery is near (used if enabled in discovery by |
| * |NanDiscoveryCommonConfig.useRssiThreshold|). |
| * RSSI values are specified without a sign, e.g. a value of -65dBm would be specified as 65. |
| * NAN Spec: RSSI_close_proximity |
| */ |
| uint8_t rssiCloseProximity; |
| /** |
| * Dwell time of each discovery channel in milliseconds. If set to 0 then the firmware determines |
| * the dwell time to use. |
| */ |
| uint8_t dwellTimeMs; |
| /** |
| * Scan period of each discovery channel in seconds. If set to 0 then the firmware determines |
| * the scan period to use. |
| */ |
| uint16_t scanPeriodSec; |
| /** |
| * Specifies the discovery window interval for Sync beacons and SDF's. |
| * Valid values of DW Interval are: 1, 2, 3, 4 and 5 corresponding to 1, 2, 4, 8, and 16 DWs. |
| * Value of 0: |
| * - reserved in 2.4GHz band |
| * - no wakeup at all in 5GHz band |
| * The publish/subscribe period values don't override this device level configurations if |
| * it is specified. |
| * Configuration is only used only if |validDiscoveryWindowIntervalVal| is set to true. |
| * NAN Spec: Device Capability Attribute / 2.4 GHz DW, Device Capability Attribute / 5 GHz DW |
| */ |
| bool validDiscoveryWindowIntervalVal; |
| uint8_t discoveryWindowIntervalVal; |
| }; |
| |
| /** |
| * Debug configuration parameters. Many of these allow non-standard-compliant operation and are |
| * not intended for normal operational mode. |
| */ |
| struct NanDebugConfig { |
| /** |
| * Specification of the lower 2 bytes of the cluster ID. The cluster ID is 50-60-9a-01-00-00 to |
| * 50-60-9a-01-FF-FF. Configuration of the bottom and top values of the range (which defaults to |
| * 0x0000 and 0xFFFF respectively). |
| * Configuration is only used if |validClusterIdVals| is set to true. |
| */ |
| bool validClusterIdVals; |
| uint16_t clusterIdBottomRangeVal; |
| uint16_t clusterIdTopRangeVal; |
| /** |
| * NAN management interface address, if specified (|validIntfAddrVal| is true) then overrides any |
| * other configuration (specifically the default randomization configured by |
| * |NanConfigRequest.macAddressRandomizationIntervalSec|). |
| */ |
| bool validIntfAddrVal; |
| MacAddress intfAddrVal; |
| /** |
| * Combination of the 24 bit Organizationally Unique ID (OUI) and the 8 bit OUI Type. |
| * Used if |validOuiVal| is set to true. |
| */ |
| bool validOuiVal; |
| uint32_t ouiVal; |
| /** |
| * Force the Random Factor to the specified value for all transmitted Sync/Discovery beacons. |
| * Used if |validRandomFactorForceVal| is set to true. |
| * NAN Spec: Master Indication Attribute / Random Factor |
| */ |
| bool validRandomFactorForceVal; |
| uint8_t randomFactorForceVal; |
| /** |
| * Forces the hop-count for all transmitted Sync and Discovery Beacons NO matter the real |
| * hop-count being received over the air. Used if the |validHopCountForceVal}| flag is set to |
| * true. |
| * NAN Spec: Cluster Attribute / Anchor Master Information / Hop Count to Anchor Master |
| */ |
| bool validHopCountForceVal; |
| uint8_t hopCountForceVal; |
| /** |
| * Frequency in MHz to of the discovery channel in the specified band. Indexed by |NanBandIndex|. |
| * Used if the |validDiscoveryChannelVal| is set to true. |
| */ |
| bool validDiscoveryChannelVal; |
| WifiChannelInMhz[2] discoveryChannelMhzVal; |
| /** |
| * Specifies whether sync/discovery beacons are transmitted in the specified band. Indexed by |
| * |NanBandIndex|. Used if the |validUseBeaconsInBandVal| is set to true. |
| */ |
| bool validUseBeaconsInBandVal; |
| bool[2] useBeaconsInBandVal; |
| /** |
| * Specifies whether SDF (service discovery frames) are transmitted in the specified band. Indexed |
| * by |NanBandIndex|. Used if the |validUseSdfInBandVal| is set to true. |
| */ |
| bool validUseSdfInBandVal; |
| bool[2] useSdfInBandVal; |
| }; |
| |
| /** |
| * Configuration parameters of NAN: used when enabling and re-configuring a NAN cluster. |
| */ |
| struct NanConfigRequest { |
| /** |
| * Master preference of this device. |
| * NAN Spec: Master Indication Attribute / Master Preference |
| */ |
| uint8_t masterPref; |
| /** |
| * Controls whether or not the |IWifiNanIfaceEventCallback.eventClusterEvent| will be delivered |
| * for |NanClusterEventType.DISCOVERY_MAC_ADDRESS_CHANGED|. |
| */ |
| bool disableDiscoveryAddressChangeIndication; |
| /** |
| * Controls whether or not the |IWifiNanIfaceEventCallback.eventClusterEvent| will be delivered |
| * for |NanClusterEventType.STARTED_CLUSTER|. |
| */ |
| bool disableStartedClusterIndication; |
| /** |
| * Controls whether or not the |IWifiNanIfaceEventCallback.eventClusterEvent| will be delivered |
| * for |NanClusterEventType.JOINED_CLUSTER|. |
| */ |
| bool disableJoinedClusterIndication; |
| /** |
| * Control whether publish service IDs are included in Sync/Discovery beacons. |
| * NAN Spec: Service ID List Attribute |
| */ |
| bool includePublishServiceIdsInBeacon; |
| /** |
| * If |includePublishServiceIdsInBeacon| is true then specifies the number of publish service IDs |
| * to include in the Sync/Discovery beacons: |
| * Value = 0: include as many service IDs as will fit into the maximum allowed beacon frame size. |
| * Value must fit within 7 bits - i.e. <= 127. |
| */ |
| uint8_t numberOfPublishServiceIdsInBeacon; |
| /** |
| * Control whether subscribe service IDs are included in Sync/Discovery beacons. |
| * Spec: Subscribe Service ID List Attribute |
| */ |
| bool includeSubscribeServiceIdsInBeacon; |
| /** |
| * If |includeSubscribeServiceIdsInBeacon| is true then specifies the number of subscribe service |
| * IDs to include in the Sync/Discovery beacons: |
| * Value = 0: include as many service IDs as will fit into the maximum allowed beacon frame size. |
| * Value must fit within 7 bits - i.e. <= 127. |
| */ |
| uint8_t numberOfSubscribeServiceIdsInBeacon; |
| /** |
| * Number of samples used to calculate RSSI. |
| */ |
| uint16_t rssiWindowSize; |
| /** |
| * Specifies the interval in seconds that the NAN management interface MAC address is randomized. |
| * A value of 0 is used to disable the MAC address randomization |
| */ |
| uint32_t macAddressRandomizationIntervalSec; |
| /** |
| * Additional configuration provided per band: indexed by |NanBandIndex|. |
| */ |
| NanBandSpecificConfig[2] bandSpecificConfig; |
| }; |
| |
| /** |
| * Enable requests for NAN: start-up configuration |IWifiNanIface.enableRequest|. |
| */ |
| struct NanEnableRequest { |
| /** |
| * Enable operation in a specific band: indexed by |NanBandIndex|. |
| */ |
| bool[2] operateInBand; |
| /** |
| * Specify extent of cluster by specifying the max hop count. |
| */ |
| uint8_t hopCountMax; |
| /** |
| * Configurations of NAN cluster operation. Can also be modified at run-time using |
| * |IWifiNanIface.configRequest|. |
| */ |
| NanConfigRequest configParams; |
| /** |
| * Non-standard configurations of NAN cluster operation - useful for debugging operations. |
| */ |
| NanDebugConfig debugConfigs; |
| }; |
| |
| /** |
| * Cipher suite flags. |
| */ |
| enum NanCipherSuiteType : uint32_t { |
| NONE = 0, // No (open) security |
| SHARED_KEY_128_MASK = 1 << 0, // NCS-SK-128 |
| SHARED_KEY_256_MASK = 1 << 1 // NCS-SK-256 |
| }; |
| |
| /** |
| * Ranging in the context of discovery sessions indication controls. Controls the frequency of |
| * ranging-driven |IWifiNanIfaceEventCallback.eventMatch|. |
| */ |
| enum NanRangingIndication : uint32_t { |
| CONTINUOUS_INDICATION_MASK = 1 << 0, // trigger event on every RTT measurement |
| INGRESS_MET_MASK = 1 << 1, // trigger event only when ingress conditions met |
| EGRESS_MET_MASK = 1 << 2 // trigger event only when egress conditions met |
| }; |
| |
| /** |
| * Configuration of NAN data-path security. |
| */ |
| struct NanDataPathSecurityConfig { |
| /** |
| * Security configuration of the data-path (NDP). Security is required if not equal to |
| * |NanDataPathSecurityType.OPEN|. |
| * NAN Spec: Service Discovery Extension Attribute (SDEA) / Control / Security Required |
| */ |
| NanDataPathSecurityType securityType; |
| /** |
| * Cipher type for data-paths. If |securityType| is |NanDataPathSecurityType.OPEN| then must |
| * be set to |NanCipherSuiteType.NONE|, otherwise a non-|NanCipherSuiteType.NONE| cipher suite |
| * must be specified. |
| */ |
| NanCipherSuiteType cipherType; |
| /** |
| * Optional Pairwise Master Key (PMK). Must be specified (and is only used) if |securityType| is |
| * set to |NanDataPathSecurityType.PMK|. |
| * Ref: IEEE 802.11i |
| */ |
| uint8_t[32] pmk; |
| /** |
| * Optional Passphrase. Must be specified (and is only used) if |securityType| is set to |
| * |NanDataPathSecurityType.PASSPHRASE|. |
| * Min length: |MIN_PASSPHRASE_LENGTH| |
| * Max length: |MAX_PASSPHRASE_LENGTH| |
| * NAN Spec: Appendix: Mapping pass-phrase to PMK for NCS-SK Cipher Suites |
| */ |
| vec<uint8_t> passphrase; |
| }; |
| |
| /** |
| * Configurations of NAN discovery sessions: common to publish and subscribe discovery. |
| */ |
| struct NanDiscoveryCommonConfig { |
| /** |
| * The ID of the discovery session being configured. A value of 0 specifies a request to create |
| * a new discovery session. The new discovery session ID is returned with |
| * |IWifiNanIfaceEventCallback.notifyStartPublishResponse| or |
| * |IWifiNanIfaceEventCallback.notifyStartSubscribeResponse|. |
| * NAN Spec: Service Descriptor Attribute (SDA) / Instance ID |
| */ |
| uint8_t sessionId; |
| /** |
| * The lifetime of the discovery session in seconds. A value of 0 means run forever or until |
| * canceled using |IWifiIface.stopPublishRequest| or |IWifiIface.stopSubscribeRequest|. |
| */ |
| uint16_t ttlSec; |
| /** |
| * Indicates the interval between two Discovery Windows in which the device supporting the |
| * service is awake to transmit or receive the Service Discovery frames. Valid values of Awake |
| * DW Interval are: 1, 2, 4, 8 and 16. A value of 0 will default to 1. Does not override |
| * |NanBandSpecificConfig.discoveryWindowIntervalVal| configurations if those are specified. |
| */ |
| uint16_t discoveryWindowPeriod; |
| /** |
| * The lifetime of the discovery session in number of transmitted SDF discovery packets. A value |
| * of 0 means forever or until canceled using |IWifiIface.stopPublishRequest| or |
| * |IWifiIface.stopSubscribeRequest|. |
| */ |
| uint8_t discoveryCount; |
| /** |
| * UTF-8 encoded string identifying the service. |
| * Max length: |NanCapabilities.maxServiceNameLen|. |
| * NAN Spec: The only acceptable single-byte UTF-8 symbols for a Service Name are alphanumeric |
| * values (A-Z, a-z, 0-9), the hyphen ('-'), and the period ('.'). All valid multi-byte UTF-8 |
| * characters are acceptable in a Service Name. |
| */ |
| vec<uint8_t> serviceName; |
| /** |
| * Specifies how often to trigger |IWifiNanIfaceEventCallback.eventMatch| when continuously |
| * discovering the same discovery session (with no changes). |
| */ |
| NanMatchAlg discoveryMatchIndicator; |
| /** |
| * Arbitrary information communicated in discovery packets - there is no semantic meaning to these |
| * bytes. They are passed-through from publisher to subscriber as-is with no parsing. |
| * Max length: |NanCapabilities.maxServiceSpecificInfoLen|. |
| * NAN Spec: Service Descriptor Attribute (SDA) / Service Info |
| */ |
| vec<uint8_t> serviceSpecificInfo; |
| /** |
| * Arbitrary information communicated in discovery packets - there is no semantic meaning to these |
| * bytes. They are passed-through from publisher to subscriber as-is with no parsing. |
| * Max length: |NanCapabilities.maxExtendedServiceSpecificInfoLen|. |
| * Spec: Service Descriptor Extension Attribute (SDEA) / Service Info |
| */ |
| vec<uint8_t> extendedServiceSpecificInfo; |
| /** |
| * Ordered sequence of <length, value> pairs (|length| uses 1 byte and contains the number of |
| * bytes in the |value| field) which specify further match criteria (beyond the service name). |
| * The match behavior is specified in details in the NAN spec. |
| * Publisher: used in SOLICITED or SOLICITED_UNSOLICITED sessions. |
| * Subscriber: used in ACTIVE or PASSIVE sessions. |
| * Max length: |NanCapabilities.maxMatchFilterLen|. |
| * NAN Spec: matching_filter_rx |
| */ |
| vec<uint8_t> rxMatchFilter; |
| /** |
| * Ordered sequence of <length, value> pairs (|length| uses 1 byte and contains the number of |
| * bytes in the |value| field) which specify further match criteria (beyond the service name). |
| * The match behavior is specified in details in the NAN spec. |
| * Publisher: used if provided. |
| * Subscriber: used (if provided) only in ACTIVE sessions. |
| * Max length: |NanCapabilities.maxMatchFilterLen|. |
| * NAN Spec: matching_filter_tx and Service Descriptor Attribute (SDA) / Matching Filter |
| */ |
| vec<uint8_t> txMatchFilter; |
| /** |
| * Specifies whether or not the discovery session uses the |
| * |NanBandSpecificConfig.rssiCloseProximity| value (configured in enable/configure requests) to |
| * filter out matched discovered peers. |
| * NAN Spec: Service Descriptor Attribute / Service Control / Discovery Range Limited. |
| */ |
| bool useRssiThreshold; |
| /** |
| * Controls whether or not the |IWifiNanIfaceEventCallback.eventPublishTerminated| (for publish |
| * discovery sessions) or |IWifiNanIfaceEventCallback.eventSubscribeTerminated| (for subscribe |
| * discovery sessions) will be delivered. |
| */ |
| bool disableDiscoveryTerminationIndication; |
| /** |
| * Controls whether or not the |IWifiNanIfaceEventCallback.eventMatchExpired| will be delivered. |
| */ |
| bool disableMatchExpirationIndication; |
| /** |
| * Controls whether or not the |IWifiNanIfaceEventCallback.eventFollowupReceived| will be |
| * delivered. |
| */ |
| bool disableFollowupReceivedIndication; |
| /** |
| * Security configuration of data-paths created in the context of this discovery session. Security |
| * parameters can be overridden during the actual construction of the data-path - allowing |
| * individual data-paths to have unique PMKs or Passphrases. |
| */ |
| NanDataPathSecurityConfig securityConfig; |
| /** |
| * Specifies whether or not there is a ranging requirement in this discovery session. |
| * Ranging is only performed if all other match criteria with the peer are met. Ranging must |
| * be performed if both peers in the discovery session (publisher and subscriber) set this |
| * flag to true. Otherwise, if either peer sets this flag to false, ranging must not be performed |
| * and must not impact discovery decisions. |
| * Note: specifying that ranging is required also implies that this device must automatically |
| * accept ranging requests from peers. |
| * NAN Spec: Service Discovery Extension Attribute (SDEA) / Control / Ranging Require. |
| */ |
| bool rangingRequired; |
| /** |
| * Interval in msec between two ranging measurements. Only relevant if |rangingRequired| is true. |
| * If the Awake DW interval specified either in |discoveryWindowPeriod| or in |
| * |NanBandSpecificConfig.discoveryWindowIntervalVal| is larger than the ranging interval then |
| * priority is given to Awake DW interval. |
| */ |
| uint32_t rangingIntervalMsec; |
| /** |
| * The type of ranging feedback to be provided by discovery session matches |
| * |IWifiNanIfaceEventCallback.eventMatch|. Only relevant if |rangingRequired| is true. |
| */ |
| bitfield<NanRangingIndication> configRangingIndications; |
| /** |
| * The ingress and egress distance in cm. If ranging is enabled (|rangingEnabled| is true) then |
| * |configRangingIndications| is used to determine whether ingress and/or egress (or neither) |
| * are used to determine whether a match has occurred. |
| * NAN Spec: Service Discovery Extension Attribute (SDEA) / Ingress & Egress Range Limit |
| */ |
| uint16_t distanceIngressCm; |
| uint16_t distanceEgressCm; |
| }; |
| |
| /** |
| * Publish request: specifies a publish discovery operation. |
| */ |
| struct NanPublishRequest { |
| /** |
| * Common configuration of discovery sessions. |
| */ |
| NanDiscoveryCommonConfig baseConfigs; |
| /** |
| * The type of the publish discovery session. |
| */ |
| NanPublishType publishType; |
| /** |
| * For publishType of |NanPublishType.SOLICITED| or |NanPublishType.UNSOLICITED_SOLICITED| |
| * specifies the type of transmission used for responding to the probing subscribe discovery |
| * peer. |
| */ |
| NanTxType txType; |
| /** |
| * Specifies whether data-path requests |IWifiNanIfaceEventCallback.eventDataPathRequest| (in |
| * the context of this discovery session) are automatically accepted (if true) - in which case |
| * the Responder must not call the |IWifiNanIface.respondToDataPathIndicationRequest| method and |
| * the device must automatically accept the data-path request and complete the negotiation. |
| */ |
| bool autoAcceptDataPathRequests; |
| }; |
| |
| /** |
| * Subscribe request: specifies a subscribe discovery operation. |
| */ |
| struct NanSubscribeRequest { |
| /** |
| * Common configuration of discovery sessions. |
| */ |
| NanDiscoveryCommonConfig baseConfigs; |
| /** |
| * The type of the subscribe discovery session. |
| */ |
| NanSubscribeType subscribeType; |
| /** |
| * For |NanSubscribeType.ACTIVE| subscribe discovery sessions specify how the Service Response |
| * Filter (SRF) attribute is populated. Relevant only if |shouldUseSrf| is set to true. |
| * NAN Spec: Service Descriptor Attribute (SDA) / Service Response Filter / SRF Control / SRF Type |
| */ |
| NanSrfType srfType; |
| /** |
| * Configure whether inclusion of an address in |intfAddr| indicates that those devices should |
| * respond or the reverse. Relevant only if |shouldUseSrf| is set to true and |srfType| is set to |
| * |NanSrfType.PARTIAL_MAC_ADDR|. |
| * NAN Spec: Service Descriptor Attribute (SDA) / Service Response Filter / SRF Control / Include |
| */ |
| bool srfRespondIfInAddressSet; |
| /** |
| * Control whether the Service Response Filter (SRF) is used. |
| * NAN Spec: Service Descriptor Attribute (SDA) / Service Control / |
| * Service Response Filter Present |
| */ |
| bool shouldUseSrf; |
| /** |
| * Control whether the presence of |NanDiscoveryCommonConfig.serviceSpecificInfo| data is needed |
| * in the publisher in order to trigger service discovery, i.e. a |
| * |IWifiNanIfaceEventCallback.eventMatch|. The test is for presence of data - not for the |
| * specific contents of the data. |
| */ |
| bool isSsiRequiredForMatch; |
| /** |
| * NAN Interface Addresses constituting the Service Response Filter (SRF). |
| * Max length (number of addresses): |NanCapabilities.maxSubscribeInterfaceAddresses|. |
| * NAN Spec: Service Descriptor Attribute (SDA) / Service Response Filter / Address Set |
| */ |
| vec<MacAddress> intfAddr; |
| }; |
| |
| /** |
| * Transmit follow up message request. |
| */ |
| struct NanTransmitFollowupRequest { |
| /** |
| * ID of an active publish or subscribe discovery session. Follow-up message is transmitted in the |
| * context of the discovery session. |
| * NAN Spec: Service Descriptor Attribute (SDA) / Instance ID |
| */ |
| uint8_t discoverySessionId; |
| /** |
| * ID of the peer. Obtained as part of an earlier |IWifiNanIfaceEventCallback.eventMatch| or |
| * |IWifiNanIfaceEventCallback.eventFollowupReceived|. |
| */ |
| uint32_t peerId; |
| /** |
| * MAC address of the peer. Obtained as part of an earlier |IWifiNanIfaceEventCallback.eventMatch| |
| * or |IWifiNanIfaceEventCallback.eventFollowupReceived|. |
| */ |
| MacAddress addr; |
| /** |
| * Should the follow-up message be transmitted with a high priority. |
| */ |
| bool isHighPriority; |
| /** |
| * Should the follow-up message be transmitted in a discovery window (true) or a further |
| * availability window (false). |
| */ |
| bool shouldUseDiscoveryWindow; |
| /** |
| * Arbitrary information communicated to the peer - there is no semantic meaning to these |
| * bytes. They are passed-through from sender to receiver as-is with no parsing. |
| * Max length: |NanCapabilities.maxServiceSpecificInfoLen|. |
| * NAN Spec: Service Descriptor Attribute (SDA) / Service Info |
| */ |
| vec<uint8_t> serviceSpecificInfo; |
| /** |
| * Arbitrary information communicated in discovery packets - there is no semantic meaning to these |
| * bytes. They are passed-through from publisher to subscriber as-is with no parsing. |
| * Max length: |NanCapabilities.maxExtendedServiceSpecificInfoLen|. |
| * Spec: Service Descriptor Extension Attribute (SDEA) / Service Info |
| */ |
| vec<uint8_t> extendedServiceSpecificInfo; |
| /** |
| * Disable |IWifiNanIfaceEventCallback.eventTransmitFollowup| - i.e. do not get indication on |
| * whether the follow-up was transmitted and received successfully. |
| */ |
| bool disableFollowupResultIndication; |
| }; |
| |
| /** |
| * Data Path Initiator requesting a data-path. |
| */ |
| struct NanInitiateDataPathRequest { |
| /** |
| * ID of the peer. Obtained as part of an earlier |IWifiNanIfaceEventCallback.eventMatch| or |
| * |IWifiNanIfaceEventCallback.eventFollowupReceived|. |
| */ |
| uint32_t peerId; |
| /** |
| * NAN management interface MAC address of the peer. Obtained as part of an earlier |
| * |IWifiNanIfaceEventCallback.eventMatch| or |IWifiNanIfaceEventCallback.eventFollowupReceived|. |
| */ |
| MacAddress peerDiscMacAddr; |
| /** |
| * Config flag for channel request. |
| */ |
| NanDataPathChannelCfg channelRequestType; |
| /** |
| * Channel frequency in MHz to start data-path. Not relevant if |channelRequestType| is |
| * |NanDataPathChannelCfg.CHANNEL_NOT_REQUESTED|. |
| */ |
| WifiChannelInMhz channel; |
| /** |
| * NAN data interface name on which this data-path session is to be initiated. |
| * This must be an interface created using |IWifiNanIface.createDataInterfaceRequest|. |
| */ |
| string ifaceName; |
| /** |
| * Security configuration of the requested data-path. |
| */ |
| NanDataPathSecurityConfig securityConfig; |
| /** |
| * Arbitrary information communicated to the peer as part of the data-path setup process - there |
| * is no semantic meaning to these bytes. They are passed-through from sender to receiver as-is |
| * with no parsing. |
| * Max length: |NanCapabilities.maxAppInfoLen|. |
| * NAN Spec: Data Path Attributes / NDP Attribute / NDP Specific Info |
| */ |
| vec<uint8_t> appInfo; |
| /** |
| * A service name to be used with |passphrase| to construct a Pairwise Master Key (PMK) for the |
| * data-path. Only relevant when a data-path is requested which is not associated with a NAN |
| * discovery session - e.g. using out-of-band discovery. |
| * Constraints: same as |NanDiscoveryCommonConfig.serviceName| |
| * NAN Spec: Appendix: Mapping pass-phrase to PMK for NCS-SK Cipher Suites |
| */ |
| vec<uint8_t> serviceNameOutOfBand; |
| }; |
| |
| /** |
| * Response to a data-path request from a peer. |
| */ |
| struct NanRespondToDataPathIndicationRequest { |
| /** |
| * Accept (true) or reject (false) the request. |
| * NAN Spec: Data Path Attributes / NDP Attribute / Type and Status |
| */ |
| bool acceptRequest; |
| /** |
| * ID of the data-path (NDP) for which we're responding - obtained as part of the request in |
| * |IWifiNanIfaceEventCallback.eventDataPathRequest|. |
| */ |
| uint32_t ndpInstanceId; |
| /** |
| * NAN data interface name on which this data-path session is to be started. |
| * This must be an interface created using |IWifiNanIface.createDataInterfaceRequest|. |
| */ |
| string ifaceName; |
| /** |
| * Security configuration of the requested data-path. |
| */ |
| NanDataPathSecurityConfig securityConfig; |
| /** |
| * Arbitrary information communicated to the peer as part of the data-path setup process - there |
| * is no semantic meaning to these bytes. They are passed-through from sender to receiver as-is |
| * with no parsing. |
| * Max length: |NanCapabilities.maxAppInfoLen|. |
| * NAN Spec: Data Path Attributes / NDP Attribute / NDP Specific Info |
| */ |
| vec<uint8_t> appInfo; |
| /** |
| * A service name to be used with |passphrase| to construct a Pairwise Master Key (PMK) for the |
| * data-path. Only relevant when a data-path is requested which is not associated with a NAN |
| * discovery session - e.g. using out-of-band discovery. |
| * Constraints: same as |NanDiscoveryCommonConfig.serviceName| |
| * NAN Spec: Appendix: Mapping pass-phrase to PMK for NCS-SK Cipher Suites |
| */ |
| vec<uint8_t> serviceNameOutOfBand; |
| }; |
| |
| /** |
| * NDP Capabilities response. |
| */ |
| struct NanCapabilities { |
| /** |
| * Maximum number of clusters which the device can join concurrently. |
| */ |
| uint32_t maxConcurrentClusters; |
| /** |
| * Maximum number of concurrent publish discovery sessions. |
| */ |
| uint32_t maxPublishes; |
| /** |
| * Maximum number of concurrent subscribe discovery sessions. |
| */ |
| uint32_t maxSubscribes; |
| /** |
| * Maximum length (in bytes) of service name. |
| */ |
| uint32_t maxServiceNameLen; |
| /** |
| * Maximum length (in bytes) of individual match filters. |
| */ |
| uint32_t maxMatchFilterLen; |
| /** |
| * Maximum length (in bytes) of aggregate match filters across all active sessions. |
| */ |
| uint32_t maxTotalMatchFilterLen; |
| /** |
| * Maximum length (in bytes) of the service specific info field. |
| */ |
| uint32_t maxServiceSpecificInfoLen; |
| /** |
| * Maximum length (in bytes) of the extended service specific info field. |
| */ |
| uint32_t maxExtendedServiceSpecificInfoLen; |
| /** |
| * Maximum number of data interfaces (NDI) which can be created concurrently on the device. |
| */ |
| uint32_t maxNdiInterfaces; |
| /** |
| * Maximum number of data paths (NDP) which can be created concurrently on the device, across all |
| * data interfaces (NDI). |
| */ |
| uint32_t maxNdpSessions; |
| /** |
| * Maximum length (in bytes) of application info field (used in data-path negotiations). |
| */ |
| uint32_t maxAppInfoLen; |
| /** |
| * Maximum number of transmitted followup messages which can be queued by the firmware. |
| */ |
| uint32_t maxQueuedTransmitFollowupMsgs; |
| /** |
| * Maximum number MAC interface addresses which can be specified to a subscribe discovery session. |
| */ |
| uint32_t maxSubscribeInterfaceAddresses; |
| /** |
| * The set of supported Cipher suites. The |NanCipherSuiteType| bit fields are used. |
| */ |
| bitfield<NanCipherSuiteType> supportedCipherSuites; |
| }; |
| |
| /** |
| * Match indication structure |
| */ |
| struct NanMatchInd { |
| /** |
| * Publish or subscribe discovery session ID of an existing discovery session. |
| * NAN Spec: Service Descriptor Attribute (SDA) / Instance ID |
| */ |
| uint8_t discoverySessionId; |
| /** |
| * A unique ID of the peer. Can be subsequently used in |IWifiNanIface.transmitFollowupRequest| or |
| * to set up a data-path. |
| */ |
| uint32_t peerId; |
| /** |
| * The NAN Discovery (management) MAC address of the peer. |
| */ |
| MacAddress addr; |
| /** |
| * The arbitrary information contained in the |NanDiscoveryCommonConfig.serviceSpecificInfo| of |
| * the peer's discovery session configuration. |
| * Max length: |NanCapabilities.maxServiceSpecificInfoLen|. |
| * NAN Spec: Service Descriptor Attribute (SDA) / Service Info |
| */ |
| vec<uint8_t> serviceSpecificInfo; |
| /** |
| * Arbitrary information communicated in discovery packets - there is no semantic meaning to these |
| * bytes. They are passed-through from publisher to subscriber as-is with no parsing. |
| * Max length: |NanCapabilities.maxExtendedServiceSpecificInfoLen|. |
| * Spec: Service Descriptor Extension Attribute (SDEA) / Service Info |
| */ |
| vec<uint8_t> extendedServiceSpecificInfo; |
| /** |
| * The match filter from the discovery packet (publish or subscribe) which caused service |
| * discovery. Matches the |NanDiscoveryCommonConfig.txMatchFilter| of the peer's Unsolicited |
| * publish message or of the local device's Active subscribe message. |
| * Max length: |NanCapabilities.maxMatchFilterLen|. |
| * NAN Spec: Service Descriptor Attribute (SDA) / Matching Filter |
| */ |
| vec<uint8_t> matchFilter; |
| /** |
| * Indicates the type of discovery: true if match occurred on a Beacon frame, false if the match |
| * occurred on a Service Discovery Frames (SDF). |
| */ |
| bool matchOccuredInBeaconFlag; |
| /** |
| * Flag to indicate firmware is out of resource and that it can no longer track this Service Name. |
| * Indicates that while |IWifiNanIfaceEventCallback.eventMatch| will be received, the |
| * |NanDiscoveryCommonConfig.discoveryMatchIndicator| configuration will not be honored. |
| */ |
| bool outOfResourceFlag; |
| /** |
| * If RSSI filtering was enabled using |NanDiscoveryCommonConfig.useRssiThreshold| in discovery |
| * session setup then this field contains the received RSSI value. It will contain 0 if RSSI |
| * filtering was not enabled. |
| * RSSI values are returned without sign, e.g. -70dBm will be returned as 70. |
| */ |
| uint8_t rssiValue; |
| /** |
| * Cipher type for data-paths constructed in the context of this discovery session. Valid if |
| * |peerRequiresSecurityEnabledInNdp| is true. |
| */ |
| NanCipherSuiteType peerCipherType; |
| /** |
| * Indicates whether or not the peer requires security enabled in any data-path (NDP) constructed |
| * in the context of this discovery session. The |cipherType| specifies the cipher type for such |
| * data-paths. |
| * NAN Spec: Service Discovery Extension Attribute (SDEA) / Control / Security Required |
| */ |
| bool peerRequiresSecurityEnabledInNdp; |
| /** |
| * Indicates whether or not the peer requires (and hence allows) ranging in the context of this |
| * discovery session. |
| * Note that ranging is only performed if all other match criteria with the peer are met. |
| * NAN Spec: Service Discovery Extension Attribute (SDEA) / Control / Ranging Require. |
| */ |
| bool peerRequiresRanging; |
| /** |
| * Ranging indication supersedes the NanMatchAlg specification. |
| * Ex: If NanMatchAlg is MATCH_ONCE, but ranging indications is continuous then continuous |
| * match notifications will be received (with ranging information). |
| * Ranging indication data is provided if Ranging required is enabled in the discovery |
| * specification and: |
| * 1) continuous ranging specified. |
| * 2) ingress/egress specified and: |
| * - notify once for ingress >= ingress_distance and egress <= egress_distance, |
| * - same for ingress_egress_both |
| * If the Awake DW intervals are larger than the ranging intervals then priority is given to the |
| * device DW intervals. |
| * |
| * If ranging was required and executed contains the distance to the peer in CM. The |
| * |rangingIndicationType| field specifies the event which triggered ranging. |
| */ |
| uint32_t rangingMeasurementInCm; |
| /** |
| * The ranging event(s) which triggered the ranging. E.g. can indicate that continuous ranging was |
| * requested, or else that an ingress event occurred. |
| */ |
| bitfield<NanRangingIndication> rangingIndicationType; |
| }; |
| |
| /** |
| * Followup message received from peer indication structure. |
| */ |
| struct NanFollowupReceivedInd { |
| /** |
| * Discovery session (publish or subscribe) ID of a previously created discovery session. The |
| * message is received in the context of this discovery session. |
| * NAN Spec: Service Descriptor Attribute (SDA) / Instance ID |
| */ |
| uint8_t discoverySessionId; |
| /** |
| * A unique ID of the peer. Can be subsequently used in |IWifiNanIface.transmitFollowupRequest| or |
| * to set up a data-path. |
| */ |
| uint32_t peerId; |
| /** |
| * The NAN Discovery (management) MAC address of the peer. |
| */ |
| MacAddress addr; |
| /** |
| * Indicates whether received in a further availability window (FAW) if true, or in a discovery |
| * window (DW) if false. |
| */ |
| bool receivedInFaw; |
| /** |
| * Received message from the peer - there is no semantic meaning to these bytes. They are |
| * passed-through from sender to receiver as-is with no parsing. |
| * Max length: |NanCapabilities.maxServiceSpecificInfoLen|. |
| * NAN Spec: Service Descriptor Attribute (SDA) / Service Info |
| */ |
| vec<uint8_t> serviceSpecificInfo; |
| /** |
| * Arbitrary information communicated in discovery packets - there is no semantic meaning to these |
| * bytes. They are passed-through from publisher to subscriber as-is with no parsing. |
| * Max length: |NanCapabilities.maxExtendedServiceSpecificInfoLen|. |
| * Spec: Service Descriptor Extension Attribute (SDEA) / Service Info |
| */ |
| vec<uint8_t> extendedServiceSpecificInfo; |
| }; |
| |
| /** |
| * Event types for a cluster event indication. |
| */ |
| enum NanClusterEventType : uint32_t { |
| /** |
| * Management/discovery interface MAC address has changed (e.g. due to randomization or at |
| * startup). |
| */ |
| DISCOVERY_MAC_ADDRESS_CHANGED = 0, |
| /** |
| * A new cluster has been formed by this device. |
| */ |
| STARTED_CLUSTER, |
| /** |
| * This device has joined an existing cluster. |
| */ |
| JOINED_CLUSTER, |
| }; |
| |
| /** |
| * Cluster event indication structure: triggered on events impacting how this device is |
| * visible to peers - cluster forming, joining a new cluster, or changing of the MAC address. |
| */ |
| struct NanClusterEventInd { |
| /** |
| * Event type causing the cluster event indication to be triggered. |
| */ |
| NanClusterEventType eventType; |
| /** |
| * MAC Address associated with the corresponding event. |
| */ |
| MacAddress addr; |
| }; |
| |
| /** |
| * NAN Data path request Indication Message structure. |
| * Event indication received by an intended Responder when a Nan Data request initiated by an |
| * Initiator. |
| */ |
| struct NanDataPathRequestInd { |
| /** |
| * ID of an active publish or subscribe discovery session - the data-path request is in the |
| * context of this discovery session. |
| * NAN Spec: Data Path Attributes / NDP Attribute / Publish ID |
| */ |
| uint8_t discoverySessionId; |
| /** |
| * MAC address of the Initiator peer. This is the MAC address of the peer's management/discovery |
| * NAN interface. |
| */ |
| MacAddress peerDiscMacAddr; |
| /** |
| * ID of the data-path - used to identify the data-path in further negotiation/APIs. |
| */ |
| uint32_t ndpInstanceId; |
| /** |
| * Specifies whether or not security is required by the peer for the data-path being created. |
| * NAN Spec: Data Path Attributes / NDP Attribute / NDP Control / Security Present |
| */ |
| bool securityRequired; |
| /** |
| * Arbitrary information communicated from the peer as part of the data-path setup process - there |
| * is no semantic meaning to these bytes. They are passed-through from sender to receiver as-is |
| * with no parsing. |
| * Max length: |NanCapabilities.maxAppInfoLen|. |
| * NAN Spec: Data Path Attributes / NDP Attribute / NDP Specific Info |
| */ |
| vec<uint8_t> appInfo; |
| }; |
| |
| /** |
| * NAN Data path confirmation Indication structure. |
| * Event indication is received on both initiator and responder side when negotiation for a |
| * data-path finish: on success or failure. |
| */ |
| struct NanDataPathConfirmInd { |
| /** |
| * ID of the data-path. |
| */ |
| uint32_t ndpInstanceId; |
| /** |
| * Indicates whether the data-path setup succeeded (true) or failed (false). |
| */ |
| bool dataPathSetupSuccess; |
| /** |
| * MAC address of the peer's data-interface (not it's management/discovery interface). |
| */ |
| MacAddress peerNdiMacAddr; |
| /** |
| * Arbitrary information communicated from the peer as part of the data-path setup process - there |
| * is no semantic meaning to these bytes. They are passed-through from sender to receiver as-is |
| * with no parsing. |
| * Max length: |NanCapabilities.maxAppInfoLen|. |
| * NAN Spec: Data Path Attributes / NDP Attribute / NDP Specific Info |
| */ |
| vec<uint8_t> appInfo; |
| /** |
| * Failure reason if |dataPathSetupSuccess| is false. |
| */ |
| WifiNanStatus status; |
| }; |
| |
| /** |
| * RTT specific types. |
| * TODO(b/32159498): Move to a separate rtt_types.hal. |
| */ |
| /** |
| * Ranging status. |
| */ |
| enum RttStatus : uint32_t { |
| SUCCESS = 0, |
| /** General failure status */ |
| FAILURE = 1, |
| /** Target STA does not respond to request */ |
| FAIL_NO_RSP = 2, |
| /** Request rejected. Applies to 2-sided RTT only */ |
| FAIL_REJECTED = 3, |
| FAIL_NOT_SCHEDULED_YET = 4, |
| /** Timing measurement times out */ |
| FAIL_TM_TIMEOUT = 5, |
| /** Target on different channel, cannot range */ |
| FAIL_AP_ON_DIFF_CHANNEL = 6, |
| /** Ranging not supported */ |
| FAIL_NO_CAPABILITY = 7, |
| /** Request aborted for unknown reason */ |
| ABORTED = 8, |
| /** Invalid T1-T4 timestamp */ |
| FAIL_INVALID_TS = 9, |
| /** 11mc protocol failed */ |
| FAIL_PROTOCOL = 10, |
| /** Request could not be scheduled */ |
| FAIL_SCHEDULE = 11, |
| /** Responder cannot collaborate at time of request */ |
| FAIL_BUSY_TRY_LATER = 12, |
| /** Bad request args */ |
| INVALID_REQ = 13, |
| /** WiFi not enabled. */ |
| NO_WIFI = 14, |
| /** Responder overrides param info, cannot range with new params */ |
| FAIL_FTM_PARAM_OVERRIDE = 15, |
| }; |
| |
| /** |
| * RTT peer types. |
| */ |
| enum RttPeerType : uint32_t { |
| AP = 0x1, |
| STA = 0x2, |
| P2P_GO = 0x3, |
| P2P_CLIENT = 0x4, |
| NAN = 0x5, |
| }; |
| |
| /** |
| * RTT Measurement Bandwidth. |
| */ |
| enum RttBw : uint32_t { |
| BW_5MHZ = 0x01, |
| BW_10MHZ = 0x02, |
| BW_20MHZ = 0x04, |
| BW_40MHZ = 0x08, |
| BW_80MHZ = 0x10, |
| BW_160MHZ = 0x20, |
| }; |
| |
| /** |
| * RTT Measurement Preamble. |
| */ |
| enum RttPreamble : uint32_t { |
| LEGACY = 0x1, |
| HT = 0x2, |
| VHT = 0x4, |
| }; |
| |
| /** |
| * RTT Types. |
| */ |
| enum RttType : uint32_t { |
| ONE_SIDED = 0x1, |
| TWO_SIDED = 0x2, |
| }; |
| |
| /** |
| * RTT configuration. |
| */ |
| struct RttConfig { |
| /** |
| * Peer device mac address. |
| */ |
| MacAddress addr; |
| /** |
| * 1-sided or 2-sided RTT. |
| */ |
| RttType type; |
| /** |
| * Optional - peer device hint (STA, P2P, AP). |
| */ |
| RttPeerType peer; |
| /** |
| * Required for STA-AP mode, optional for P2P, NBD etc. |
| */ |
| WifiChannelInfo channel; |
| /** |
| * Time interval between bursts (units: 100 ms). |
| * Applies to 1-sided and 2-sided RTT multi-burst requests. |
| * Range: 0-31, 0: no preference by initiator (2-sided RTT). |
| */ |
| uint32_t burstPeriod; |
| /** |
| * Total number of RTT bursts to be executed. It will be |
| * specified in the same way as the parameter "Number of |
| * Burst Exponent" found in the FTM frame format. It |
| * applies to both: 1-sided RTT and 2-sided RTT. Valid |
| * values are 0 to 15 as defined in 802.11mc std. |
| * 0 means single shot |
| * The implication of this parameter on the maximum |
| * number of RTT results is the following: |
| * for 1-sided RTT: max num of RTT results = (2^num_burst)*(num_frames_per_burst) |
| * for 2-sided RTT: max num of RTT results = (2^num_burst)*(num_frames_per_burst - 1) |
| */ |
| uint32_t numBurst; |
| /** |
| * Num of frames per burst. |
| * Minimum value = 1, Maximum value = 31 |
| * For 2-sided this equals the number of FTM frames |
| * to be attempted in a single burst. This also |
| * equals the number of FTM frames that the |
| * initiator will request that the responder send |
| * in a single frame. |
| */ |
| uint32_t numFramesPerBurst; |
| /** |
| * Number of retries for a failed RTT frame. |
| * Applies to 1-sided RTT only. Minimum value = 0, Maximum value = 3 |
| */ |
| uint32_t numRetriesPerRttFrame; |
| /** Following fields are only valid for 2-side RTT. */ |
| /** |
| * Maximum number of retries that the initiator can |
| * retry an FTMR frame. |
| * Minimum value = 0, Maximum value = 3 |
| */ |
| uint32_t numRetriesPerFtmr; |
| /** |
| * Whether to request location civic info or not. |
| */ |
| bool mustRequestLci; |
| /** |
| * Whether to request location civic records or not. |
| */ |
| bool mustRequestLcr; |
| /** |
| * Applies to 1-sided and 2-sided RTT. Valid values will |
| * be 2-11 and 15 as specified by the 802.11mc std for |
| * the FTM parameter burst duration. In a multi-burst |
| * request, if responder overrides with larger value, |
| * the initiator will return failure. In a single-burst |
| * request if responder overrides with larger value, |
| * the initiator will sent TMR_STOP to terminate RTT |
| * at the end of the burst_duration it requested. |
| */ |
| uint32_t burstDuration; |
| /** |
| * RTT preamble to be used in the RTT frames. |
| */ |
| RttPreamble preamble; |
| /** |
| * RTT BW to be used in the RTT frames. |
| */ |
| RttBw bw; |
| }; |
| |
| /** |
| * RTT results. |
| */ |
| struct RttResult { |
| /** |
| * Peer device mac address. |
| */ |
| MacAddress addr; |
| /** |
| * Burst number in a multi-burst request. |
| */ |
| uint32_t burstNum; |
| /** |
| * Total RTT measurement frames attempted. |
| */ |
| uint32_t measurementNumber; |
| /** |
| * Total successful RTT measurement frames. |
| */ |
| uint32_t successNumber; |
| /** |
| * Maximum number of "FTM frames per burst" supported by |
| * the responder STA. Applies to 2-sided RTT only. |
| * If reponder overrides with larger value: |
| * - for single-burst request initiator will truncate the |
| * larger value and send a TMR_STOP after receiving as |
| * many frames as originally requested. |
| * - for multi-burst request, initiator will return |
| * failure right away. |
| */ |
| uint8_t numberPerBurstPeer; |
| /** |
| * Ranging status. |
| */ |
| RttStatus status; |
| /** |
| * When status == RTT_STATUS_FAIL_BUSY_TRY_LATER, |
| * this will be the time provided by the responder as to |
| * when the request can be tried again. Applies to 2-sided |
| * RTT only. In sec, 1-31sec. |
| */ |
| uint8_t retryAfterDuration; |
| /** |
| * RTT type. |
| */ |
| RttType type; |
| /** |
| * Average rssi in 0.5 dB steps e.g. 143 implies -71.5 dB. |
| */ |
| Rssi rssi; |
| /** |
| * Rssi spread in 0.5 dB steps e.g. 5 implies 2.5 dB spread (optional). |
| */ |
| Rssi rssiSpread; |
| /** |
| * 1-sided RTT: TX rate of RTT frame. |
| * 2-sided RTT: TX rate of initiator's Ack in response to FTM frame. |
| */ |
| WifiRateInfo txRate; |
| /** |
| * 1-sided RTT: TX rate of Ack from other side. |
| * 2-sided RTT: TX rate of FTM frame coming from responder. |
| */ |
| WifiRateInfo rxRate; |
| /** |
| * Round trip time in picoseconds |
| */ |
| TimeSpanInPs rtt; |
| /** |
| * Rtt standard deviation in picoseconds. |
| */ |
| TimeSpanInPs rttSd; |
| /** |
| * Difference between max and min rtt times recorded in picoseconds. |
| */ |
| TimeSpanInPs rttSpread; |
| /** |
| * Distance in mm (optional). |
| */ |
| int32_t distanceInMm; |
| /** |
| * Standard deviation in mm (optional). |
| */ |
| int32_t distanceSdInMm; |
| /** |
| * Difference between max and min distance recorded in mm (optional). |
| */ |
| int32_t distanceSpreadInMm; |
| /** |
| * Time of the measurement (in microseconds since boot). |
| */ |
| TimeStampInUs timeStampInUs; |
| /** |
| * in ms, actual time taken by the FW to finish one burst |
| * measurement. Applies to 1-sided and 2-sided RTT. |
| */ |
| uint32_t burstDurationInMs; |
| /** |
| * Number of bursts allowed by the responder. Applies |
| * to 2-sided RTT only. |
| */ |
| uint32_t negotiatedBurstNum; |
| /** |
| * for 11mc only. |
| */ |
| WifiInformationElement lci; |
| /** |
| * for 11mc only. |
| */ |
| WifiInformationElement lcr; |
| }; |
| |
| /** |
| * RTT Capabilities. |
| */ |
| struct RttCapabilities { |
| /** |
| * if 1-sided rtt data collection is supported. |
| */ |
| bool rttOneSidedSupported; |
| /** |
| * if ftm rtt data collection is supported. |
| */ |
| bool rttFtmSupported; |
| /** |
| * if initiator supports LCI request. Applies to 2-sided RTT. |
| */ |
| bool lciSupported; |
| /** |
| * if initiator supports LCR request. Applies to 2-sided RTT. |
| */ |
| bool lcrSupported; |
| /** |
| * if 11mc responder mode is supported. |
| */ |
| bool responderSupported; |
| /** |
| * Bit mask indicates what preamble is supported by initiator. |
| * Combination of |RttPreamble| values. |
| */ |
| bitfield<RttPreamble> preambleSupport; |
| /** |
| * Bit mask indicates what BW is supported by initiator. |
| * Combination of |RttBw| values. |
| */ |
| bitfield<RttBw> bwSupport; |
| /** |
| * Draft 11mc spec version supported by chip. |
| * For instance, version 4.0 must be 40 and version 4.3 must be 43 etc. |
| */ |
| uint8_t mcVersion; |
| }; |
| |
| /** |
| * Structs for setting LCI/LCR information to be provided to a requestor. |
| */ |
| enum RttMotionPattern : uint32_t { |
| /** |
| * Not expected to change location. |
| */ |
| NOT_EXPECTED = 0, |
| /** |
| * Expected to change location. |
| */ |
| EXPECTED = 1, |
| /** |
| * Movement pattern unknown. |
| */ |
| UNKNOWN = 2, |
| }; |
| |
| /** |
| * Movement pattern unknown. |
| */ |
| struct RttLciInformation { |
| /** |
| * latitude in degrees * 2^25 , 2's complement. |
| */ |
| int64_t latitude; |
| /** |
| * longitude in degrees * 2^25 , 2's complement. |
| */ |
| int64_t longitude; |
| /** |
| * Altitude in units of 1/256 m. |
| */ |
| int32_t altitude; |
| /** |
| * As defined in Section 2.3.2 of IETF RFC 6225. |
| */ |
| uint8_t latitudeUnc; |
| /** |
| * As defined in Section 2.3.2 of IETF RFC 6225. |
| */ |
| uint8_t longitudeUnc; |
| /** |
| * As defined in Section 2.4.5 from IETF RFC 6225. |
| */ |
| uint8_t altitudeUnc; |
| /** Following element for configuring the Z subelement. */ |
| /** |
| * Motion pattern type. |
| */ |
| RttMotionPattern motionPattern; |
| /** |
| * Floor in units of 1/16th of floor. 0x80000000 if unknown. |
| */ |
| int32_t floor; |
| /** |
| * in units of 1/64 m. |
| */ |
| int32_t heightAboveFloor; |
| /** |
| * in units of 1/64 m. 0 if unknown |
| */ |
| int32_t heightUnc; |
| }; |
| |
| struct RttLcrInformation { |
| /** |
| * Country code symbol. |
| */ |
| int8_t[2] countryCode; |
| /** |
| * Civic info to be copied in FTM frame. |
| */ |
| string civicInfo; |
| }; |
| |
| /*** |
| * RTT Responder information |
| */ |
| struct RttResponder { |
| WifiChannelInfo channel; |
| RttPreamble preamble; |
| }; |
| |
| /** |
| * Debug data specific types. |
| * TODO(b/32159498): Move to a separate debug_types.hal. |
| */ |
| typedef uint32_t WifiRingBufferId; |
| |
| /** |
| * Flags describing each debug ring buffer. |
| */ |
| enum WifiDebugRingBufferFlags : uint32_t { |
| HAS_BINARY_ENTRIES = 1 << 0, |
| HAS_ASCII_ENTRIES = 1 << 1, |
| HAS_PER_PACKET_ENTRIES = 1 << 2, |
| }; |
| |
| /** |
| * Struct describing each debug ring buffer supported by |
| * the device. |
| */ |
| struct WifiDebugRingBufferStatus { |
| /** |
| * Name of this debug ring buffer. |
| */ |
| string ringName; |
| /** |
| * Combination of |WifiDebugRingBufferFlags| values. |
| */ |
| uint32_t flags; |
| /** |
| * Unique integer representing the ring. |
| */ |
| WifiRingBufferId ringId; |
| /** |
| * Total memory size allocated for the buffer. |
| */ |
| uint32_t sizeInBytes; |
| /** |
| * Amount of free space in the buffer. |
| */ |
| uint32_t freeSizeInBytes; |
| /** |
| * Verbose level for ring buffer. |
| */ |
| uint32_t verboseLevel; |
| }; |
| |
| /** |
| * Verbose logging level to set for each debug ring buffer supported |
| * by the device. |
| */ |
| enum WifiDebugRingBufferVerboseLevel : uint32_t { |
| /** |
| * Level 0 corresponds to no collection, and it makes log handler |
| * stop by no more events from driver. |
| */ |
| NONE = 0, |
| /** |
| * Level 1 correspond to normal log level, with minimal user impact. |
| * This is the default value. |
| */ |
| DEFAULT = 1, |
| /** |
| * Level 2 is enabled when user is lazily trying to reproduce a problem, |
| * wifi performances and power can be impacted but device should not |
| * otherwise be significantly impacted. |
| */ |
| VERBOSE = 2, |
| /** |
| * Level 3 is used when trying to actively debug a problem. |
| * This will cause sever performance degradation. |
| */ |
| EXCESSIVE = 3 |
| }; |
| |
| /** |
| * Enum describing the fate of the TX packets. |
| */ |
| enum WifiDebugTxPacketFate : uint32_t { |
| /** |
| * Sent over air and ACKed. |
| */ |
| ACKED, |
| /** |
| * Sent over air but not ACKed. (Normal for broadcast/multicast.) |
| */ |
| SENT, |
| /** |
| * Queued within firmware, but not yet sent over air. |
| */ |
| FW_QUEUED, |
| /** |
| * Dropped by firmware as invalid. E.g. bad source address, bad checksum, |
| * or invalid for current state. |
| */ |
| FW_DROP_INVALID, |
| /** |
| * Dropped by firmware due to lack of buffer space. |
| */ |
| FW_DROP_NOBUFS, |
| /** |
| * Dropped by firmware for any other reason. Includes frames that were sent |
| * by driver to firmware, but unaccounted for by firmware. |
| */ |
| FW_DROP_OTHER, |
| /** |
| * Queued within driver, not yet sent to firmware. |
| */ |
| DRV_QUEUED, |
| /** |
| * Dropped by driver as invalid. E.g. bad source address, or invalid for |
| * current state. |
| */ |
| DRV_DROP_INVALID, |
| /** |
| * Dropped by driver due to lack of buffer space. |
| */ |
| DRV_DROP_NOBUFS, |
| /** |
| * Dropped by driver for any other reason. |
| */ |
| DRV_DROP_OTHER, |
| }; |
| |
| /** |
| * Enum describing the fate of the TX packets. |
| */ |
| enum WifiDebugRxPacketFate : uint32_t { |
| /** |
| * Valid and delivered to network stack (e.g., netif_rx()). |
| */ |
| SUCCESS, |
| /** |
| * Queued within firmware, but not yet sent to driver. |
| */ |
| FW_QUEUED, |
| /** |
| * Dropped by firmware due to host-programmable filters. |
| */ |
| FW_DROP_FILTER, |
| /** |
| * Dropped by firmware as invalid. E.g. bad checksum, decrypt failed, |
| * or invalid for current state. |
| */ |
| FW_DROP_INVALID, |
| /** |
| * Dropped by firmware due to lack of buffer space. |
| */ |
| FW_DROP_NOBUFS, |
| /** |
| * Dropped by firmware for any other reason. |
| */ |
| FW_DROP_OTHER, |
| /** |
| * Queued within driver, not yet delivered to network stack. |
| */ |
| DRV_QUEUED, |
| /** |
| * Dropped by driver due to filter rules. |
| */ |
| DRV_DROP_FILTER, |
| /** |
| * Dropped by driver as invalid. E.g. not permitted in current state. |
| */ |
| DRV_DROP_INVALID, |
| /** |
| * Dropped by driver due to lack of buffer space. |
| */ |
| DRV_DROP_NOBUFS, |
| /** |
| * Dropped by driver for any other reason. |
| */ |
| DRV_DROP_OTHER, |
| }; |
| |
| /** |
| * Type of frame transmitted/received. |
| */ |
| enum WifiDebugPacketFateFrameType : uint32_t { |
| UNKNOWN, |
| ETHERNET_II, |
| MGMT_80211, |
| }; |
| |
| /** |
| * Information regarding the frame transmitted/received. |
| */ |
| struct WifiDebugPacketFateFrameInfo { |
| /** |
| * The type of MAC-layer frame that this frame_info holds. |
| * - For data frames, use FRAME_TYPE_ETHERNET_II. |
| * - For management frames, use FRAME_TYPE_80211_MGMT. |
| * - If the type of the frame is unknown, use FRAME_TYPE_UNKNOWN. |
| */ |
| WifiDebugPacketFateFrameType frameType; |
| /** |
| * The number of bytes included in |frameContent|. |
| * If the frame contents are missing (e.g. RX frame dropped in firmware), |
| * |frameLen| must be set to 0. |
| */ |
| uint64_t frameLen; |
| /** |
| * Host clock when this frame was received by the driver (either outbound |
| * from the host network stack, or inbound from the firmware). |
| * - The timestamp must be taken from a clock which includes time the host |
| * spent suspended (e.g. ktime_get_boottime()). |
| * - If no host timestamp is available (e.g. RX frame was dropped in firmware), |
| * this field must be set to 0. |
| */ |
| TimeStampInUs driverTimestampUsec; |
| /** |
| * Firmware clock when this frame was received by the firmware |
| * (either outbound from the host, or inbound from a remote station). |
| * - The timestamp must be taken from a clock which includes time firmware |
| * spent suspended (if applicable). |
| * - If no firmware timestamp is available (e.g. TX frame was dropped by |
| * driver), this field must be set to 0. |
| * - Consumers of |frameInfo| must not assume any synchronization between |
| * driver and firmware clocks. |
| */ |
| TimeStampInUs firmwareTimestampUsec; |
| /** |
| * Actual frame content. This is the raw bytes of the corresponding packet. |
| * - Should be provided for TX frames originated by the host. |
| * - Should be provided for RX frames received by the driver. |
| * - Optionally provided for TX frames originated by firmware. |
| * (At discretion of HAL implementation.) |
| * - Optionally provided for RX frames dropped in firmware. |
| * (At discretion of HAL implementation.) |
| * - If frame content is not provided, |frameLen| must be set to 0. |
| */ |
| vec<uint8_t> frameContent; |
| }; |
| |
| /** |
| * Struct describing packet fate report for each Tx frame. |
| */ |
| struct WifiDebugTxPacketFateReport { |
| WifiDebugTxPacketFate fate; |
| WifiDebugPacketFateFrameInfo frameInfo; |
| }; |
| |
| /** |
| * Struct describing packet fate report for each Rx frame. |
| */ |
| struct WifiDebugRxPacketFateReport { |
| WifiDebugRxPacketFate fate; |
| WifiDebugPacketFateFrameInfo frameInfo; |
| }; |
| |
| /** |
| * Struct capturing the count of all rx packets that caused |
| * host wakeup. |
| */ |
| struct WifiDebugHostWakeReasonRxPacketDetails { |
| /** |
| * Total rx unicast packet which woke up host. |
| */ |
| uint32_t rxUnicastCnt; |
| /** |
| * Total rx multicast packet which woke up host. |
| */ |
| uint32_t rxMulticastCnt; |
| /** |
| * Total rx broadcast packet which woke up host. |
| */ |
| uint32_t rxBroadcastCnt; |
| }; |
| |
| /** |
| * Struct capturing the count of all rx multicast packets that caused |
| * host wakeup. |
| */ |
| struct WifiDebugHostWakeReasonRxMulticastPacketDetails { |
| /** |
| * Rx wake packet was ipv4 multicast. |
| */ |
| uint32_t ipv4RxMulticastAddrCnt; |
| /** |
| * Rx wake packet was ipv6 multicast. |
| */ |
| uint32_t ipv6RxMulticastAddrCnt; |
| /** |
| * Rx wake packet was non-ipv4 and non-ipv6. |
| */ |
| uint32_t otherRxMulticastAddrCnt; |
| }; |
| |
| /** |
| * Struct capturing the count of all rx ICMP packets that caused |
| * host wakeup. |
| */ |
| struct WifiDebugHostWakeReasonRxIcmpPacketDetails { |
| /** |
| * Wake icmp packet count. |
| */ |
| uint32_t icmpPkt; |
| /** |
| * Wake icmp6 packet count. |
| */ |
| uint32_t icmp6Pkt; |
| /** |
| * Wake icmp6 RA packet count. |
| */ |
| uint32_t icmp6Ra; |
| /** |
| * Wake icmp6 NA packet count. |
| */ |
| uint32_t icmp6Na; |
| /** |
| * Wake icmp6 NS packet count. |
| */ |
| uint32_t icmp6Ns; |
| }; |
| |
| /** |
| * Structure capturing the count of all the wireless related host wakeup. |
| * This is used to capture all the reasons why the host processor |
| * (WLAN driver) was woken up by the WLAN firmware. |
| * These stats may be used to debug any power issues caused due to frequent |
| * wakeup of the host processor by the WLAN firmware. |
| */ |
| struct WifiDebugHostWakeReasonStats { |
| /** |
| * Total count of cmd/event wakes. |
| * These must account for all wakeups due to WLAN management |
| * commands/events received over the air. |
| */ |
| uint32_t totalCmdEventWakeCnt; |
| /** |
| * Vector of wake counts per cmd/event type. |
| * The number of command types and their meaning is only understood by the |
| * vendor. |
| */ |
| vec<uint32_t> cmdEventWakeCntPerType; |
| /** |
| * Total count of drive/fw wakes. |
| * These must account for all wakeups due to local driver/firmware |
| * interactions. These include all vendor implementation specific |
| * interactions like any heart-beat monitoring, Bus management, etc. |
| */ |
| uint32_t totalDriverFwLocalWakeCnt; |
| /** |
| * Vector of wake counts per driver/firmware interaction type. |
| * The number of command types and their meaning is only understood by the |
| * vendor. |
| */ |
| vec<uint32_t> driverFwLocalWakeCntPerType; |
| /** |
| * Total data rx packets, that woke up host. |
| */ |
| uint32_t totalRxPacketWakeCnt; |
| WifiDebugHostWakeReasonRxPacketDetails rxPktWakeDetails; |
| WifiDebugHostWakeReasonRxMulticastPacketDetails rxMulticastPkWakeDetails; |
| WifiDebugHostWakeReasonRxIcmpPacketDetails rxIcmpPkWakeDetails; |
| }; |