Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xiphi1978
linux
提交
8c3a01d0
L
linux
项目概览
xiphi1978
/
linux
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
8c3a01d0
编写于
5月 29, 2008
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/linville/wireless-2.6
上级
4c8411f8
c97c23e3
变更
17
隐藏空白更改
内联
并排
Showing
17 changed file
with
166 addition
and
51 deletion
+166
-51
drivers/net/wireless/b43/b43.h
drivers/net/wireless/b43/b43.h
+1
-0
drivers/net/wireless/b43/main.c
drivers/net/wireless/b43/main.c
+54
-16
drivers/net/wireless/iwlwifi/iwl-4965-rs.c
drivers/net/wireless/iwlwifi/iwl-4965-rs.c
+1
-2
drivers/net/wireless/rndis_wlan.c
drivers/net/wireless/rndis_wlan.c
+63
-2
drivers/net/wireless/rt2x00/rt2x00.h
drivers/net/wireless/rt2x00/rt2x00.h
+5
-0
drivers/net/wireless/rt2x00/rt2x00config.c
drivers/net/wireless/rt2x00/rt2x00config.c
+1
-0
drivers/net/wireless/rt2x00/rt2x00dev.c
drivers/net/wireless/rt2x00/rt2x00dev.c
+4
-4
drivers/net/wireless/rt2x00/rt2x00mac.c
drivers/net/wireless/rt2x00/rt2x00mac.c
+1
-0
drivers/net/wireless/rtl8180_grf5101.c
drivers/net/wireless/rtl8180_grf5101.c
+1
-1
drivers/net/wireless/rtl8180_max2820.c
drivers/net/wireless/rtl8180_max2820.c
+3
-2
drivers/net/wireless/rtl8180_sa2400.c
drivers/net/wireless/rtl8180_sa2400.c
+1
-1
net/mac80211/cfg.c
net/mac80211/cfg.c
+2
-2
net/mac80211/main.c
net/mac80211/main.c
+1
-1
net/mac80211/mlme.c
net/mac80211/mlme.c
+16
-13
net/mac80211/rx.c
net/mac80211/rx.c
+2
-2
net/mac80211/util.c
net/mac80211/util.c
+2
-2
net/mac80211/wext.c
net/mac80211/wext.c
+8
-3
未找到文件。
drivers/net/wireless/b43/b43.h
浏览文件 @
8c3a01d0
...
...
@@ -737,6 +737,7 @@ struct b43_wl {
struct
ieee80211_tx_control
beacon_txctl
;
bool
beacon0_uploaded
;
bool
beacon1_uploaded
;
bool
beacon_templates_virgin
;
/* Never wrote the templates? */
struct
work_struct
beacon_update_trigger
;
/* The current QOS parameters for the 4 queues.
...
...
drivers/net/wireless/b43/main.c
浏览文件 @
8c3a01d0
...
...
@@ -1544,6 +1544,30 @@ static void b43_write_probe_resp_template(struct b43_wldev *dev,
kfree
(
probe_resp_data
);
}
static
void
b43_upload_beacon0
(
struct
b43_wldev
*
dev
)
{
struct
b43_wl
*
wl
=
dev
->
wl
;
if
(
wl
->
beacon0_uploaded
)
return
;
b43_write_beacon_template
(
dev
,
0x68
,
0x18
);
/* FIXME: Probe resp upload doesn't really belong here,
* but we don't use that feature anyway. */
b43_write_probe_resp_template
(
dev
,
0x268
,
0x4A
,
&
__b43_ratetable
[
3
]);
wl
->
beacon0_uploaded
=
1
;
}
static
void
b43_upload_beacon1
(
struct
b43_wldev
*
dev
)
{
struct
b43_wl
*
wl
=
dev
->
wl
;
if
(
wl
->
beacon1_uploaded
)
return
;
b43_write_beacon_template
(
dev
,
0x468
,
0x1A
);
wl
->
beacon1_uploaded
=
1
;
}
static
void
handle_irq_beacon
(
struct
b43_wldev
*
dev
)
{
struct
b43_wl
*
wl
=
dev
->
wl
;
...
...
@@ -1568,24 +1592,27 @@ static void handle_irq_beacon(struct b43_wldev *dev)
return
;
}
if
(
!
beacon0_valid
)
{
if
(
!
wl
->
beacon0_uploaded
)
{
b43_write_beacon_template
(
dev
,
0x68
,
0x18
);
b43_write_probe_resp_template
(
dev
,
0x268
,
0x4A
,
&
__b43_ratetable
[
3
]);
wl
->
beacon0_uploaded
=
1
;
}
if
(
unlikely
(
wl
->
beacon_templates_virgin
))
{
/* We never uploaded a beacon before.
* Upload both templates now, but only mark one valid. */
wl
->
beacon_templates_virgin
=
0
;
b43_upload_beacon0
(
dev
);
b43_upload_beacon1
(
dev
);
cmd
=
b43_read32
(
dev
,
B43_MMIO_MACCMD
);
cmd
|=
B43_MACCMD_BEACON0_VALID
;
b43_write32
(
dev
,
B43_MMIO_MACCMD
,
cmd
);
}
else
if
(
!
beacon1_valid
)
{
if
(
!
wl
->
beacon1_uploaded
)
{
b43_write_beacon_template
(
dev
,
0x468
,
0x1A
);
wl
->
beacon1_uploaded
=
1
;
}
else
{
if
(
!
beacon0_valid
)
{
b43_upload_beacon0
(
dev
);
cmd
=
b43_read32
(
dev
,
B43_MMIO_MACCMD
);
cmd
|=
B43_MACCMD_BEACON0_VALID
;
b43_write32
(
dev
,
B43_MMIO_MACCMD
,
cmd
);
}
else
if
(
!
beacon1_valid
)
{
b43_upload_beacon1
(
dev
);
cmd
=
b43_read32
(
dev
,
B43_MMIO_MACCMD
);
cmd
|=
B43_MACCMD_BEACON1_VALID
;
b43_write32
(
dev
,
B43_MMIO_MACCMD
,
cmd
);
}
cmd
=
b43_read32
(
dev
,
B43_MMIO_MACCMD
);
cmd
|=
B43_MACCMD_BEACON1_VALID
;
b43_write32
(
dev
,
B43_MMIO_MACCMD
,
cmd
);
}
}
...
...
@@ -4073,6 +4100,9 @@ static int b43_op_start(struct ieee80211_hw *hw)
wl
->
filter_flags
=
0
;
wl
->
radiotap_enabled
=
0
;
b43_qos_clear
(
wl
);
wl
->
beacon0_uploaded
=
0
;
wl
->
beacon1_uploaded
=
0
;
wl
->
beacon_templates_virgin
=
1
;
/* First register RFkill.
* LEDs that are registered later depend on it. */
...
...
@@ -4241,7 +4271,9 @@ static void b43_chip_reset(struct work_struct *work)
goto
out
;
}
}
out:
out:
if
(
err
)
wl
->
current_dev
=
NULL
;
/* Failed to init the dev. */
mutex_unlock
(
&
wl
->
mutex
);
if
(
err
)
b43err
(
wl
,
"Controller restart FAILED
\n
"
);
...
...
@@ -4382,9 +4414,11 @@ static void b43_one_core_detach(struct ssb_device *dev)
struct
b43_wldev
*
wldev
;
struct
b43_wl
*
wl
;
/* Do not cancel ieee80211-workqueue based work here.
* See comment in b43_remove(). */
wldev
=
ssb_get_drvdata
(
dev
);
wl
=
wldev
->
wl
;
cancel_work_sync
(
&
wldev
->
restart_work
);
b43_debugfs_remove_device
(
wldev
);
b43_wireless_core_detach
(
wldev
);
list_del
(
&
wldev
->
list
);
...
...
@@ -4569,6 +4603,10 @@ static void b43_remove(struct ssb_device *dev)
struct
b43_wl
*
wl
=
ssb_get_devtypedata
(
dev
);
struct
b43_wldev
*
wldev
=
ssb_get_drvdata
(
dev
);
/* We must cancel any work here before unregistering from ieee80211,
* as the ieee80211 unreg will destroy the workqueue. */
cancel_work_sync
(
&
wldev
->
restart_work
);
B43_WARN_ON
(
!
wl
);
if
(
wl
->
current_dev
==
wldev
)
ieee80211_unregister_hw
(
wl
->
hw
);
...
...
drivers/net/wireless/iwlwifi/iwl-4965-rs.c
浏览文件 @
8c3a01d0
...
...
@@ -1162,7 +1162,6 @@ static s32 rs_get_best_rate(struct iwl_priv *priv,
/* Higher rate not available, use the original */
}
else
{
new_rate
=
rate
;
break
;
}
}
...
...
@@ -2009,7 +2008,7 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,
* 2) Not just finishing up a search
* 3) Allowing a new search
*/
if
(
!
update_lq
&&
!
done_search
&&
!
lq_sta
->
stay_in_tbl
)
{
if
(
!
update_lq
&&
!
done_search
&&
!
lq_sta
->
stay_in_tbl
&&
window
->
counter
)
{
/* Save current throughput to compare with "search" throughput*/
lq_sta
->
last_tpt
=
current_tpt
;
...
...
drivers/net/wireless/rndis_wlan.c
浏览文件 @
8c3a01d0
...
...
@@ -116,6 +116,7 @@ MODULE_PARM_DESC(workaround_interval,
#define OID_802_11_ENCRYPTION_STATUS ccpu2(0x0d01011b)
#define OID_802_11_ADD_KEY ccpu2(0x0d01011d)
#define OID_802_11_REMOVE_KEY ccpu2(0x0d01011e)
#define OID_802_11_ASSOCIATION_INFORMATION ccpu2(0x0d01011f)
#define OID_802_11_PMKID ccpu2(0x0d010123)
#define OID_802_11_NETWORK_TYPES_SUPPORTED ccpu2(0x0d010203)
#define OID_802_11_NETWORK_TYPE_IN_USE ccpu2(0x0d010204)
...
...
@@ -271,6 +272,26 @@ struct ndis_config_param {
__le32
value_length
;
}
__attribute__
((
packed
));
struct
ndis_80211_assoc_info
{
__le32
length
;
__le16
req_ies
;
struct
req_ie
{
__le16
capa
;
__le16
listen_interval
;
u8
cur_ap_address
[
6
];
}
req_ie
;
__le32
req_ie_length
;
__le32
offset_req_ies
;
__le16
resp_ies
;
struct
resp_ie
{
__le16
capa
;
__le16
status_code
;
__le16
assoc_id
;
}
resp_ie
;
__le32
resp_ie_length
;
__le32
offset_resp_ies
;
}
__attribute__
((
packed
));
/* these have to match what is in wpa_supplicant */
enum
wpa_alg
{
WPA_ALG_NONE
,
WPA_ALG_WEP
,
WPA_ALG_TKIP
,
WPA_ALG_CCMP
};
enum
wpa_cipher
{
CIPHER_NONE
,
CIPHER_WEP40
,
CIPHER_TKIP
,
CIPHER_CCMP
,
...
...
@@ -674,6 +695,12 @@ static int get_bssid(struct usbnet *usbdev, u8 bssid[ETH_ALEN])
return
ret
;
}
static
int
get_association_info
(
struct
usbnet
*
usbdev
,
struct
ndis_80211_assoc_info
*
info
,
int
len
)
{
return
rndis_query_oid
(
usbdev
,
OID_802_11_ASSOCIATION_INFORMATION
,
info
,
&
len
);
}
static
int
is_associated
(
struct
usbnet
*
usbdev
)
{
...
...
@@ -2182,11 +2209,40 @@ static void rndis_wext_worker(struct work_struct *work)
struct
usbnet
*
usbdev
=
priv
->
usbdev
;
union
iwreq_data
evt
;
unsigned
char
bssid
[
ETH_ALEN
];
int
ret
;
struct
ndis_80211_assoc_info
*
info
;
int
assoc_size
=
sizeof
(
*
info
)
+
IW_CUSTOM_MAX
+
32
;
int
ret
,
offset
;
if
(
test_and_clear_bit
(
WORK_CONNECTION_EVENT
,
&
priv
->
work_pending
))
{
ret
=
get_bssid
(
usbdev
,
bssid
);
info
=
kzalloc
(
assoc_size
,
GFP_KERNEL
);
if
(
!
info
)
goto
get_bssid
;
/* Get association info IEs from device and send them back to
* userspace. */
ret
=
get_association_info
(
usbdev
,
info
,
assoc_size
);
if
(
!
ret
)
{
evt
.
data
.
length
=
le32_to_cpu
(
info
->
req_ie_length
);
if
(
evt
.
data
.
length
>
0
)
{
offset
=
le32_to_cpu
(
info
->
offset_req_ies
);
wireless_send_event
(
usbdev
->
net
,
IWEVASSOCREQIE
,
&
evt
,
(
char
*
)
info
+
offset
);
}
evt
.
data
.
length
=
le32_to_cpu
(
info
->
resp_ie_length
);
if
(
evt
.
data
.
length
>
0
)
{
offset
=
le32_to_cpu
(
info
->
offset_resp_ies
);
wireless_send_event
(
usbdev
->
net
,
IWEVASSOCRESPIE
,
&
evt
,
(
char
*
)
info
+
offset
);
}
}
kfree
(
info
);
get_bssid:
ret
=
get_bssid
(
usbdev
,
bssid
);
if
(
!
ret
)
{
evt
.
data
.
flags
=
0
;
evt
.
data
.
length
=
0
;
...
...
@@ -2414,6 +2470,11 @@ static int bcm4320_early_init(struct usbnet *dev)
else
if
(
priv
->
param_power_save
>
2
)
priv
->
param_power_save
=
2
;
if
(
priv
->
param_power_output
<
0
)
priv
->
param_power_output
=
0
;
else
if
(
priv
->
param_power_output
>
3
)
priv
->
param_power_output
=
3
;
if
(
priv
->
param_roamtrigger
<
-
80
)
priv
->
param_roamtrigger
=
-
80
;
else
if
(
priv
->
param_roamtrigger
>
-
60
)
...
...
drivers/net/wireless/rt2x00/rt2x00.h
浏览文件 @
8c3a01d0
...
...
@@ -328,6 +328,11 @@ static inline int rt2x00_get_link_ant_rssi(struct link *link)
return
DEFAULT_RSSI
;
}
static
inline
void
rt2x00_reset_link_ant_rssi
(
struct
link
*
link
)
{
link
->
ant
.
rssi_ant
=
0
;
}
static
inline
int
rt2x00_get_link_ant_rssi_history
(
struct
link
*
link
,
enum
antenna
ant
)
{
...
...
drivers/net/wireless/rt2x00/rt2x00config.c
浏览文件 @
8c3a01d0
...
...
@@ -129,6 +129,7 @@ void rt2x00lib_config_antenna(struct rt2x00_dev *rt2x00dev,
*/
rt2x00dev
->
ops
->
lib
->
config
(
rt2x00dev
,
&
libconf
,
CONFIG_UPDATE_ANTENNA
);
rt2x00lib_reset_link_tuner
(
rt2x00dev
);
rt2x00_reset_link_ant_rssi
(
&
rt2x00dev
->
link
);
rt2x00dev
->
link
.
ant
.
active
.
rx
=
libconf
.
ant
.
rx
;
rt2x00dev
->
link
.
ant
.
active
.
tx
=
libconf
.
ant
.
tx
;
...
...
drivers/net/wireless/rt2x00/rt2x00dev.c
浏览文件 @
8c3a01d0
...
...
@@ -483,9 +483,9 @@ void rt2x00lib_beacondone(struct rt2x00_dev *rt2x00dev)
if
(
!
test_bit
(
DEVICE_ENABLED_RADIO
,
&
rt2x00dev
->
flags
))
return
;
ieee80211_iterate_active_interfaces
(
rt2x00dev
->
hw
,
rt2x00lib_beacondone_iter
,
rt2x00dev
);
ieee80211_iterate_active_interfaces
_atomic
(
rt2x00dev
->
hw
,
rt2x00lib_beacondone_iter
,
rt2x00dev
);
queue_work
(
rt2x00dev
->
hw
->
workqueue
,
&
rt2x00dev
->
intf_work
);
}
...
...
@@ -507,7 +507,7 @@ void rt2x00lib_txdone(struct queue_entry *entry,
* Update TX statistics.
*/
rt2x00dev
->
link
.
qual
.
tx_success
+=
success
;
rt2x00dev
->
link
.
qual
.
tx_failed
+=
txdesc
->
retry
+
fail
;
rt2x00dev
->
link
.
qual
.
tx_failed
+=
fail
;
/*
* Initialize TX status
...
...
drivers/net/wireless/rt2x00/rt2x00mac.c
浏览文件 @
8c3a01d0
...
...
@@ -93,6 +93,7 @@ int rt2x00mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb,
*/
if
(
!
test_bit
(
DEVICE_PRESENT
,
&
rt2x00dev
->
flags
))
{
ieee80211_stop_queues
(
hw
);
dev_kfree_skb_any
(
skb
);
return
NETDEV_TX_OK
;
}
...
...
drivers/net/wireless/rtl8180_grf5101.c
浏览文件 @
8c3a01d0
...
...
@@ -88,7 +88,7 @@ static void grf5101_rf_set_channel(struct ieee80211_hw *dev,
write_grf5101
(
dev
,
0x0B
,
chan
);
write_grf5101
(
dev
,
0x07
,
0x1000
);
grf5101_write_phy_antenna
(
dev
,
chan
);
grf5101_write_phy_antenna
(
dev
,
chan
nel
);
}
static
void
grf5101_rf_stop
(
struct
ieee80211_hw
*
dev
)
...
...
drivers/net/wireless/rtl8180_max2820.c
浏览文件 @
8c3a01d0
...
...
@@ -78,7 +78,8 @@ static void max2820_rf_set_channel(struct ieee80211_hw *dev,
struct
ieee80211_conf
*
conf
)
{
struct
rtl8180_priv
*
priv
=
dev
->
priv
;
int
channel
=
ieee80211_frequency_to_channel
(
conf
->
channel
->
center_freq
);
int
channel
=
conf
?
ieee80211_frequency_to_channel
(
conf
->
channel
->
center_freq
)
:
1
;
unsigned
int
chan_idx
=
channel
-
1
;
u32
txpw
=
priv
->
channels
[
chan_idx
].
hw_value
&
0xFF
;
u32
chan
=
max2820_chan
[
chan_idx
];
...
...
@@ -87,7 +88,7 @@ static void max2820_rf_set_channel(struct ieee80211_hw *dev,
* sa2400, for MAXIM we do this directly from BB */
rtl8180_write_phy
(
dev
,
3
,
txpw
);
max2820_write_phy_antenna
(
dev
,
chan
);
max2820_write_phy_antenna
(
dev
,
chan
nel
);
write_max2820
(
dev
,
3
,
chan
);
}
...
...
drivers/net/wireless/rtl8180_sa2400.c
浏览文件 @
8c3a01d0
...
...
@@ -86,7 +86,7 @@ static void sa2400_rf_set_channel(struct ieee80211_hw *dev,
write_sa2400
(
dev
,
7
,
txpw
);
sa2400_write_phy_antenna
(
dev
,
chan
);
sa2400_write_phy_antenna
(
dev
,
chan
nel
);
write_sa2400
(
dev
,
0
,
chan
);
write_sa2400
(
dev
,
1
,
0xbb50
);
...
...
net/mac80211/cfg.c
浏览文件 @
8c3a01d0
...
...
@@ -672,7 +672,7 @@ static int ieee80211_add_station(struct wiphy *wiphy, struct net_device *dev,
if
(
params
->
vlan
)
{
sdata
=
IEEE80211_DEV_TO_SUB_IF
(
params
->
vlan
);
if
(
sdata
->
vif
.
type
!=
IEEE80211_IF_TYPE_VLAN
||
if
(
sdata
->
vif
.
type
!=
IEEE80211_IF_TYPE_VLAN
&&
sdata
->
vif
.
type
!=
IEEE80211_IF_TYPE_AP
)
return
-
EINVAL
;
}
else
...
...
@@ -760,7 +760,7 @@ static int ieee80211_change_station(struct wiphy *wiphy,
if
(
params
->
vlan
&&
params
->
vlan
!=
sta
->
sdata
->
dev
)
{
vlansdata
=
IEEE80211_DEV_TO_SUB_IF
(
params
->
vlan
);
if
(
vlansdata
->
vif
.
type
!=
IEEE80211_IF_TYPE_VLAN
||
if
(
vlansdata
->
vif
.
type
!=
IEEE80211_IF_TYPE_VLAN
&&
vlansdata
->
vif
.
type
!=
IEEE80211_IF_TYPE_AP
)
{
rcu_read_unlock
();
return
-
EINVAL
;
...
...
net/mac80211/main.c
浏览文件 @
8c3a01d0
...
...
@@ -1313,7 +1313,7 @@ static void ieee80211_handle_filtered_frame(struct ieee80211_local *local,
/*
* Clear the TX filter mask for this STA when sending the next
* packet. If the STA went to power save mode, this will happen
*
happen
when it wakes up for the next time.
* when it wakes up for the next time.
*/
sta
->
flags
|=
WLAN_STA_CLEAR_PS_FILT
;
...
...
net/mac80211/mlme.c
浏览文件 @
8c3a01d0
...
...
@@ -1325,7 +1325,7 @@ static void ieee80211_sta_process_addba_request(struct net_device *dev,
/* prepare reordering buffer */
tid_agg_rx
->
reorder_buf
=
kmalloc
(
buf_size
*
sizeof
(
struct
sk_buf
*
),
GFP_ATOMIC
);
kmalloc
(
buf_size
*
sizeof
(
struct
sk_buf
f
*
),
GFP_ATOMIC
);
if
(
!
tid_agg_rx
->
reorder_buf
)
{
if
(
net_ratelimit
())
printk
(
KERN_ERR
"can not allocate reordering buffer "
...
...
@@ -1334,7 +1334,7 @@ static void ieee80211_sta_process_addba_request(struct net_device *dev,
goto
end
;
}
memset
(
tid_agg_rx
->
reorder_buf
,
0
,
buf_size
*
sizeof
(
struct
sk_buf
*
));
buf_size
*
sizeof
(
struct
sk_buf
f
*
));
if
(
local
->
ops
->
ampdu_action
)
ret
=
local
->
ops
->
ampdu_action
(
hw
,
IEEE80211_AMPDU_RX_START
,
...
...
@@ -1614,7 +1614,7 @@ void sta_addba_resp_timer_expired(unsigned long data)
* only one argument, and both sta_info and TID are needed, so init
* flow in sta_info_create gives the TID as data, while the timer_to_id
* array gives the sta through container_of */
u16
tid
=
*
(
int
*
)
data
;
u16
tid
=
*
(
u8
*
)
data
;
struct
sta_info
*
temp_sta
=
container_of
((
void
*
)
data
,
struct
sta_info
,
timer_to_tid
[
tid
]);
...
...
@@ -1662,7 +1662,7 @@ void sta_addba_resp_timer_expired(unsigned long data)
void
sta_rx_agg_session_timer_expired
(
unsigned
long
data
)
{
/* not an elegant detour, but there is no choice as the timer passes
* only one argument, and v
e
rious sta_info are needed here, so init
* only one argument, and v
a
rious sta_info are needed here, so init
* flow in sta_info_create gives the TID as data, while the timer_to_id
* array gives the sta through container_of */
u8
*
ptid
=
(
u8
*
)
data
;
...
...
@@ -2479,8 +2479,6 @@ static int ieee80211_sta_join_ibss(struct net_device *dev,
ifsta
->
state
=
IEEE80211_IBSS_JOINED
;
mod_timer
(
&
ifsta
->
timer
,
jiffies
+
IEEE80211_IBSS_MERGE_INTERVAL
);
ieee80211_rx_bss_put
(
dev
,
bss
);
return
res
;
}
...
...
@@ -3523,6 +3521,7 @@ static int ieee80211_sta_create_ibss(struct net_device *dev,
struct
ieee80211_supported_band
*
sband
;
u8
bssid
[
ETH_ALEN
],
*
pos
;
int
i
;
int
ret
;
DECLARE_MAC_BUF
(
mac
);
#if 0
...
...
@@ -3567,7 +3566,9 @@ static int ieee80211_sta_create_ibss(struct net_device *dev,
*
pos
++
=
(
u8
)
(
rate
/
5
);
}
return
ieee80211_sta_join_ibss
(
dev
,
ifsta
,
bss
);
ret
=
ieee80211_sta_join_ibss
(
dev
,
ifsta
,
bss
);
ieee80211_rx_bss_put
(
dev
,
bss
);
return
ret
;
}
...
...
@@ -3615,10 +3616,13 @@ static int ieee80211_sta_find_ibss(struct net_device *dev,
(
bss
=
ieee80211_rx_bss_get
(
dev
,
bssid
,
local
->
hw
.
conf
.
channel
->
center_freq
,
ifsta
->
ssid
,
ifsta
->
ssid_len
)))
{
int
ret
;
printk
(
KERN_DEBUG
"%s: Selected IBSS BSSID %s"
" based on configured SSID
\n
"
,
dev
->
name
,
print_mac
(
mac
,
bssid
));
return
ieee80211_sta_join_ibss
(
dev
,
ifsta
,
bss
);
ret
=
ieee80211_sta_join_ibss
(
dev
,
ifsta
,
bss
);
ieee80211_rx_bss_put
(
dev
,
bss
);
return
ret
;
}
#ifdef CONFIG_MAC80211_IBSS_DEBUG
printk
(
KERN_DEBUG
" did not try to join ibss
\n
"
);
...
...
@@ -4095,18 +4099,17 @@ ieee80211_sta_scan_result(struct net_device *dev,
memset
(
&
iwe
,
0
,
sizeof
(
iwe
));
iwe
.
cmd
=
SIOCGIWFREQ
;
iwe
.
u
.
freq
.
m
=
bss
->
freq
;
iwe
.
u
.
freq
.
e
=
6
;
iwe
.
u
.
freq
.
m
=
ieee80211_frequency_to_channel
(
bss
->
freq
)
;
iwe
.
u
.
freq
.
e
=
0
;
current_ev
=
iwe_stream_add_event
(
current_ev
,
end_buf
,
&
iwe
,
IW_EV_FREQ_LEN
);
memset
(
&
iwe
,
0
,
sizeof
(
iwe
));
iwe
.
cmd
=
SIOCGIWFREQ
;
iwe
.
u
.
freq
.
m
=
ieee80211_frequency_to_channel
(
bss
->
freq
)
;
iwe
.
u
.
freq
.
e
=
0
;
iwe
.
u
.
freq
.
m
=
bss
->
freq
;
iwe
.
u
.
freq
.
e
=
6
;
current_ev
=
iwe_stream_add_event
(
current_ev
,
end_buf
,
&
iwe
,
IW_EV_FREQ_LEN
);
memset
(
&
iwe
,
0
,
sizeof
(
iwe
));
iwe
.
cmd
=
IWEVQUAL
;
iwe
.
u
.
qual
.
qual
=
bss
->
signal
;
...
...
net/mac80211/rx.c
浏览文件 @
8c3a01d0
...
...
@@ -1091,7 +1091,7 @@ ieee80211_data_to_8023(struct ieee80211_rx_data *rx)
u16
fc
,
hdrlen
,
ethertype
;
u8
*
payload
;
u8
dst
[
ETH_ALEN
];
u8
src
[
ETH_ALEN
];
u8
src
[
ETH_ALEN
]
__aligned
(
2
)
;
struct
sk_buff
*
skb
=
rx
->
skb
;
struct
ieee80211_sub_if_data
*
sdata
=
IEEE80211_DEV_TO_SUB_IF
(
dev
);
DECLARE_MAC_BUF
(
mac
);
...
...
@@ -1234,7 +1234,7 @@ ieee80211_data_to_8023(struct ieee80211_rx_data *rx)
*/
static
bool
ieee80211_frame_allowed
(
struct
ieee80211_rx_data
*
rx
)
{
static
const
u8
pae_group_addr
[
ETH_ALEN
]
static
const
u8
pae_group_addr
[
ETH_ALEN
]
__aligned
(
2
)
=
{
0x01
,
0x80
,
0xC2
,
0x00
,
0x00
,
0x03
};
struct
ethhdr
*
ehdr
=
(
struct
ethhdr
*
)
rx
->
skb
->
data
;
...
...
net/mac80211/util.c
浏览文件 @
8c3a01d0
...
...
@@ -34,11 +34,11 @@ void *mac80211_wiphy_privid = &mac80211_wiphy_privid;
/* See IEEE 802.1H for LLC/SNAP encapsulation/decapsulation */
/* Ethernet-II snap header (RFC1042 for most EtherTypes) */
const
unsigned
char
rfc1042_header
[]
=
const
unsigned
char
rfc1042_header
[]
__aligned
(
2
)
=
{
0xaa
,
0xaa
,
0x03
,
0x00
,
0x00
,
0x00
};
/* Bridge-Tunnel header (for EtherTypes ETH_P_AARP and ETH_P_IPX) */
const
unsigned
char
bridge_tunnel_header
[]
=
const
unsigned
char
bridge_tunnel_header
[]
__aligned
(
2
)
=
{
0xaa
,
0xaa
,
0x03
,
0x00
,
0x00
,
0xf8
};
...
...
net/mac80211/wext.c
浏览文件 @
8c3a01d0
...
...
@@ -489,9 +489,14 @@ static int ieee80211_ioctl_giwap(struct net_device *dev,
sdata
=
IEEE80211_DEV_TO_SUB_IF
(
dev
);
if
(
sdata
->
vif
.
type
==
IEEE80211_IF_TYPE_STA
||
sdata
->
vif
.
type
==
IEEE80211_IF_TYPE_IBSS
)
{
ap_addr
->
sa_family
=
ARPHRD_ETHER
;
memcpy
(
&
ap_addr
->
sa_data
,
sdata
->
u
.
sta
.
bssid
,
ETH_ALEN
);
return
0
;
if
(
sdata
->
u
.
sta
.
state
==
IEEE80211_ASSOCIATED
)
{
ap_addr
->
sa_family
=
ARPHRD_ETHER
;
memcpy
(
&
ap_addr
->
sa_data
,
sdata
->
u
.
sta
.
bssid
,
ETH_ALEN
);
return
0
;
}
else
{
memset
(
&
ap_addr
->
sa_data
,
0
,
ETH_ALEN
);
return
0
;
}
}
else
if
(
sdata
->
vif
.
type
==
IEEE80211_IF_TYPE_WDS
)
{
ap_addr
->
sa_family
=
ARPHRD_ETHER
;
memcpy
(
&
ap_addr
->
sa_data
,
sdata
->
u
.
wds
.
remote_addr
,
ETH_ALEN
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录