Merge tag 'mac80211-next-for-davem-2017-04-28' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
Johannes Berg says: ==================== Another set of patches for -next: * API support for concurrent scheduled scan requests * API changes for roaming reporting * BSS max idle support in mac80211 * API changes for TX status reporting in mac80211 * API changes for RX rate reporting in mac80211 * rewrite monitor logic to prepare for BPF filters * bugfix for rare devices without 2.4 GHz support * a bugfix for recent DFS changes * some further cleanups The API changes are actually at a nice time, since it's typically quiet just before the merge window, and trees can be synchronized easily during it. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
此提交包含在:
@@ -1613,11 +1613,15 @@ static inline void get_random_mask_addr(u8 *buf, const u8 *addr, const u8 *mask)
|
||||
/**
|
||||
* struct cfg80211_match_set - sets of attributes to match
|
||||
*
|
||||
* @ssid: SSID to be matched; may be zero-length for no match (RSSI only)
|
||||
* @ssid: SSID to be matched; may be zero-length in case of BSSID match
|
||||
* or no match (RSSI only)
|
||||
* @bssid: BSSID to be matched; may be all-zero BSSID in case of SSID match
|
||||
* or no match (RSSI only)
|
||||
* @rssi_thold: don't report scan results below this threshold (in s32 dBm)
|
||||
*/
|
||||
struct cfg80211_match_set {
|
||||
struct cfg80211_ssid ssid;
|
||||
u8 bssid[ETH_ALEN];
|
||||
s32 rssi_thold;
|
||||
};
|
||||
|
||||
@@ -1662,6 +1666,7 @@ struct cfg80211_bss_select_adjust {
|
||||
* (others are filtered out).
|
||||
* If ommited, all results are passed.
|
||||
* @n_match_sets: number of match sets
|
||||
* @results_wk: worker for processing results notification.
|
||||
* @wiphy: the wiphy this was for
|
||||
* @dev: the interface
|
||||
* @scan_start: start time of the scheduled scan
|
||||
@@ -1678,6 +1683,8 @@ struct cfg80211_bss_select_adjust {
|
||||
* @rcu_head: RCU callback used to free the struct
|
||||
* @owner_nlportid: netlink portid of owner (if this should is a request
|
||||
* owned by a particular socket)
|
||||
* @nl_owner_dead: netlink owner socket was closed - this request be freed
|
||||
* @list: for keeping list of requests.
|
||||
* @delay: delay in seconds to use before starting the first scan
|
||||
* cycle. The driver may ignore this parameter and start
|
||||
* immediately (or at any other time), if this feature is not
|
||||
@@ -1720,8 +1727,11 @@ struct cfg80211_sched_scan_request {
|
||||
struct wiphy *wiphy;
|
||||
struct net_device *dev;
|
||||
unsigned long scan_start;
|
||||
bool report_results;
|
||||
struct rcu_head rcu_head;
|
||||
u32 owner_nlportid;
|
||||
bool nl_owner_dead;
|
||||
struct list_head list;
|
||||
|
||||
/* keep last */
|
||||
struct ieee80211_channel *channels[0];
|
||||
@@ -2678,8 +2688,7 @@ struct cfg80211_nan_func {
|
||||
* indication of requesting reassociation.
|
||||
* In both the driver-initiated and new connect() call initiated roaming
|
||||
* cases, the result of roaming is indicated with a call to
|
||||
* cfg80211_roamed() or cfg80211_roamed_bss().
|
||||
* (invoked with the wireless_dev mutex held)
|
||||
* cfg80211_roamed(). (invoked with the wireless_dev mutex held)
|
||||
* @update_connect_params: Update the connect parameters while connected to a
|
||||
* BSS. The updated parameters can be used by driver/firmware for
|
||||
* subsequent BSS selection (roaming) decisions and to form the
|
||||
@@ -2765,12 +2774,12 @@ struct cfg80211_nan_func {
|
||||
* @set_cqm_txe_config: Configure connection quality monitor TX error
|
||||
* thresholds.
|
||||
* @sched_scan_start: Tell the driver to start a scheduled scan.
|
||||
* @sched_scan_stop: Tell the driver to stop an ongoing scheduled scan. This
|
||||
* call must stop the scheduled scan and be ready for starting a new one
|
||||
* before it returns, i.e. @sched_scan_start may be called immediately
|
||||
* after that again and should not fail in that case. The driver should
|
||||
* not call cfg80211_sched_scan_stopped() for a requested stop (when this
|
||||
* method returns 0.)
|
||||
* @sched_scan_stop: Tell the driver to stop an ongoing scheduled scan with
|
||||
* given request id. This call must stop the scheduled scan and be ready
|
||||
* for starting a new one before it returns, i.e. @sched_scan_start may be
|
||||
* called immediately after that again and should not fail in that case.
|
||||
* The driver should not call cfg80211_sched_scan_stopped() for a requested
|
||||
* stop (when this method returns 0).
|
||||
*
|
||||
* @mgmt_frame_register: Notify driver that a management frame type was
|
||||
* registered. The callback is allowed to sleep.
|
||||
@@ -3068,7 +3077,8 @@ struct cfg80211_ops {
|
||||
int (*sched_scan_start)(struct wiphy *wiphy,
|
||||
struct net_device *dev,
|
||||
struct cfg80211_sched_scan_request *request);
|
||||
int (*sched_scan_stop)(struct wiphy *wiphy, struct net_device *dev);
|
||||
int (*sched_scan_stop)(struct wiphy *wiphy, struct net_device *dev,
|
||||
u64 reqid);
|
||||
|
||||
int (*set_rekey_data)(struct wiphy *wiphy, struct net_device *dev,
|
||||
struct cfg80211_gtk_rekey_data *data);
|
||||
@@ -3213,7 +3223,7 @@ enum wiphy_flags {
|
||||
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 11 */
|
||||
/* use hole at 12 */
|
||||
WIPHY_FLAG_SUPPORTS_FW_ROAM = BIT(13),
|
||||
WIPHY_FLAG_AP_UAPSD = BIT(14),
|
||||
@@ -3551,6 +3561,8 @@ struct wiphy_iftype_ext_capab {
|
||||
* this variable determines its size
|
||||
* @max_scan_ssids: maximum number of SSIDs the device can scan for in
|
||||
* any given scan
|
||||
* @max_sched_scan_reqs: maximum number of scheduled scan requests that
|
||||
* the device can run concurrently.
|
||||
* @max_sched_scan_ssids: maximum number of SSIDs the device can scan
|
||||
* for in any given scheduled scan
|
||||
* @max_match_sets: maximum number of match sets the device can handle
|
||||
@@ -3687,6 +3699,7 @@ struct wiphy {
|
||||
|
||||
int bss_priv_size;
|
||||
u8 max_scan_ssids;
|
||||
u8 max_sched_scan_reqs;
|
||||
u8 max_sched_scan_ssids;
|
||||
u8 max_match_sets;
|
||||
u16 max_scan_ie_len;
|
||||
@@ -3988,6 +4001,7 @@ struct cfg80211_cqm_config;
|
||||
* @event_list: (private) list for internal event processing
|
||||
* @event_lock: (private) lock for event list
|
||||
* @owner_nlportid: (private) owner socket port ID
|
||||
* @nl_owner_dead: (private) owner socket went away
|
||||
* @cqm_config: (private) nl80211 RSSI monitor state
|
||||
*/
|
||||
struct wireless_dev {
|
||||
@@ -4037,12 +4051,13 @@ struct wireless_dev {
|
||||
|
||||
u32 ap_unexpected_nlportid;
|
||||
|
||||
u32 owner_nlportid;
|
||||
bool nl_owner_dead;
|
||||
|
||||
bool cac_started;
|
||||
unsigned long cac_start_time;
|
||||
unsigned int cac_time_ms;
|
||||
|
||||
u32 owner_nlportid;
|
||||
|
||||
#ifdef CONFIG_CFG80211_WEXT
|
||||
/* wext data */
|
||||
struct {
|
||||
@@ -4551,31 +4566,34 @@ void cfg80211_scan_done(struct cfg80211_scan_request *request,
|
||||
* cfg80211_sched_scan_results - notify that new scan results are available
|
||||
*
|
||||
* @wiphy: the wiphy which got scheduled scan results
|
||||
* @reqid: identifier for the related scheduled scan request
|
||||
*/
|
||||
void cfg80211_sched_scan_results(struct wiphy *wiphy);
|
||||
void cfg80211_sched_scan_results(struct wiphy *wiphy, u64 reqid);
|
||||
|
||||
/**
|
||||
* cfg80211_sched_scan_stopped - notify that the scheduled scan has stopped
|
||||
*
|
||||
* @wiphy: the wiphy on which the scheduled scan stopped
|
||||
* @reqid: identifier for the related scheduled scan request
|
||||
*
|
||||
* The driver can call this function to inform cfg80211 that the
|
||||
* scheduled scan had to be stopped, for whatever reason. The driver
|
||||
* is then called back via the sched_scan_stop operation when done.
|
||||
*/
|
||||
void cfg80211_sched_scan_stopped(struct wiphy *wiphy);
|
||||
void cfg80211_sched_scan_stopped(struct wiphy *wiphy, u64 reqid);
|
||||
|
||||
/**
|
||||
* cfg80211_sched_scan_stopped_rtnl - notify that the scheduled scan has stopped
|
||||
*
|
||||
* @wiphy: the wiphy on which the scheduled scan stopped
|
||||
* @reqid: identifier for the related scheduled scan request
|
||||
*
|
||||
* The driver can call this function to inform cfg80211 that the
|
||||
* scheduled scan had to be stopped, for whatever reason. The driver
|
||||
* is then called back via the sched_scan_stop operation when done.
|
||||
* This function should be called with rtnl locked.
|
||||
*/
|
||||
void cfg80211_sched_scan_stopped_rtnl(struct wiphy *wiphy);
|
||||
void cfg80211_sched_scan_stopped_rtnl(struct wiphy *wiphy, u64 reqid);
|
||||
|
||||
/**
|
||||
* cfg80211_inform_bss_frame_data - inform cfg80211 of a received BSS frame
|
||||
@@ -5375,52 +5393,47 @@ cfg80211_connect_timeout(struct net_device *dev, const u8 *bssid,
|
||||
gfp, timeout_reason);
|
||||
}
|
||||
|
||||
/**
|
||||
* struct cfg80211_roam_info - driver initiated roaming information
|
||||
*
|
||||
* @channel: the channel of the new AP
|
||||
* @bss: entry of bss to which STA got roamed (may be %NULL if %bssid is set)
|
||||
* @bssid: the BSSID of the new AP (may be %NULL if %bss is set)
|
||||
* @req_ie: association request IEs (maybe be %NULL)
|
||||
* @req_ie_len: association request IEs length
|
||||
* @resp_ie: association response IEs (may be %NULL)
|
||||
* @resp_ie_len: assoc response IEs length
|
||||
*/
|
||||
struct cfg80211_roam_info {
|
||||
struct ieee80211_channel *channel;
|
||||
struct cfg80211_bss *bss;
|
||||
const u8 *bssid;
|
||||
const u8 *req_ie;
|
||||
size_t req_ie_len;
|
||||
const u8 *resp_ie;
|
||||
size_t resp_ie_len;
|
||||
};
|
||||
|
||||
/**
|
||||
* cfg80211_roamed - notify cfg80211 of roaming
|
||||
*
|
||||
* @dev: network device
|
||||
* @channel: the channel of the new AP
|
||||
* @bssid: the BSSID of the new AP
|
||||
* @req_ie: association request IEs (maybe be %NULL)
|
||||
* @req_ie_len: association request IEs length
|
||||
* @resp_ie: association response IEs (may be %NULL)
|
||||
* @resp_ie_len: assoc response IEs length
|
||||
* @info: information about the new BSS. struct &cfg80211_roam_info.
|
||||
* @gfp: allocation flags
|
||||
*
|
||||
* It should be called by the underlying driver whenever it roamed
|
||||
* from one AP to another while connected.
|
||||
*/
|
||||
void cfg80211_roamed(struct net_device *dev,
|
||||
struct ieee80211_channel *channel,
|
||||
const u8 *bssid,
|
||||
const u8 *req_ie, size_t req_ie_len,
|
||||
const u8 *resp_ie, size_t resp_ie_len, gfp_t gfp);
|
||||
|
||||
/**
|
||||
* cfg80211_roamed_bss - notify cfg80211 of roaming
|
||||
*
|
||||
* @dev: network device
|
||||
* @bss: entry of bss to which STA got roamed
|
||||
* @req_ie: association request IEs (maybe be %NULL)
|
||||
* @req_ie_len: association request IEs length
|
||||
* @resp_ie: association response IEs (may be %NULL)
|
||||
* @resp_ie_len: assoc response IEs length
|
||||
* @gfp: allocation flags
|
||||
*
|
||||
* This is just a wrapper to notify cfg80211 of roaming event with driver
|
||||
* passing bss to avoid a race in timeout of the bss entry. It should be
|
||||
* called by the underlying driver whenever it roamed from one AP to another
|
||||
* while connected. Drivers which have roaming implemented in firmware
|
||||
* may use this function to avoid a race in bss entry timeout where the bss
|
||||
* entry of the new AP is seen in the driver, but gets timed out by the time
|
||||
* it is accessed in __cfg80211_roamed() due to delay in scheduling
|
||||
* This function may be called with the driver passing either the BSSID of the
|
||||
* new AP or passing the bss entry to avoid a race in timeout of the bss entry.
|
||||
* It should be called by the underlying driver whenever it roamed from one AP
|
||||
* to another while connected. Drivers which have roaming implemented in
|
||||
* firmware should pass the bss entry to avoid a race in bss entry timeout where
|
||||
* the bss entry of the new AP is seen in the driver, but gets timed out by the
|
||||
* time it is accessed in __cfg80211_roamed() due to delay in scheduling
|
||||
* rdev->event_work. In case of any failures, the reference is released
|
||||
* either in cfg80211_roamed_bss() or in __cfg80211_romed(), Otherwise,
|
||||
* it will be released while diconneting from the current bss.
|
||||
* either in cfg80211_roamed() or in __cfg80211_romed(), Otherwise, it will be
|
||||
* released while diconneting from the current bss.
|
||||
*/
|
||||
void cfg80211_roamed_bss(struct net_device *dev, struct cfg80211_bss *bss,
|
||||
const u8 *req_ie, size_t req_ie_len,
|
||||
const u8 *resp_ie, size_t resp_ie_len, gfp_t gfp);
|
||||
void cfg80211_roamed(struct net_device *dev, struct cfg80211_roam_info *info,
|
||||
gfp_t gfp);
|
||||
|
||||
/**
|
||||
* cfg80211_disconnected - notify cfg80211 that connection was dropped
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* Copyright 2006-2007 Jiri Benc <jbenc@suse.cz>
|
||||
* Copyright 2007-2010 Johannes Berg <johannes@sipsolutions.net>
|
||||
* Copyright 2013-2014 Intel Mobile Communications GmbH
|
||||
* Copyright (C) 2015 - 2016 Intel Deutschland GmbH
|
||||
* Copyright (C) 2015 - 2017 Intel Deutschland GmbH
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
@@ -299,6 +299,8 @@ struct ieee80211_vif_chanctx_switch {
|
||||
* context had been assigned.
|
||||
* @BSS_CHANGED_OCB: OCB join status changed
|
||||
* @BSS_CHANGED_MU_GROUPS: VHT MU-MIMO group id or user position changed
|
||||
* @BSS_CHANGED_KEEP_ALIVE: keep alive options (idle period or protected
|
||||
* keep alive) changed.
|
||||
*/
|
||||
enum ieee80211_bss_change {
|
||||
BSS_CHANGED_ASSOC = 1<<0,
|
||||
@@ -325,6 +327,7 @@ enum ieee80211_bss_change {
|
||||
BSS_CHANGED_BANDWIDTH = 1<<21,
|
||||
BSS_CHANGED_OCB = 1<<22,
|
||||
BSS_CHANGED_MU_GROUPS = 1<<23,
|
||||
BSS_CHANGED_KEEP_ALIVE = 1<<24,
|
||||
|
||||
/* when adding here, make sure to change ieee80211_reconfig */
|
||||
};
|
||||
@@ -533,6 +536,13 @@ struct ieee80211_mu_group_data {
|
||||
* @allow_p2p_go_ps: indication for AP or P2P GO interface, whether it's allowed
|
||||
* to use P2P PS mechanism or not. AP/P2P GO is not allowed to use P2P PS
|
||||
* if it has associated clients without P2P PS support.
|
||||
* @max_idle_period: the time period during which the station can refrain from
|
||||
* transmitting frames to its associated AP without being disassociated.
|
||||
* In units of 1000 TUs. Zero value indicates that the AP did not include
|
||||
* a (valid) BSS Max Idle Period Element.
|
||||
* @protected_keep_alive: if set, indicates that the station should send an RSN
|
||||
* protected frame to the AP to reset the idle timer at the AP for the
|
||||
* station.
|
||||
*/
|
||||
struct ieee80211_bss_conf {
|
||||
const u8 *bssid;
|
||||
@@ -573,6 +583,8 @@ struct ieee80211_bss_conf {
|
||||
enum nl80211_tx_power_setting txpower_type;
|
||||
struct ieee80211_p2p_noa_attr p2p_noa_attr;
|
||||
bool allow_p2p_go_ps;
|
||||
u16 max_idle_period;
|
||||
bool protected_keep_alive;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -948,6 +960,19 @@ struct ieee80211_tx_info {
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ieee80211_tx_status - extended tx staus info for rate control
|
||||
*
|
||||
* @sta: Station that the packet was transmitted for
|
||||
* @info: Basic tx status information
|
||||
* @skb: Packet skb (can be NULL if not provided by the driver)
|
||||
*/
|
||||
struct ieee80211_tx_status {
|
||||
struct ieee80211_sta *sta;
|
||||
struct ieee80211_tx_info *info;
|
||||
struct sk_buff *skb;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ieee80211_scan_ies - descriptors for different blocks of IEs
|
||||
*
|
||||
@@ -1045,16 +1070,8 @@ ieee80211_tx_info_clear_status(struct ieee80211_tx_info *info)
|
||||
* (including FCS) was received.
|
||||
* @RX_FLAG_MACTIME_PLCP_START: The timestamp passed in the RX status (@mactime
|
||||
* field) is valid and contains the time the SYNC preamble was received.
|
||||
* @RX_FLAG_SHORTPRE: Short preamble was used for this frame
|
||||
* @RX_FLAG_HT: HT MCS was used and rate_idx is MCS index
|
||||
* @RX_FLAG_VHT: VHT MCS was used and rate_index is MCS index
|
||||
* @RX_FLAG_40MHZ: HT40 (40 MHz) was used
|
||||
* @RX_FLAG_SHORT_GI: Short guard interval was used
|
||||
* @RX_FLAG_NO_SIGNAL_VAL: The signal strength value is not present.
|
||||
* Valid only for data frames (mainly A-MPDU)
|
||||
* @RX_FLAG_HT_GF: This frame was received in a HT-greenfield transmission, if
|
||||
* the driver fills this value it should add %IEEE80211_RADIOTAP_MCS_HAVE_FMT
|
||||
* to hw.radiotap_mcs_details to advertise that fact
|
||||
* @RX_FLAG_AMPDU_DETAILS: A-MPDU details are known, in particular the reference
|
||||
* number (@ampdu_reference) must be populated and be a distinct number for
|
||||
* each A-MPDU
|
||||
@@ -1067,7 +1084,6 @@ ieee80211_tx_info_clear_status(struct ieee80211_tx_info *info)
|
||||
* is stored in the @ampdu_delimiter_crc field)
|
||||
* @RX_FLAG_MIC_STRIPPED: The mic was stripped of this packet. Decryption was
|
||||
* done by the hardware
|
||||
* @RX_FLAG_LDPC: LDPC was used
|
||||
* @RX_FLAG_ONLY_MONITOR: Report frame only to monitor interfaces without
|
||||
* processing it in any regular way.
|
||||
* This is useful if drivers offload some frames but still want to report
|
||||
@@ -1076,9 +1092,6 @@ ieee80211_tx_info_clear_status(struct ieee80211_tx_info *info)
|
||||
* monitor interfaces.
|
||||
* This is useful if drivers offload some frames but still want to report
|
||||
* them for sniffing purposes.
|
||||
* @RX_FLAG_STBC_MASK: STBC 2 bit bitmask. 1 - Nss=1, 2 - Nss=2, 3 - Nss=3
|
||||
* @RX_FLAG_10MHZ: 10 MHz (half channel) was used
|
||||
* @RX_FLAG_5MHZ: 5 MHz (quarter channel) was used
|
||||
* @RX_FLAG_AMSDU_MORE: Some drivers may prefer to report separate A-MSDU
|
||||
* subframes instead of a one huge frame for performance reasons.
|
||||
* All, but the last MSDU from an A-MSDU should have this flag set. E.g.
|
||||
@@ -1106,50 +1119,54 @@ enum mac80211_rx_flags {
|
||||
RX_FLAG_FAILED_FCS_CRC = BIT(5),
|
||||
RX_FLAG_FAILED_PLCP_CRC = BIT(6),
|
||||
RX_FLAG_MACTIME_START = BIT(7),
|
||||
RX_FLAG_SHORTPRE = BIT(8),
|
||||
RX_FLAG_HT = BIT(9),
|
||||
RX_FLAG_40MHZ = BIT(10),
|
||||
RX_FLAG_SHORT_GI = BIT(11),
|
||||
RX_FLAG_NO_SIGNAL_VAL = BIT(12),
|
||||
RX_FLAG_HT_GF = BIT(13),
|
||||
RX_FLAG_AMPDU_DETAILS = BIT(14),
|
||||
RX_FLAG_PN_VALIDATED = BIT(15),
|
||||
RX_FLAG_DUP_VALIDATED = BIT(16),
|
||||
RX_FLAG_AMPDU_LAST_KNOWN = BIT(17),
|
||||
RX_FLAG_AMPDU_IS_LAST = BIT(18),
|
||||
RX_FLAG_AMPDU_DELIM_CRC_ERROR = BIT(19),
|
||||
RX_FLAG_AMPDU_DELIM_CRC_KNOWN = BIT(20),
|
||||
RX_FLAG_MACTIME_END = BIT(21),
|
||||
RX_FLAG_VHT = BIT(22),
|
||||
RX_FLAG_LDPC = BIT(23),
|
||||
RX_FLAG_ONLY_MONITOR = BIT(24),
|
||||
RX_FLAG_SKIP_MONITOR = BIT(25),
|
||||
RX_FLAG_STBC_MASK = BIT(26) | BIT(27),
|
||||
RX_FLAG_10MHZ = BIT(28),
|
||||
RX_FLAG_5MHZ = BIT(29),
|
||||
RX_FLAG_AMSDU_MORE = BIT(30),
|
||||
RX_FLAG_RADIOTAP_VENDOR_DATA = BIT(31),
|
||||
RX_FLAG_MIC_STRIPPED = BIT_ULL(32),
|
||||
RX_FLAG_ALLOW_SAME_PN = BIT_ULL(33),
|
||||
RX_FLAG_ICV_STRIPPED = BIT_ULL(34),
|
||||
RX_FLAG_NO_SIGNAL_VAL = BIT(8),
|
||||
RX_FLAG_AMPDU_DETAILS = BIT(9),
|
||||
RX_FLAG_PN_VALIDATED = BIT(10),
|
||||
RX_FLAG_DUP_VALIDATED = BIT(11),
|
||||
RX_FLAG_AMPDU_LAST_KNOWN = BIT(12),
|
||||
RX_FLAG_AMPDU_IS_LAST = BIT(13),
|
||||
RX_FLAG_AMPDU_DELIM_CRC_ERROR = BIT(14),
|
||||
RX_FLAG_AMPDU_DELIM_CRC_KNOWN = BIT(15),
|
||||
RX_FLAG_MACTIME_END = BIT(16),
|
||||
RX_FLAG_ONLY_MONITOR = BIT(17),
|
||||
RX_FLAG_SKIP_MONITOR = BIT(18),
|
||||
RX_FLAG_AMSDU_MORE = BIT(19),
|
||||
RX_FLAG_RADIOTAP_VENDOR_DATA = BIT(20),
|
||||
RX_FLAG_MIC_STRIPPED = BIT(21),
|
||||
RX_FLAG_ALLOW_SAME_PN = BIT(22),
|
||||
RX_FLAG_ICV_STRIPPED = BIT(23),
|
||||
};
|
||||
|
||||
#define RX_FLAG_STBC_SHIFT 26
|
||||
|
||||
/**
|
||||
* enum mac80211_rx_vht_flags - receive VHT flags
|
||||
* enum mac80211_rx_encoding_flags - MCS & bandwidth flags
|
||||
*
|
||||
* These flags are used with the @vht_flag member of
|
||||
* &struct ieee80211_rx_status.
|
||||
* @RX_VHT_FLAG_80MHZ: 80 MHz was used
|
||||
* @RX_VHT_FLAG_160MHZ: 160 MHz was used
|
||||
* @RX_VHT_FLAG_BF: packet was beamformed
|
||||
* @RX_ENC_FLAG_SHORTPRE: Short preamble was used for this frame
|
||||
* @RX_ENC_FLAG_40MHZ: HT40 (40 MHz) was used
|
||||
* @RX_ENC_FLAG_SHORT_GI: Short guard interval was used
|
||||
* @RX_ENC_FLAG_HT_GF: This frame was received in a HT-greenfield transmission,
|
||||
* if the driver fills this value it should add
|
||||
* %IEEE80211_RADIOTAP_MCS_HAVE_FMT
|
||||
* to hw.radiotap_mcs_details to advertise that fact
|
||||
* @RX_ENC_FLAG_LDPC: LDPC was used
|
||||
* @RX_ENC_FLAG_STBC_MASK: STBC 2 bit bitmask. 1 - Nss=1, 2 - Nss=2, 3 - Nss=3
|
||||
* @RX_ENC_FLAG_BF: packet was beamformed
|
||||
*/
|
||||
enum mac80211_rx_encoding_flags {
|
||||
RX_ENC_FLAG_SHORTPRE = BIT(0),
|
||||
RX_ENC_FLAG_40MHZ = BIT(1),
|
||||
RX_ENC_FLAG_SHORT_GI = BIT(2),
|
||||
RX_ENC_FLAG_HT_GF = BIT(3),
|
||||
RX_ENC_FLAG_STBC_MASK = BIT(4) | BIT(5),
|
||||
RX_ENC_FLAG_LDPC = BIT(6),
|
||||
RX_ENC_FLAG_BF = BIT(7),
|
||||
};
|
||||
|
||||
enum mac80211_rx_vht_flags {
|
||||
RX_VHT_FLAG_80MHZ = BIT(0),
|
||||
RX_VHT_FLAG_160MHZ = BIT(1),
|
||||
RX_VHT_FLAG_BF = BIT(2),
|
||||
#define RX_ENC_FLAG_STBC_SHIFT 4
|
||||
|
||||
enum mac80211_rx_encoding {
|
||||
RX_ENC_LEGACY = 0,
|
||||
RX_ENC_HT,
|
||||
RX_ENC_VHT,
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -1179,9 +1196,11 @@ enum mac80211_rx_vht_flags {
|
||||
* @antenna: antenna used
|
||||
* @rate_idx: index of data rate into band's supported rates or MCS index if
|
||||
* HT or VHT is used (%RX_FLAG_HT/%RX_FLAG_VHT)
|
||||
* @vht_nss: number of streams (VHT only)
|
||||
* @nss: number of streams (VHT and HE only)
|
||||
* @flag: %RX_FLAG_\*
|
||||
* @vht_flag: %RX_VHT_FLAG_\*
|
||||
* @encoding: &enum mac80211_rx_encoding
|
||||
* @bw: &enum rate_info_bw
|
||||
* @enc_flags: uses bits from &enum mac80211_rx_encoding_flags
|
||||
* @rx_flags: internal RX flags for mac80211
|
||||
* @ampdu_reference: A-MPDU reference number, must be a different value for
|
||||
* each A-MPDU but the same for each subframe within one A-MPDU
|
||||
@@ -1192,11 +1211,12 @@ struct ieee80211_rx_status {
|
||||
u64 boottime_ns;
|
||||
u32 device_timestamp;
|
||||
u32 ampdu_reference;
|
||||
u64 flag;
|
||||
u32 flag;
|
||||
u16 freq;
|
||||
u8 vht_flag;
|
||||
u8 enc_flags;
|
||||
u8 encoding:2, bw:3;
|
||||
u8 rate_idx;
|
||||
u8 vht_nss;
|
||||
u8 nss;
|
||||
u8 rx_flags;
|
||||
u8 band;
|
||||
u8 antenna;
|
||||
@@ -4205,6 +4225,23 @@ void ieee80211_get_tx_rates(struct ieee80211_vif *vif,
|
||||
void ieee80211_tx_status(struct ieee80211_hw *hw,
|
||||
struct sk_buff *skb);
|
||||
|
||||
/**
|
||||
* ieee80211_tx_status_ext - extended transmit status callback
|
||||
*
|
||||
* This function can be used as a replacement for ieee80211_tx_status
|
||||
* in drivers that may want to provide extra information that does not
|
||||
* fit into &struct ieee80211_tx_info.
|
||||
*
|
||||
* Calls to this function for a single hardware must be synchronized
|
||||
* against each other. Calls to this function, ieee80211_tx_status_ni()
|
||||
* and ieee80211_tx_status_irqsafe() may not be mixed for a single hardware.
|
||||
*
|
||||
* @hw: the hardware the frame was transmitted by
|
||||
* @status: tx status information
|
||||
*/
|
||||
void ieee80211_tx_status_ext(struct ieee80211_hw *hw,
|
||||
struct ieee80211_tx_status *status);
|
||||
|
||||
/**
|
||||
* ieee80211_tx_status_noskb - transmit status callback without skb
|
||||
*
|
||||
@@ -4221,9 +4258,17 @@ void ieee80211_tx_status(struct ieee80211_hw *hw,
|
||||
* (NULL for multicast packets)
|
||||
* @info: tx status information
|
||||
*/
|
||||
void ieee80211_tx_status_noskb(struct ieee80211_hw *hw,
|
||||
struct ieee80211_sta *sta,
|
||||
struct ieee80211_tx_info *info);
|
||||
static inline void ieee80211_tx_status_noskb(struct ieee80211_hw *hw,
|
||||
struct ieee80211_sta *sta,
|
||||
struct ieee80211_tx_info *info)
|
||||
{
|
||||
struct ieee80211_tx_status status = {
|
||||
.sta = sta,
|
||||
.info = info,
|
||||
};
|
||||
|
||||
ieee80211_tx_status_ext(hw, &status);
|
||||
}
|
||||
|
||||
/**
|
||||
* ieee80211_tx_status_ni - transmit status callback (in process context)
|
||||
@@ -5476,10 +5521,9 @@ struct rate_control_ops {
|
||||
void (*free_sta)(void *priv, struct ieee80211_sta *sta,
|
||||
void *priv_sta);
|
||||
|
||||
void (*tx_status_noskb)(void *priv,
|
||||
struct ieee80211_supported_band *sband,
|
||||
struct ieee80211_sta *sta, void *priv_sta,
|
||||
struct ieee80211_tx_info *info);
|
||||
void (*tx_status_ext)(void *priv,
|
||||
struct ieee80211_supported_band *sband,
|
||||
void *priv_sta, struct ieee80211_tx_status *st);
|
||||
void (*tx_status)(void *priv, struct ieee80211_supported_band *sband,
|
||||
struct ieee80211_sta *sta, void *priv_sta,
|
||||
struct sk_buff *skb);
|
||||
|
新增問題並參考
封鎖使用者