Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
abf52f86
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 大约 4 年
通知
14
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
abf52f86
编写于
6月 17, 2010
作者:
J
John W. Linville
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
Conflicts: net/mac80211/mlme.c
上级
6a0076e0
021570e5
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
96 addition
and
18 deletion
+96
-18
MAINTAINERS
MAINTAINERS
+2
-8
drivers/net/wireless/hostap/hostap_cs.c
drivers/net/wireless/hostap/hostap_cs.c
+13
-2
drivers/net/wireless/hostap/hostap_hw.c
drivers/net/wireless/hostap/hostap_hw.c
+13
-0
drivers/net/wireless/hostap/hostap_wlan.h
drivers/net/wireless/hostap/hostap_wlan.h
+1
-1
drivers/net/wireless/iwlwifi/iwl-agn-tx.c
drivers/net/wireless/iwlwifi/iwl-agn-tx.c
+7
-0
drivers/net/wireless/iwlwifi/iwl-agn.c
drivers/net/wireless/iwlwifi/iwl-agn.c
+6
-2
drivers/net/wireless/iwlwifi/iwl-scan.c
drivers/net/wireless/iwlwifi/iwl-scan.c
+1
-0
drivers/net/wireless/iwlwifi/iwl-sta.c
drivers/net/wireless/iwlwifi/iwl-sta.c
+4
-0
drivers/net/wireless/iwlwifi/iwl3945-base.c
drivers/net/wireless/iwlwifi/iwl3945-base.c
+7
-2
drivers/net/wireless/libertas_tf/main.c
drivers/net/wireless/libertas_tf/main.c
+1
-1
drivers/net/wireless/p54/p54pci.c
drivers/net/wireless/p54/p54pci.c
+2
-0
net/mac80211/mlme.c
net/mac80211/mlme.c
+38
-1
net/mac80211/work.c
net/mac80211/work.c
+1
-1
未找到文件。
MAINTAINERS
浏览文件 @
abf52f86
...
@@ -2966,20 +2966,14 @@ F: drivers/net/ixgb/
...
@@ -2966,20 +2966,14 @@ F: drivers/net/ixgb/
F: drivers/net/ixgbe/
F: drivers/net/ixgbe/
INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT
INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT
M: Reinette Chatre <reinette.chatre@intel.com>
M: Intel Linux Wireless <ilw@linux.intel.com>
L: linux-wireless@vger.kernel.org
L: linux-wireless@vger.kernel.org
W: http://ipw2100.sourceforge.net
S: Orphan
S: Odd Fixes
F: Documentation/networking/README.ipw2100
F: Documentation/networking/README.ipw2100
F: drivers/net/wireless/ipw2x00/ipw2100.*
F: drivers/net/wireless/ipw2x00/ipw2100.*
INTEL PRO/WIRELESS 2915ABG NETWORK CONNECTION SUPPORT
INTEL PRO/WIRELESS 2915ABG NETWORK CONNECTION SUPPORT
M: Reinette Chatre <reinette.chatre@intel.com>
M: Intel Linux Wireless <ilw@linux.intel.com>
L: linux-wireless@vger.kernel.org
L: linux-wireless@vger.kernel.org
W: http://ipw2200.sourceforge.net
S: Orphan
S: Odd Fixes
F: Documentation/networking/README.ipw2200
F: Documentation/networking/README.ipw2200
F: drivers/net/wireless/ipw2x00/ipw2200.*
F: drivers/net/wireless/ipw2x00/ipw2200.*
...
...
drivers/net/wireless/hostap/hostap_cs.c
浏览文件 @
abf52f86
...
@@ -594,6 +594,7 @@ static int prism2_config(struct pcmcia_device *link)
...
@@ -594,6 +594,7 @@ static int prism2_config(struct pcmcia_device *link)
local_info_t
*
local
;
local_info_t
*
local
;
int
ret
=
1
;
int
ret
=
1
;
struct
hostap_cs_priv
*
hw_priv
;
struct
hostap_cs_priv
*
hw_priv
;
unsigned
long
flags
;
PDEBUG
(
DEBUG_FLOW
,
"prism2_config()
\n
"
);
PDEBUG
(
DEBUG_FLOW
,
"prism2_config()
\n
"
);
...
@@ -625,9 +626,15 @@ static int prism2_config(struct pcmcia_device *link)
...
@@ -625,9 +626,15 @@ static int prism2_config(struct pcmcia_device *link)
local
->
hw_priv
=
hw_priv
;
local
->
hw_priv
=
hw_priv
;
hw_priv
->
link
=
link
;
hw_priv
->
link
=
link
;
/*
* Make sure the IRQ handler cannot proceed until at least
* dev->base_addr is initialized.
*/
spin_lock_irqsave
(
&
local
->
irq_init_lock
,
flags
);
ret
=
pcmcia_request_irq
(
link
,
prism2_interrupt
);
ret
=
pcmcia_request_irq
(
link
,
prism2_interrupt
);
if
(
ret
)
if
(
ret
)
goto
failed
;
goto
failed
_unlock
;
/*
/*
* This actually configures the PCMCIA socket -- setting up
* This actually configures the PCMCIA socket -- setting up
...
@@ -636,11 +643,13 @@ static int prism2_config(struct pcmcia_device *link)
...
@@ -636,11 +643,13 @@ static int prism2_config(struct pcmcia_device *link)
*/
*/
ret
=
pcmcia_request_configuration
(
link
,
&
link
->
conf
);
ret
=
pcmcia_request_configuration
(
link
,
&
link
->
conf
);
if
(
ret
)
if
(
ret
)
goto
failed
;
goto
failed
_unlock
;
dev
->
irq
=
link
->
irq
;
dev
->
irq
=
link
->
irq
;
dev
->
base_addr
=
link
->
io
.
BasePort1
;
dev
->
base_addr
=
link
->
io
.
BasePort1
;
spin_unlock_irqrestore
(
&
local
->
irq_init_lock
,
flags
);
/* Finally, report what we've done */
/* Finally, report what we've done */
printk
(
KERN_INFO
"%s: index 0x%02x: "
,
printk
(
KERN_INFO
"%s: index 0x%02x: "
,
dev_info
,
link
->
conf
.
ConfigIndex
);
dev_info
,
link
->
conf
.
ConfigIndex
);
...
@@ -667,6 +676,8 @@ static int prism2_config(struct pcmcia_device *link)
...
@@ -667,6 +676,8 @@ static int prism2_config(struct pcmcia_device *link)
return
ret
;
return
ret
;
failed_unlock:
spin_unlock_irqrestore
(
&
local
->
irq_init_lock
,
flags
);
failed:
failed:
kfree
(
hw_priv
);
kfree
(
hw_priv
);
prism2_release
((
u_long
)
link
);
prism2_release
((
u_long
)
link
);
...
...
drivers/net/wireless/hostap/hostap_hw.c
浏览文件 @
abf52f86
...
@@ -2621,6 +2621,18 @@ static irqreturn_t prism2_interrupt(int irq, void *dev_id)
...
@@ -2621,6 +2621,18 @@ static irqreturn_t prism2_interrupt(int irq, void *dev_id)
iface
=
netdev_priv
(
dev
);
iface
=
netdev_priv
(
dev
);
local
=
iface
->
local
;
local
=
iface
->
local
;
/* Detect early interrupt before driver is fully configued */
spin_lock
(
&
local
->
irq_init_lock
);
if
(
!
dev
->
base_addr
)
{
if
(
net_ratelimit
())
{
printk
(
KERN_DEBUG
"%s: Interrupt, but dev not configured
\n
"
,
dev
->
name
);
}
spin_unlock
(
&
local
->
irq_init_lock
);
return
IRQ_HANDLED
;
}
spin_unlock
(
&
local
->
irq_init_lock
);
prism2_io_debug_add
(
dev
,
PRISM2_IO_DEBUG_CMD_INTERRUPT
,
0
,
0
);
prism2_io_debug_add
(
dev
,
PRISM2_IO_DEBUG_CMD_INTERRUPT
,
0
,
0
);
if
(
local
->
func
->
card_present
&&
!
local
->
func
->
card_present
(
local
))
{
if
(
local
->
func
->
card_present
&&
!
local
->
func
->
card_present
(
local
))
{
...
@@ -3138,6 +3150,7 @@ prism2_init_local_data(struct prism2_helper_functions *funcs, int card_idx,
...
@@ -3138,6 +3150,7 @@ prism2_init_local_data(struct prism2_helper_functions *funcs, int card_idx,
spin_lock_init
(
&
local
->
cmdlock
);
spin_lock_init
(
&
local
->
cmdlock
);
spin_lock_init
(
&
local
->
baplock
);
spin_lock_init
(
&
local
->
baplock
);
spin_lock_init
(
&
local
->
lock
);
spin_lock_init
(
&
local
->
lock
);
spin_lock_init
(
&
local
->
irq_init_lock
);
mutex_init
(
&
local
->
rid_bap_mtx
);
mutex_init
(
&
local
->
rid_bap_mtx
);
if
(
card_idx
<
0
||
card_idx
>=
MAX_PARM_DEVICES
)
if
(
card_idx
<
0
||
card_idx
>=
MAX_PARM_DEVICES
)
...
...
drivers/net/wireless/hostap/hostap_wlan.h
浏览文件 @
abf52f86
...
@@ -654,7 +654,7 @@ struct local_info {
...
@@ -654,7 +654,7 @@ struct local_info {
rwlock_t
iface_lock
;
/* hostap_interfaces read lock; use write lock
rwlock_t
iface_lock
;
/* hostap_interfaces read lock; use write lock
* when removing entries from the list.
* when removing entries from the list.
* TX and RX paths can use read lock. */
* TX and RX paths can use read lock. */
spinlock_t
cmdlock
,
baplock
,
lock
;
spinlock_t
cmdlock
,
baplock
,
lock
,
irq_init_lock
;
struct
mutex
rid_bap_mtx
;
struct
mutex
rid_bap_mtx
;
u16
infofid
;
/* MAC buffer id for info frame */
u16
infofid
;
/* MAC buffer id for info frame */
/* txfid, intransmitfid, next_txtid, and next_alloc are protected by
/* txfid, intransmitfid, next_txtid, and next_alloc are protected by
...
...
drivers/net/wireless/iwlwifi/iwl-agn-tx.c
浏览文件 @
abf52f86
...
@@ -1147,6 +1147,7 @@ static void iwlagn_tx_status(struct iwl_priv *priv, struct sk_buff *skb)
...
@@ -1147,6 +1147,7 @@ static void iwlagn_tx_status(struct iwl_priv *priv, struct sk_buff *skb)
struct
ieee80211_sta
*
sta
;
struct
ieee80211_sta
*
sta
;
struct
iwl_station_priv
*
sta_priv
;
struct
iwl_station_priv
*
sta_priv
;
rcu_read_lock
();
sta
=
ieee80211_find_sta
(
priv
->
vif
,
hdr
->
addr1
);
sta
=
ieee80211_find_sta
(
priv
->
vif
,
hdr
->
addr1
);
if
(
sta
)
{
if
(
sta
)
{
sta_priv
=
(
void
*
)
sta
->
drv_priv
;
sta_priv
=
(
void
*
)
sta
->
drv_priv
;
...
@@ -1155,6 +1156,7 @@ static void iwlagn_tx_status(struct iwl_priv *priv, struct sk_buff *skb)
...
@@ -1155,6 +1156,7 @@ static void iwlagn_tx_status(struct iwl_priv *priv, struct sk_buff *skb)
atomic_dec_return
(
&
sta_priv
->
pending_frames
)
==
0
)
atomic_dec_return
(
&
sta_priv
->
pending_frames
)
==
0
)
ieee80211_sta_block_awake
(
priv
->
hw
,
sta
,
false
);
ieee80211_sta_block_awake
(
priv
->
hw
,
sta
,
false
);
}
}
rcu_read_unlock
();
ieee80211_tx_status_irqsafe
(
priv
->
hw
,
skb
);
ieee80211_tx_status_irqsafe
(
priv
->
hw
,
skb
);
}
}
...
@@ -1322,6 +1324,11 @@ void iwlagn_rx_reply_compressed_ba(struct iwl_priv *priv,
...
@@ -1322,6 +1324,11 @@ void iwlagn_rx_reply_compressed_ba(struct iwl_priv *priv,
sta_id
=
ba_resp
->
sta_id
;
sta_id
=
ba_resp
->
sta_id
;
tid
=
ba_resp
->
tid
;
tid
=
ba_resp
->
tid
;
agg
=
&
priv
->
stations
[
sta_id
].
tid
[
tid
].
agg
;
agg
=
&
priv
->
stations
[
sta_id
].
tid
[
tid
].
agg
;
if
(
unlikely
(
agg
->
txq_id
!=
scd_flow
))
{
IWL_ERR
(
priv
,
"BA scd_flow %d does not match txq_id %d
\n
"
,
scd_flow
,
agg
->
txq_id
);
return
;
}
/* Find index just before block-ack window */
/* Find index just before block-ack window */
index
=
iwl_queue_dec_wrap
(
ba_resp_scd_ssn
&
0xff
,
txq
->
q
.
n_bd
);
index
=
iwl_queue_dec_wrap
(
ba_resp_scd_ssn
&
0xff
,
txq
->
q
.
n_bd
);
...
...
drivers/net/wireless/iwlwifi/iwl-agn.c
浏览文件 @
abf52f86
...
@@ -3465,10 +3465,12 @@ static int iwlagn_mac_sta_add(struct ieee80211_hw *hw,
...
@@ -3465,10 +3465,12 @@ static int iwlagn_mac_sta_add(struct ieee80211_hw *hw,
int
ret
;
int
ret
;
u8
sta_id
;
u8
sta_id
;
sta_priv
->
common
.
sta_id
=
IWL_INVALID_STATION
;
IWL_DEBUG_INFO
(
priv
,
"received request to add station %pM
\n
"
,
IWL_DEBUG_INFO
(
priv
,
"received request to add station %pM
\n
"
,
sta
->
addr
);
sta
->
addr
);
mutex_lock
(
&
priv
->
mutex
);
IWL_DEBUG_INFO
(
priv
,
"proceeding to add station %pM
\n
"
,
sta
->
addr
);
sta_priv
->
common
.
sta_id
=
IWL_INVALID_STATION
;
atomic_set
(
&
sta_priv
->
pending_frames
,
0
);
atomic_set
(
&
sta_priv
->
pending_frames
,
0
);
if
(
vif
->
type
==
NL80211_IFTYPE_AP
)
if
(
vif
->
type
==
NL80211_IFTYPE_AP
)
...
@@ -3480,6 +3482,7 @@ static int iwlagn_mac_sta_add(struct ieee80211_hw *hw,
...
@@ -3480,6 +3482,7 @@ static int iwlagn_mac_sta_add(struct ieee80211_hw *hw,
IWL_ERR
(
priv
,
"Unable to add station %pM (%d)
\n
"
,
IWL_ERR
(
priv
,
"Unable to add station %pM (%d)
\n
"
,
sta
->
addr
,
ret
);
sta
->
addr
,
ret
);
/* Should we return success if return code is EEXIST ? */
/* Should we return success if return code is EEXIST ? */
mutex_unlock
(
&
priv
->
mutex
);
return
ret
;
return
ret
;
}
}
...
@@ -3489,6 +3492,7 @@ static int iwlagn_mac_sta_add(struct ieee80211_hw *hw,
...
@@ -3489,6 +3492,7 @@ static int iwlagn_mac_sta_add(struct ieee80211_hw *hw,
IWL_DEBUG_INFO
(
priv
,
"Initializing rate scaling for station %pM
\n
"
,
IWL_DEBUG_INFO
(
priv
,
"Initializing rate scaling for station %pM
\n
"
,
sta
->
addr
);
sta
->
addr
);
iwl_rs_rate_init
(
priv
,
sta
,
sta_id
);
iwl_rs_rate_init
(
priv
,
sta
,
sta_id
);
mutex_unlock
(
&
priv
->
mutex
);
return
0
;
return
0
;
}
}
...
...
drivers/net/wireless/iwlwifi/iwl-scan.c
浏览文件 @
abf52f86
...
@@ -500,6 +500,7 @@ void iwl_bg_abort_scan(struct work_struct *work)
...
@@ -500,6 +500,7 @@ void iwl_bg_abort_scan(struct work_struct *work)
mutex_lock
(
&
priv
->
mutex
);
mutex_lock
(
&
priv
->
mutex
);
cancel_delayed_work_sync
(
&
priv
->
scan_check
);
set_bit
(
STATUS_SCAN_ABORTING
,
&
priv
->
status
);
set_bit
(
STATUS_SCAN_ABORTING
,
&
priv
->
status
);
iwl_send_scan_abort
(
priv
);
iwl_send_scan_abort
(
priv
);
...
...
drivers/net/wireless/iwlwifi/iwl-sta.c
浏览文件 @
abf52f86
...
@@ -1373,10 +1373,14 @@ int iwl_mac_sta_remove(struct ieee80211_hw *hw,
...
@@ -1373,10 +1373,14 @@ int iwl_mac_sta_remove(struct ieee80211_hw *hw,
IWL_DEBUG_INFO
(
priv
,
"received request to remove station %pM
\n
"
,
IWL_DEBUG_INFO
(
priv
,
"received request to remove station %pM
\n
"
,
sta
->
addr
);
sta
->
addr
);
mutex_lock
(
&
priv
->
mutex
);
IWL_DEBUG_INFO
(
priv
,
"proceeding to remove station %pM
\n
"
,
sta
->
addr
);
ret
=
iwl_remove_station
(
priv
,
sta_common
->
sta_id
,
sta
->
addr
);
ret
=
iwl_remove_station
(
priv
,
sta_common
->
sta_id
,
sta
->
addr
);
if
(
ret
)
if
(
ret
)
IWL_ERR
(
priv
,
"Error removing station %pM
\n
"
,
IWL_ERR
(
priv
,
"Error removing station %pM
\n
"
,
sta
->
addr
);
sta
->
addr
);
mutex_unlock
(
&
priv
->
mutex
);
return
ret
;
return
ret
;
}
}
EXPORT_SYMBOL
(
iwl_mac_sta_remove
);
EXPORT_SYMBOL
(
iwl_mac_sta_remove
);
drivers/net/wireless/iwlwifi/iwl3945-base.c
浏览文件 @
abf52f86
...
@@ -3363,10 +3363,13 @@ static int iwl3945_mac_sta_add(struct ieee80211_hw *hw,
...
@@ -3363,10 +3363,13 @@ static int iwl3945_mac_sta_add(struct ieee80211_hw *hw,
bool
is_ap
=
vif
->
type
==
NL80211_IFTYPE_STATION
;
bool
is_ap
=
vif
->
type
==
NL80211_IFTYPE_STATION
;
u8
sta_id
;
u8
sta_id
;
sta_priv
->
common
.
sta_id
=
IWL_INVALID_STATION
;
IWL_DEBUG_INFO
(
priv
,
"received request to add station %pM
\n
"
,
IWL_DEBUG_INFO
(
priv
,
"received request to add station %pM
\n
"
,
sta
->
addr
);
sta
->
addr
);
mutex_lock
(
&
priv
->
mutex
);
IWL_DEBUG_INFO
(
priv
,
"proceeding to add station %pM
\n
"
,
sta
->
addr
);
sta_priv
->
common
.
sta_id
=
IWL_INVALID_STATION
;
ret
=
iwl_add_station_common
(
priv
,
sta
->
addr
,
is_ap
,
&
sta
->
ht_cap
,
ret
=
iwl_add_station_common
(
priv
,
sta
->
addr
,
is_ap
,
&
sta
->
ht_cap
,
&
sta_id
);
&
sta_id
);
...
@@ -3374,6 +3377,7 @@ static int iwl3945_mac_sta_add(struct ieee80211_hw *hw,
...
@@ -3374,6 +3377,7 @@ static int iwl3945_mac_sta_add(struct ieee80211_hw *hw,
IWL_ERR
(
priv
,
"Unable to add station %pM (%d)
\n
"
,
IWL_ERR
(
priv
,
"Unable to add station %pM (%d)
\n
"
,
sta
->
addr
,
ret
);
sta
->
addr
,
ret
);
/* Should we return success if return code is EEXIST ? */
/* Should we return success if return code is EEXIST ? */
mutex_unlock
(
&
priv
->
mutex
);
return
ret
;
return
ret
;
}
}
...
@@ -3383,6 +3387,7 @@ static int iwl3945_mac_sta_add(struct ieee80211_hw *hw,
...
@@ -3383,6 +3387,7 @@ static int iwl3945_mac_sta_add(struct ieee80211_hw *hw,
IWL_DEBUG_INFO
(
priv
,
"Initializing rate scaling for station %pM
\n
"
,
IWL_DEBUG_INFO
(
priv
,
"Initializing rate scaling for station %pM
\n
"
,
sta
->
addr
);
sta
->
addr
);
iwl3945_rs_rate_init
(
priv
,
sta
,
sta_id
);
iwl3945_rs_rate_init
(
priv
,
sta
,
sta_id
);
mutex_unlock
(
&
priv
->
mutex
);
return
0
;
return
0
;
}
}
...
...
drivers/net/wireless/libertas_tf/main.c
浏览文件 @
abf52f86
...
@@ -549,7 +549,7 @@ int lbtf_rx(struct lbtf_private *priv, struct sk_buff *skb)
...
@@ -549,7 +549,7 @@ int lbtf_rx(struct lbtf_private *priv, struct sk_buff *skb)
prxpd
=
(
struct
rxpd
*
)
skb
->
data
;
prxpd
=
(
struct
rxpd
*
)
skb
->
data
;
stats
.
flag
=
0
;
memset
(
&
stats
,
0
,
sizeof
(
stats
))
;
if
(
!
(
prxpd
->
status
&
cpu_to_le16
(
MRVDRV_RXPD_STATUS_OK
)))
if
(
!
(
prxpd
->
status
&
cpu_to_le16
(
MRVDRV_RXPD_STATUS_OK
)))
stats
.
flag
|=
RX_FLAG_FAILED_FCS_CRC
;
stats
.
flag
|=
RX_FLAG_FAILED_FCS_CRC
;
stats
.
freq
=
priv
->
cur_freq
;
stats
.
freq
=
priv
->
cur_freq
;
...
...
drivers/net/wireless/p54/p54pci.c
浏览文件 @
abf52f86
...
@@ -41,6 +41,8 @@ static DEFINE_PCI_DEVICE_TABLE(p54p_table) = {
...
@@ -41,6 +41,8 @@ static DEFINE_PCI_DEVICE_TABLE(p54p_table) = {
{
PCI_DEVICE
(
0x1260
,
0x3877
)
},
{
PCI_DEVICE
(
0x1260
,
0x3877
)
},
/* Intersil PRISM Javelin/Xbow Wireless LAN adapter */
/* Intersil PRISM Javelin/Xbow Wireless LAN adapter */
{
PCI_DEVICE
(
0x1260
,
0x3886
)
},
{
PCI_DEVICE
(
0x1260
,
0x3886
)
},
/* Intersil PRISM Xbow Wireless LAN adapter (Symbol AP-300) */
{
PCI_DEVICE
(
0x1260
,
0xffff
)
},
{
},
{
},
};
};
...
...
net/mac80211/mlme.c
浏览文件 @
abf52f86
...
@@ -1704,8 +1704,45 @@ void ieee80211_sta_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata,
...
@@ -1704,8 +1704,45 @@ void ieee80211_sta_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata,
mutex_unlock
(
&
ifmgd
->
mtx
);
mutex_unlock
(
&
ifmgd
->
mtx
);
if
(
skb
->
len
>=
24
+
2
/* mgmt + deauth reason */
&&
if
(
skb
->
len
>=
24
+
2
/* mgmt + deauth reason */
&&
(
fc
&
IEEE80211_FCTL_STYPE
)
==
IEEE80211_STYPE_DEAUTH
)
(
fc
&
IEEE80211_FCTL_STYPE
)
==
IEEE80211_STYPE_DEAUTH
)
{
struct
ieee80211_local
*
local
=
sdata
->
local
;
struct
ieee80211_work
*
wk
;
mutex_lock
(
&
local
->
work_mtx
);
list_for_each_entry
(
wk
,
&
local
->
work_list
,
list
)
{
if
(
wk
->
sdata
!=
sdata
)
continue
;
if
(
wk
->
type
!=
IEEE80211_WORK_ASSOC
)
continue
;
if
(
memcmp
(
mgmt
->
bssid
,
wk
->
filter_ta
,
ETH_ALEN
))
continue
;
if
(
memcmp
(
mgmt
->
sa
,
wk
->
filter_ta
,
ETH_ALEN
))
continue
;
/*
* Printing the message only here means we can't
* spuriously print it, but it also means that it
* won't be printed when the frame comes in before
* we even tried to associate or in similar cases.
*
* Ultimately, I suspect cfg80211 should print the
* messages instead.
*/
printk
(
KERN_DEBUG
"%s: deauthenticated from %pM (Reason: %u)
\n
"
,
sdata
->
name
,
mgmt
->
bssid
,
le16_to_cpu
(
mgmt
->
u
.
deauth
.
reason_code
));
list_del_rcu
(
&
wk
->
list
);
free_work
(
wk
);
break
;
}
mutex_unlock
(
&
local
->
work_mtx
);
cfg80211_send_deauth
(
sdata
->
dev
,
(
u8
*
)
mgmt
,
skb
->
len
);
cfg80211_send_deauth
(
sdata
->
dev
,
(
u8
*
)
mgmt
,
skb
->
len
);
}
}
}
static
void
ieee80211_sta_timer
(
unsigned
long
data
)
static
void
ieee80211_sta_timer
(
unsigned
long
data
)
...
...
net/mac80211/work.c
浏览文件 @
abf52f86
...
@@ -715,7 +715,7 @@ static void ieee80211_work_rx_queued_mgmt(struct ieee80211_local *local,
...
@@ -715,7 +715,7 @@ static void ieee80211_work_rx_queued_mgmt(struct ieee80211_local *local,
struct
ieee80211_rx_status
*
rx_status
;
struct
ieee80211_rx_status
*
rx_status
;
struct
ieee80211_mgmt
*
mgmt
;
struct
ieee80211_mgmt
*
mgmt
;
struct
ieee80211_work
*
wk
;
struct
ieee80211_work
*
wk
;
enum
work_action
rma
;
enum
work_action
rma
=
WORK_ACT_NONE
;
u16
fc
;
u16
fc
;
rx_status
=
(
struct
ieee80211_rx_status
*
)
skb
->
cb
;
rx_status
=
(
struct
ieee80211_rx_status
*
)
skb
->
cb
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录