mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-12 05:48:39 +08:00
mac80211: Allow concurrent monitor iface and ethernet rx decap
Some HW/driver can support passing ethernet rx decap frames and raw 802.11 frames for the monitor interface concurrently and via separate RX calls to mac80211. Packets going to the monitor interface(s) would be in 802.11 format and thus not have the RX_FLAG_8023 set, and 802.11 format monitoring frames should have RX_FLAG_ONLY_MONITOR set. Drivers doing such can enable the SUPPORTS_CONC_MON_RX_DECAP to allow using ethernet decap offload while a monitor interface is active, currently RX decapsulation offload gets disabled when a monitor interface is added. Signed-off-by: Sriram R <srirrama@codeaurora.org> Link: https://lore.kernel.org/r/1617068116-32253-1-git-send-email-srirrama@codeaurora.org [add proper documentation, rewrite commit message] Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
d84d13d6f6
commit
55f8205e7d
@ -2399,6 +2399,12 @@ struct ieee80211_txq {
|
||||
* @IEEE80211_HW_SUPPORTS_RX_DECAP_OFFLOAD: Hardware supports rx decapsulation
|
||||
* offload
|
||||
*
|
||||
* @IEEE80211_HW_SUPPORTS_CONC_MON_RX_DECAP: Hardware supports concurrent rx
|
||||
* decapsulation offload and passing raw 802.11 frames for monitor iface.
|
||||
* If this is supported, the driver must pass both 802.3 frames for real
|
||||
* usage and 802.11 frames with %RX_FLAG_ONLY_MONITOR set for monitor to
|
||||
* the stack.
|
||||
*
|
||||
* @NUM_IEEE80211_HW_FLAGS: number of hardware flags, used for sizing arrays
|
||||
*/
|
||||
enum ieee80211_hw_flags {
|
||||
@ -2453,6 +2459,7 @@ enum ieee80211_hw_flags {
|
||||
IEEE80211_HW_AMPDU_KEYBORDER_SUPPORT,
|
||||
IEEE80211_HW_SUPPORTS_TX_ENCAP_OFFLOAD,
|
||||
IEEE80211_HW_SUPPORTS_RX_DECAP_OFFLOAD,
|
||||
IEEE80211_HW_SUPPORTS_CONC_MON_RX_DECAP,
|
||||
|
||||
/* keep last, obviously */
|
||||
NUM_IEEE80211_HW_FLAGS
|
||||
|
@ -456,6 +456,7 @@ static const char *hw_flag_names[] = {
|
||||
FLAG(AMPDU_KEYBORDER_SUPPORT),
|
||||
FLAG(SUPPORTS_TX_ENCAP_OFFLOAD),
|
||||
FLAG(SUPPORTS_RX_DECAP_OFFLOAD),
|
||||
FLAG(SUPPORTS_CONC_MON_RX_DECAP),
|
||||
#undef FLAG
|
||||
};
|
||||
|
||||
|
@ -807,7 +807,8 @@ static bool ieee80211_set_sdata_offload_flags(struct ieee80211_sub_if_data *sdat
|
||||
ieee80211_iftype_supports_hdr_offload(sdata->vif.type)) {
|
||||
flags |= IEEE80211_OFFLOAD_DECAP_ENABLED;
|
||||
|
||||
if (local->monitors)
|
||||
if (local->monitors &&
|
||||
!ieee80211_hw_check(&local->hw, SUPPORTS_CONC_MON_RX_DECAP))
|
||||
flags &= ~IEEE80211_OFFLOAD_DECAP_ENABLED;
|
||||
} else {
|
||||
flags &= ~IEEE80211_OFFLOAD_DECAP_ENABLED;
|
||||
|
Loading…
Reference in New Issue
Block a user