mirror of
https://github.com/pine64/bl_iot_sdk.git
synced 2024-09-15 15:14:03 +00:00
357 lines
13 KiB
C
357 lines
13 KiB
C
/*
|
|
* Copyright (c) 2020 Bouffalolab.
|
|
*
|
|
* This file is part of
|
|
* *** Bouffalolab Software Dev Kit ***
|
|
* (see www.bouffalolab.com).
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without modification,
|
|
* are permitted provided that the following conditions are met:
|
|
* 1. Redistributions of source code must retain the above copyright notice,
|
|
* this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
* this list of conditions and the following disclaimer in the documentation
|
|
* and/or other materials provided with the distribution.
|
|
* 3. Neither the name of Bouffalo Lab nor the names of its contributors
|
|
* may be used to endorse or promote products derived from this software
|
|
* without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
#ifndef __CFG80211_H__
|
|
#define __CFG80211_H__
|
|
#include "ieee80211.h"
|
|
#include "nl80211.h"
|
|
#include "lmac_types.h"
|
|
|
|
|
|
/**
|
|
****************************************************************************************
|
|
*
|
|
* @file cfg80211.h
|
|
* Copyright (C) Bouffalo Lab 2016-2018
|
|
*
|
|
****************************************************************************************
|
|
*/
|
|
|
|
enum ieee80211_channel_flags {
|
|
IEEE80211_CHAN_DISABLED = 1<<0,
|
|
IEEE80211_CHAN_NO_IR = 1<<1,
|
|
/* hole at 1<<2 */
|
|
IEEE80211_CHAN_RADAR = 1<<3,
|
|
IEEE80211_CHAN_NO_HT40PLUS = 1<<4,
|
|
IEEE80211_CHAN_NO_HT40MINUS = 1<<5,
|
|
IEEE80211_CHAN_NO_OFDM = 1<<6,
|
|
IEEE80211_CHAN_NO_80MHZ = 1<<7,
|
|
IEEE80211_CHAN_NO_160MHZ = 1<<8,
|
|
IEEE80211_CHAN_INDOOR_ONLY = 1<<9,
|
|
IEEE80211_CHAN_IR_CONCURRENT = 1<<10,
|
|
IEEE80211_CHAN_NO_20MHZ = 1<<11,
|
|
IEEE80211_CHAN_NO_10MHZ = 1<<12,
|
|
};
|
|
|
|
/**
|
|
* struct ieee80211_channel - channel definition
|
|
*
|
|
* This structure describes a single channel for use
|
|
* with cfg80211.
|
|
*
|
|
* @center_freq: center frequency in MHz
|
|
* @hw_value: hardware-specific value for the channel
|
|
* @flags: channel flags from &enum ieee80211_channel_flags.
|
|
* @orig_flags: channel flags at registration time, used by regulatory
|
|
* code to support devices with additional restrictions
|
|
* @band: band this channel belongs to.
|
|
* @max_antenna_gain: maximum antenna gain in dBi
|
|
* @max_power: maximum transmission power (in dBm)
|
|
* @max_reg_power: maximum regulatory transmission power (in dBm)
|
|
* @beacon_found: helper to regulatory code to indicate when a beacon
|
|
* has been found on this channel. Use regulatory_hint_found_beacon()
|
|
* to enable this, this is useful only on 5 GHz band.
|
|
* @orig_mag: internal use
|
|
* @orig_mpwr: internal use
|
|
* @dfs_state: current state of this channel. Only relevant if radar is required
|
|
* on this channel.
|
|
* @dfs_state_entered: timestamp (jiffies) when the dfs state was entered.
|
|
* @dfs_cac_ms: DFS CAC time in milliseconds, this is valid for DFS channels.
|
|
*/
|
|
struct ieee80211_channel {
|
|
enum nl80211_band band;
|
|
u16 center_freq;
|
|
u16 hw_value;
|
|
u32 flags;
|
|
int max_antenna_gain;
|
|
int max_power;
|
|
int max_reg_power;
|
|
bool beacon_found;
|
|
u32 orig_flags;
|
|
int orig_mag, orig_mpwr;
|
|
enum nl80211_dfs_state dfs_state;
|
|
unsigned long dfs_state_entered;
|
|
unsigned int dfs_cac_ms;
|
|
};
|
|
|
|
struct ieee80211_dot_d {
|
|
char *code;
|
|
int channel_num;
|
|
const struct ieee80211_channel *channels;
|
|
};
|
|
|
|
/**
|
|
* struct ieee80211_sta_ht_cap - STA's HT capabilities
|
|
*
|
|
* This structure describes most essential parameters needed
|
|
* to describe 802.11n HT capabilities for an STA.
|
|
*
|
|
* @ht_supported: is HT supported by the STA
|
|
* @cap: HT capabilities map as described in 802.11n spec
|
|
* @ampdu_factor: Maximum A-MPDU length factor
|
|
* @ampdu_density: Minimum A-MPDU spacing
|
|
* @mcs: Supported MCS rates
|
|
*/
|
|
struct ieee80211_sta_ht_cap {
|
|
u16 cap; /* use IEEE80211_HT_CAP_ */
|
|
bool ht_supported;
|
|
u8 ampdu_factor;
|
|
u8 ampdu_density;
|
|
struct ieee80211_mcs_info mcs;
|
|
};
|
|
|
|
/*
|
|
* wireless hardware and networking interfaces structures
|
|
* and registration/helper functions
|
|
*/
|
|
|
|
/**
|
|
* enum wiphy_flags - wiphy capability flags
|
|
*
|
|
* @WIPHY_FLAG_NETNS_OK: if not set, do not allow changing the netns of this
|
|
* wiphy at all
|
|
* @WIPHY_FLAG_PS_ON_BY_DEFAULT: if set to true, powersave will be enabled
|
|
* by default -- this flag will be set depending on the kernel's default
|
|
* on wiphy_new(), but can be changed by the driver if it has a good
|
|
* reason to override the default
|
|
* @WIPHY_FLAG_4ADDR_AP: supports 4addr mode even on AP (with a single station
|
|
* on a VLAN interface)
|
|
* @WIPHY_FLAG_4ADDR_STATION: supports 4addr mode even as a station
|
|
* @WIPHY_FLAG_CONTROL_PORT_PROTOCOL: This device supports setting the
|
|
* control port protocol ethertype. The device also honours the
|
|
* control_port_no_encrypt flag.
|
|
* @WIPHY_FLAG_IBSS_RSN: The device supports IBSS RSN.
|
|
* @WIPHY_FLAG_MESH_AUTH: The device supports mesh authentication by routing
|
|
* auth frames to userspace. See @NL80211_MESH_SETUP_USERSPACE_AUTH.
|
|
* @WIPHY_FLAG_SUPPORTS_SCHED_SCAN: The device supports scheduled scans.
|
|
* @WIPHY_FLAG_SUPPORTS_FW_ROAM: The device supports roaming feature in the
|
|
* firmware.
|
|
* @WIPHY_FLAG_AP_UAPSD: The device supports uapsd on AP.
|
|
* @WIPHY_FLAG_SUPPORTS_TDLS: The device supports TDLS (802.11z) operation.
|
|
* @WIPHY_FLAG_TDLS_EXTERNAL_SETUP: The device does not handle TDLS (802.11z)
|
|
* link setup/discovery operations internally. Setup, discovery and
|
|
* teardown packets should be sent through the @NL80211_CMD_TDLS_MGMT
|
|
* command. When this flag is not set, @NL80211_CMD_TDLS_OPER should be
|
|
* used for asking the driver/firmware to perform a TDLS operation.
|
|
* @WIPHY_FLAG_HAVE_AP_SME: device integrates AP SME
|
|
* @WIPHY_FLAG_REPORTS_OBSS: the device will report beacons from other BSSes
|
|
* when there are virtual interfaces in AP mode by calling
|
|
* cfg80211_report_obss_beacon().
|
|
* @WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD: When operating as an AP, the device
|
|
* responds to probe-requests in hardware.
|
|
* @WIPHY_FLAG_OFFCHAN_TX: Device supports direct off-channel TX.
|
|
* @WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL: Device supports remain-on-channel call.
|
|
* @WIPHY_FLAG_SUPPORTS_5_10_MHZ: Device supports 5 MHz and 10 MHz channels.
|
|
* @WIPHY_FLAG_HAS_CHANNEL_SWITCH: Device supports channel switch in
|
|
* beaconing mode (AP, IBSS, Mesh, ...).
|
|
* @WIPHY_FLAG_HAS_STATIC_WEP: The device supports static WEP key installation
|
|
* before connection.
|
|
*/
|
|
enum wiphy_flags {
|
|
/* use hole at 0 */
|
|
/* use hole at 1 */
|
|
/* use hole at 2 */
|
|
WIPHY_FLAG_NETNS_OK = BIT(3),
|
|
WIPHY_FLAG_PS_ON_BY_DEFAULT = BIT(4),
|
|
WIPHY_FLAG_4ADDR_AP = BIT(5),
|
|
WIPHY_FLAG_4ADDR_STATION = BIT(6),
|
|
WIPHY_FLAG_CONTROL_PORT_PROTOCOL = BIT(7),
|
|
WIPHY_FLAG_IBSS_RSN = BIT(8),
|
|
WIPHY_FLAG_MESH_AUTH = BIT(10),
|
|
WIPHY_FLAG_SUPPORTS_SCHED_SCAN = BIT(11),
|
|
/* use hole at 12 */
|
|
WIPHY_FLAG_SUPPORTS_FW_ROAM = BIT(13),
|
|
WIPHY_FLAG_AP_UAPSD = BIT(14),
|
|
WIPHY_FLAG_SUPPORTS_TDLS = BIT(15),
|
|
WIPHY_FLAG_TDLS_EXTERNAL_SETUP = BIT(16),
|
|
WIPHY_FLAG_HAVE_AP_SME = BIT(17),
|
|
WIPHY_FLAG_REPORTS_OBSS = BIT(18),
|
|
WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD = BIT(19),
|
|
WIPHY_FLAG_OFFCHAN_TX = BIT(20),
|
|
WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL = BIT(21),
|
|
WIPHY_FLAG_SUPPORTS_5_10_MHZ = BIT(22),
|
|
WIPHY_FLAG_HAS_CHANNEL_SWITCH = BIT(23),
|
|
WIPHY_FLAG_HAS_STATIC_WEP = BIT(24),
|
|
};
|
|
|
|
/**
|
|
* struct key_params - key information
|
|
*
|
|
* Information about a key
|
|
*
|
|
* @key: key material
|
|
* @key_len: length of key material
|
|
* @cipher: cipher suite selector
|
|
* @seq: sequence counter (IV/PN) for TKIP and CCMP keys, only used
|
|
* with the get_key() callback, must be in little endian,
|
|
* length given by @seq_len.
|
|
* @seq_len: length of @seq.
|
|
*/
|
|
struct key_params {
|
|
const u8 *key;
|
|
const u8 *seq;
|
|
int key_len;
|
|
int seq_len;
|
|
u32 cipher;
|
|
};
|
|
|
|
/**
|
|
* struct cfg80211_crypto_settings - Crypto settings
|
|
* @wpa_versions: indicates which, if any, WPA versions are enabled
|
|
* (from enum nl80211_wpa_versions)
|
|
* @cipher_group: group key cipher suite (or 0 if unset)
|
|
* @n_ciphers_pairwise: number of AP supported unicast ciphers
|
|
* @ciphers_pairwise: unicast key cipher suites
|
|
* @n_akm_suites: number of AKM suites
|
|
* @akm_suites: AKM suites
|
|
* @control_port: Whether user space controls IEEE 802.1X port, i.e.,
|
|
* sets/clears %NL80211_STA_FLAG_AUTHORIZED. If true, the driver is
|
|
* required to assume that the port is unauthorized until authorized by
|
|
* user space. Otherwise, port is marked authorized by default.
|
|
* @control_port_ethertype: the control port protocol that should be
|
|
* allowed through even on unauthorized ports
|
|
* @control_port_no_encrypt: TRUE to prevent encryption of control port
|
|
* protocol frames.
|
|
* @wep_keys: static WEP keys, if not NULL points to an array of
|
|
* CFG80211_MAX_WEP_KEYS WEP keys
|
|
* @wep_tx_key: key index (0..3) of the default TX static WEP key
|
|
*/
|
|
struct cfg80211_crypto_settings {
|
|
u32 wpa_versions;
|
|
u32 cipher_group;
|
|
int n_ciphers_pairwise;
|
|
u32 ciphers_pairwise[NL80211_MAX_NR_CIPHER_SUITES];
|
|
int n_akm_suites;
|
|
u32 akm_suites[NL80211_MAX_NR_AKM_SUITES];
|
|
bool control_port;
|
|
__be16 control_port_ethertype;
|
|
bool control_port_no_encrypt;
|
|
struct key_params *wep_keys;
|
|
int wep_tx_key;
|
|
};
|
|
|
|
/**
|
|
* struct cfg80211_bss_select_adjust - BSS selection with RSSI adjustment.
|
|
*
|
|
* @band: band of BSS which should match for RSSI level adjustment.
|
|
* @delta: value of RSSI level adjustment.
|
|
*/
|
|
struct cfg80211_bss_select_adjust {
|
|
enum nl80211_band band;
|
|
s8 delta;
|
|
};
|
|
|
|
/**
|
|
* struct cfg80211_bss_selection - connection parameters for BSS selection.
|
|
*
|
|
* @behaviour: requested BSS selection behaviour.
|
|
* @param: parameters for requestion behaviour.
|
|
* @band_pref: preferred band for %NL80211_BSS_SELECT_ATTR_BAND_PREF.
|
|
* @adjust: parameters for %NL80211_BSS_SELECT_ATTR_RSSI_ADJUST.
|
|
*/
|
|
struct cfg80211_bss_selection {
|
|
enum nl80211_bss_select_attr behaviour;
|
|
union {
|
|
enum nl80211_band band_pref;
|
|
struct cfg80211_bss_select_adjust adjust;
|
|
} param;
|
|
};
|
|
|
|
/**
|
|
* struct cfg80211_connect_params - Connection parameters
|
|
*
|
|
* This structure provides information needed to complete IEEE 802.11
|
|
* authentication and association.
|
|
*
|
|
* @channel: The channel to use or %NULL if not specified (auto-select based
|
|
* on scan results)
|
|
* @channel_hint: The channel of the recommended BSS for initial connection or
|
|
* %NULL if not specified
|
|
* @bssid: The AP BSSID or %NULL if not specified (auto-select based on scan
|
|
* results)
|
|
* @bssid_hint: The recommended AP BSSID for initial connection to the BSS or
|
|
* %NULL if not specified. Unlike the @bssid parameter, the driver is
|
|
* allowed to ignore this @bssid_hint if it has knowledge of a better BSS
|
|
* to use.
|
|
* @ssid: SSID
|
|
* @ssid_len: Length of ssid in octets
|
|
* @auth_type: Authentication type (algorithm)
|
|
* @ie: IEs for association request
|
|
* @ie_len: Length of assoc_ie in octets
|
|
* @privacy: indicates whether privacy-enabled APs should be used
|
|
* @mfp: indicate whether management frame protection is used
|
|
* @crypto: crypto settings
|
|
* @key_len: length of WEP key for shared key authentication
|
|
* @key_idx: index of WEP key for shared key authentication
|
|
* @key: WEP key for shared key authentication
|
|
* @flags: See &enum cfg80211_assoc_req_flags
|
|
* @bg_scan_period: Background scan period in seconds
|
|
* or -1 to indicate that default value is to be used.
|
|
* @ht_capa: HT Capabilities over-rides. Values set in ht_capa_mask
|
|
* will be used in ht_capa. Un-supported values will be ignored.
|
|
* @ht_capa_mask: The bits of ht_capa which are to be used.
|
|
* @vht_capa: VHT Capability overrides
|
|
* @vht_capa_mask: The bits of vht_capa which are to be used.
|
|
* @pbss: if set, connect to a PCP instead of AP. Valid for DMG
|
|
* networks.
|
|
* @bss_select: criteria to be used for BSS selection.
|
|
* @prev_bssid: previous BSSID, if not %NULL use reassociate frame. This is used
|
|
* to indicate a request to reassociate within the ESS instead of a request
|
|
* do the initial association with the ESS. When included, this is set to
|
|
* the BSSID of the current association, i.e., to the value that is
|
|
* included in the Current AP address field of the Reassociation Request
|
|
* frame.
|
|
*/
|
|
struct cfg80211_connect_params {
|
|
struct ieee80211_channel channel;
|
|
struct ieee80211_channel *channel_hint;
|
|
const u8 *bssid;
|
|
const u8 *bssid_hint;
|
|
const u8 *ssid;
|
|
size_t ssid_len;
|
|
enum nl80211_auth_type auth_type;
|
|
const u8 *ie;
|
|
size_t ie_len;
|
|
bool privacy;
|
|
enum nl80211_mfp mfp;
|
|
struct cfg80211_crypto_settings crypto;
|
|
const u8 *key;
|
|
const u8 *pmk;
|
|
u8 key_len, pmk_len, key_idx;
|
|
u32 flags;
|
|
int bg_scan_period;
|
|
struct ieee80211_ht_cap ht_capa;
|
|
struct ieee80211_ht_cap ht_capa_mask;
|
|
bool pbss;
|
|
struct cfg80211_bss_selection bss_select;
|
|
const u8 *prev_bssid;
|
|
};
|
|
|
|
#endif
|