Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
gsplhtlxg
clone-Linux
提交
89b59bcd
C
clone-Linux
项目概览
gsplhtlxg
/
clone-Linux
通知
2
Star
0
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
clone-Linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
89b59bcd
编写于
8月 02, 2013
作者:
J
John W. Linville
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'for-john' of
git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211
上级
788f7a56
ddfe49b4
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
41 addition
and
20 deletion
+41
-20
net/mac80211/mlme.c
net/mac80211/mlme.c
+36
-18
net/wireless/core.c
net/wireless/core.c
+1
-0
net/wireless/nl80211.c
net/wireless/nl80211.c
+4
-2
未找到文件。
net/mac80211/mlme.c
浏览文件 @
89b59bcd
...
...
@@ -31,10 +31,12 @@
#include "led.h"
#define IEEE80211_AUTH_TIMEOUT (HZ / 5)
#define IEEE80211_AUTH_TIMEOUT_LONG (HZ / 2)
#define IEEE80211_AUTH_TIMEOUT_SHORT (HZ / 10)
#define IEEE80211_AUTH_MAX_TRIES 3
#define IEEE80211_AUTH_WAIT_ASSOC (HZ * 5)
#define IEEE80211_ASSOC_TIMEOUT (HZ / 5)
#define IEEE80211_ASSOC_TIMEOUT_LONG (HZ / 2)
#define IEEE80211_ASSOC_TIMEOUT_SHORT (HZ / 10)
#define IEEE80211_ASSOC_MAX_TRIES 3
...
...
@@ -209,8 +211,9 @@ ieee80211_determine_chantype(struct ieee80211_sub_if_data *sdata,
struct
ieee80211_channel
*
channel
,
const
struct
ieee80211_ht_operation
*
ht_oper
,
const
struct
ieee80211_vht_operation
*
vht_oper
,
struct
cfg80211_chan_def
*
chandef
,
bool
verbose
)
struct
cfg80211_chan_def
*
chandef
,
bool
tracking
)
{
struct
ieee80211_if_managed
*
ifmgd
=
&
sdata
->
u
.
mgd
;
struct
cfg80211_chan_def
vht_chandef
;
u32
ht_cfreq
,
ret
;
...
...
@@ -229,7 +232,7 @@ ieee80211_determine_chantype(struct ieee80211_sub_if_data *sdata,
ht_cfreq
=
ieee80211_channel_to_frequency
(
ht_oper
->
primary_chan
,
channel
->
band
);
/* check that channel matches the right operating channel */
if
(
channel
->
center_freq
!=
ht_cfreq
)
{
if
(
!
tracking
&&
channel
->
center_freq
!=
ht_cfreq
)
{
/*
* It's possible that some APs are confused here;
* Netgear WNDR3700 sometimes reports 4 higher than
...
...
@@ -237,11 +240,10 @@ ieee80211_determine_chantype(struct ieee80211_sub_if_data *sdata,
* since we look at probe response/beacon data here
* it should be OK.
*/
if
(
verbose
)
sdata_info
(
sdata
,
"Wrong control channel: center-freq: %d ht-cfreq: %d ht->primary_chan: %d band: %d - Disabling HT
\n
"
,
channel
->
center_freq
,
ht_cfreq
,
ht_oper
->
primary_chan
,
channel
->
band
);
sdata_info
(
sdata
,
"Wrong control channel: center-freq: %d ht-cfreq: %d ht->primary_chan: %d band: %d - Disabling HT
\n
"
,
channel
->
center_freq
,
ht_cfreq
,
ht_oper
->
primary_chan
,
channel
->
band
);
ret
=
IEEE80211_STA_DISABLE_HT
|
IEEE80211_STA_DISABLE_VHT
;
goto
out
;
}
...
...
@@ -295,7 +297,7 @@ ieee80211_determine_chantype(struct ieee80211_sub_if_data *sdata,
channel
->
band
);
break
;
default:
if
(
verbose
)
if
(
!
(
ifmgd
->
flags
&
IEEE80211_STA_DISABLE_VHT
)
)
sdata_info
(
sdata
,
"AP VHT operation IE has invalid channel width (%d), disable VHT
\n
"
,
vht_oper
->
chan_width
);
...
...
@@ -304,7 +306,7 @@ ieee80211_determine_chantype(struct ieee80211_sub_if_data *sdata,
}
if
(
!
cfg80211_chandef_valid
(
&
vht_chandef
))
{
if
(
verbose
)
if
(
!
(
ifmgd
->
flags
&
IEEE80211_STA_DISABLE_VHT
)
)
sdata_info
(
sdata
,
"AP VHT information is invalid, disable VHT
\n
"
);
ret
=
IEEE80211_STA_DISABLE_VHT
;
...
...
@@ -317,7 +319,7 @@ ieee80211_determine_chantype(struct ieee80211_sub_if_data *sdata,
}
if
(
!
cfg80211_chandef_compatible
(
chandef
,
&
vht_chandef
))
{
if
(
verbose
)
if
(
!
(
ifmgd
->
flags
&
IEEE80211_STA_DISABLE_VHT
)
)
sdata_info
(
sdata
,
"AP VHT information doesn't match HT, disable VHT
\n
"
);
ret
=
IEEE80211_STA_DISABLE_VHT
;
...
...
@@ -333,18 +335,27 @@ ieee80211_determine_chantype(struct ieee80211_sub_if_data *sdata,
if
(
ret
&
IEEE80211_STA_DISABLE_VHT
)
vht_chandef
=
*
chandef
;
/*
* Ignore the DISABLED flag when we're already connected and only
* tracking the APs beacon for bandwidth changes - otherwise we
* might get disconnected here if we connect to an AP, update our
* regulatory information based on the AP's country IE and the
* information we have is wrong/outdated and disables the channel
* that we're actually using for the connection to the AP.
*/
while
(
!
cfg80211_chandef_usable
(
sdata
->
local
->
hw
.
wiphy
,
chandef
,
IEEE80211_CHAN_DISABLED
))
{
tracking
?
0
:
IEEE80211_CHAN_DISABLED
))
{
if
(
WARN_ON
(
chandef
->
width
==
NL80211_CHAN_WIDTH_20_NOHT
))
{
ret
=
IEEE80211_STA_DISABLE_HT
|
IEEE80211_STA_DISABLE_VHT
;
goto
out
;
break
;
}
ret
|=
chandef_downgrade
(
chandef
);
}
if
(
chandef
->
width
!=
vht_chandef
.
width
&&
verbose
)
if
(
chandef
->
width
!=
vht_chandef
.
width
&&
!
tracking
)
sdata_info
(
sdata
,
"capabilities/regulatory prevented using AP HT/VHT configuration, downgraded
\n
"
);
...
...
@@ -384,7 +395,7 @@ static int ieee80211_config_bw(struct ieee80211_sub_if_data *sdata,
/* calculate new channel (type) based on HT/VHT operation IEs */
flags
=
ieee80211_determine_chantype
(
sdata
,
sband
,
chan
,
ht_oper
,
vht_oper
,
&
chandef
,
fals
e
);
vht_oper
,
&
chandef
,
tru
e
);
/*
* Downgrade the new channel if we associated with restricted
...
...
@@ -3394,10 +3405,13 @@ static int ieee80211_probe_auth(struct ieee80211_sub_if_data *sdata)
if
(
tx_flags
==
0
)
{
auth_data
->
timeout
=
jiffies
+
IEEE80211_AUTH_TIMEOUT
;
ifmgd
->
auth_data
->
timeout_started
=
true
;
auth_data
->
timeout_started
=
true
;
run_again
(
sdata
,
auth_data
->
timeout
);
}
else
{
auth_data
->
timeout_started
=
false
;
auth_data
->
timeout
=
round_jiffies_up
(
jiffies
+
IEEE80211_AUTH_TIMEOUT_LONG
);
auth_data
->
timeout_started
=
true
;
run_again
(
sdata
,
auth_data
->
timeout
);
}
return
0
;
...
...
@@ -3434,7 +3448,11 @@ static int ieee80211_do_assoc(struct ieee80211_sub_if_data *sdata)
assoc_data
->
timeout_started
=
true
;
run_again
(
sdata
,
assoc_data
->
timeout
);
}
else
{
assoc_data
->
timeout_started
=
false
;
assoc_data
->
timeout
=
round_jiffies_up
(
jiffies
+
IEEE80211_ASSOC_TIMEOUT_LONG
);
assoc_data
->
timeout_started
=
true
;
run_again
(
sdata
,
assoc_data
->
timeout
);
}
return
0
;
...
...
@@ -3829,7 +3847,7 @@ static int ieee80211_prep_channel(struct ieee80211_sub_if_data *sdata,
ifmgd
->
flags
|=
ieee80211_determine_chantype
(
sdata
,
sband
,
cbss
->
channel
,
ht_oper
,
vht_oper
,
&
chandef
,
tru
e
);
&
chandef
,
fals
e
);
sdata
->
needed_rx_chains
=
min
(
ieee80211_ht_vht_rx_chains
(
sdata
,
cbss
),
local
->
rx_chains
);
...
...
net/wireless/core.c
浏览文件 @
89b59bcd
...
...
@@ -765,6 +765,7 @@ void cfg80211_leave(struct cfg80211_registered_device *rdev,
cfg80211_leave_mesh
(
rdev
,
dev
);
break
;
case
NL80211_IFTYPE_AP
:
case
NL80211_IFTYPE_P2P_GO
:
cfg80211_stop_ap
(
rdev
,
dev
);
break
;
default:
...
...
net/wireless/nl80211.c
浏览文件 @
89b59bcd
...
...
@@ -441,10 +441,12 @@ static int nl80211_prepare_wdev_dump(struct sk_buff *skb,
goto
out_unlock
;
}
*
rdev
=
wiphy_to_dev
((
*
wdev
)
->
wiphy
);
cb
->
args
[
0
]
=
(
*
rdev
)
->
wiphy_idx
;
/* 0 is the first index - add 1 to parse only once */
cb
->
args
[
0
]
=
(
*
rdev
)
->
wiphy_idx
+
1
;
cb
->
args
[
1
]
=
(
*
wdev
)
->
identifier
;
}
else
{
struct
wiphy
*
wiphy
=
wiphy_idx_to_wiphy
(
cb
->
args
[
0
]);
/* subtract the 1 again here */
struct
wiphy
*
wiphy
=
wiphy_idx_to_wiphy
(
cb
->
args
[
0
]
-
1
);
struct
wireless_dev
*
tmp
;
if
(
!
wiphy
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录