Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
2c443443
Commit
2c443443
authored
Jun 26, 2012
by
John W. Linville
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'for-john' of
git://git.sipsolutions.net/mac80211-next
parents
5ea27696
371a255e
Changes
34
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
34 changed files
with
768 additions
and
562 deletions
+768
-562
drivers/net/wireless/mac80211_hwsim.c
drivers/net/wireless/mac80211_hwsim.c
+4
-6
include/linux/ieee80211.h
include/linux/ieee80211.h
+2
-0
include/linux/nl80211.h
include/linux/nl80211.h
+6
-0
include/net/cfg80211.h
include/net/cfg80211.h
+2
-0
include/net/mac80211.h
include/net/mac80211.h
+5
-24
net/mac80211/Kconfig
net/mac80211/Kconfig
+39
-17
net/mac80211/Makefile
net/mac80211/Makefile
+3
-3
net/mac80211/agg-rx.c
net/mac80211/agg-rx.c
+17
-17
net/mac80211/agg-tx.c
net/mac80211/agg-tx.c
+41
-31
net/mac80211/cfg.c
net/mac80211/cfg.c
+16
-14
net/mac80211/debug.h
net/mac80211/debug.h
+170
-0
net/mac80211/debugfs_netdev.c
net/mac80211/debugfs_netdev.c
+3
-2
net/mac80211/driver-ops.h
net/mac80211/driver-ops.h
+16
-1
net/mac80211/driver-trace.c
net/mac80211/driver-trace.c
+0
-9
net/mac80211/ht.c
net/mac80211/ht.c
+4
-6
net/mac80211/ibss.c
net/mac80211/ibss.c
+43
-46
net/mac80211/ieee80211_i.h
net/mac80211/ieee80211_i.h
+1
-0
net/mac80211/iface.c
net/mac80211/iface.c
+4
-17
net/mac80211/key.c
net/mac80211/key.c
+2
-2
net/mac80211/mesh.c
net/mac80211/mesh.c
+0
-4
net/mac80211/mesh_hwmp.c
net/mac80211/mesh_hwmp.c
+19
-23
net/mac80211/mesh_pathtbl.c
net/mac80211/mesh_pathtbl.c
+12
-18
net/mac80211/mesh_plink.c
net/mac80211/mesh_plink.c
+32
-29
net/mac80211/mesh_sync.c
net/mac80211/mesh_sync.c
+20
-27
net/mac80211/mlme.c
net/mac80211/mlme.c
+93
-110
net/mac80211/offchannel.c
net/mac80211/offchannel.c
+0
-1
net/mac80211/rx.c
net/mac80211/rx.c
+26
-45
net/mac80211/sta_info.c
net/mac80211/sta_info.c
+17
-27
net/mac80211/status.c
net/mac80211/status.c
+4
-7
net/mac80211/tkip.c
net/mac80211/tkip.c
+1
-42
net/mac80211/trace.c
net/mac80211/trace.c
+75
-0
net/mac80211/trace.h
net/mac80211/trace.h
+66
-1
net/mac80211/tx.c
net/mac80211/tx.c
+17
-32
net/wireless/nl80211.c
net/wireless/nl80211.c
+8
-1
No files found.
drivers/net/wireless/mac80211_hwsim.c
View file @
2c443443
...
...
@@ -678,8 +678,7 @@ static bool mac80211_hwsim_tx_frame_no_nl(struct ieee80211_hw *hw,
continue
;
if
(
data2
->
idle
||
!
data2
->
started
||
!
hwsim_ps_rx_ok
(
data2
,
skb
)
||
!
data
->
channel
||
!
data2
->
channel
||
!
hwsim_ps_rx_ok
(
data2
,
skb
)
||
!
data2
->
channel
||
data
->
channel
->
center_freq
!=
data2
->
channel
->
center_freq
||
!
(
data
->
group
&
data2
->
group
))
continue
;
...
...
@@ -1486,7 +1485,7 @@ static int hwsim_tx_info_frame_received_nl(struct sk_buff *skb_2,
struct
mac80211_hwsim_data
*
data2
;
struct
ieee80211_tx_info
*
txi
;
struct
hwsim_tx_rate
*
tx_attempts
;
struct
sk_buff
__user
*
ret_skb
;
unsigned
long
ret_skb_ptr
;
struct
sk_buff
*
skb
,
*
tmp
;
struct
mac_address
*
src
;
unsigned
int
hwsim_flags
;
...
...
@@ -1504,8 +1503,7 @@ static int hwsim_tx_info_frame_received_nl(struct sk_buff *skb_2,
info
->
attrs
[
HWSIM_ATTR_ADDR_TRANSMITTER
]);
hwsim_flags
=
nla_get_u32
(
info
->
attrs
[
HWSIM_ATTR_FLAGS
]);
ret_skb
=
(
struct
sk_buff
__user
*
)
(
unsigned
long
)
nla_get_u64
(
info
->
attrs
[
HWSIM_ATTR_COOKIE
]);
ret_skb_ptr
=
nla_get_u64
(
info
->
attrs
[
HWSIM_ATTR_COOKIE
]);
data2
=
get_hwsim_data_ref_from_addr
(
src
);
...
...
@@ -1514,7 +1512,7 @@ static int hwsim_tx_info_frame_received_nl(struct sk_buff *skb_2,
/* look for the skb matching the cookie passed back from user */
skb_queue_walk_safe
(
&
data2
->
pending
,
skb
,
tmp
)
{
if
(
skb
==
ret_skb
)
{
if
(
(
unsigned
long
)
skb
==
ret_skb_ptr
)
{
skb_unlink
(
skb
,
&
data2
->
pending
);
found
=
true
;
break
;
...
...
include/linux/ieee80211.h
View file @
2c443443
...
...
@@ -1633,6 +1633,8 @@ enum ieee80211_sa_query_action {
#define WLAN_OUI_TYPE_WFA_P2P 9
#define WLAN_OUI_MICROSOFT 0x0050f2
#define WLAN_OUI_TYPE_MICROSOFT_WPA 1
#define WLAN_OUI_TYPE_MICROSOFT_WMM 2
#define WLAN_OUI_TYPE_MICROSOFT_WPS 4
/*
* WMM/802.11e Tspec Element
...
...
include/linux/nl80211.h
View file @
2c443443
...
...
@@ -1542,6 +1542,9 @@ enum nl80211_attrs {
#define NL80211_MIN_REMAIN_ON_CHANNEL_TIME 10
/* default RSSI threshold for scan results if none specified. */
#define NL80211_SCAN_RSSI_THOLD_OFF -300
/**
* enum nl80211_iftype - (virtual) interface types
*
...
...
@@ -1974,6 +1977,8 @@ enum nl80211_reg_rule_attr {
* @__NL80211_SCHED_SCAN_MATCH_ATTR_INVALID: attribute number 0 is reserved
* @NL80211_SCHED_SCAN_MATCH_ATTR_SSID: SSID to be used for matching,
* only report BSS with matching SSID.
* @NL80211_SCHED_SCAN_MATCH_ATTR_RSSI: RSSI threshold (in dBm) for reporting a
* BSS in scan results. Filtering is turned off if not specified.
* @NL80211_SCHED_SCAN_MATCH_ATTR_MAX: highest scheduled scan filter
* attribute number currently defined
* @__NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST: internal use
...
...
@@ -1982,6 +1987,7 @@ enum nl80211_sched_scan_match_attr {
__NL80211_SCHED_SCAN_MATCH_ATTR_INVALID
,
NL80211_SCHED_SCAN_MATCH_ATTR_SSID
,
NL80211_SCHED_SCAN_MATCH_ATTR_RSSI
,
/* keep last */
__NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST
,
...
...
include/net/cfg80211.h
View file @
2c443443
...
...
@@ -1027,6 +1027,7 @@ struct cfg80211_match_set {
* @wiphy: the wiphy this was for
* @dev: the interface
* @channels: channels to scan
* @rssi_thold: don't report scan results below this threshold (in s32 dBm)
*/
struct
cfg80211_sched_scan_request
{
struct
cfg80211_ssid
*
ssids
;
...
...
@@ -1037,6 +1038,7 @@ struct cfg80211_sched_scan_request {
size_t
ie_len
;
struct
cfg80211_match_set
*
match_sets
;
int
n_match_sets
;
s32
rssi_thold
;
/* internal */
struct
wiphy
*
wiphy
;
...
...
include/net/mac80211.h
View file @
2c443443
...
...
@@ -2254,6 +2254,9 @@ enum ieee80211_rate_control_changed {
* @get_et_strings: Ethtool API to get a set of strings to describe stats
* and perhaps other supported types of ethtool data-sets.
*
* @get_rssi: Get current signal strength in dBm, the function is optional
* and can sleep.
*
*/
struct
ieee80211_ops
{
void
(
*
tx
)(
struct
ieee80211_hw
*
hw
,
struct
sk_buff
*
skb
);
...
...
@@ -2393,6 +2396,8 @@ struct ieee80211_ops {
void
(
*
get_et_strings
)(
struct
ieee80211_hw
*
hw
,
struct
ieee80211_vif
*
vif
,
u32
sset
,
u8
*
data
);
int
(
*
get_rssi
)(
struct
ieee80211_hw
*
hw
,
struct
ieee80211_vif
*
vif
,
struct
ieee80211_sta
*
sta
,
s8
*
rssi_dbm
);
};
/**
...
...
@@ -3843,28 +3848,4 @@ int ieee80211_add_ext_srates_ie(struct ieee80211_vif *vif,
*/
int
ieee80211_ave_rssi
(
struct
ieee80211_vif
*
vif
);
/* Extra debugging macros */
#ifdef CONFIG_MAC80211_HT_DEBUG
#define ht_vdbg(fmt, ...) \
pr_debug(fmt, ##__VA_ARGS__)
#else
#define ht_vdbg(fmt, ...) \
do { \
if (0) \
pr_debug(fmt, ##__VA_ARGS__); \
} while (0)
#endif
#ifdef CONFIG_MAC80211_IBSS_DEBUG
#define ibss_vdbg(fmt, ...) \
pr_debug(fmt, ##__VA_ARGS__)
#else
#define ibss_vdbg(fmt, ...) \
do { \
if (0) \
pr_debug(fmt, ##__VA_ARGS__); \
} while (0)
#endif
#endif
/* MAC80211_H */
net/mac80211/Kconfig
View file @
2c443443
...
...
@@ -107,6 +107,19 @@ config MAC80211_DEBUGFS
Say N unless you know you need this.
config MAC80211_MESSAGE_TRACING
bool "Trace all mac80211 debug messages"
depends on MAC80211
---help---
Select this option to have mac80211 register the
mac80211_msg trace subsystem with tracepoints to
collect all debugging messages, independent of
printing them into the kernel log.
The overhead in this option is that all the messages
need to be present in the binary and formatted at
runtime for tracing.
menuconfig MAC80211_DEBUG_MENU
bool "Select mac80211 debugging features"
depends on MAC80211
...
...
@@ -140,26 +153,35 @@ config MAC80211_VERBOSE_DEBUG
Do not select this option.
config MAC80211_
HT
_DEBUG
bool "Verbose
HT debugging
"
config MAC80211_
MLME
_DEBUG
bool "Verbose
managed MLME output
"
depends on MAC80211_DEBUG_MENU
---help---
This option enables 802.11n High Throughput features
debug tracing output.
It should not be selected on production systems as some
Selecting this option causes mac80211 to print out
debugging messages for the managed-mode MLME. It
should not be selected on production systems as some
of the messages are remotely triggerable.
Do not select this option.
config MAC80211_
TKIP
_DEBUG
bool "Verbose
TKIP
debugging"
config MAC80211_
STA
_DEBUG
bool "Verbose
station
debugging"
depends on MAC80211_DEBUG_MENU
---help---
Selecting this option causes mac80211 to print out
very verbose TKIP debugging messages. It should not
be selected on production systems as those messages
are remotely triggerable.
debugging messages for station addition/removal.
Do not select this option.
config MAC80211_HT_DEBUG
bool "Verbose HT debugging"
depends on MAC80211_DEBUG_MENU
---help---
This option enables 802.11n High Throughput features
debug tracing output.
It should not be selected on production systems as some
of the messages are remotely triggerable.
Do not select this option.
...
...
@@ -174,7 +196,7 @@ config MAC80211_IBSS_DEBUG
Do not select this option.
config MAC80211_
VERBOSE_
PS_DEBUG
config MAC80211_PS_DEBUG
bool "Verbose powersave mode debugging"
depends on MAC80211_DEBUG_MENU
---help---
...
...
@@ -186,7 +208,7 @@ config MAC80211_VERBOSE_PS_DEBUG
Do not select this option.
config MAC80211_
VERBOSE_
MPL_DEBUG
config MAC80211_MPL_DEBUG
bool "Verbose mesh peer link debugging"
depends on MAC80211_DEBUG_MENU
depends on MAC80211_MESH
...
...
@@ -199,7 +221,7 @@ config MAC80211_VERBOSE_MPL_DEBUG
Do not select this option.
config MAC80211_
VERBOSE_
MPATH_DEBUG
config MAC80211_MPATH_DEBUG
bool "Verbose mesh path debugging"
depends on MAC80211_DEBUG_MENU
depends on MAC80211_MESH
...
...
@@ -212,7 +234,7 @@ config MAC80211_VERBOSE_MPATH_DEBUG
Do not select this option.
config MAC80211_
VERBOSE_
MHWMP_DEBUG
config MAC80211_MHWMP_DEBUG
bool "Verbose mesh HWMP routing debugging"
depends on MAC80211_DEBUG_MENU
depends on MAC80211_MESH
...
...
@@ -225,7 +247,7 @@ config MAC80211_VERBOSE_MHWMP_DEBUG
Do not select this option.
config MAC80211_
VERBOSE_
MESH_SYNC_DEBUG
config MAC80211_MESH_SYNC_DEBUG
bool "Verbose mesh mesh synchronization debugging"
depends on MAC80211_DEBUG_MENU
depends on MAC80211_MESH
...
...
@@ -236,7 +258,7 @@ config MAC80211_VERBOSE_MESH_SYNC_DEBUG
Do not select this option.
config MAC80211_
VERBOSE_
TDLS_DEBUG
config MAC80211_TDLS_DEBUG
bool "Verbose TDLS debugging"
depends on MAC80211_DEBUG_MENU
---help---
...
...
net/mac80211/Makefile
View file @
2c443443
...
...
@@ -24,7 +24,7 @@ mac80211-y := \
wme.o
\
event.o
\
chan.o
\
driver-
trace.o mlme.o
trace.o mlme.o
mac80211-$(CONFIG_MAC80211_LEDS)
+=
led.o
mac80211-$(CONFIG_MAC80211_DEBUGFS)
+=
\
...
...
@@ -42,7 +42,7 @@ mac80211-$(CONFIG_MAC80211_MESH) += \
mac80211-$(CONFIG_PM)
+=
pm.o
CFLAGS_
driver-
trace.o
:=
-I
$(src)
CFLAGS_trace.o
:=
-I
$(src)
# objects for PID algorithm
rc80211_pid-y
:=
rc80211_pid_algo.o
...
...
@@ -58,4 +58,4 @@ mac80211-$(CONFIG_MAC80211_RC_PID) += $(rc80211_pid-y)
mac80211-$(CONFIG_MAC80211_RC_MINSTREL)
+=
$
(
rc80211_minstrel-y
)
mac80211-$(CONFIG_MAC80211_RC_MINSTREL_HT)
+=
$
(
rc80211_minstrel_ht-y
)
ccflags-y
+=
-D__CHECK_ENDIAN__
ccflags-y
+=
-D__CHECK_ENDIAN__
-DDEBUG
net/mac80211/agg-rx.c
View file @
2c443443
...
...
@@ -74,15 +74,17 @@ void ___ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid,
RCU_INIT_POINTER
(
sta
->
ampdu_mlme
.
tid_rx
[
tid
],
NULL
);
ht_vdbg
(
"Rx BA session stop requested for %pM tid %u %s reason: %d
\n
"
,
sta
->
sta
.
addr
,
tid
,
initiator
==
WLAN_BACK_RECIPIENT
?
"recipient"
:
"inititator"
,
(
int
)
reason
);
ht_dbg
(
sta
->
sdata
,
"Rx BA session stop requested for %pM tid %u %s reason: %d
\n
"
,
sta
->
sta
.
addr
,
tid
,
initiator
==
WLAN_BACK_RECIPIENT
?
"recipient"
:
"inititator"
,
(
int
)
reason
);
if
(
drv_ampdu_action
(
local
,
sta
->
sdata
,
IEEE80211_AMPDU_RX_STOP
,
&
sta
->
sta
,
tid
,
NULL
,
0
))
pr_debug
(
"HW problem - can not stop rx aggregation for tid %d
\n
"
,
tid
);
sdata_info
(
sta
->
sdata
,
"HW problem - can not stop rx aggregation for tid %d
\n
"
,
tid
);
/* check if this is a self generated aggregation halt */
if
(
initiator
==
WLAN_BACK_RECIPIENT
&&
tx
)
...
...
@@ -157,7 +159,7 @@ static void sta_rx_agg_session_timer_expired(unsigned long data)
}
rcu_read_unlock
();
ht_
vdbg
(
"rx session timer expired on tid %d
\n
"
,
(
u16
)
*
ptid
);
ht_
dbg
(
sta
->
sdata
,
"rx session timer expired on tid %d
\n
"
,
(
u16
)
*
ptid
);
set_bit
(
*
ptid
,
sta
->
ampdu_mlme
.
tid_rx_timer_expired
);
ieee80211_queue_work
(
&
sta
->
local
->
hw
,
&
sta
->
ampdu_mlme
.
work
);
...
...
@@ -245,7 +247,7 @@ void ieee80211_process_addba_request(struct ieee80211_local *local,
status
=
WLAN_STATUS_REQUEST_DECLINED
;
if
(
test_sta_flag
(
sta
,
WLAN_STA_BLOCK_BA
))
{
ht_
vdbg
(
"Suspend in progress - Denying ADDBA request
\n
"
);
ht_
dbg
(
sta
->
sdata
,
"Suspend in progress - Denying ADDBA request
\n
"
);
goto
end_no_lock
;
}
...
...
@@ -257,10 +259,9 @@ void ieee80211_process_addba_request(struct ieee80211_local *local,
(
!
(
sta
->
sta
.
ht_cap
.
cap
&
IEEE80211_HT_CAP_DELAY_BA
)))
||
(
buf_size
>
IEEE80211_MAX_AMPDU_BUF
))
{
status
=
WLAN_STATUS_INVALID_QOS_PARAM
;
#ifdef CONFIG_MAC80211_HT_DEBUG
net_dbg_ratelimited
(
"AddBA Req with bad params from %pM on tid %u. policy %d, buffer size %d
\n
"
,
mgmt
->
sa
,
tid
,
ba_policy
,
buf_size
);
#endif
/* CONFIG_MAC80211_HT_DEBUG */
ht_dbg_ratelimited
(
sta
->
sdata
,
"AddBA Req with bad params from %pM on tid %u. policy %d, buffer size %d
\n
"
,
mgmt
->
sa
,
tid
,
ba_policy
,
buf_size
);
goto
end_no_lock
;
}
/* determine default buffer size */
...
...
@@ -275,10 +276,9 @@ void ieee80211_process_addba_request(struct ieee80211_local *local,
mutex_lock
(
&
sta
->
ampdu_mlme
.
mtx
);
if
(
sta
->
ampdu_mlme
.
tid_rx
[
tid
])
{
#ifdef CONFIG_MAC80211_HT_DEBUG
net_dbg_ratelimited
(
"unexpected AddBA Req from %pM on tid %u
\n
"
,
mgmt
->
sa
,
tid
);
#endif
/* CONFIG_MAC80211_HT_DEBUG */
ht_dbg_ratelimited
(
sta
->
sdata
,
"unexpected AddBA Req from %pM on tid %u
\n
"
,
mgmt
->
sa
,
tid
);
/* delete existing Rx BA session on the same tid */
___ieee80211_stop_rx_ba_session
(
sta
,
tid
,
WLAN_BACK_RECIPIENT
,
...
...
@@ -317,7 +317,7 @@ void ieee80211_process_addba_request(struct ieee80211_local *local,
ret
=
drv_ampdu_action
(
local
,
sta
->
sdata
,
IEEE80211_AMPDU_RX_START
,
&
sta
->
sta
,
tid
,
&
start_seq_num
,
0
);
ht_
vdbg
(
"Rx A-MPDU request on tid %d result %d
\n
"
,
tid
,
ret
);
ht_
dbg
(
sta
->
sdata
,
"Rx A-MPDU request on tid %d result %d
\n
"
,
tid
,
ret
);
if
(
ret
)
{
kfree
(
tid_agg_rx
->
reorder_buf
);
kfree
(
tid_agg_rx
->
reorder_time
);
...
...
net/mac80211/agg-tx.c
View file @
2c443443
...
...
@@ -184,8 +184,8 @@ int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
spin_unlock_bh
(
&
sta
->
lock
);
ht_
vdbg
(
"Tx BA session stop requested for %pM tid %u
\n
"
,
sta
->
sta
.
addr
,
tid
);
ht_
dbg
(
sta
->
sdata
,
"Tx BA session stop requested for %pM tid %u
\n
"
,
sta
->
sta
.
addr
,
tid
);
del_timer_sync
(
&
tid_tx
->
addba_resp_timer
);
del_timer_sync
(
&
tid_tx
->
session_timer
);
...
...
@@ -251,12 +251,13 @@ static void sta_addba_resp_timer_expired(unsigned long data)
if
(
!
tid_tx
||
test_bit
(
HT_AGG_STATE_RESPONSE_RECEIVED
,
&
tid_tx
->
state
))
{
rcu_read_unlock
();
ht_vdbg
(
"timer expired on tid %d but we are not (or no longer) expecting addBA response there
\n
"
,
tid
);
ht_dbg
(
sta
->
sdata
,
"timer expired on tid %d but we are not (or no longer) expecting addBA response there
\n
"
,
tid
);
return
;
}
ht_
vdbg
(
"addBA response timer expired on tid %d
\n
"
,
tid
);
ht_
dbg
(
sta
->
sdata
,
"addBA response timer expired on tid %d
\n
"
,
tid
);
ieee80211_stop_tx_ba_session
(
&
sta
->
sta
,
tid
);
rcu_read_unlock
();
...
...
@@ -316,8 +317,9 @@ ieee80211_agg_splice_packets(struct ieee80211_sub_if_data *sdata,
ieee80211_stop_queue_agg
(
sdata
,
tid
);
if
(
WARN
(
!
tid_tx
,
"TID %d gone but expected when splicing aggregates"
" from the pending queue
\n
"
,
tid
))
if
(
WARN
(
!
tid_tx
,
"TID %d gone but expected when splicing aggregates from the pending queue
\n
"
,
tid
))
return
;
if
(
!
skb_queue_empty
(
&
tid_tx
->
pending
))
{
...
...
@@ -365,7 +367,8 @@ void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid)
ret
=
drv_ampdu_action
(
local
,
sdata
,
IEEE80211_AMPDU_TX_START
,
&
sta
->
sta
,
tid
,
&
start_seq_num
,
0
);
if
(
ret
)
{
ht_vdbg
(
"BA request denied - HW unavailable for tid %d
\n
"
,
tid
);
ht_dbg
(
sdata
,
"BA request denied - HW unavailable for tid %d
\n
"
,
tid
);
spin_lock_bh
(
&
sta
->
lock
);
ieee80211_agg_splice_packets
(
sdata
,
tid_tx
,
tid
);
ieee80211_assign_tid_tx
(
sta
,
tid
,
NULL
);
...
...
@@ -378,7 +381,7 @@ void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid)
/* activate the timer for the recipient's addBA response */
mod_timer
(
&
tid_tx
->
addba_resp_timer
,
jiffies
+
ADDBA_RESP_INTERVAL
);
ht_
vdbg
(
"activated addBA response timer on tid %d
\n
"
,
tid
);
ht_
dbg
(
sdata
,
"activated addBA response timer on tid %d
\n
"
,
tid
);
spin_lock_bh
(
&
sta
->
lock
);
sta
->
ampdu_mlme
.
last_addba_req_time
[
tid
]
=
jiffies
;
...
...
@@ -425,7 +428,7 @@ static void sta_tx_agg_session_timer_expired(unsigned long data)
rcu_read_unlock
();
ht_
vdbg
(
"tx session timer expired on tid %d
\n
"
,
(
u16
)
*
ptid
);
ht_
dbg
(
sta
->
sdata
,
"tx session timer expired on tid %d
\n
"
,
(
u16
)
*
ptid
);
ieee80211_stop_tx_ba_session
(
&
sta
->
sta
,
*
ptid
);
}
...
...
@@ -449,8 +452,8 @@ int ieee80211_start_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid,
(
local
->
hw
.
flags
&
IEEE80211_HW_TX_AMPDU_SETUP_IN_HW
))
return
-
EINVAL
;
ht_
vdbg
(
"Open BA session requested for %pM tid %u
\n
"
,
pubsta
->
addr
,
tid
);
ht_
dbg
(
sdata
,
"Open BA session requested for %pM tid %u
\n
"
,
pubsta
->
addr
,
tid
);
if
(
sdata
->
vif
.
type
!=
NL80211_IFTYPE_STATION
&&
sdata
->
vif
.
type
!=
NL80211_IFTYPE_MESH_POINT
&&
...
...
@@ -460,7 +463,8 @@ int ieee80211_start_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid,
return
-
EINVAL
;
if
(
test_sta_flag
(
sta
,
WLAN_STA_BLOCK_BA
))
{
ht_vdbg
(
"BA sessions blocked - Denying BA session request
\n
"
);
ht_dbg
(
sdata
,
"BA sessions blocked - Denying BA session request
\n
"
);
return
-
EINVAL
;
}
...
...
@@ -478,8 +482,9 @@ int ieee80211_start_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid,
*/
if
(
sta
->
sdata
->
vif
.
type
==
NL80211_IFTYPE_ADHOC
&&
!
sta
->
sta
.
ht_cap
.
ht_supported
)
{
ht_vdbg
(
"BA request denied - IBSS STA %pM does not advertise HT support
\n
"
,
pubsta
->
addr
);
ht_dbg
(
sdata
,
"BA request denied - IBSS STA %pM does not advertise HT support
\n
"
,
pubsta
->
addr
);
return
-
EINVAL
;
}
...
...
@@ -499,8 +504,9 @@ int ieee80211_start_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid,
if
(
sta
->
ampdu_mlme
.
addba_req_num
[
tid
]
>
HT_AGG_BURST_RETRIES
&&
time_before
(
jiffies
,
sta
->
ampdu_mlme
.
last_addba_req_time
[
tid
]
+
HT_AGG_RETRIES_PERIOD
))
{
ht_vdbg
(
"BA request denied - waiting a grace period after %d failed requests on tid %u
\n
"
,
sta
->
ampdu_mlme
.
addba_req_num
[
tid
],
tid
);
ht_dbg
(
sdata
,
"BA request denied - waiting a grace period after %d failed requests on tid %u
\n
"
,
sta
->
ampdu_mlme
.
addba_req_num
[
tid
],
tid
);
ret
=
-
EBUSY
;
goto
err_unlock_sta
;
}
...
...
@@ -508,8 +514,9 @@ int ieee80211_start_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid,
tid_tx
=
rcu_dereference_protected_tid_tx
(
sta
,
tid
);
/* check if the TID is not in aggregation flow already */
if
(
tid_tx
||
sta
->
ampdu_mlme
.
tid_start_tx
[
tid
])
{
ht_vdbg
(
"BA request denied - session is not idle on tid %u
\n
"
,
tid
);
ht_dbg
(
sdata
,
"BA request denied - session is not idle on tid %u
\n
"
,
tid
);
ret
=
-
EAGAIN
;
goto
err_unlock_sta
;
}
...
...
@@ -564,7 +571,7 @@ static void ieee80211_agg_tx_operational(struct ieee80211_local *local,
tid_tx
=
rcu_dereference_protected_tid_tx
(
sta
,
tid
);
ht_
vdbg
(
"Aggregation is on for tid %d
\n
"
,
tid
);
ht_
dbg
(
sta
->
sdata
,
"Aggregation is on for tid %d
\n
"
,
tid
);
drv_ampdu_action
(
local
,
sta
->
sdata
,
IEEE80211_AMPDU_TX_OPERATIONAL
,
...
...
@@ -598,7 +605,8 @@ void ieee80211_start_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u16 tid)
trace_api_start_tx_ba_cb
(
sdata
,
ra
,
tid
);
if
(
tid
>=
STA_TID_NUM
)
{
ht_vdbg
(
"Bad TID value: tid = %d (>= %d)
\n
"
,
tid
,
STA_TID_NUM
);
ht_dbg
(
sdata
,
"Bad TID value: tid = %d (>= %d)
\n
"
,
tid
,
STA_TID_NUM
);
return
;
}
...
...
@@ -606,7 +614,7 @@ void ieee80211_start_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u16 tid)
sta
=
sta_info_get_bss
(
sdata
,
ra
);
if
(
!
sta
)
{
mutex_unlock
(
&
local
->
sta_mtx
);
ht_
vdbg
(
"Could not find station: %pM
\n
"
,
ra
);
ht_
dbg
(
sdata
,
"Could not find station: %pM
\n
"
,
ra
);
return
;
}
...
...
@@ -614,7 +622,7 @@ void ieee80211_start_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u16 tid)
tid_tx
=
rcu_dereference_protected_tid_tx
(
sta
,
tid
);
if
(
WARN_ON
(
!
tid_tx
))
{
ht_
vdbg
(
"addBA was not requested!
\n
"
);
ht_
dbg
(
sdata
,
"addBA was not requested!
\n
"
);
goto
unlock
;
}
...
...
@@ -714,17 +722,18 @@ void ieee80211_stop_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u8 tid)
trace_api_stop_tx_ba_cb
(
sdata
,
ra
,
tid
);
if
(
tid
>=
STA_TID_NUM
)
{
ht_vdbg
(
"Bad TID value: tid = %d (>= %d)
\n
"
,
tid
,
STA_TID_NUM
);
ht_dbg
(
sdata
,
"Bad TID value: tid = %d (>= %d)
\n
"
,
tid
,
STA_TID_NUM
);
return
;
}
ht_
vdbg
(
"Stopping Tx BA session for %pM tid %d
\n
"
,
ra
,
tid
);
ht_
dbg
(
sdata
,
"Stopping Tx BA session for %pM tid %d
\n
"
,
ra
,
tid
);
mutex_lock
(
&
local
->
sta_mtx
);
sta
=
sta_info_get_bss
(
sdata
,
ra
);
if
(
!
sta
)
{
ht_
vdbg
(
"Could not find station: %pM
\n
"
,
ra
);
ht_
dbg
(
sdata
,
"Could not find station: %pM
\n
"
,
ra
);
goto
unlock
;
}
...
...
@@ -733,7 +742,7 @@ void ieee80211_stop_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u8 tid)
tid_tx
=
rcu_dereference_protected_tid_tx
(
sta
,
tid
);
if
(
!
tid_tx
||
!
test_bit
(
HT_AGG_STATE_STOPPING
,
&
tid_tx
->
state
))
{
ht_
vdbg
(
"unexpected callback to A-MPDU stop
\n
"
);
ht_
dbg
(
sdata
,
"unexpected callback to A-MPDU stop
\n
"
);
goto
unlock_sta
;
}
...
...
@@ -809,13 +818,13 @@ void ieee80211_process_addba_resp(struct ieee80211_local *local,
goto
out
;
if
(
mgmt
->
u
.
action
.
u
.
addba_resp
.
dialog_token
!=
tid_tx
->
dialog_token
)
{
ht_
vdbg
(
"wrong addBA response token, tid %d
\n
"
,
tid
);
ht_
dbg
(
sta
->
sdata
,
"wrong addBA response token, tid %d
\n
"
,
tid
);
goto
out
;
}
del_timer_sync
(
&
tid_tx
->
addba_resp_timer
);
ht_
vdbg
(
"switched off addBA timer for tid %d
\n
"
,
tid
);
ht_
dbg
(
sta
->
sdata
,
"switched off addBA timer for tid %d
\n
"
,
tid
);
/*
* addba_resp_timer may have fired before we got here, and
...
...
@@ -824,8 +833,9 @@ void ieee80211_process_addba_resp(struct ieee80211_local *local,
*/
if
(
test_bit
(
HT_AGG_STATE_WANT_STOP
,
&
tid_tx
->
state
)
||
test_bit
(
HT_AGG_STATE_STOPPING
,
&
tid_tx
->
state
))
{
ht_vdbg
(
"got addBA resp for tid %d but we already gave up
\n
"
,
tid
);
ht_dbg
(
sta
->
sdata
,
"got addBA resp for tid %d but we already gave up
\n
"
,
tid
);
goto
out
;
}
...
...
net/mac80211/cfg.c
View file @
2c443443
...
...
@@ -353,6 +353,7 @@ void sta_set_rate_info_tx(struct sta_info *sta,
static
void
sta_set_sinfo
(
struct
sta_info
*
sta
,
struct
station_info
*
sinfo
)
{
struct
ieee80211_sub_if_data
*
sdata
=
sta
->
sdata
;
struct
ieee80211_local
*
local
=
sdata
->
local
;
struct
timespec
uptime
;
sinfo
->
generation
=
sdata
->
local
->
sta_generation
;
...
...
@@ -388,7 +389,9 @@ static void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo)
if
((
sta
->
local
->
hw
.
flags
&
IEEE80211_HW_SIGNAL_DBM
)
||
(
sta
->
local
->
hw
.
flags
&
IEEE80211_HW_SIGNAL_UNSPEC
))
{
sinfo
->
filled
|=
STATION_INFO_SIGNAL
|
STATION_INFO_SIGNAL_AVG
;
sinfo
->
signal
=
(
s8
)
sta
->
last_signal
;
if
(
!
local
->
ops
->
get_rssi
||
drv_get_rssi
(
local
,
sdata
,
&
sta
->
sta
,
&
sinfo
->
signal
))
sinfo
->
signal
=
(
s8
)
sta
->
last_signal
;
sinfo
->
signal_avg
=
(
s8
)
-
ewma_read
(
&
sta
->
avg_signal
);
}
...
...
@@ -517,7 +520,7 @@ static void ieee80211_get_et_stats(struct wiphy *wiphy,
* network device.
*/
rcu_read_lock
(
);
mutex_lock
(
&
local
->
sta_mtx
);
if
(
sdata
->
vif
.
type
==
NL80211_IFTYPE_STATION
)
{
sta
=
sta_info_get_bss
(
sdata
,
sdata
->
u
.
mgd
.
bssid
);
...
...
@@ -546,7 +549,7 @@ static void ieee80211_get_et_stats(struct wiphy *wiphy,
data
[
i
]
=
(
u8
)
sinfo
.
signal_avg
;
i
++
;
}
else
{
list_for_each_entry
_rcu
(
sta
,
&
local
->
sta_list
,
list
)
{
list_for_each_entry
(
sta
,
&
local
->
sta_list
,
list
)
{
/* Make sure this station belongs to the proper dev */
if
(
sta
->
sdata
->
dev
!=
dev
)
continue
;
...
...
@@ -603,7 +606,7 @@ static void ieee80211_get_et_stats(struct wiphy *wiphy,
else
data
[
i
++
]
=
-
1LL
;
rcu_read_unlock
(
);
mutex_unlock
(
&
local
->
sta_mtx
);
if
(
WARN_ON
(
i
!=
STA_STATS_LEN
))
return
;
...
...
@@ -629,10 +632,11 @@ static int ieee80211_dump_station(struct wiphy *wiphy, struct net_device *dev,
int
idx
,
u8
*
mac
,
struct
station_info
*
sinfo
)
{
struct
ieee80211_sub_if_data
*
sdata
=
IEEE80211_DEV_TO_SUB_IF
(
dev
);
struct
ieee80211_local
*
local
=
sdata
->
local
;
struct
sta_info
*
sta
;
int
ret
=
-
ENOENT
;
rcu_read_lock
(
);
mutex_lock
(
&
local
->
sta_mtx
);
sta
=
sta_info_get_by_idx
(
sdata
,
idx
);
if
(
sta
)
{
...
...
@@ -641,7 +645,7 @@ static int ieee80211_dump_station(struct wiphy *wiphy, struct net_device *dev,
sta_set_sinfo
(
sta
,
sinfo
);
}
rcu_read_unlock
(
);
mutex_unlock
(
&
local
->
sta_mtx
);
return
ret
;
}
...
...
@@ -658,10 +662,11 @@ static int ieee80211_get_station(struct wiphy *wiphy, struct net_device *dev,
u8
*
mac
,
struct
station_info
*
sinfo
)
{
struct
ieee80211_sub_if_data
*
sdata
=
IEEE80211_DEV_TO_SUB_IF
(
dev
);
struct
ieee80211_local
*
local
=
sdata
->
local
;
struct
sta_info
*
sta
;
int
ret
=
-
ENOENT
;
rcu_read_lock
(
);
mutex_lock
(
&
local
->
sta_mtx
);
sta
=
sta_info_get_bss
(
sdata
,
mac
);
if
(
sta
)
{
...
...
@@ -669,7 +674,7 @@ static int ieee80211_get_station(struct wiphy *wiphy, struct net_device *dev,
sta_set_sinfo
(
sta
,
sinfo
);
}
rcu_read_unlock
(
);
mutex_unlock
(
&
local
->
sta_mtx
);
return
ret
;
}
...
...
@@ -2769,9 +2774,8 @@ static int ieee80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *dev,
!
sdata
->
u
.
mgd
.
associated
)
return
-
EINVAL
;
#ifdef CONFIG_MAC80211_VERBOSE_TDLS_DEBUG
pr_debug
(
"TDLS mgmt action %d peer %pM
\n
"
,
action_code
,
peer
);
#endif
tdls_dbg
(
sdata
,
"TDLS mgmt action %d peer %pM
\n
"
,
action_code
,
peer
);
skb
=
dev_alloc_skb
(
local
->
hw
.
extra_tx_headroom
+
max
(
sizeof
(
struct
ieee80211_mgmt
),
...
...
@@ -2880,9 +2884,7 @@ static int ieee80211_tdls_oper(struct wiphy *wiphy, struct net_device *dev,
if
(
sdata
->
vif
.
type
!=
NL80211_IFTYPE_STATION
)
return
-
EINVAL
;
#ifdef CONFIG_MAC80211_VERBOSE_TDLS_DEBUG
pr_debug
(
"TDLS oper %d peer %pM
\n
"
,
oper
,
peer
);
#endif
tdls_dbg
(
sdata
,
"TDLS oper %d peer %pM
\n
"
,
oper
,
peer
);
switch
(
oper
)
{
case
NL80211_TDLS_ENABLE_LINK
:
...
...
net/mac80211/debug.h
0 → 100644
View file @
2c443443
#ifndef __MAC80211_DEBUG_H
#define __MAC80211_DEBUG_H
#include <net/cfg80211.h>
#ifdef CONFIG_MAC80211_IBSS_DEBUG
#define MAC80211_IBSS_DEBUG 1
#else
#define MAC80211_IBSS_DEBUG 0
#endif
#ifdef CONFIG_MAC80211_PS_DEBUG
#define MAC80211_PS_DEBUG 1
#else
#define MAC80211_PS_DEBUG 0
#endif
#ifdef CONFIG_MAC80211_HT_DEBUG
#define MAC80211_HT_DEBUG 1
#else
#define MAC80211_HT_DEBUG 0
#endif
#ifdef CONFIG_MAC80211_MPL_DEBUG
#define MAC80211_MPL_DEBUG 1
#else
#define MAC80211_MPL_DEBUG 0
#endif
#ifdef CONFIG_MAC80211_MPATH_DEBUG
#define MAC80211_MPATH_DEBUG 1
#else
#define MAC80211_MPATH_DEBUG 0
#endif
#ifdef CONFIG_MAC80211_MHWMP_DEBUG
#define MAC80211_MHWMP_DEBUG 1
#else
#define MAC80211_MHWMP_DEBUG 0
#endif
#ifdef CONFIG_MAC80211_MESH_SYNC_DEBUG
#define MAC80211_MESH_SYNC_DEBUG 1
#else
#define MAC80211_MESH_SYNC_DEBUG 0
#endif
#ifdef CONFIG_MAC80211_TDLS_DEBUG
#define MAC80211_TDLS_DEBUG 1
#else
#define MAC80211_TDLS_DEBUG 0
#endif
#ifdef CONFIG_MAC80211_STA_DEBUG
#define MAC80211_STA_DEBUG 1
#else
#define MAC80211_STA_DEBUG 0
#endif
#ifdef CONFIG_MAC80211_MLME_DEBUG
#define MAC80211_MLME_DEBUG 1
#else
#define MAC80211_MLME_DEBUG 0
#endif
#ifdef CONFIG_MAC80211_MESSAGE_TRACING
void
__sdata_info
(
const
char
*
fmt
,
...)
__printf
(
1
,
2
);
void
__sdata_dbg
(
bool
print
,
const
char
*
fmt
,
...)
__printf
(
2
,
3
);
void
__sdata_err
(
const
char
*
fmt
,
...)
__printf
(
1
,
2
);
void
__wiphy_dbg
(
struct
wiphy
*
wiphy
,
bool
print
,
const
char
*
fmt
,
...)
__printf
(
3
,
4
);
#define _sdata_info(sdata, fmt, ...) \
__sdata_info("%s: " fmt, (sdata)->name, ##__VA_ARGS__)
#define _sdata_dbg(print, sdata, fmt, ...) \
__sdata_dbg(print, "%s: " fmt, (sdata)->name, ##__VA_ARGS__)
#define _sdata_err(sdata, fmt, ...) \
__sdata_err("%s: " fmt, (sdata)->name, ##__VA_ARGS__)
#define _wiphy_dbg(print, wiphy, fmt, ...) \
__wiphy_dbg(wiphy, print, fmt, ##__VA_ARGS__)
#else
#define _sdata_info(sdata, fmt, ...) \
do { \
pr_info("%s: " fmt, \
(sdata)->name, ##__VA_ARGS__); \
} while (0)
#define _sdata_dbg(print, sdata, fmt, ...) \
do { \
if (print) \
pr_debug("%s: " fmt, \
(sdata)->name, ##__VA_ARGS__); \
} while (0)
#define _sdata_err(sdata, fmt, ...) \
do { \
pr_err("%s: " fmt, \
(sdata)->name, ##__VA_ARGS__); \
} while (0)
#define _wiphy_dbg(print, wiphy, fmt, ...) \
do { \
if (print) \
wiphy_dbg((wiphy), fmt, ##__VA_ARGS__); \
} while (0)
#endif
#define sdata_info(sdata, fmt, ...) \
_sdata_info(sdata, fmt, ##__VA_ARGS__)
#define sdata_err(sdata, fmt, ...) \
_sdata_err(sdata, fmt, ##__VA_ARGS__)
#define sdata_dbg(sdata, fmt, ...) \
_sdata_dbg(1, sdata, fmt, ##__VA_ARGS__)
#define ht_dbg(sdata, fmt, ...) \
_sdata_dbg(MAC80211_HT_DEBUG, \
sdata, fmt, ##__VA_ARGS__)
#define ht_dbg_ratelimited(sdata, fmt, ...) \
_sdata_dbg(MAC80211_HT_DEBUG && net_ratelimit(), \
sdata, fmt, ##__VA_ARGS__)
#define ibss_dbg(sdata, fmt, ...) \
_sdata_dbg(MAC80211_IBSS_DEBUG, \
sdata, fmt, ##__VA_ARGS__)
#define ps_dbg(sdata, fmt, ...) \
_sdata_dbg(MAC80211_PS_DEBUG, \
sdata, fmt, ##__VA_ARGS__)
#define ps_dbg_hw(hw, fmt, ...) \
_wiphy_dbg(MAC80211_PS_DEBUG, \
(hw)->wiphy, fmt, ##__VA_ARGS__)
#define ps_dbg_ratelimited(sdata, fmt, ...) \
_sdata_dbg(MAC80211_PS_DEBUG && net_ratelimit(), \
sdata, fmt, ##__VA_ARGS__)
#define mpl_dbg(sdata, fmt, ...) \
_sdata_dbg(MAC80211_MPL_DEBUG, \
sdata, fmt, ##__VA_ARGS__)
#define mpath_dbg(sdata, fmt, ...) \
_sdata_dbg(MAC80211_MPATH_DEBUG, \
sdata, fmt, ##__VA_ARGS__)
#define mhwmp_dbg(sdata, fmt, ...) \
_sdata_dbg(MAC80211_MHWMP_DEBUG, \
sdata, fmt, ##__VA_ARGS__)
#define msync_dbg(sdata, fmt, ...) \
_sdata_dbg(MAC80211_MESH_SYNC_DEBUG, \
sdata, fmt, ##__VA_ARGS__)
#define tdls_dbg(sdata, fmt, ...) \
_sdata_dbg(MAC80211_TDLS_DEBUG, \
sdata, fmt, ##__VA_ARGS__)
#define sta_dbg(sdata, fmt, ...) \
_sdata_dbg(MAC80211_STA_DEBUG, \
sdata, fmt, ##__VA_ARGS__)
#define mlme_dbg(sdata, fmt, ...) \
_sdata_dbg(MAC80211_MLME_DEBUG, \
sdata, fmt, ##__VA_ARGS__)
#define mlme_dbg_ratelimited(sdata, fmt, ...) \
_sdata_dbg(MAC80211_MLME_DEBUG && net_ratelimit(), \
sdata, fmt, ##__VA_ARGS__)
#endif
/* __MAC80211_DEBUG_H */
net/mac80211/debugfs_netdev.c
View file @
2c443443
...
...
@@ -695,6 +695,7 @@ void ieee80211_debugfs_rename_netdev(struct ieee80211_sub_if_data *sdata)
sprintf
(
buf
,
"netdev:%s"
,
sdata
->
name
);
if
(
!
debugfs_rename
(
dir
->
d_parent
,
dir
,
dir
->
d_parent
,
buf
))
pr_err
(
"mac80211: debugfs: failed to rename debugfs "
"dir to %s
\n
"
,
buf
);
sdata_err
(
sdata
,
"debugfs: failed to rename debugfs dir to %s
\n
"
,
buf
);
}
net/mac80211/driver-ops.h
View file @
2c443443
...
...
@@ -3,7 +3,7 @@
#include <net/mac80211.h>
#include "ieee80211_i.h"
#include "
driver-
trace.h"
#include "trace.h"
static
inline
void
check_sdata_in_driver
(
struct
ieee80211_sub_if_data
*
sdata
)
{
...
...
@@ -845,4 +845,19 @@ drv_allow_buffered_frames(struct ieee80211_local *local,
more_data
);
trace_drv_return_void
(
local
);
}
static
inline
int
drv_get_rssi
(
struct
ieee80211_local
*
local
,
struct
ieee80211_sub_if_data
*
sdata
,
struct
ieee80211_sta
*
sta
,
s8
*
rssi_dbm
)
{
int
ret
;
might_sleep
();
ret
=
local
->
ops
->
get_rssi
(
&
local
->
hw
,
&
sdata
->
vif
,
sta
,
rssi_dbm
);
trace_drv_get_rssi
(
local
,
sta
,
*
rssi_dbm
,
ret
);
return
ret
;
}
#endif
/* __MAC80211_DRIVER_OPS */
net/mac80211/driver-trace.c
deleted
100644 → 0
View file @
5ea27696
/* bug in tracepoint.h, it should include this */
#include <linux/module.h>
/* sparse isn't too happy with all macros... */
#ifndef __CHECKER__
#include "driver-ops.h"
#define CREATE_TRACE_POINTS
#include "driver-trace.h"
#endif
net/mac80211/ht.c
View file @
2c443443
...
...
@@ -305,12 +305,10 @@ void ieee80211_process_delba(struct ieee80211_sub_if_data *sdata,
tid
=
(
params
&
IEEE80211_DELBA_PARAM_TID_MASK
)
>>
12
;
initiator
=
(
params
&
IEEE80211_DELBA_PARAM_INITIATOR_MASK
)
>>
11
;
#ifdef CONFIG_MAC80211_HT_DEBUG
net_dbg_ratelimited
(
"delba from %pM (%s) tid %d reason code %d
\n
"
,
mgmt
->
sa
,
initiator
?
"initiator"
:
"recipient"
,
tid
,
le16_to_cpu
(
mgmt
->
u
.
action
.
u
.
delba
.
reason_code
));
#endif
/* CONFIG_MAC80211_HT_DEBUG */
ht_dbg_ratelimited
(
sdata
,
"delba from %pM (%s) tid %d reason code %d
\n
"
,
mgmt
->
sa
,
initiator
?
"initiator"
:
"recipient"
,
tid
,
le16_to_cpu
(
mgmt
->
u
.
action
.
u
.
delba
.
reason_code
));
if
(
initiator
==
WLAN_BACK_INITIATOR
)
__ieee80211_stop_rx_ba_session
(
sta
,
tid
,
WLAN_BACK_INITIATOR
,
0
,
...
...
net/mac80211/ibss.c
View file @
2c443443
...
...
@@ -261,11 +261,7 @@ static struct sta_info *ieee80211_ibss_finish_sta(struct sta_info *sta,
memcpy
(
addr
,
sta
->
sta
.
addr
,
ETH_ALEN
);
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
wiphy_debug
(
sdata
->
local
->
hw
.
wiphy
,
"Adding new IBSS station %pM (dev=%s)
\n
"
,
addr
,
sdata
->
name
);
#endif
ibss_dbg
(
sdata
,
"Adding new IBSS station %pM
\n
"
,
addr
);
sta_info_pre_move_state
(
sta
,
IEEE80211_STA_AUTH
);
sta_info_pre_move_state
(
sta
,
IEEE80211_STA_ASSOC
);
...
...
@@ -280,8 +276,9 @@ static struct sta_info *ieee80211_ibss_finish_sta(struct sta_info *sta,
if
(
sta_info_insert_rcu
(
sta
))
return
sta_info_get
(
sdata
,
addr
);
if
(
auth
&&
!
sdata
->
u
.
ibss
.
auth_frame_registrations
)
{
ibss_vdbg
(
"TX Auth SA=%pM DA=%pM BSSID=%pM (auth_transaction=1)
\n
"
,
sdata
->
vif
.
addr
,
sdata
->
u
.
ibss
.
bssid
,
addr
);
ibss_dbg
(
sdata
,
"TX Auth SA=%pM DA=%pM BSSID=%pM (auth_transaction=1)
\n
"
,
sdata
->
vif
.
addr
,
sdata
->
u
.
ibss
.
bssid
,
addr
);
ieee80211_send_auth
(
sdata
,
1
,
WLAN_AUTH_OPEN
,
NULL
,
0
,
addr
,
sdata
->
u
.
ibss
.
bssid
,
NULL
,
0
,
0
);
}
...
...
@@ -304,7 +301,7 @@ ieee80211_ibss_add_sta(struct ieee80211_sub_if_data *sdata,
* allow new one to be added.
*/
if
(
local
->
num_sta
>=
IEEE80211_IBSS_MAX_STA_ENTRIES
)
{
net_
dbg
_ratelimited
(
"%s: No room for a new IBSS STA entry %pM
\n
"
,
net_
info
_ratelimited
(
"%s: No room for a new IBSS STA entry %pM
\n
"
,
sdata
->
name
,
addr
);
rcu_read_lock
();
return
NULL
;
...
...
@@ -351,9 +348,9 @@ static void ieee80211_rx_mgmt_auth_ibss(struct ieee80211_sub_if_data *sdata,
if
(
auth_alg
!=
WLAN_AUTH_OPEN
||
auth_transaction
!=
1
)
return
;
ibss_
vdbg
(
"%s: RX Auth SA=%pM DA=%pM BSSID=%pM (auth_transaction=%d)
\n
"
,
sdata
->
name
,
mgmt
->
sa
,
mgmt
->
da
,
mgmt
->
bssid
,
auth_transaction
);
ibss_
dbg
(
sdata
,
"RX Auth SA=%pM DA=%pM BSSID=%pM (auth_transaction=%d)
\n
"
,
mgmt
->
sa
,
mgmt
->
da
,
mgmt
->
bssid
,
auth_transaction
);
sta_info_destroy_addr
(
sdata
,
mgmt
->
sa
);
ieee80211_ibss_add_sta
(
sdata
,
mgmt
->
bssid
,
mgmt
->
sa
,
0
,
false
);
rcu_read_unlock
();
...
...
@@ -416,10 +413,10 @@ static void ieee80211_rx_bss_info(struct ieee80211_sub_if_data *sdata,
ieee80211_mandatory_rates
(
local
,
band
);
if
(
sta
->
sta
.
supp_rates
[
band
]
!=
prev_rates
)
{
ibss_
vdbg
(
"%s: updated supp_rates set for %pM based on beacon/probe_resp (0x%x -> 0x%x)
\n
"
,
sdata
->
name
,
sta
->
sta
.
addr
,
prev_rates
,
sta
->
sta
.
supp_rates
[
band
]);
ibss_
dbg
(
sdata
,
"updated supp_rates set for %pM based on beacon/probe_resp (0x%x -> 0x%x)
\n
"
,
sta
->
sta
.
addr
,
prev_rates
,
sta
->
sta
.
supp_rates
[
band
]);
rates_updated
=
true
;
}
}
else
{
...
...
@@ -534,16 +531,18 @@ static void ieee80211_rx_bss_info(struct ieee80211_sub_if_data *sdata,
rx_timestamp
=
drv_get_tsf
(
local
,
sdata
);
}
ibss_vdbg
(
"RX beacon SA=%pM BSSID=%pM TSF=0x%llx BCN=0x%llx diff=%lld @%lu
\n
"
,
mgmt
->
sa
,
mgmt
->
bssid
,
(
unsigned
long
long
)
rx_timestamp
,
(
unsigned
long
long
)
beacon_timestamp
,
(
unsigned
long
long
)(
rx_timestamp
-
beacon_timestamp
),
jiffies
);
ibss_dbg
(
sdata
,
"RX beacon SA=%pM BSSID=%pM TSF=0x%llx BCN=0x%llx diff=%lld @%lu
\n
"
,
mgmt
->
sa
,
mgmt
->
bssid
,
(
unsigned
long
long
)
rx_timestamp
,
(
unsigned
long
long
)
beacon_timestamp
,
(
unsigned
long
long
)(
rx_timestamp
-
beacon_timestamp
),
jiffies
);
if
(
beacon_timestamp
>
rx_timestamp
)
{
ibss_vdbg
(
"%s: beacon TSF higher than local TSF - IBSS merge with BSSID %pM
\n
"
,
sdata
->
name
,
mgmt
->
bssid
);
ibss_dbg
(
sdata
,
"beacon TSF higher than local TSF - IBSS merge with BSSID %pM
\n
"
,
mgmt
->
bssid
);
ieee80211_sta_join_ibss
(
sdata
,
bss
);
supp_rates
=
ieee80211_sta_get_rates
(
local
,
elems
,
band
,
NULL
);
ieee80211_ibss_add_sta
(
sdata
,
mgmt
->
bssid
,
mgmt
->
sa
,
...
...
@@ -569,7 +568,7 @@ void ieee80211_ibss_rx_no_sta(struct ieee80211_sub_if_data *sdata,
* allow new one to be added.
*/
if
(
local
->
num_sta
>=
IEEE80211_IBSS_MAX_STA_ENTRIES
)
{
net_
dbg
_ratelimited
(
"%s: No room for a new IBSS STA entry %pM
\n
"
,
net_
info
_ratelimited
(
"%s: No room for a new IBSS STA entry %pM
\n
"
,
sdata
->
name
,
addr
);
return
;
}
...
...
@@ -645,8 +644,8 @@ static void ieee80211_sta_merge_ibss(struct ieee80211_sub_if_data *sdata)
if
(
ifibss
->
fixed_channel
)
return
;
pr_debug
(
"%s: No active IBSS STAs - trying to scan for other IBSS networks with same SSID (merge)
\n
"
,
sdata
->
name
);
sdata_info
(
sdata
,
"No active IBSS STAs - trying to scan for other IBSS networks with same SSID (merge)
\n
"
);
ieee80211_request_internal_scan
(
sdata
,
ifibss
->
ssid
,
ifibss
->
ssid_len
,
NULL
);
...
...
@@ -674,8 +673,7 @@ static void ieee80211_sta_create_ibss(struct ieee80211_sub_if_data *sdata)
bssid
[
0
]
|=
0x02
;
}
pr_debug
(
"%s: Creating new IBSS network, BSSID %pM
\n
"
,
sdata
->
name
,
bssid
);
sdata_info
(
sdata
,
"Creating new IBSS network, BSSID %pM
\n
"
,
bssid
);
capability
=
WLAN_CAPABILITY_IBSS
;
...
...
@@ -706,8 +704,7 @@ static void ieee80211_sta_find_ibss(struct ieee80211_sub_if_data *sdata)
lockdep_assert_held
(
&
ifibss
->
mtx
);
active_ibss
=
ieee80211_sta_active_ibss
(
sdata
);
ibss_vdbg
(
"%s: sta_find_ibss (active_ibss=%d)
\n
"
,
sdata
->
name
,
active_ibss
);
ibss_dbg
(
sdata
,
"sta_find_ibss (active_ibss=%d)
\n
"
,
active_ibss
);
if
(
active_ibss
)
return
;
...
...
@@ -730,23 +727,24 @@ static void ieee80211_sta_find_ibss(struct ieee80211_sub_if_data *sdata)
struct
ieee80211_bss
*
bss
;
bss
=
(
void
*
)
cbss
->
priv
;
ibss_vdbg
(
" sta_find_ibss: selected %pM current %pM
\n
"
,
cbss
->
bssid
,
ifibss
->
bssid
);
pr_debug
(
"%s: Selected IBSS BSSID %pM based on configured SSID
\n
"
,
sdata
->
name
,
cbss
->
bssid
);
ibss_dbg
(
sdata
,
"sta_find_ibss: selected %pM current %pM
\n
"
,
cbss
->
bssid
,
ifibss
->
bssid
);
sdata_info
(
sdata
,
"Selected IBSS BSSID %pM based on configured SSID
\n
"
,
cbss
->
bssid
);
ieee80211_sta_join_ibss
(
sdata
,
bss
);
ieee80211_rx_bss_put
(
local
,
bss
);
return
;
}
ibss_
vdbg
(
"
did not try to join ibss
\n
"
);
ibss_
dbg
(
sdata
,
"sta_find_ibss:
did not try to join ibss
\n
"
);
/* Selected IBSS not found in current scan results - try to scan */
if
(
time_after
(
jiffies
,
ifibss
->
last_scan_completed
+
IEEE80211_SCAN_INTERVAL
))
{
pr_debug
(
"%s: Trigger new scan to find an IBSS to join
\n
"
,
sdata
->
name
);
sdata_info
(
sdata
,
"Trigger new scan to find an IBSS to join
\n
"
);
ieee80211_request_internal_scan
(
sdata
,
ifibss
->
ssid
,
ifibss
->
ssid_len
,
...
...
@@ -760,9 +758,8 @@ static void ieee80211_sta_find_ibss(struct ieee80211_sub_if_data *sdata)
ieee80211_sta_create_ibss
(
sdata
);
return
;
}
pr_debug
(
"%s: IBSS not allowed on %d MHz
\n
"
,
sdata
->
name
,
local
->
hw
.
conf
.
channel
->
center_freq
);
sdata_info
(
sdata
,
"IBSS not allowed on %d MHz
\n
"
,
local
->
hw
.
conf
.
channel
->
center_freq
);
/* No IBSS found - decrease scan interval and continue
* scanning. */
...
...
@@ -797,9 +794,9 @@ static void ieee80211_rx_mgmt_probe_req(struct ieee80211_sub_if_data *sdata,
tx_last_beacon
=
drv_tx_last_beacon
(
local
);
ibss_
vdbg
(
"%s: RX ProbeReq SA=%pM DA=%pM BSSID=%pM (tx_last_beacon=%d)
\n
"
,
sdata
->
name
,
mgmt
->
sa
,
mgmt
->
da
,
mgmt
->
bssid
,
tx_last_beacon
);
ibss_
dbg
(
sdata
,
"RX ProbeReq SA=%pM DA=%pM BSSID=%pM (tx_last_beacon=%d)
\n
"
,
mgmt
->
sa
,
mgmt
->
da
,
mgmt
->
bssid
,
tx_last_beacon
);
if
(
!
tx_last_beacon
&&
is_multicast_ether_addr
(
mgmt
->
da
))
return
;
...
...
@@ -812,8 +809,8 @@ static void ieee80211_rx_mgmt_probe_req(struct ieee80211_sub_if_data *sdata,
pos
=
mgmt
->
u
.
probe_req
.
variable
;
if
(
pos
[
0
]
!=
WLAN_EID_SSID
||
pos
+
2
+
pos
[
1
]
>
end
)
{
ibss_
vdbg
(
"%s:
Invalid SSID IE in ProbeReq from %pM
\n
"
,
sdata
->
name
,
mgmt
->
sa
);
ibss_
dbg
(
sdata
,
"
Invalid SSID IE in ProbeReq from %pM
\n
"
,
mgmt
->
sa
);
return
;
}
if
(
pos
[
1
]
!=
0
&&
...
...
@@ -830,7 +827,7 @@ static void ieee80211_rx_mgmt_probe_req(struct ieee80211_sub_if_data *sdata,
resp
=
(
struct
ieee80211_mgmt
*
)
skb
->
data
;
memcpy
(
resp
->
da
,
mgmt
->
sa
,
ETH_ALEN
);
ibss_
vdbg
(
"%s: Sending ProbeResp to %pM
\n
"
,
sdata
->
name
,
resp
->
da
);
ibss_
dbg
(
sdata
,
"Sending ProbeResp to %pM
\n
"
,
resp
->
da
);
IEEE80211_SKB_CB
(
skb
)
->
flags
|=
IEEE80211_TX_INTFL_DONT_ENCRYPT
;
ieee80211_tx_skb
(
sdata
,
skb
);
}
...
...
net/mac80211/ieee80211_i.h
View file @
2c443443
...
...
@@ -30,6 +30,7 @@
#include <net/mac80211.h>
#include "key.h"
#include "sta_info.h"
#include "debug.h"
struct
ieee80211_local
;
...
...
net/mac80211/iface.c
View file @
2c443443
...
...
@@ -57,9 +57,6 @@ static int ieee80211_change_mtu(struct net_device *dev, int new_mtu)
return
-
EINVAL
;
}
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
pr_debug
(
"%s: setting MTU %d
\n
"
,
dev
->
name
,
new_mtu
);
#endif
/* CONFIG_MAC80211_VERBOSE_DEBUG */
dev
->
mtu
=
new_mtu
;
return
0
;
}
...
...
@@ -100,15 +97,12 @@ static int ieee80211_check_concurrent_iface(struct ieee80211_sub_if_data *sdata,
{
struct
ieee80211_local
*
local
=
sdata
->
local
;
struct
ieee80211_sub_if_data
*
nsdata
;
struct
net_device
*
dev
=
sdata
->
dev
;
ASSERT_RTNL
();
/* we hold the RTNL here so can safely walk the list */
list_for_each_entry
(
nsdata
,
&
local
->
interfaces
,
list
)
{
struct
net_device
*
ndev
=
nsdata
->
dev
;
if
(
ndev
!=
dev
&&
ieee80211_sdata_running
(
nsdata
))
{
if
(
nsdata
!=
sdata
&&
ieee80211_sdata_running
(
nsdata
))
{
/*
* Allow only a single IBSS interface to be up at any
* time. This is restricted because beacon distribution
...
...
@@ -127,7 +121,8 @@ static int ieee80211_check_concurrent_iface(struct ieee80211_sub_if_data *sdata,
* The remaining checks are only performed for interfaces
* with the same MAC address.
*/
if
(
!
ether_addr_equal
(
dev
->
dev_addr
,
ndev
->
dev_addr
))
if
(
!
ether_addr_equal
(
sdata
->
vif
.
addr
,
nsdata
->
vif
.
addr
))
continue
;
/*
...
...
@@ -1223,7 +1218,7 @@ static void ieee80211_assign_perm_addr(struct ieee80211_local *local,
if
(
__ffs64
(
mask
)
+
hweight64
(
mask
)
!=
fls64
(
mask
))
{
/* not a contiguous mask ... not handled now! */
pr_
debug
(
"not contiguous
\n
"
);
pr_
info
(
"not contiguous
\n
"
);
break
;
}
...
...
@@ -1414,10 +1409,6 @@ static u32 ieee80211_idle_off(struct ieee80211_local *local,
if
(
!
(
local
->
hw
.
conf
.
flags
&
IEEE80211_CONF_IDLE
))
return
0
;
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
wiphy_debug
(
local
->
hw
.
wiphy
,
"device no longer idle - %s
\n
"
,
reason
);
#endif
local
->
hw
.
conf
.
flags
&=
~
IEEE80211_CONF_IDLE
;
return
IEEE80211_CONF_CHANGE_IDLE
;
}
...
...
@@ -1427,10 +1418,6 @@ static u32 ieee80211_idle_on(struct ieee80211_local *local)
if
(
local
->
hw
.
conf
.
flags
&
IEEE80211_CONF_IDLE
)
return
0
;
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
wiphy_debug
(
local
->
hw
.
wiphy
,
"device now idle
\n
"
);
#endif
drv_flush
(
local
,
false
);
local
->
hw
.
conf
.
flags
|=
IEEE80211_CONF_IDLE
;
...
...
net/mac80211/key.c
View file @
2c443443
...
...
@@ -139,7 +139,7 @@ static int ieee80211_key_enable_hw_accel(struct ieee80211_key *key)
}
if
(
ret
!=
-
ENOSPC
&&
ret
!=
-
EOPNOTSUPP
)
wiphy_err
(
key
->
local
->
hw
.
wiphy
,
sdata_err
(
sdata
,
"failed to set key (%d, %pM) to hardware (%d)
\n
"
,
key
->
conf
.
keyidx
,
sta
?
sta
->
sta
.
addr
:
bcast_addr
,
ret
);
...
...
@@ -186,7 +186,7 @@ static void ieee80211_key_disable_hw_accel(struct ieee80211_key *key)
sta
?
&
sta
->
sta
:
NULL
,
&
key
->
conf
);
if
(
ret
)
wiphy_err
(
key
->
local
->
hw
.
wiphy
,
sdata_err
(
sdata
,
"failed to remove key (%d, %pM) from hardware (%d)
\n
"
,
key
->
conf
.
keyidx
,
sta
?
sta
->
sta
.
addr
:
bcast_addr
,
ret
);
...
...
net/mac80211/mesh.c
View file @
2c443443
...
...
@@ -523,10 +523,6 @@ static void ieee80211_mesh_housekeeping(struct ieee80211_sub_if_data *sdata,
{
bool
free_plinks
;
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
pr_debug
(
"%s: running mesh housekeeping
\n
"
,
sdata
->
name
);
#endif
ieee80211_sta_expire
(
sdata
,
IEEE80211_MESH_PEER_INACTIVITY_LIMIT
);
mesh_path_expire
(
sdata
);
...
...
net/mac80211/mesh_hwmp.c
View file @
2c443443
...
...
@@ -13,13 +13,6 @@
#include "wme.h"
#include "mesh.h"
#ifdef CONFIG_MAC80211_VERBOSE_MHWMP_DEBUG
#define mhwmp_dbg(fmt, args...) \
pr_debug("Mesh HWMP (%s): " fmt "\n", sdata->name, ##args)
#else
#define mhwmp_dbg(fmt, args...) do { (void)(0); } while (0)
#endif
#define TEST_FRAME_LEN 8192
#define MAX_METRIC 0xffffffff
#define ARITH_SHIFT 8
...
...
@@ -144,19 +137,19 @@ static int mesh_path_sel_frame_tx(enum mpath_frame_type action, u8 flags,
switch
(
action
)
{
case
MPATH_PREQ
:
mhwmp_dbg
(
"sending PREQ to %pM
"
,
target
);
mhwmp_dbg
(
sdata
,
"sending PREQ to %pM
\n
"
,
target
);
ie_len
=
37
;
pos
=
skb_put
(
skb
,
2
+
ie_len
);
*
pos
++
=
WLAN_EID_PREQ
;
break
;
case
MPATH_PREP
:
mhwmp_dbg
(
"sending PREP to %pM
"
,
target
);
mhwmp_dbg
(
sdata
,
"sending PREP to %pM
\n
"
,
target
);
ie_len
=
31
;
pos
=
skb_put
(
skb
,
2
+
ie_len
);
*
pos
++
=
WLAN_EID_PREP
;
break
;
case
MPATH_RANN
:
mhwmp_dbg
(
"sending RANN from %pM
"
,
orig_addr
);
mhwmp_dbg
(
sdata
,
"sending RANN from %pM
\n
"
,
orig_addr
);
ie_len
=
sizeof
(
struct
ieee80211_rann_ie
);
pos
=
skb_put
(
skb
,
2
+
ie_len
);
*
pos
++
=
WLAN_EID_RANN
;
...
...
@@ -535,10 +528,10 @@ static void hwmp_preq_frame_process(struct ieee80211_sub_if_data *sdata,
flags
=
PREQ_IE_FLAGS
(
preq_elem
);
root_is_gate
=
!!
(
flags
&
RANN_FLAG_IS_GATE
);
mhwmp_dbg
(
"received PREQ from %pM
"
,
orig_addr
);
mhwmp_dbg
(
sdata
,
"received PREQ from %pM
\n
"
,
orig_addr
);
if
(
ether_addr_equal
(
target_addr
,
sdata
->
vif
.
addr
))
{
mhwmp_dbg
(
"PREQ is for us
"
);
mhwmp_dbg
(
sdata
,
"PREQ is for us
\n
"
);
forward
=
false
;
reply
=
true
;
metric
=
0
;
...
...
@@ -590,7 +583,7 @@ static void hwmp_preq_frame_process(struct ieee80211_sub_if_data *sdata,
lifetime
=
PREQ_IE_LIFETIME
(
preq_elem
);
ttl
=
ifmsh
->
mshcfg
.
element_ttl
;
if
(
ttl
!=
0
)
{
mhwmp_dbg
(
"replying to the PREQ
"
);
mhwmp_dbg
(
sdata
,
"replying to the PREQ
\n
"
);
mesh_path_sel_frame_tx
(
MPATH_PREP
,
0
,
orig_addr
,
cpu_to_le32
(
orig_sn
),
0
,
target_addr
,
cpu_to_le32
(
target_sn
),
mgmt
->
sa
,
0
,
ttl
,
...
...
@@ -611,7 +604,7 @@ static void hwmp_preq_frame_process(struct ieee80211_sub_if_data *sdata,
ifmsh
->
mshstats
.
dropped_frames_ttl
++
;
return
;
}
mhwmp_dbg
(
"forwarding the PREQ from %pM
"
,
orig_addr
);
mhwmp_dbg
(
sdata
,
"forwarding the PREQ from %pM
\n
"
,
orig_addr
);
--
ttl
;
preq_id
=
PREQ_IE_PREQ_ID
(
preq_elem
);
hopcount
=
PREQ_IE_HOPCOUNT
(
preq_elem
)
+
1
;
...
...
@@ -658,7 +651,8 @@ static void hwmp_prep_frame_process(struct ieee80211_sub_if_data *sdata,
u8
next_hop
[
ETH_ALEN
];
u32
target_sn
,
orig_sn
,
lifetime
;
mhwmp_dbg
(
"received PREP from %pM"
,
PREP_IE_ORIG_ADDR
(
prep_elem
));
mhwmp_dbg
(
sdata
,
"received PREP from %pM
\n
"
,
PREP_IE_ORIG_ADDR
(
prep_elem
));
orig_addr
=
PREP_IE_ORIG_ADDR
(
prep_elem
);
if
(
ether_addr_equal
(
orig_addr
,
sdata
->
vif
.
addr
))
...
...
@@ -784,8 +778,9 @@ static void hwmp_rann_frame_process(struct ieee80211_sub_if_data *sdata,
if
(
ether_addr_equal
(
orig_addr
,
sdata
->
vif
.
addr
))
return
;
mhwmp_dbg
(
"received RANN from %pM via neighbour %pM (is_gate=%d)"
,
orig_addr
,
mgmt
->
sa
,
root_is_gate
);
mhwmp_dbg
(
sdata
,
"received RANN from %pM via neighbour %pM (is_gate=%d)
\n
"
,
orig_addr
,
mgmt
->
sa
,
root_is_gate
);
rcu_read_lock
();
sta
=
sta_info_get
(
sdata
,
mgmt
->
sa
);
...
...
@@ -818,8 +813,9 @@ static void hwmp_rann_frame_process(struct ieee80211_sub_if_data *sdata,
root_path_confirmation_jiffies
(
sdata
))
||
time_before
(
jiffies
,
mpath
->
last_preq_to_root
)))
&&
!
(
mpath
->
flags
&
MESH_PATH_FIXED
)
&&
(
ttl
!=
0
))
{
mhwmp_dbg
(
"%s time to refresh root mpath %pM"
,
sdata
->
name
,
orig_addr
);
mhwmp_dbg
(
sdata
,
"time to refresh root mpath %pM
\n
"
,
orig_addr
);
mesh_queue_preq
(
mpath
,
PREQ_Q_F_START
|
PREQ_Q_F_REFRESH
);
mpath
->
last_preq_to_root
=
jiffies
;
}
...
...
@@ -926,7 +922,7 @@ static void mesh_queue_preq(struct mesh_path *mpath, u8 flags)
preq_node
=
kmalloc
(
sizeof
(
struct
mesh_preq_queue
),
GFP_ATOMIC
);
if
(
!
preq_node
)
{
mhwmp_dbg
(
"could not allocate PREQ node
"
);
mhwmp_dbg
(
sdata
,
"could not allocate PREQ node
\n
"
);
return
;
}
...
...
@@ -935,7 +931,7 @@ static void mesh_queue_preq(struct mesh_path *mpath, u8 flags)
spin_unlock_bh
(
&
ifmsh
->
mesh_preq_queue_lock
);
kfree
(
preq_node
);
if
(
printk_ratelimit
())
mhwmp_dbg
(
"PREQ node queue full
"
);
mhwmp_dbg
(
sdata
,
"PREQ node queue full
\n
"
);
return
;
}
...
...
@@ -1183,7 +1179,7 @@ void mesh_path_timer(unsigned long data)
if
(
!
mpath
->
is_gate
&&
mesh_gate_num
(
sdata
)
>
0
)
{
ret
=
mesh_path_send_to_gates
(
mpath
);
if
(
ret
)
mhwmp_dbg
(
"no gate was reachable
"
);
mhwmp_dbg
(
sdata
,
"no gate was reachable
\n
"
);
}
else
mesh_path_flush_pending
(
mpath
);
}
...
...
@@ -1221,7 +1217,7 @@ mesh_path_tx_root_frame(struct ieee80211_sub_if_data *sdata)
0
,
cpu_to_le32
(
ifmsh
->
preq_id
++
),
sdata
);
break
;
default:
mhwmp_dbg
(
"Proactive mechanism not supported
"
);
mhwmp_dbg
(
sdata
,
"Proactive mechanism not supported
\n
"
);
return
;
}
}
net/mac80211/mesh_pathtbl.c
View file @
2c443443
...
...
@@ -18,12 +18,6 @@
#include "ieee80211_i.h"
#include "mesh.h"
#ifdef CONFIG_MAC80211_VERBOSE_MPATH_DEBUG
#define mpath_dbg(fmt, args...) pr_debug(fmt, ##args)
#else
#define mpath_dbg(fmt, args...) do { (void)(0); } while (0)
#endif
/* There will be initially 2^INIT_PATHS_SIZE_ORDER buckets */
#define INIT_PATHS_SIZE_ORDER 2
...
...
@@ -322,9 +316,8 @@ static void mesh_path_move_to_queue(struct mesh_path *gate_mpath,
spin_lock_irqsave
(
&
gate_mpath
->
frame_queue
.
lock
,
flags
);
skb_queue_splice
(
&
gateq
,
&
gate_mpath
->
frame_queue
);
mpath_dbg
(
"Mpath queue for gate %pM has %d frames
\n
"
,
gate_mpath
->
dst
,
skb_queue_len
(
&
gate_mpath
->
frame_queue
));
mpath_dbg
(
gate_mpath
->
sdata
,
"Mpath queue for gate %pM has %d frames
\n
"
,
gate_mpath
->
dst
,
skb_queue_len
(
&
gate_mpath
->
frame_queue
));
spin_unlock_irqrestore
(
&
gate_mpath
->
frame_queue
.
lock
,
flags
);
if
(
!
copy
)
...
...
@@ -446,9 +439,9 @@ int mesh_path_add_gate(struct mesh_path *mpath)
hlist_add_head_rcu
(
&
new_gate
->
list
,
tbl
->
known_gates
);
spin_unlock_bh
(
&
tbl
->
gates_lock
);
rcu_read_unlock
();
mpath_dbg
(
"Mesh path (%s): Recorded new gate: %pM. %d known gates
\n
"
,
mpath
->
sdata
->
name
,
mpath
->
dst
,
mpath
->
sdata
->
u
.
mesh
.
num_gates
);
mpath_dbg
(
mpath
->
sdata
,
"Mesh path: Recorded new gate: %pM. %d known gates
\n
"
,
mpath
->
dst
,
mpath
->
sdata
->
u
.
mesh
.
num_gates
);
return
0
;
err_rcu:
rcu_read_unlock
();
...
...
@@ -477,8 +470,8 @@ static int mesh_gate_del(struct mesh_table *tbl, struct mesh_path *mpath)
spin_unlock_bh
(
&
tbl
->
gates_lock
);
mpath
->
sdata
->
u
.
mesh
.
num_gates
--
;
mpath
->
is_gate
=
false
;
mpath_dbg
(
"Mesh path (%s): Deleted gate: %pM. "
"
%d known gates
\n
"
,
mpath
->
sdata
->
name
,
mpath_dbg
(
mpath
->
sdata
,
"
Mesh path: Deleted gate: %pM. %d known gates
\n
"
,
mpath
->
dst
,
mpath
->
sdata
->
u
.
mesh
.
num_gates
);
break
;
}
...
...
@@ -946,19 +939,20 @@ int mesh_path_send_to_gates(struct mesh_path *mpath)
continue
;
if
(
gate
->
mpath
->
flags
&
MESH_PATH_ACTIVE
)
{
mpath_dbg
(
"Forwarding to %pM
\n
"
,
gate
->
mpath
->
dst
);
mpath_dbg
(
sdata
,
"Forwarding to %pM
\n
"
,
gate
->
mpath
->
dst
);
mesh_path_move_to_queue
(
gate
->
mpath
,
from_mpath
,
copy
);
from_mpath
=
gate
->
mpath
;
copy
=
true
;
}
else
{
mpath_dbg
(
"Not forwarding %p
\n
"
,
gate
->
mpath
);
mpath_dbg
(
"flags %x
\n
"
,
gate
->
mpath
->
flags
);
mpath_dbg
(
sdata
,
"Not forwarding %p (flags %#x)
\n
"
,
gate
->
mpath
,
gate
->
mpath
->
flags
);
}
}
hlist_for_each_entry_rcu
(
gate
,
n
,
known_gates
,
list
)
if
(
gate
->
mpath
->
sdata
==
sdata
)
{
mpath_dbg
(
"Sending to %pM
\n
"
,
gate
->
mpath
->
dst
);
mpath_dbg
(
sdata
,
"Sending to %pM
\n
"
,
gate
->
mpath
->
dst
);
mesh_path_tx_pending
(
gate
->
mpath
);
}
...
...
net/mac80211/mesh_plink.c
View file @
2c443443
...
...
@@ -13,12 +13,6 @@
#include "rate.h"
#include "mesh.h"
#ifdef CONFIG_MAC80211_VERBOSE_MPL_DEBUG
#define mpl_dbg(fmt, args...) pr_debug(fmt, ##args)
#else
#define mpl_dbg(fmt, args...) do { (void)(0); } while (0)
#endif
#define PLINK_GET_LLID(p) (p + 2)
#define PLINK_GET_PLID(p) (p + 4)
...
...
@@ -134,12 +128,14 @@ static u32 mesh_set_ht_prot_mode(struct ieee80211_sub_if_data *sdata)
switch
(
sta
->
ch_type
)
{
case
NL80211_CHAN_NO_HT
:
mpl_dbg
(
"mesh_plink %pM: nonHT sta (%pM) is present"
,
mpl_dbg
(
sdata
,
"mesh_plink %pM: nonHT sta (%pM) is present
\n
"
,
sdata
->
vif
.
addr
,
sta
->
sta
.
addr
);
non_ht_sta
=
true
;
goto
out
;
case
NL80211_CHAN_HT20
:
mpl_dbg
(
"mesh_plink %pM: HT20 sta (%pM) is present"
,
mpl_dbg
(
sdata
,
"mesh_plink %pM: HT20 sta (%pM) is present
\n
"
,
sdata
->
vif
.
addr
,
sta
->
sta
.
addr
);
ht20_sta
=
true
;
default:
...
...
@@ -160,7 +156,8 @@ static u32 mesh_set_ht_prot_mode(struct ieee80211_sub_if_data *sdata)
sdata
->
vif
.
bss_conf
.
ht_operation_mode
=
ht_opmode
;
sdata
->
u
.
mesh
.
mshcfg
.
ht_opmode
=
ht_opmode
;
changed
=
BSS_CHANGED_HT
;
mpl_dbg
(
"mesh_plink %pM: protection mode changed to %d"
,
mpl_dbg
(
sdata
,
"mesh_plink %pM: protection mode changed to %d
\n
"
,
sdata
->
vif
.
addr
,
ht_opmode
);
}
...
...
@@ -437,7 +434,8 @@ static void mesh_plink_timer(unsigned long data)
spin_unlock_bh
(
&
sta
->
lock
);
return
;
}
mpl_dbg
(
"Mesh plink timer for %pM fired on state %d
\n
"
,
mpl_dbg
(
sta
->
sdata
,
"Mesh plink timer for %pM fired on state %d
\n
"
,
sta
->
sta
.
addr
,
sta
->
plink_state
);
reason
=
0
;
llid
=
sta
->
llid
;
...
...
@@ -450,7 +448,8 @@ static void mesh_plink_timer(unsigned long data)
/* retry timer */
if
(
sta
->
plink_retries
<
dot11MeshMaxRetries
(
sdata
))
{
u32
rand
;
mpl_dbg
(
"Mesh plink for %pM (retry, timeout): %d %d
\n
"
,
mpl_dbg
(
sta
->
sdata
,
"Mesh plink for %pM (retry, timeout): %d %d
\n
"
,
sta
->
sta
.
addr
,
sta
->
plink_retries
,
sta
->
plink_timeout
);
get_random_bytes
(
&
rand
,
sizeof
(
u32
));
...
...
@@ -530,7 +529,8 @@ int mesh_plink_open(struct sta_info *sta)
sta
->
plink_state
=
NL80211_PLINK_OPN_SNT
;
mesh_plink_timer_set
(
sta
,
dot11MeshRetryTimeout
(
sdata
));
spin_unlock_bh
(
&
sta
->
lock
);
mpl_dbg
(
"Mesh plink: starting establishment with %pM
\n
"
,
mpl_dbg
(
sdata
,
"Mesh plink: starting establishment with %pM
\n
"
,
sta
->
sta
.
addr
);
return
mesh_plink_frame_tx
(
sdata
,
WLAN_SP_MESH_PEERING_OPEN
,
...
...
@@ -565,7 +565,6 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
u8
*
baseaddr
;
u32
changed
=
0
;
__le16
plid
,
llid
,
reason
;
#ifdef CONFIG_MAC80211_VERBOSE_MPL_DEBUG
static
const
char
*
mplstates
[]
=
{
[
NL80211_PLINK_LISTEN
]
=
"LISTEN"
,
[
NL80211_PLINK_OPN_SNT
]
=
"OPN-SNT"
,
...
...
@@ -575,14 +574,14 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
[
NL80211_PLINK_HOLDING
]
=
"HOLDING"
,
[
NL80211_PLINK_BLOCKED
]
=
"BLOCKED"
};
#endif
/* need action_code, aux */
if
(
len
<
IEEE80211_MIN_ACTION_SIZE
+
3
)
return
;
if
(
is_multicast_ether_addr
(
mgmt
->
da
))
{
mpl_dbg
(
"Mesh plink: ignore frame from multicast address"
);
mpl_dbg
(
sdata
,
"Mesh plink: ignore frame from multicast address
\n
"
);
return
;
}
...
...
@@ -595,12 +594,14 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
}
ieee802_11_parse_elems
(
baseaddr
,
len
-
baselen
,
&
elems
);
if
(
!
elems
.
peering
)
{
mpl_dbg
(
"Mesh plink: missing necessary peer link ie
\n
"
);
mpl_dbg
(
sdata
,
"Mesh plink: missing necessary peer link ie
\n
"
);
return
;
}
if
(
elems
.
rsn_len
&&
sdata
->
u
.
mesh
.
security
==
IEEE80211_MESH_SEC_NONE
)
{
mpl_dbg
(
"Mesh plink: can't establish link with secure peer
\n
"
);
mpl_dbg
(
sdata
,
"Mesh plink: can't establish link with secure peer
\n
"
);
return
;
}
...
...
@@ -610,14 +611,15 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
(
ftype
==
WLAN_SP_MESH_PEERING_CONFIRM
&&
ie_len
!=
6
)
||
(
ftype
==
WLAN_SP_MESH_PEERING_CLOSE
&&
ie_len
!=
6
&&
ie_len
!=
8
))
{
mpl_dbg
(
"Mesh plink: incorrect plink ie length %d %d
\n
"
,
ftype
,
ie_len
);
mpl_dbg
(
sdata
,
"Mesh plink: incorrect plink ie length %d %d
\n
"
,
ftype
,
ie_len
);
return
;
}
if
(
ftype
!=
WLAN_SP_MESH_PEERING_CLOSE
&&
(
!
elems
.
mesh_id
||
!
elems
.
mesh_config
))
{
mpl_dbg
(
"Mesh plink: missing necessary ie
\n
"
);
mpl_dbg
(
sdata
,
"Mesh plink: missing necessary ie
\n
"
);
return
;
}
/* Note the lines below are correct, the llid in the frame is the plid
...
...
@@ -632,21 +634,21 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
sta
=
sta_info_get
(
sdata
,
mgmt
->
sa
);
if
(
!
sta
&&
ftype
!=
WLAN_SP_MESH_PEERING_OPEN
)
{
mpl_dbg
(
"Mesh plink: cls or cnf from unknown peer
\n
"
);
mpl_dbg
(
sdata
,
"Mesh plink: cls or cnf from unknown peer
\n
"
);
rcu_read_unlock
();
return
;
}
if
(
ftype
==
WLAN_SP_MESH_PEERING_OPEN
&&
!
rssi_threshold_check
(
sta
,
sdata
))
{
mpl_dbg
(
"Mesh plink: %pM does not meet rssi threshold
\n
"
,
mpl_dbg
(
sdata
,
"Mesh plink: %pM does not meet rssi threshold
\n
"
,
mgmt
->
sa
);
rcu_read_unlock
();
return
;
}
if
(
sta
&&
!
test_sta_flag
(
sta
,
WLAN_STA_AUTH
))
{
mpl_dbg
(
"Mesh plink: Action frame from non-authed peer
\n
"
);
mpl_dbg
(
sdata
,
"Mesh plink: Action frame from non-authed peer
\n
"
);
rcu_read_unlock
();
return
;
}
...
...
@@ -683,7 +685,7 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
}
else
if
(
!
sta
)
{
/* ftype == WLAN_SP_MESH_PEERING_OPEN */
if
(
!
mesh_plink_free_count
(
sdata
))
{
mpl_dbg
(
"Mesh plink error: no more free plinks
\n
"
);
mpl_dbg
(
sdata
,
"Mesh plink error: no more free plinks
\n
"
);
rcu_read_unlock
();
return
;
}
...
...
@@ -724,7 +726,7 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
event
=
CLS_ACPT
;
break
;
default:
mpl_dbg
(
"Mesh plink: unknown frame subtype
\n
"
);
mpl_dbg
(
sdata
,
"Mesh plink: unknown frame subtype
\n
"
);
rcu_read_unlock
();
return
;
}
...
...
@@ -734,13 +736,14 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
/* allocate sta entry if necessary and update info */
sta
=
mesh_peer_init
(
sdata
,
mgmt
->
sa
,
&
elems
);
if
(
!
sta
)
{
mpl_dbg
(
"Mesh plink: failed to init peer!
\n
"
);
mpl_dbg
(
sdata
,
"Mesh plink: failed to init peer!
\n
"
);
rcu_read_unlock
();
return
;
}
}
mpl_dbg
(
"Mesh plink (peer, state, llid, plid, event): %pM %s %d %d %d
\n
"
,
mpl_dbg
(
sdata
,
"Mesh plink (peer, state, llid, plid, event): %pM %s %d %d %d
\n
"
,
mgmt
->
sa
,
mplstates
[
sta
->
plink_state
],
le16_to_cpu
(
sta
->
llid
),
le16_to_cpu
(
sta
->
plid
),
event
);
...
...
@@ -851,7 +854,7 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
mesh_plink_inc_estab_count
(
sdata
);
changed
|=
mesh_set_ht_prot_mode
(
sdata
);
changed
|=
BSS_CHANGED_BEACON
;
mpl_dbg
(
"Mesh plink with %pM ESTABLISHED
\n
"
,
mpl_dbg
(
sdata
,
"Mesh plink with %pM ESTABLISHED
\n
"
,
sta
->
sta
.
addr
);
break
;
default:
...
...
@@ -887,7 +890,7 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
mesh_plink_inc_estab_count
(
sdata
);
changed
|=
mesh_set_ht_prot_mode
(
sdata
);
changed
|=
BSS_CHANGED_BEACON
;
mpl_dbg
(
"Mesh plink with %pM ESTABLISHED
\n
"
,
mpl_dbg
(
sdata
,
"Mesh plink with %pM ESTABLISHED
\n
"
,
sta
->
sta
.
addr
);
mesh_plink_frame_tx
(
sdata
,
WLAN_SP_MESH_PEERING_CONFIRM
,
...
...
net/mac80211/mesh_sync.c
View file @
2c443443
...
...
@@ -12,13 +12,6 @@
#include "mesh.h"
#include "driver-ops.h"
#ifdef CONFIG_MAC80211_VERBOSE_MESH_SYNC_DEBUG
#define msync_dbg(fmt, args...) \
pr_debug("Mesh sync (%s): " fmt "\n", sdata->name, ##args)
#else
#define msync_dbg(fmt, args...) do { (void)(0); } while (0)
#endif
/* This is not in the standard. It represents a tolerable tbtt drift below
* which we do no TSF adjustment.
*/
...
...
@@ -65,14 +58,14 @@ void mesh_sync_adjust_tbtt(struct ieee80211_sub_if_data *sdata)
spin_lock_bh
(
&
ifmsh
->
sync_offset_lock
);
if
(
ifmsh
->
sync_offset_clockdrift_max
<
beacon_int_fraction
)
{
msync_dbg
(
"TBTT : max clockdrift=%lld; adjusting
"
,
(
long
long
)
ifmsh
->
sync_offset_clockdrift_max
);
msync_dbg
(
sdata
,
"TBTT : max clockdrift=%lld; adjusting
\n
"
,
(
long
long
)
ifmsh
->
sync_offset_clockdrift_max
);
tsfdelta
=
-
ifmsh
->
sync_offset_clockdrift_max
;
ifmsh
->
sync_offset_clockdrift_max
=
0
;
}
else
{
msync_dbg
(
"TBTT : max clockdrift=%lld; adjusting by %llu
"
,
(
long
long
)
ifmsh
->
sync_offset_clockdrift_max
,
(
unsigned
long
long
)
beacon_int_fraction
);
msync_dbg
(
sdata
,
"TBTT : max clockdrift=%lld; adjusting by %llu
\n
"
,
(
long
long
)
ifmsh
->
sync_offset_clockdrift_max
,
(
unsigned
long
long
)
beacon_int_fraction
);
tsfdelta
=
-
beacon_int_fraction
;
ifmsh
->
sync_offset_clockdrift_max
-=
beacon_int_fraction
;
}
...
...
@@ -120,7 +113,7 @@ static void mesh_sync_offset_rx_bcn_presp(struct ieee80211_sub_if_data *sdata,
if
(
elems
->
mesh_config
&&
mesh_peer_tbtt_adjusting
(
elems
))
{
clear_sta_flag
(
sta
,
WLAN_STA_TOFFSET_KNOWN
);
msync_dbg
(
"STA %pM : is adjusting TBTT
"
,
sta
->
sta
.
addr
);
msync_dbg
(
sdata
,
"STA %pM : is adjusting TBTT
\n
"
,
sta
->
sta
.
addr
);
goto
no_sync
;
}
...
...
@@ -169,7 +162,8 @@ static void mesh_sync_offset_rx_bcn_presp(struct ieee80211_sub_if_data *sdata,
if
(
test_sta_flag
(
sta
,
WLAN_STA_TOFFSET_KNOWN
))
{
s64
t_clockdrift
=
sta
->
t_offset_setpoint
-
sta
->
t_offset
;
msync_dbg
(
"STA %pM : sta->t_offset=%lld, sta->t_offset_setpoint=%lld, t_clockdrift=%lld"
,
msync_dbg
(
sdata
,
"STA %pM : sta->t_offset=%lld, sta->t_offset_setpoint=%lld, t_clockdrift=%lld
\n
"
,
sta
->
sta
.
addr
,
(
long
long
)
sta
->
t_offset
,
(
long
long
)
...
...
@@ -178,7 +172,8 @@ static void mesh_sync_offset_rx_bcn_presp(struct ieee80211_sub_if_data *sdata,
if
(
t_clockdrift
>
TOFFSET_MAXIMUM_ADJUSTMENT
||
t_clockdrift
<
-
TOFFSET_MAXIMUM_ADJUSTMENT
)
{
msync_dbg
(
"STA %pM : t_clockdrift=%lld too large, setpoint reset"
,
msync_dbg
(
sdata
,
"STA %pM : t_clockdrift=%lld too large, setpoint reset
\n
"
,
sta
->
sta
.
addr
,
(
long
long
)
t_clockdrift
);
clear_sta_flag
(
sta
,
WLAN_STA_TOFFSET_KNOWN
);
...
...
@@ -197,8 +192,8 @@ static void mesh_sync_offset_rx_bcn_presp(struct ieee80211_sub_if_data *sdata,
}
else
{
sta
->
t_offset_setpoint
=
sta
->
t_offset
-
TOFFSET_SET_MARGIN
;
set_sta_flag
(
sta
,
WLAN_STA_TOFFSET_KNOWN
);
msync_dbg
(
"STA %pM : offset was invalid, "
"
sta->t_offset=%lld
"
,
msync_dbg
(
sdata
,
"
STA %pM : offset was invalid, sta->t_offset=%lld
\n
"
,
sta
->
sta
.
addr
,
(
long
long
)
sta
->
t_offset
);
rcu_read_unlock
();
...
...
@@ -226,17 +221,15 @@ static void mesh_sync_offset_adjust_tbtt(struct ieee80211_sub_if_data *sdata)
* to the driver tsf setter, we punt
* the tsf adjustment to the mesh tasklet
*/
msync_dbg
(
"TBTT : kicking off TBTT "
"adjustment with "
"clockdrift_max=%lld"
,
ifmsh
->
sync_offset_clockdrift_max
);
msync_dbg
(
sdata
,
"TBTT : kicking off TBTT adjustment with clockdrift_max=%lld
\n
"
,
ifmsh
->
sync_offset_clockdrift_max
);
set_bit
(
MESH_WORK_DRIFT_ADJUST
,
&
ifmsh
->
wrkq_flags
);
}
else
{
msync_dbg
(
"TBTT : max clockdrift=%lld; "
"too small to adjust"
,
(
long
long
)
ifmsh
->
sync_offset_clockdrift_max
);
msync_dbg
(
sdata
,
"TBTT : max clockdrift=%lld; too small to adjust
\n
"
,
(
long
long
)
ifmsh
->
sync_offset_clockdrift_max
);
ifmsh
->
sync_offset_clockdrift_max
=
0
;
}
spin_unlock_bh
(
&
ifmsh
->
sync_offset_lock
);
...
...
@@ -268,7 +261,7 @@ static void mesh_sync_vendor_rx_bcn_presp(struct ieee80211_sub_if_data *sdata,
const
u8
*
oui
;
WARN_ON
(
sdata
->
u
.
mesh
.
mesh_sp_id
!=
IEEE80211_SYNC_METHOD_VENDOR
);
msync_dbg
(
"called mesh_sync_vendor_rx_bcn_presp
"
);
msync_dbg
(
sdata
,
"called mesh_sync_vendor_rx_bcn_presp
\n
"
);
oui
=
mesh_get_vendor_oui
(
sdata
);
/* here you would implement the vendor offset tracking for this oui */
}
...
...
@@ -278,7 +271,7 @@ static void mesh_sync_vendor_adjust_tbtt(struct ieee80211_sub_if_data *sdata)
const
u8
*
oui
;
WARN_ON
(
sdata
->
u
.
mesh
.
mesh_sp_id
!=
IEEE80211_SYNC_METHOD_VENDOR
);
msync_dbg
(
"called mesh_sync_vendor_adjust_tbtt
"
);
msync_dbg
(
sdata
,
"called mesh_sync_vendor_adjust_tbtt
\n
"
);
oui
=
mesh_get_vendor_oui
(
sdata
);
/* here you would implement the vendor tsf adjustment for this oui */
}
...
...
net/mac80211/mlme.c
View file @
2c443443
This diff is collapsed.
Click to expand it.
net/mac80211/offchannel.c
View file @
2c443443
...
...
@@ -15,7 +15,6 @@
#include <linux/export.h>
#include <net/mac80211.h>
#include "ieee80211_i.h"
#include "driver-trace.h"
#include "driver-ops.h"
/*
...
...
net/mac80211/rx.c
View file @
2c443443
...
...
@@ -554,11 +554,11 @@ static inline u16 seq_sub(u16 sq1, u16 sq2)
}
static
void
ieee80211_release_reorder_frame
(
struct
ieee80211_
hw
*
hw
,
static
void
ieee80211_release_reorder_frame
(
struct
ieee80211_
sub_if_data
*
sdata
,
struct
tid_ampdu_rx
*
tid_agg_rx
,
int
index
)
{
struct
ieee80211_local
*
local
=
hw_to_local
(
hw
)
;
struct
ieee80211_local
*
local
=
sdata
->
local
;
struct
sk_buff
*
skb
=
tid_agg_rx
->
reorder_buf
[
index
];
struct
ieee80211_rx_status
*
status
;
...
...
@@ -578,7 +578,7 @@ static void ieee80211_release_reorder_frame(struct ieee80211_hw *hw,
tid_agg_rx
->
head_seq_num
=
seq_inc
(
tid_agg_rx
->
head_seq_num
);
}
static
void
ieee80211_release_reorder_frames
(
struct
ieee80211_
hw
*
hw
,
static
void
ieee80211_release_reorder_frames
(
struct
ieee80211_
sub_if_data
*
sdata
,
struct
tid_ampdu_rx
*
tid_agg_rx
,
u16
head_seq_num
)
{
...
...
@@ -589,7 +589,7 @@ static void ieee80211_release_reorder_frames(struct ieee80211_hw *hw,
while
(
seq_less
(
tid_agg_rx
->
head_seq_num
,
head_seq_num
))
{
index
=
seq_sub
(
tid_agg_rx
->
head_seq_num
,
tid_agg_rx
->
ssn
)
%
tid_agg_rx
->
buf_size
;
ieee80211_release_reorder_frame
(
hw
,
tid_agg_rx
,
index
);
ieee80211_release_reorder_frame
(
sdata
,
tid_agg_rx
,
index
);
}
}
...
...
@@ -604,7 +604,7 @@ static void ieee80211_release_reorder_frames(struct ieee80211_hw *hw,
*/
#define HT_RX_REORDER_BUF_TIMEOUT (HZ / 10)
static
void
ieee80211_sta_reorder_release
(
struct
ieee80211_
hw
*
hw
,
static
void
ieee80211_sta_reorder_release
(
struct
ieee80211_
sub_if_data
*
sdata
,
struct
tid_ampdu_rx
*
tid_agg_rx
)
{
int
index
,
j
;
...
...
@@ -632,12 +632,9 @@ static void ieee80211_sta_reorder_release(struct ieee80211_hw *hw,
HT_RX_REORDER_BUF_TIMEOUT
))
goto
set_release_timer
;
#ifdef CONFIG_MAC80211_HT_DEBUG
if
(
net_ratelimit
())
wiphy_debug
(
hw
->
wiphy
,
"release an RX reorder frame due to timeout on earlier frames
\n
"
);
#endif
ieee80211_release_reorder_frame
(
hw
,
tid_agg_rx
,
j
);
ht_dbg_ratelimited
(
sdata
,
"release an RX reorder frame due to timeout on earlier frames
\n
"
);
ieee80211_release_reorder_frame
(
sdata
,
tid_agg_rx
,
j
);
/*
* Increment the head seq# also for the skipped slots.
...
...
@@ -647,7 +644,7 @@ static void ieee80211_sta_reorder_release(struct ieee80211_hw *hw,
skipped
=
0
;
}
}
else
while
(
tid_agg_rx
->
reorder_buf
[
index
])
{
ieee80211_release_reorder_frame
(
hw
,
tid_agg_rx
,
index
);
ieee80211_release_reorder_frame
(
sdata
,
tid_agg_rx
,
index
);
index
=
seq_sub
(
tid_agg_rx
->
head_seq_num
,
tid_agg_rx
->
ssn
)
%
tid_agg_rx
->
buf_size
;
}
...
...
@@ -677,7 +674,7 @@ static void ieee80211_sta_reorder_release(struct ieee80211_hw *hw,
* rcu_read_lock protection. It returns false if the frame
* can be processed immediately, true if it was consumed.
*/
static
bool
ieee80211_sta_manage_reorder_buf
(
struct
ieee80211_
hw
*
hw
,
static
bool
ieee80211_sta_manage_reorder_buf
(
struct
ieee80211_
sub_if_data
*
sdata
,
struct
tid_ampdu_rx
*
tid_agg_rx
,
struct
sk_buff
*
skb
)
{
...
...
@@ -706,7 +703,8 @@ static bool ieee80211_sta_manage_reorder_buf(struct ieee80211_hw *hw,
if
(
!
seq_less
(
mpdu_seq_num
,
head_seq_num
+
buf_size
))
{
head_seq_num
=
seq_inc
(
seq_sub
(
mpdu_seq_num
,
buf_size
));
/* release stored frames up to new head to stack */
ieee80211_release_reorder_frames
(
hw
,
tid_agg_rx
,
head_seq_num
);
ieee80211_release_reorder_frames
(
sdata
,
tid_agg_rx
,
head_seq_num
);
}
/* Now the new frame is always in the range of the reordering buffer */
...
...
@@ -736,7 +734,7 @@ static bool ieee80211_sta_manage_reorder_buf(struct ieee80211_hw *hw,
tid_agg_rx
->
reorder_buf
[
index
]
=
skb
;
tid_agg_rx
->
reorder_time
[
index
]
=
jiffies
;
tid_agg_rx
->
stored_mpdu_num
++
;
ieee80211_sta_reorder_release
(
hw
,
tid_agg_rx
);
ieee80211_sta_reorder_release
(
sdata
,
tid_agg_rx
);
out:
spin_unlock
(
&
tid_agg_rx
->
reorder_lock
);
...
...
@@ -751,7 +749,6 @@ static void ieee80211_rx_reorder_ampdu(struct ieee80211_rx_data *rx)
{
struct
sk_buff
*
skb
=
rx
->
skb
;
struct
ieee80211_local
*
local
=
rx
->
local
;
struct
ieee80211_hw
*
hw
=
&
local
->
hw
;
struct
ieee80211_hdr
*
hdr
=
(
struct
ieee80211_hdr
*
)
skb
->
data
;
struct
ieee80211_rx_status
*
status
=
IEEE80211_SKB_RXCB
(
skb
);
struct
sta_info
*
sta
=
rx
->
sta
;
...
...
@@ -813,7 +810,7 @@ static void ieee80211_rx_reorder_ampdu(struct ieee80211_rx_data *rx)
* sure that we cannot get to it any more before doing
* anything with it.
*/
if
(
ieee80211_sta_manage_reorder_buf
(
hw
,
tid_agg_rx
,
skb
))
if
(
ieee80211_sta_manage_reorder_buf
(
rx
->
sdata
,
tid_agg_rx
,
skb
))
return
;
dont_reorder:
...
...
@@ -1136,24 +1133,18 @@ static void ap_sta_ps_start(struct sta_info *sta)
set_sta_flag
(
sta
,
WLAN_STA_PS_STA
);
if
(
!
(
local
->
hw
.
flags
&
IEEE80211_HW_AP_LINK_PS
))
drv_sta_notify
(
local
,
sdata
,
STA_NOTIFY_SLEEP
,
&
sta
->
sta
);
#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
pr_debug
(
"%s: STA %pM aid %d enters power save mode
\n
"
,
sdata
->
name
,
sta
->
sta
.
addr
,
sta
->
sta
.
aid
);
#endif
/* CONFIG_MAC80211_VERBOSE_PS_DEBUG */
ps_dbg
(
sdata
,
"STA %pM aid %d enters power save mode
\n
"
,
sta
->
sta
.
addr
,
sta
->
sta
.
aid
);
}
static
void
ap_sta_ps_end
(
struct
sta_info
*
sta
)
{
#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
pr_debug
(
"%s: STA %pM aid %d exits power save mode
\n
"
,
sta
->
sdata
->
name
,
sta
->
sta
.
addr
,
sta
->
sta
.
aid
);
#endif
/* CONFIG_MAC80211_VERBOSE_PS_DEBUG */
ps_dbg
(
sta
->
sdata
,
"STA %pM aid %d exits power save mode
\n
"
,
sta
->
sta
.
addr
,
sta
->
sta
.
aid
);
if
(
test_sta_flag
(
sta
,
WLAN_STA_PS_DRIVER
))
{
#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
pr_debug
(
"%s: STA %pM aid %d driver-ps-blocked
\n
"
,
sta
->
sdata
->
name
,
sta
->
sta
.
addr
,
sta
->
sta
.
aid
);
#endif
/* CONFIG_MAC80211_VERBOSE_PS_DEBUG */
ps_dbg
(
sta
->
sdata
,
"STA %pM aid %d driver-ps-blocked
\n
"
,
sta
->
sta
.
addr
,
sta
->
sta
.
aid
);
return
;
}
...
...
@@ -1383,17 +1374,8 @@ ieee80211_reassemble_add(struct ieee80211_sub_if_data *sdata,
if
(
sdata
->
fragment_next
>=
IEEE80211_FRAGMENT_MAX
)
sdata
->
fragment_next
=
0
;
if
(
!
skb_queue_empty
(
&
entry
->
skb_list
))
{
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
struct
ieee80211_hdr
*
hdr
=
(
struct
ieee80211_hdr
*
)
entry
->
skb_list
.
next
->
data
;
pr_debug
(
"%s: RX reassembly removed oldest fragment entry (idx=%d age=%lu seq=%d last_frag=%d addr1=%pM addr2=%pM
\n
"
,
sdata
->
name
,
idx
,
jiffies
-
entry
->
first_frag_time
,
entry
->
seq
,
entry
->
last_frag
,
hdr
->
addr1
,
hdr
->
addr2
);
#endif
if
(
!
skb_queue_empty
(
&
entry
->
skb_list
))
__skb_queue_purge
(
&
entry
->
skb_list
);
}
__skb_queue_tail
(
&
entry
->
skb_list
,
*
skb
);
/* no need for locking */
*
skb
=
NULL
;
...
...
@@ -1751,7 +1733,7 @@ ieee80211_deliver_skb(struct ieee80211_rx_data *rx)
*/
xmit_skb
=
skb_copy
(
skb
,
GFP_ATOMIC
);
if
(
!
xmit_skb
)
net_
dbg
_ratelimited
(
"%s: failed to clone multicast frame
\n
"
,
net_
info
_ratelimited
(
"%s: failed to clone multicast frame
\n
"
,
dev
->
name
);
}
else
{
dsta
=
sta_info_get
(
sdata
,
skb
->
data
);
...
...
@@ -1955,7 +1937,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
fwd_skb
=
skb_copy
(
skb
,
GFP_ATOMIC
);
if
(
!
fwd_skb
)
{
net_
dbg
_ratelimited
(
"%s: failed to clone mesh frame
\n
"
,
net_
info
_ratelimited
(
"%s: failed to clone mesh frame
\n
"
,
sdata
->
name
);
goto
out
;
}
...
...
@@ -2058,8 +2040,6 @@ ieee80211_rx_h_data(struct ieee80211_rx_data *rx)
static
ieee80211_rx_result
debug_noinline
ieee80211_rx_h_ctrl
(
struct
ieee80211_rx_data
*
rx
)
{
struct
ieee80211_local
*
local
=
rx
->
local
;
struct
ieee80211_hw
*
hw
=
&
local
->
hw
;
struct
sk_buff
*
skb
=
rx
->
skb
;
struct
ieee80211_bar
*
bar
=
(
struct
ieee80211_bar
*
)
skb
->
data
;
struct
tid_ampdu_rx
*
tid_agg_rx
;
...
...
@@ -2096,7 +2076,8 @@ ieee80211_rx_h_ctrl(struct ieee80211_rx_data *rx)
spin_lock
(
&
tid_agg_rx
->
reorder_lock
);
/* release stored frames up to start of BAR */
ieee80211_release_reorder_frames
(
hw
,
tid_agg_rx
,
start_seq_num
);
ieee80211_release_reorder_frames
(
rx
->
sdata
,
tid_agg_rx
,
start_seq_num
);
spin_unlock
(
&
tid_agg_rx
->
reorder_lock
);
kfree_skb
(
skb
);
...
...
@@ -2747,7 +2728,7 @@ void ieee80211_release_reorder_timeout(struct sta_info *sta, int tid)
return
;
spin_lock
(
&
tid_agg_rx
->
reorder_lock
);
ieee80211_sta_reorder_release
(
&
sta
->
local
->
hw
,
tid_agg_rx
);
ieee80211_sta_reorder_release
(
sta
->
sdata
,
tid_agg_rx
);
spin_unlock
(
&
tid_agg_rx
->
reorder_lock
);
ieee80211_rx_handlers
(
&
rx
);
...
...
net/mac80211/sta_info.c
View file @
2c443443
...
...
@@ -169,9 +169,7 @@ void sta_info_free(struct ieee80211_local *local, struct sta_info *sta)
if
(
sta
->
rate_ctrl
)
rate_control_free_sta
(
sta
);
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
wiphy_debug
(
local
->
hw
.
wiphy
,
"Destroyed STA %pM
\n
"
,
sta
->
sta
.
addr
);
#endif
/* CONFIG_MAC80211_VERBOSE_DEBUG */
sta_dbg
(
sta
->
sdata
,
"Destroyed STA %pM
\n
"
,
sta
->
sta
.
addr
);
kfree
(
sta
);
}
...
...
@@ -278,9 +276,7 @@ struct sta_info *sta_info_alloc(struct ieee80211_sub_if_data *sdata,
for
(
i
=
0
;
i
<
NUM_RX_DATA_QUEUES
;
i
++
)
sta
->
last_seq_ctrl
[
i
]
=
cpu_to_le16
(
USHRT_MAX
);
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
wiphy_debug
(
local
->
hw
.
wiphy
,
"Allocated STA %pM
\n
"
,
sta
->
sta
.
addr
);
#endif
/* CONFIG_MAC80211_VERBOSE_DEBUG */
sta_dbg
(
sdata
,
"Allocated STA %pM
\n
"
,
sta
->
sta
.
addr
);
#ifdef CONFIG_MAC80211_MESH
sta
->
plink_state
=
NL80211_PLINK_LISTEN
;
...
...
@@ -333,8 +329,9 @@ static int sta_info_insert_drv_state(struct ieee80211_local *local,
}
if
(
sdata
->
vif
.
type
==
NL80211_IFTYPE_ADHOC
)
{
pr_debug
(
"%s: failed to move IBSS STA %pM to state %d (%d) - keeping it anyway
\n
"
,
sdata
->
name
,
sta
->
sta
.
addr
,
state
+
1
,
err
);
sdata_info
(
sdata
,
"failed to move IBSS STA %pM to state %d (%d) - keeping it anyway
\n
"
,
sta
->
sta
.
addr
,
state
+
1
,
err
);
err
=
0
;
}
...
...
@@ -389,9 +386,7 @@ static int sta_info_insert_finish(struct sta_info *sta) __acquires(RCU)
sinfo
.
generation
=
local
->
sta_generation
;
cfg80211_new_sta
(
sdata
->
dev
,
sta
->
sta
.
addr
,
&
sinfo
,
GFP_KERNEL
);
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
wiphy_debug
(
local
->
hw
.
wiphy
,
"Inserted STA %pM
\n
"
,
sta
->
sta
.
addr
);
#endif
/* CONFIG_MAC80211_VERBOSE_DEBUG */
sta_dbg
(
sdata
,
"Inserted STA %pM
\n
"
,
sta
->
sta
.
addr
);
/* move reference to rcu-protected */
rcu_read_lock
();
...
...
@@ -617,9 +612,8 @@ static bool sta_info_cleanup_expire_buffered_ac(struct ieee80211_local *local,
break
;
local
->
total_ps_buffered
--
;
#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
pr_debug
(
"Buffered frame expired (STA %pM)
\n
"
,
sta
->
sta
.
addr
);
#endif
ps_dbg
(
sta
->
sdata
,
"Buffered frame expired (STA %pM)
\n
"
,
sta
->
sta
.
addr
);
dev_kfree_skb
(
skb
);
}
...
...
@@ -745,9 +739,8 @@ int __must_check __sta_info_destroy(struct sta_info *sta)
mesh_accept_plinks_update
(
sdata
);
#endif
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
wiphy_debug
(
local
->
hw
.
wiphy
,
"Removed STA %pM
\n
"
,
sta
->
sta
.
addr
);
#endif
/* CONFIG_MAC80211_VERBOSE_DEBUG */
sta_dbg
(
sdata
,
"Removed STA %pM
\n
"
,
sta
->
sta
.
addr
);
cancel_work_sync
(
&
sta
->
drv_unblock_wk
);
cfg80211_del_sta
(
sdata
->
dev
,
sta
->
sta
.
addr
,
GFP_KERNEL
);
...
...
@@ -887,8 +880,8 @@ void ieee80211_sta_expire(struct ieee80211_sub_if_data *sdata,
continue
;
if
(
time_after
(
jiffies
,
sta
->
last_rx
+
exp_time
))
{
ibss_
vdbg
(
"%s:
expiring inactive STA %pM
\n
"
,
sdata
->
name
,
sta
->
sta
.
addr
);
ibss_
dbg
(
sdata
,
"
expiring inactive STA %pM
\n
"
,
sta
->
sta
.
addr
);
WARN_ON
(
__sta_info_destroy
(
sta
));
}
}
...
...
@@ -986,10 +979,9 @@ void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta)
sta_info_recalc_tim
(
sta
);
#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
pr_debug
(
"%s: STA %pM aid %d sending %d filtered/%d PS frames since STA not sleeping anymore
\n
"
,
sdata
->
name
,
sta
->
sta
.
addr
,
sta
->
sta
.
aid
,
filtered
,
buffered
);
#endif
/* CONFIG_MAC80211_VERBOSE_PS_DEBUG */
ps_dbg
(
sdata
,
"STA %pM aid %d sending %d filtered/%d PS frames since STA not sleeping anymore
\n
"
,
sta
->
sta
.
addr
,
sta
->
sta
.
aid
,
filtered
,
buffered
);
}
static
void
ieee80211_send_null_response
(
struct
ieee80211_sub_if_data
*
sdata
,
...
...
@@ -1379,10 +1371,8 @@ int sta_info_move_state(struct sta_info *sta,
return
-
EINVAL
;
}
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
pr_debug
(
"%s: moving STA %pM to state %d
\n
"
,
sta
->
sdata
->
name
,
sta
->
sta
.
addr
,
new_state
);
#endif
sta_dbg
(
sta
->
sdata
,
"moving STA %pM to state %d
\n
"
,
sta
->
sta
.
addr
,
new_state
);
/*
* notify the driver before the actual changes so it can
...
...
net/mac80211/status.c
View file @
2c443443
...
...
@@ -155,13 +155,10 @@ static void ieee80211_handle_filtered_frame(struct ieee80211_local *local,
return
;
}
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
if
(
net_ratelimit
())
wiphy_debug
(
local
->
hw
.
wiphy
,
"dropped TX filtered frame, queue_len=%d PS=%d @%lu
\n
"
,
skb_queue_len
(
&
sta
->
tx_filtered
[
ac
]),
!!
test_sta_flag
(
sta
,
WLAN_STA_PS_STA
),
jiffies
);
#endif
ps_dbg_ratelimited
(
sta
->
sdata
,
"dropped TX filtered frame, queue_len=%d PS=%d @%lu
\n
"
,
skb_queue_len
(
&
sta
->
tx_filtered
[
ac
]),
!!
test_sta_flag
(
sta
,
WLAN_STA_PS_STA
),
jiffies
);
dev_kfree_skb
(
skb
);
}
...
...
net/mac80211/tkip.c
View file @
2c443443
...
...
@@ -260,16 +260,6 @@ int ieee80211_tkip_decrypt_data(struct crypto_cipher *tfm,
keyid
=
pos
[
3
];
iv32
=
get_unaligned_le32
(
pos
+
4
);
pos
+=
8
;
#ifdef CONFIG_MAC80211_TKIP_DEBUG
{
int
i
;
pr_debug
(
"TKIP decrypt: data(len=%zd)"
,
payload_len
);
for
(
i
=
0
;
i
<
payload_len
;
i
++
)
printk
(
" %02x"
,
payload
[
i
]);
printk
(
"
\n
"
);
pr_debug
(
"TKIP decrypt: iv16=%04x iv32=%08x
\n
"
,
iv16
,
iv32
);
}
#endif
if
(
!
(
keyid
&
(
1
<<
5
)))
return
TKIP_DECRYPT_NO_EXT_IV
;
...
...
@@ -280,15 +270,8 @@ int ieee80211_tkip_decrypt_data(struct crypto_cipher *tfm,
if
(
key
->
u
.
tkip
.
rx
[
queue
].
state
!=
TKIP_STATE_NOT_INIT
&&
(
iv32
<
key
->
u
.
tkip
.
rx
[
queue
].
iv32
||
(
iv32
==
key
->
u
.
tkip
.
rx
[
queue
].
iv32
&&
iv16
<=
key
->
u
.
tkip
.
rx
[
queue
].
iv16
)))
{
#ifdef CONFIG_MAC80211_TKIP_DEBUG
pr_debug
(
"TKIP replay detected for RX frame from %pM (RX IV (%04x,%02x) <= prev. IV (%04x,%02x)
\n
"
,
ta
,
iv32
,
iv16
,
key
->
u
.
tkip
.
rx
[
queue
].
iv32
,
key
->
u
.
tkip
.
rx
[
queue
].
iv16
);
#endif
iv16
<=
key
->
u
.
tkip
.
rx
[
queue
].
iv16
)))
return
TKIP_DECRYPT_REPLAY
;
}
if
(
only_iv
)
{
res
=
TKIP_DECRYPT_OK
;
...
...
@@ -300,21 +283,6 @@ int ieee80211_tkip_decrypt_data(struct crypto_cipher *tfm,
key
->
u
.
tkip
.
rx
[
queue
].
iv32
!=
iv32
)
{
/* IV16 wrapped around - perform TKIP phase 1 */
tkip_mixing_phase1
(
tk
,
&
key
->
u
.
tkip
.
rx
[
queue
],
ta
,
iv32
);
#ifdef CONFIG_MAC80211_TKIP_DEBUG
{
int
i
;
u8
key_offset
=
NL80211_TKIP_DATA_OFFSET_ENCR_KEY
;
pr_debug
(
"TKIP decrypt: Phase1 TA=%pM TK="
,
ta
);
for
(
i
=
0
;
i
<
16
;
i
++
)
printk
(
"%02x "
,
key
->
conf
.
key
[
key_offset
+
i
]);
printk
(
"
\n
"
);
pr_debug
(
"TKIP decrypt: P1K="
);
for
(
i
=
0
;
i
<
5
;
i
++
)
printk
(
"%04x "
,
key
->
u
.
tkip
.
rx
[
queue
].
p1k
[
i
]);
printk
(
"
\n
"
);
}
#endif
}
if
(
key
->
local
->
ops
->
update_tkip_key
&&
key
->
flags
&
KEY_FLAG_UPLOADED_TO_HARDWARE
&&
...
...
@@ -330,15 +298,6 @@ int ieee80211_tkip_decrypt_data(struct crypto_cipher *tfm,
}
tkip_mixing_phase2
(
tk
,
&
key
->
u
.
tkip
.
rx
[
queue
],
iv16
,
rc4key
);
#ifdef CONFIG_MAC80211_TKIP_DEBUG
{
int
i
;
pr_debug
(
"TKIP decrypt: Phase2 rc4key="
);
for
(
i
=
0
;
i
<
16
;
i
++
)
printk
(
"%02x "
,
rc4key
[
i
]);
printk
(
"
\n
"
);
}
#endif
res
=
ieee80211_wep_decrypt_data
(
tfm
,
rc4key
,
16
,
pos
,
payload_len
-
12
);
done:
...
...
net/mac80211/trace.c
0 → 100644
View file @
2c443443
/* bug in tracepoint.h, it should include this */
#include <linux/module.h>
/* sparse isn't too happy with all macros... */
#ifndef __CHECKER__
#include <net/cfg80211.h>
#include "driver-ops.h"
#include "debug.h"
#define CREATE_TRACE_POINTS
#include "trace.h"
#ifdef CONFIG_MAC80211_MESSAGE_TRACING
void
__sdata_info
(
const
char
*
fmt
,
...)
{
struct
va_format
vaf
=
{
.
fmt
=
fmt
,
};
va_list
args
;
va_start
(
args
,
fmt
);
vaf
.
va
=
&
args
;
pr_info
(
"%pV"
,
&
vaf
);
trace_mac80211_info
(
&
vaf
);
va_end
(
args
);
}
void
__sdata_dbg
(
bool
print
,
const
char
*
fmt
,
...)
{
struct
va_format
vaf
=
{
.
fmt
=
fmt
,
};
va_list
args
;
va_start
(
args
,
fmt
);
vaf
.
va
=
&
args
;
if
(
print
)
pr_debug
(
"%pV"
,
&
vaf
);
trace_mac80211_dbg
(
&
vaf
);
va_end
(
args
);
}
void
__sdata_err
(
const
char
*
fmt
,
...)
{
struct
va_format
vaf
=
{
.
fmt
=
fmt
,
};
va_list
args
;
va_start
(
args
,
fmt
);
vaf
.
va
=
&
args
;
pr_err
(
"%pV"
,
&
vaf
);
trace_mac80211_err
(
&
vaf
);
va_end
(
args
);
}
void
__wiphy_dbg
(
struct
wiphy
*
wiphy
,
bool
print
,
const
char
*
fmt
,
...)
{
struct
va_format
vaf
=
{
.
fmt
=
fmt
,
};
va_list
args
;
va_start
(
args
,
fmt
);
vaf
.
va
=
&
args
;
if
(
print
)
wiphy_dbg
(
wiphy
,
"%pV"
,
&
vaf
);
trace_mac80211_dbg
(
&
vaf
);
va_end
(
args
);
}
#endif
#endif
net/mac80211/
driver-
trace.h
→
net/mac80211/trace.h
View file @
2c443443
...
...
@@ -1218,6 +1218,32 @@ DEFINE_EVENT(release_evt, drv_allow_buffered_frames,
TP_ARGS
(
local
,
sta
,
tids
,
num_frames
,
reason
,
more_data
)
);
TRACE_EVENT
(
drv_get_rssi
,
TP_PROTO
(
struct
ieee80211_local
*
local
,
struct
ieee80211_sta
*
sta
,
s8
rssi
,
int
ret
),
TP_ARGS
(
local
,
sta
,
rssi
,
ret
),
TP_STRUCT__entry
(
LOCAL_ENTRY
STA_ENTRY
__field
(
s8
,
rssi
)
__field
(
int
,
ret
)
),
TP_fast_assign
(
LOCAL_ASSIGN
;
STA_ASSIGN
;
__entry
->
rssi
=
rssi
;
__entry
->
ret
=
ret
;
),
TP_printk
(
LOCAL_PR_FMT
STA_PR_FMT
" rssi:%d ret:%d"
,
LOCAL_PR_ARG
,
STA_PR_ARG
,
__entry
->
rssi
,
__entry
->
ret
)
);
/*
* Tracing for API calls that drivers call.
*/
...
...
@@ -1606,10 +1632,49 @@ TRACE_EVENT(stop_queue,
LOCAL_PR_ARG
,
__entry
->
queue
,
__entry
->
reason
)
);
#ifdef CONFIG_MAC80211_MESSAGE_TRACING
#undef TRACE_SYSTEM
#define TRACE_SYSTEM mac80211_msg
#define MAX_MSG_LEN 100
DECLARE_EVENT_CLASS
(
mac80211_msg_event
,
TP_PROTO
(
struct
va_format
*
vaf
),
TP_ARGS
(
vaf
),
TP_STRUCT__entry
(
__dynamic_array
(
char
,
msg
,
MAX_MSG_LEN
)
),
TP_fast_assign
(
WARN_ON_ONCE
(
vsnprintf
(
__get_dynamic_array
(
msg
),
MAX_MSG_LEN
,
vaf
->
fmt
,
*
vaf
->
va
)
>=
MAX_MSG_LEN
);
),
TP_printk
(
"%s"
,
__get_str
(
msg
))
);
DEFINE_EVENT
(
mac80211_msg_event
,
mac80211_info
,
TP_PROTO
(
struct
va_format
*
vaf
),
TP_ARGS
(
vaf
)
);
DEFINE_EVENT
(
mac80211_msg_event
,
mac80211_dbg
,
TP_PROTO
(
struct
va_format
*
vaf
),
TP_ARGS
(
vaf
)
);
DEFINE_EVENT
(
mac80211_msg_event
,
mac80211_err
,
TP_PROTO
(
struct
va_format
*
vaf
),
TP_ARGS
(
vaf
)
);
#endif
#endif
/* !__MAC80211_DRIVER_TRACE || TRACE_HEADER_MULTI_READ */
#undef TRACE_INCLUDE_PATH
#define TRACE_INCLUDE_PATH .
#undef TRACE_INCLUDE_FILE
#define TRACE_INCLUDE_FILE
driver-
trace
#define TRACE_INCLUDE_FILE trace
#include <trace/define_trace.h>
net/mac80211/tx.c
View file @
2c443443
...
...
@@ -175,12 +175,6 @@ static __le16 ieee80211_duration(struct ieee80211_tx_data *tx,
return
cpu_to_le16
(
dur
);
}
static
inline
int
is_ieee80211_device
(
struct
ieee80211_local
*
local
,
struct
net_device
*
dev
)
{
return
local
==
wdev_priv
(
dev
->
ieee80211_ptr
);
}
/* tx handlers */
static
ieee80211_tx_result
debug_noinline
ieee80211_tx_h_dynamic_ps
(
struct
ieee80211_tx_data
*
tx
)
...
...
@@ -297,9 +291,10 @@ ieee80211_tx_h_check_assoc(struct ieee80211_tx_data *tx)
if
(
unlikely
(
!
assoc
&&
ieee80211_is_data
(
hdr
->
frame_control
)))
{
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
pr_debug
(
"%s: dropped data frame to not associated station %pM
\n
"
,
tx
->
sdata
->
name
,
hdr
->
addr1
);
#endif
/* CONFIG_MAC80211_VERBOSE_DEBUG */
sdata_info
(
tx
->
sdata
,
"dropped data frame to not associated station %pM
\n
"
,
hdr
->
addr1
);
#endif
I802_DEBUG_INC
(
tx
->
local
->
tx_handlers_drop_not_assoc
);
return
TX_DROP
;
}
...
...
@@ -366,10 +361,7 @@ static void purge_old_ps_buffers(struct ieee80211_local *local)
rcu_read_unlock
();
local
->
total_ps_buffered
=
total
;
#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
wiphy_debug
(
local
->
hw
.
wiphy
,
"PS buffers full - purged %d frames
\n
"
,
purged
);
#endif
ps_dbg_hw
(
&
local
->
hw
,
"PS buffers full - purged %d frames
\n
"
,
purged
);
}
static
ieee80211_tx_result
...
...
@@ -411,10 +403,8 @@ ieee80211_tx_h_multicast_ps_buf(struct ieee80211_tx_data *tx)
purge_old_ps_buffers
(
tx
->
local
);
if
(
skb_queue_len
(
&
tx
->
sdata
->
bss
->
ps_bc_buf
)
>=
AP_MAX_BC_BUFFER
)
{
#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
net_dbg_ratelimited
(
"%s: BC TX buffer full - dropping the oldest frame
\n
"
,
tx
->
sdata
->
name
);
#endif
ps_dbg
(
tx
->
sdata
,
"BC TX buffer full - dropping the oldest frame
\n
"
);
dev_kfree_skb
(
skb_dequeue
(
&
tx
->
sdata
->
bss
->
ps_bc_buf
));
}
else
tx
->
local
->
total_ps_buffered
++
;
...
...
@@ -465,18 +455,15 @@ ieee80211_tx_h_unicast_ps_buf(struct ieee80211_tx_data *tx)
return
TX_CONTINUE
;
}
#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
pr_debug
(
"STA %pM aid %d: PS buffer for AC %d
\n
"
,
sta
->
sta
.
addr
,
sta
->
sta
.
aid
,
ac
);
#endif
/* CONFIG_MAC80211_VERBOSE_PS_DEBUG */
ps_dbg
(
sta
->
sdata
,
"STA %pM aid %d: PS buffer for AC %d
\n
"
,
sta
->
sta
.
addr
,
sta
->
sta
.
aid
,
ac
);
if
(
tx
->
local
->
total_ps_buffered
>=
TOTAL_MAX_TX_BUFFER
)
purge_old_ps_buffers
(
tx
->
local
);
if
(
skb_queue_len
(
&
sta
->
ps_tx_buf
[
ac
])
>=
STA_MAX_TX_BUFFER
)
{
struct
sk_buff
*
old
=
skb_dequeue
(
&
sta
->
ps_tx_buf
[
ac
]);
#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
net_dbg_ratelimited
(
"%s: STA %pM TX buffer for AC %d full - dropping oldest frame
\n
"
,
tx
->
sdata
->
name
,
sta
->
sta
.
addr
,
ac
);
#endif
ps_dbg
(
tx
->
sdata
,
"STA %pM TX buffer for AC %d full - dropping oldest frame
\n
"
,
sta
->
sta
.
addr
,
ac
);
dev_kfree_skb
(
old
);
}
else
tx
->
local
->
total_ps_buffered
++
;
...
...
@@ -498,13 +485,11 @@ ieee80211_tx_h_unicast_ps_buf(struct ieee80211_tx_data *tx)
sta_info_recalc_tim
(
sta
);
return
TX_QUEUED
;
}
else
if
(
unlikely
(
test_sta_flag
(
sta
,
WLAN_STA_PS_STA
)))
{
ps_dbg
(
tx
->
sdata
,
"STA %pM in PS mode, but polling/in SP -> send frame
\n
"
,
sta
->
sta
.
addr
);
}
#ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
else
if
(
unlikely
(
test_sta_flag
(
sta
,
WLAN_STA_PS_STA
)))
{
pr_debug
(
"%s: STA %pM in PS mode, but polling/in SP -> send frame
\n
"
,
tx
->
sdata
->
name
,
sta
->
sta
.
addr
);
}
#endif
/* CONFIG_MAC80211_VERBOSE_PS_DEBUG */
return
TX_CONTINUE
;
}
...
...
@@ -1963,7 +1948,7 @@ netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
(
cpu_to_be16
(
ethertype
)
!=
sdata
->
control_port_protocol
||
!
ether_addr_equal
(
sdata
->
vif
.
addr
,
skb
->
data
+
ETH_ALEN
))))
{
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
net_
dbg
_ratelimited
(
"%s: dropped frame to %pM (unauthorized port)
\n
"
,
net_
info
_ratelimited
(
"%s: dropped frame to %pM (unauthorized port)
\n
"
,
dev
->
name
,
hdr
.
addr1
);
#endif
...
...
net/wireless/nl80211.c
View file @
2c443443
...
...
@@ -340,6 +340,7 @@ static const struct nla_policy
nl80211_match_policy
[
NL80211_SCHED_SCAN_MATCH_ATTR_MAX
+
1
]
=
{
[
NL80211_SCHED_SCAN_MATCH_ATTR_SSID
]
=
{
.
type
=
NLA_BINARY
,
.
len
=
IEEE80211_MAX_SSID_LEN
},
[
NL80211_SCHED_SCAN_MATCH_ATTR_RSSI
]
=
{
.
type
=
NLA_U32
},
};
/* ifidx get helper */
...
...
@@ -4387,7 +4388,7 @@ static int nl80211_start_sched_scan(struct sk_buff *skb,
nla_for_each_nested
(
attr
,
info
->
attrs
[
NL80211_ATTR_SCHED_SCAN_MATCH
],
tmp
)
{
struct
nlattr
*
ssid
;
struct
nlattr
*
ssid
,
*
rssi
;
nla_parse
(
tb
,
NL80211_SCHED_SCAN_MATCH_ATTR_MAX
,
nla_data
(
attr
),
nla_len
(
attr
),
...
...
@@ -4403,6 +4404,12 @@ static int nl80211_start_sched_scan(struct sk_buff *skb,
request
->
match_sets
[
i
].
ssid
.
ssid_len
=
nla_len
(
ssid
);
}
rssi
=
tb
[
NL80211_SCHED_SCAN_MATCH_ATTR_RSSI
];
if
(
rssi
)
request
->
rssi_thold
=
nla_get_u32
(
rssi
);
else
request
->
rssi_thold
=
NL80211_SCAN_RSSI_THOLD_OFF
;
i
++
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment