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
nexedi
linux
Commits
5419575e
Commit
5419575e
authored
Sep 25, 2012
by
John W. Linville
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'for-john' of
git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
parents
0c49b699
64629b9d
Changes
17
Show whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
132 additions
and
39 deletions
+132
-39
drivers/net/wireless/ath/ath6kl/cfg80211.c
drivers/net/wireless/ath/ath6kl/cfg80211.c
+2
-2
drivers/net/wireless/ath/ath6kl/cfg80211.h
drivers/net/wireless/ath/ath6kl/cfg80211.h
+1
-1
drivers/net/wireless/mwifiex/cfg80211.c
drivers/net/wireless/mwifiex/cfg80211.c
+1
-1
drivers/net/wireless/mwifiex/main.h
drivers/net/wireless/mwifiex/main.h
+1
-1
include/linux/nl80211.h
include/linux/nl80211.h
+24
-0
include/net/cfg80211.h
include/net/cfg80211.h
+21
-4
net/mac80211/agg-tx.c
net/mac80211/agg-tx.c
+1
-1
net/mac80211/cfg.c
net/mac80211/cfg.c
+2
-1
net/mac80211/debugfs.c
net/mac80211/debugfs.c
+4
-0
net/mac80211/ibss.c
net/mac80211/ibss.c
+1
-1
net/mac80211/mlme.c
net/mac80211/mlme.c
+1
-1
net/mac80211/sta_info.c
net/mac80211/sta_info.c
+1
-1
net/rfkill/core.c
net/rfkill/core.c
+7
-1
net/wireless/mlme.c
net/wireless/mlme.c
+11
-0
net/wireless/nl80211.c
net/wireless/nl80211.c
+34
-0
net/wireless/nl80211.h
net/wireless/nl80211.h
+5
-0
net/wireless/reg.c
net/wireless/reg.c
+15
-24
No files found.
drivers/net/wireless/ath/ath6kl/cfg80211.c
View file @
5419575e
...
@@ -1488,7 +1488,7 @@ static int ath6kl_cfg80211_set_power_mgmt(struct wiphy *wiphy,
...
@@ -1488,7 +1488,7 @@ static int ath6kl_cfg80211_set_power_mgmt(struct wiphy *wiphy,
}
}
static
struct
wireless_dev
*
ath6kl_cfg80211_add_iface
(
struct
wiphy
*
wiphy
,
static
struct
wireless_dev
*
ath6kl_cfg80211_add_iface
(
struct
wiphy
*
wiphy
,
char
*
name
,
c
onst
c
har
*
name
,
enum
nl80211_iftype
type
,
enum
nl80211_iftype
type
,
u32
*
flags
,
u32
*
flags
,
struct
vif_params
*
params
)
struct
vif_params
*
params
)
...
@@ -3477,7 +3477,7 @@ void ath6kl_cfg80211_vif_cleanup(struct ath6kl_vif *vif)
...
@@ -3477,7 +3477,7 @@ void ath6kl_cfg80211_vif_cleanup(struct ath6kl_vif *vif)
ar
->
num_vif
--
;
ar
->
num_vif
--
;
}
}
struct
wireless_dev
*
ath6kl_interface_add
(
struct
ath6kl
*
ar
,
char
*
name
,
struct
wireless_dev
*
ath6kl_interface_add
(
struct
ath6kl
*
ar
,
c
onst
c
har
*
name
,
enum
nl80211_iftype
type
,
enum
nl80211_iftype
type
,
u8
fw_vif_idx
,
u8
nw_type
)
u8
fw_vif_idx
,
u8
nw_type
)
{
{
...
...
drivers/net/wireless/ath/ath6kl/cfg80211.h
View file @
5419575e
...
@@ -25,7 +25,7 @@ enum ath6kl_cfg_suspend_mode {
...
@@ -25,7 +25,7 @@ enum ath6kl_cfg_suspend_mode {
ATH6KL_CFG_SUSPEND_SCHED_SCAN
,
ATH6KL_CFG_SUSPEND_SCHED_SCAN
,
};
};
struct
wireless_dev
*
ath6kl_interface_add
(
struct
ath6kl
*
ar
,
char
*
name
,
struct
wireless_dev
*
ath6kl_interface_add
(
struct
ath6kl
*
ar
,
c
onst
c
har
*
name
,
enum
nl80211_iftype
type
,
enum
nl80211_iftype
type
,
u8
fw_vif_idx
,
u8
nw_type
);
u8
fw_vif_idx
,
u8
nw_type
);
void
ath6kl_cfg80211_ch_switch_notify
(
struct
ath6kl_vif
*
vif
,
int
freq
,
void
ath6kl_cfg80211_ch_switch_notify
(
struct
ath6kl_vif
*
vif
,
int
freq
,
...
...
drivers/net/wireless/mwifiex/cfg80211.c
View file @
5419575e
...
@@ -1636,7 +1636,7 @@ mwifiex_setup_ht_caps(struct ieee80211_sta_ht_cap *ht_info,
...
@@ -1636,7 +1636,7 @@ mwifiex_setup_ht_caps(struct ieee80211_sta_ht_cap *ht_info,
* create a new virtual interface with the given name
* create a new virtual interface with the given name
*/
*/
struct
wireless_dev
*
mwifiex_add_virtual_intf
(
struct
wiphy
*
wiphy
,
struct
wireless_dev
*
mwifiex_add_virtual_intf
(
struct
wiphy
*
wiphy
,
char
*
name
,
c
onst
c
har
*
name
,
enum
nl80211_iftype
type
,
enum
nl80211_iftype
type
,
u32
*
flags
,
u32
*
flags
,
struct
vif_params
*
params
)
struct
vif_params
*
params
)
...
...
drivers/net/wireless/mwifiex/main.h
View file @
5419575e
...
@@ -1033,7 +1033,7 @@ int mwifiex_check_network_compatibility(struct mwifiex_private *priv,
...
@@ -1033,7 +1033,7 @@ int mwifiex_check_network_compatibility(struct mwifiex_private *priv,
struct
mwifiex_bssdescriptor
*
bss_desc
);
struct
mwifiex_bssdescriptor
*
bss_desc
);
struct
wireless_dev
*
mwifiex_add_virtual_intf
(
struct
wiphy
*
wiphy
,
struct
wireless_dev
*
mwifiex_add_virtual_intf
(
struct
wiphy
*
wiphy
,
char
*
name
,
c
onst
c
har
*
name
,
enum
nl80211_iftype
type
,
enum
nl80211_iftype
type
,
u32
*
flags
,
u32
*
flags
,
struct
vif_params
*
params
);
struct
vif_params
*
params
);
...
...
include/linux/nl80211.h
View file @
5419575e
...
@@ -573,6 +573,11 @@
...
@@ -573,6 +573,11 @@
* @NL80211_CMD_STOP_P2P_DEVICE: Stop the given P2P Device, identified by
* @NL80211_CMD_STOP_P2P_DEVICE: Stop the given P2P Device, identified by
* its %NL80211_ATTR_WDEV identifier.
* its %NL80211_ATTR_WDEV identifier.
*
*
* @NL80211_CMD_CONN_FAILED: connection request to an AP failed; used to
* notify userspace that AP has rejected the connection request from a
* station, due to particular reason. %NL80211_ATTR_CONN_FAILED_REASON
* is used for this.
*
* @NL80211_CMD_MAX: highest used command number
* @NL80211_CMD_MAX: highest used command number
* @__NL80211_CMD_AFTER_LAST: internal use
* @__NL80211_CMD_AFTER_LAST: internal use
*/
*/
...
@@ -719,6 +724,8 @@ enum nl80211_commands {
...
@@ -719,6 +724,8 @@ enum nl80211_commands {
NL80211_CMD_START_P2P_DEVICE
,
NL80211_CMD_START_P2P_DEVICE
,
NL80211_CMD_STOP_P2P_DEVICE
,
NL80211_CMD_STOP_P2P_DEVICE
,
NL80211_CMD_CONN_FAILED
,
/* add new commands above here */
/* add new commands above here */
/* used to define NL80211_CMD_MAX below */
/* used to define NL80211_CMD_MAX below */
...
@@ -1262,6 +1269,10 @@ enum nl80211_commands {
...
@@ -1262,6 +1269,10 @@ enum nl80211_commands {
* was used to provide the hint. For the different types of
* was used to provide the hint. For the different types of
* allowed user regulatory hints see nl80211_user_reg_hint_type.
* allowed user regulatory hints see nl80211_user_reg_hint_type.
*
*
* @NL80211_ATTR_CONN_FAILED_REASON: The reason for which AP has rejected
* the connection request from a station. nl80211_connect_failed_reason
* enum has different reasons of connection failure.
*
* @NL80211_ATTR_MAX: highest attribute number currently defined
* @NL80211_ATTR_MAX: highest attribute number currently defined
* @__NL80211_ATTR_AFTER_LAST: internal use
* @__NL80211_ATTR_AFTER_LAST: internal use
*/
*/
...
@@ -1517,6 +1528,8 @@ enum nl80211_attrs {
...
@@ -1517,6 +1528,8 @@ enum nl80211_attrs {
NL80211_ATTR_USER_REG_HINT_TYPE
,
NL80211_ATTR_USER_REG_HINT_TYPE
,
NL80211_ATTR_CONN_FAILED_REASON
,
/* add attributes here, update the policy in nl80211.c */
/* add attributes here, update the policy in nl80211.c */
__NL80211_ATTR_AFTER_LAST
,
__NL80211_ATTR_AFTER_LAST
,
...
@@ -3045,4 +3058,15 @@ enum nl80211_probe_resp_offload_support_attr {
...
@@ -3045,4 +3058,15 @@ enum nl80211_probe_resp_offload_support_attr {
NL80211_PROBE_RESP_OFFLOAD_SUPPORT_80211U
=
1
<<
3
,
NL80211_PROBE_RESP_OFFLOAD_SUPPORT_80211U
=
1
<<
3
,
};
};
/**
* enum nl80211_connect_failed_reason - connection request failed reasons
* @NL80211_CONN_FAIL_MAX_CLIENTS: Maximum number of clients that can be
* handled by the AP is reached.
* @NL80211_CONN_FAIL_BLOCKED_CLIENT: Client's MAC is in the AP's blocklist.
*/
enum
nl80211_connect_failed_reason
{
NL80211_CONN_FAIL_MAX_CLIENTS
,
NL80211_CONN_FAIL_BLOCKED_CLIENT
,
};
#endif
/* __LINUX_NL80211_H */
#endif
/* __LINUX_NL80211_H */
include/net/cfg80211.h
View file @
5419575e
...
@@ -1580,9 +1580,7 @@ struct cfg80211_gtk_rekey_data {
...
@@ -1580,9 +1580,7 @@ struct cfg80211_gtk_rekey_data {
* @set_cqm_txe_config: Configure connection quality monitor TX error
* @set_cqm_txe_config: Configure connection quality monitor TX error
* thresholds.
* thresholds.
* @sched_scan_start: Tell the driver to start a scheduled scan.
* @sched_scan_start: Tell the driver to start a scheduled scan.
* @sched_scan_stop: Tell the driver to stop an ongoing scheduled
* @sched_scan_stop: Tell the driver to stop an ongoing scheduled scan.
* scan. The driver_initiated flag specifies whether the driver
* itself has informed that the scan has stopped.
*
*
* @mgmt_frame_register: Notify driver that a management frame type was
* @mgmt_frame_register: Notify driver that a management frame type was
* registered. Note that this callback may not sleep, and cannot run
* registered. Note that this callback may not sleep, and cannot run
...
@@ -1630,7 +1628,7 @@ struct cfg80211_ops {
...
@@ -1630,7 +1628,7 @@ struct cfg80211_ops {
void
(
*
set_wakeup
)(
struct
wiphy
*
wiphy
,
bool
enabled
);
void
(
*
set_wakeup
)(
struct
wiphy
*
wiphy
,
bool
enabled
);
struct
wireless_dev
*
(
*
add_virtual_intf
)(
struct
wiphy
*
wiphy
,
struct
wireless_dev
*
(
*
add_virtual_intf
)(
struct
wiphy
*
wiphy
,
char
*
name
,
c
onst
c
har
*
name
,
enum
nl80211_iftype
type
,
enum
nl80211_iftype
type
,
u32
*
flags
,
u32
*
flags
,
struct
vif_params
*
params
);
struct
vif_params
*
params
);
...
@@ -3362,6 +3360,25 @@ void cfg80211_new_sta(struct net_device *dev, const u8 *mac_addr,
...
@@ -3362,6 +3360,25 @@ void cfg80211_new_sta(struct net_device *dev, const u8 *mac_addr,
*/
*/
void
cfg80211_del_sta
(
struct
net_device
*
dev
,
const
u8
*
mac_addr
,
gfp_t
gfp
);
void
cfg80211_del_sta
(
struct
net_device
*
dev
,
const
u8
*
mac_addr
,
gfp_t
gfp
);
/**
* cfg80211_conn_failed - connection request failed notification
*
* @dev: the netdev
* @mac_addr: the station's address
* @reason: the reason for connection failure
* @gfp: allocation flags
*
* Whenever a station tries to connect to an AP and if the station
* could not connect to the AP as the AP has rejected the connection
* for some reasons, this function is called.
*
* The reason for connection failure can be any of the value from
* nl80211_connect_failed_reason enum
*/
void
cfg80211_conn_failed
(
struct
net_device
*
dev
,
const
u8
*
mac_addr
,
enum
nl80211_connect_failed_reason
reason
,
gfp_t
gfp
);
/**
/**
* cfg80211_rx_mgmt - notification of received, unprocessed management frame
* cfg80211_rx_mgmt - notification of received, unprocessed management frame
* @wdev: wireless device receiving the frame
* @wdev: wireless device receiving the frame
...
...
net/mac80211/agg-tx.c
View file @
5419575e
...
@@ -869,7 +869,7 @@ void ieee80211_process_addba_resp(struct ieee80211_local *local,
...
@@ -869,7 +869,7 @@ void ieee80211_process_addba_resp(struct ieee80211_local *local,
}
else
{
}
else
{
___ieee80211_stop_tx_ba_session
(
sta
,
tid
,
WLAN_BACK_INITIATOR
,
___ieee80211_stop_tx_ba_session
(
sta
,
tid
,
WLAN_BACK_INITIATOR
,
tru
e
);
fals
e
);
}
}
out:
out:
...
...
net/mac80211/cfg.c
View file @
5419575e
...
@@ -20,7 +20,8 @@
...
@@ -20,7 +20,8 @@
#include "rate.h"
#include "rate.h"
#include "mesh.h"
#include "mesh.h"
static
struct
wireless_dev
*
ieee80211_add_iface
(
struct
wiphy
*
wiphy
,
char
*
name
,
static
struct
wireless_dev
*
ieee80211_add_iface
(
struct
wiphy
*
wiphy
,
const
char
*
name
,
enum
nl80211_iftype
type
,
enum
nl80211_iftype
type
,
u32
*
flags
,
u32
*
flags
,
struct
vif_params
*
params
)
struct
vif_params
*
params
)
...
...
net/mac80211/debugfs.c
View file @
5419575e
...
@@ -70,6 +70,7 @@ DEBUGFS_READONLY_FILE(wep_iv, "%#08x",
...
@@ -70,6 +70,7 @@ DEBUGFS_READONLY_FILE(wep_iv, "%#08x",
DEBUGFS_READONLY_FILE
(
rate_ctrl_alg
,
"%s"
,
DEBUGFS_READONLY_FILE
(
rate_ctrl_alg
,
"%s"
,
local
->
rate_ctrl
?
local
->
rate_ctrl
->
ops
->
name
:
"hw/driver"
);
local
->
rate_ctrl
?
local
->
rate_ctrl
->
ops
->
name
:
"hw/driver"
);
#ifdef CONFIG_PM
static
ssize_t
reset_write
(
struct
file
*
file
,
const
char
__user
*
user_buf
,
static
ssize_t
reset_write
(
struct
file
*
file
,
const
char
__user
*
user_buf
,
size_t
count
,
loff_t
*
ppos
)
size_t
count
,
loff_t
*
ppos
)
{
{
...
@@ -88,6 +89,7 @@ static const struct file_operations reset_ops = {
...
@@ -88,6 +89,7 @@ static const struct file_operations reset_ops = {
.
open
=
simple_open
,
.
open
=
simple_open
,
.
llseek
=
noop_llseek
,
.
llseek
=
noop_llseek
,
};
};
#endif
static
ssize_t
hwflags_read
(
struct
file
*
file
,
char
__user
*
user_buf
,
static
ssize_t
hwflags_read
(
struct
file
*
file
,
char
__user
*
user_buf
,
size_t
count
,
loff_t
*
ppos
)
size_t
count
,
loff_t
*
ppos
)
...
@@ -245,7 +247,9 @@ void debugfs_hw_add(struct ieee80211_local *local)
...
@@ -245,7 +247,9 @@ void debugfs_hw_add(struct ieee80211_local *local)
DEBUGFS_ADD
(
total_ps_buffered
);
DEBUGFS_ADD
(
total_ps_buffered
);
DEBUGFS_ADD
(
wep_iv
);
DEBUGFS_ADD
(
wep_iv
);
DEBUGFS_ADD
(
queues
);
DEBUGFS_ADD
(
queues
);
#ifdef CONFIG_PM
DEBUGFS_ADD_MODE
(
reset
,
0200
);
DEBUGFS_ADD_MODE
(
reset
,
0200
);
#endif
DEBUGFS_ADD
(
hwflags
);
DEBUGFS_ADD
(
hwflags
);
DEBUGFS_ADD
(
user_power
);
DEBUGFS_ADD
(
user_power
);
DEBUGFS_ADD
(
power
);
DEBUGFS_ADD
(
power
);
...
...
net/mac80211/ibss.c
View file @
5419575e
...
@@ -278,7 +278,7 @@ static struct sta_info *ieee80211_ibss_finish_sta(struct sta_info *sta,
...
@@ -278,7 +278,7 @@ static struct sta_info *ieee80211_ibss_finish_sta(struct sta_info *sta,
if
(
auth
&&
!
sdata
->
u
.
ibss
.
auth_frame_registrations
)
{
if
(
auth
&&
!
sdata
->
u
.
ibss
.
auth_frame_registrations
)
{
ibss_dbg
(
sdata
,
ibss_dbg
(
sdata
,
"TX Auth SA=%pM DA=%pM BSSID=%pM (auth_transaction=1)
\n
"
,
"TX Auth SA=%pM DA=%pM BSSID=%pM (auth_transaction=1)
\n
"
,
sdata
->
vif
.
addr
,
sdata
->
u
.
ibss
.
bssid
,
addr
);
sdata
->
vif
.
addr
,
addr
,
sdata
->
u
.
ibss
.
bssid
);
ieee80211_send_auth
(
sdata
,
1
,
WLAN_AUTH_OPEN
,
NULL
,
0
,
ieee80211_send_auth
(
sdata
,
1
,
WLAN_AUTH_OPEN
,
NULL
,
0
,
addr
,
sdata
->
u
.
ibss
.
bssid
,
NULL
,
0
,
0
);
addr
,
sdata
->
u
.
ibss
.
bssid
,
NULL
,
0
,
0
);
}
}
...
...
net/mac80211/mlme.c
View file @
5419575e
...
@@ -1399,7 +1399,7 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
...
@@ -1399,7 +1399,7 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
sta
=
sta_info_get
(
sdata
,
ifmgd
->
bssid
);
sta
=
sta_info_get
(
sdata
,
ifmgd
->
bssid
);
if
(
sta
)
{
if
(
sta
)
{
set_sta_flag
(
sta
,
WLAN_STA_BLOCK_BA
);
set_sta_flag
(
sta
,
WLAN_STA_BLOCK_BA
);
ieee80211_sta_tear_down_BA_sessions
(
sta
,
tx
);
ieee80211_sta_tear_down_BA_sessions
(
sta
,
false
);
}
}
mutex_unlock
(
&
local
->
sta_mtx
);
mutex_unlock
(
&
local
->
sta_mtx
);
...
...
net/mac80211/sta_info.c
View file @
5419575e
...
@@ -738,7 +738,7 @@ int __must_check __sta_info_destroy(struct sta_info *sta)
...
@@ -738,7 +738,7 @@ int __must_check __sta_info_destroy(struct sta_info *sta)
* will be sufficient.
* will be sufficient.
*/
*/
set_sta_flag
(
sta
,
WLAN_STA_BLOCK_BA
);
set_sta_flag
(
sta
,
WLAN_STA_BLOCK_BA
);
ieee80211_sta_tear_down_BA_sessions
(
sta
,
tru
e
);
ieee80211_sta_tear_down_BA_sessions
(
sta
,
fals
e
);
ret
=
sta_info_hash_del
(
local
,
sta
);
ret
=
sta_info_hash_del
(
local
,
sta
);
if
(
ret
)
if
(
ret
)
...
...
net/rfkill/core.c
View file @
5419575e
...
@@ -270,6 +270,7 @@ static bool __rfkill_set_hw_state(struct rfkill *rfkill,
...
@@ -270,6 +270,7 @@ static bool __rfkill_set_hw_state(struct rfkill *rfkill,
static
void
rfkill_set_block
(
struct
rfkill
*
rfkill
,
bool
blocked
)
static
void
rfkill_set_block
(
struct
rfkill
*
rfkill
,
bool
blocked
)
{
{
unsigned
long
flags
;
unsigned
long
flags
;
bool
prev
,
curr
;
int
err
;
int
err
;
if
(
unlikely
(
rfkill
->
dev
.
power
.
power_state
.
event
&
PM_EVENT_SLEEP
))
if
(
unlikely
(
rfkill
->
dev
.
power
.
power_state
.
event
&
PM_EVENT_SLEEP
))
...
@@ -284,6 +285,8 @@ static void rfkill_set_block(struct rfkill *rfkill, bool blocked)
...
@@ -284,6 +285,8 @@ static void rfkill_set_block(struct rfkill *rfkill, bool blocked)
rfkill
->
ops
->
query
(
rfkill
,
rfkill
->
data
);
rfkill
->
ops
->
query
(
rfkill
,
rfkill
->
data
);
spin_lock_irqsave
(
&
rfkill
->
lock
,
flags
);
spin_lock_irqsave
(
&
rfkill
->
lock
,
flags
);
prev
=
rfkill
->
state
&
RFKILL_BLOCK_SW
;
if
(
rfkill
->
state
&
RFKILL_BLOCK_SW
)
if
(
rfkill
->
state
&
RFKILL_BLOCK_SW
)
rfkill
->
state
|=
RFKILL_BLOCK_SW_PREV
;
rfkill
->
state
|=
RFKILL_BLOCK_SW_PREV
;
else
else
...
@@ -313,9 +316,12 @@ static void rfkill_set_block(struct rfkill *rfkill, bool blocked)
...
@@ -313,9 +316,12 @@ static void rfkill_set_block(struct rfkill *rfkill, bool blocked)
}
}
rfkill
->
state
&=
~
RFKILL_BLOCK_SW_SETCALL
;
rfkill
->
state
&=
~
RFKILL_BLOCK_SW_SETCALL
;
rfkill
->
state
&=
~
RFKILL_BLOCK_SW_PREV
;
rfkill
->
state
&=
~
RFKILL_BLOCK_SW_PREV
;
curr
=
rfkill
->
state
&
RFKILL_BLOCK_SW
;
spin_unlock_irqrestore
(
&
rfkill
->
lock
,
flags
);
spin_unlock_irqrestore
(
&
rfkill
->
lock
,
flags
);
rfkill_led_trigger_event
(
rfkill
);
rfkill_led_trigger_event
(
rfkill
);
if
(
prev
!=
curr
)
rfkill_event
(
rfkill
);
rfkill_event
(
rfkill
);
}
}
...
...
net/wireless/mlme.c
View file @
5419575e
...
@@ -612,6 +612,17 @@ void cfg80211_del_sta(struct net_device *dev, const u8 *mac_addr, gfp_t gfp)
...
@@ -612,6 +612,17 @@ void cfg80211_del_sta(struct net_device *dev, const u8 *mac_addr, gfp_t gfp)
}
}
EXPORT_SYMBOL
(
cfg80211_del_sta
);
EXPORT_SYMBOL
(
cfg80211_del_sta
);
void
cfg80211_conn_failed
(
struct
net_device
*
dev
,
const
u8
*
mac_addr
,
enum
nl80211_connect_failed_reason
reason
,
gfp_t
gfp
)
{
struct
wiphy
*
wiphy
=
dev
->
ieee80211_ptr
->
wiphy
;
struct
cfg80211_registered_device
*
rdev
=
wiphy_to_dev
(
wiphy
);
nl80211_send_conn_failed_event
(
rdev
,
dev
,
mac_addr
,
reason
,
gfp
);
}
EXPORT_SYMBOL
(
cfg80211_conn_failed
);
struct
cfg80211_mgmt_registration
{
struct
cfg80211_mgmt_registration
{
struct
list_head
list
;
struct
list_head
list
;
...
...
net/wireless/nl80211.c
View file @
5419575e
...
@@ -8364,6 +8364,40 @@ void nl80211_send_sta_del_event(struct cfg80211_registered_device *rdev,
...
@@ -8364,6 +8364,40 @@ void nl80211_send_sta_del_event(struct cfg80211_registered_device *rdev,
nlmsg_free
(
msg
);
nlmsg_free
(
msg
);
}
}
void
nl80211_send_conn_failed_event
(
struct
cfg80211_registered_device
*
rdev
,
struct
net_device
*
dev
,
const
u8
*
mac_addr
,
enum
nl80211_connect_failed_reason
reason
,
gfp_t
gfp
)
{
struct
sk_buff
*
msg
;
void
*
hdr
;
msg
=
nlmsg_new
(
NLMSG_GOODSIZE
,
gfp
);
if
(
!
msg
)
return
;
hdr
=
nl80211hdr_put
(
msg
,
0
,
0
,
0
,
NL80211_CMD_CONN_FAILED
);
if
(
!
hdr
)
{
nlmsg_free
(
msg
);
return
;
}
if
(
nla_put_u32
(
msg
,
NL80211_ATTR_IFINDEX
,
dev
->
ifindex
)
||
nla_put
(
msg
,
NL80211_ATTR_MAC
,
ETH_ALEN
,
mac_addr
)
||
nla_put_u32
(
msg
,
NL80211_ATTR_CONN_FAILED_REASON
,
reason
))
goto
nla_put_failure
;
genlmsg_end
(
msg
,
hdr
);
genlmsg_multicast_netns
(
wiphy_net
(
&
rdev
->
wiphy
),
msg
,
0
,
nl80211_mlme_mcgrp
.
id
,
gfp
);
return
;
nla_put_failure:
genlmsg_cancel
(
msg
,
hdr
);
nlmsg_free
(
msg
);
}
static
bool
__nl80211_unexpected_frame
(
struct
net_device
*
dev
,
u8
cmd
,
static
bool
__nl80211_unexpected_frame
(
struct
net_device
*
dev
,
u8
cmd
,
const
u8
*
addr
,
gfp_t
gfp
)
const
u8
*
addr
,
gfp_t
gfp
)
{
{
...
...
net/wireless/nl80211.h
View file @
5419575e
...
@@ -91,6 +91,11 @@ void nl80211_send_sta_del_event(struct cfg80211_registered_device *rdev,
...
@@ -91,6 +91,11 @@ void nl80211_send_sta_del_event(struct cfg80211_registered_device *rdev,
struct
net_device
*
dev
,
const
u8
*
mac_addr
,
struct
net_device
*
dev
,
const
u8
*
mac_addr
,
gfp_t
gfp
);
gfp_t
gfp
);
void
nl80211_send_conn_failed_event
(
struct
cfg80211_registered_device
*
rdev
,
struct
net_device
*
dev
,
const
u8
*
mac_addr
,
enum
nl80211_connect_failed_reason
reason
,
gfp_t
gfp
);
int
nl80211_send_mgmt
(
struct
cfg80211_registered_device
*
rdev
,
int
nl80211_send_mgmt
(
struct
cfg80211_registered_device
*
rdev
,
struct
wireless_dev
*
wdev
,
u32
nlpid
,
struct
wireless_dev
*
wdev
,
u32
nlpid
,
int
freq
,
int
sig_dbm
,
int
freq
,
int
sig_dbm
,
...
...
net/wireless/reg.c
View file @
5419575e
...
@@ -504,9 +504,11 @@ static bool reg_does_bw_fit(const struct ieee80211_freq_range *freq_range,
...
@@ -504,9 +504,11 @@ static bool reg_does_bw_fit(const struct ieee80211_freq_range *freq_range,
*
*
* This lets us know if a specific frequency rule is or is not relevant to
* This lets us know if a specific frequency rule is or is not relevant to
* a specific frequency's band. Bands are device specific and artificial
* a specific frequency's band. Bands are device specific and artificial
* definitions (the "2.4 GHz band" and the "5 GHz band"), however it is
* definitions (the "2.4 GHz band", the "5 GHz band" and the "60GHz band"),
* safe for now to assume that a frequency rule should not be part of a
* however it is safe for now to assume that a frequency rule should not be
* frequency's band if the start freq or end freq are off by more than 2 GHz.
* part of a frequency's band if the start freq or end freq are off by more
* than 2 GHz for the 2.4 and 5 GHz bands, and by more than 10 GHz for the
* 60 GHz band.
* This resolution can be lowered and should be considered as we add
* This resolution can be lowered and should be considered as we add
* regulatory rule support for other "bands".
* regulatory rule support for other "bands".
**/
**/
...
@@ -514,9 +516,16 @@ static bool freq_in_rule_band(const struct ieee80211_freq_range *freq_range,
...
@@ -514,9 +516,16 @@ static bool freq_in_rule_band(const struct ieee80211_freq_range *freq_range,
u32
freq_khz
)
u32
freq_khz
)
{
{
#define ONE_GHZ_IN_KHZ 1000000
#define ONE_GHZ_IN_KHZ 1000000
if
(
abs
(
freq_khz
-
freq_range
->
start_freq_khz
)
<=
(
2
*
ONE_GHZ_IN_KHZ
))
/*
* From 802.11ad: directional multi-gigabit (DMG):
* Pertaining to operation in a frequency band containing a channel
* with the Channel starting frequency above 45 GHz.
*/
u32
limit
=
freq_khz
>
45
*
ONE_GHZ_IN_KHZ
?
10
*
ONE_GHZ_IN_KHZ
:
2
*
ONE_GHZ_IN_KHZ
;
if
(
abs
(
freq_khz
-
freq_range
->
start_freq_khz
)
<=
limit
)
return
true
;
return
true
;
if
(
abs
(
freq_khz
-
freq_range
->
end_freq_khz
)
<=
(
2
*
ONE_GHZ_IN_KHZ
)
)
if
(
abs
(
freq_khz
-
freq_range
->
end_freq_khz
)
<=
limit
)
return
true
;
return
true
;
return
false
;
return
false
;
#undef ONE_GHZ_IN_KHZ
#undef ONE_GHZ_IN_KHZ
...
@@ -2193,7 +2202,6 @@ static void print_regdomain_info(const struct ieee80211_regdomain *rd)
...
@@ -2193,7 +2202,6 @@ static void print_regdomain_info(const struct ieee80211_regdomain *rd)
static
int
__set_regdom
(
const
struct
ieee80211_regdomain
*
rd
)
static
int
__set_regdom
(
const
struct
ieee80211_regdomain
*
rd
)
{
{
const
struct
ieee80211_regdomain
*
intersected_rd
=
NULL
;
const
struct
ieee80211_regdomain
*
intersected_rd
=
NULL
;
struct
cfg80211_registered_device
*
rdev
=
NULL
;
struct
wiphy
*
request_wiphy
;
struct
wiphy
*
request_wiphy
;
/* Some basic sanity checks first */
/* Some basic sanity checks first */
...
@@ -2305,24 +2313,7 @@ static int __set_regdom(const struct ieee80211_regdomain *rd)
...
@@ -2305,24 +2313,7 @@ static int __set_regdom(const struct ieee80211_regdomain *rd)
return
0
;
return
0
;
}
}
if
(
!
intersected_rd
)
return
-
EINVAL
;
return
-
EINVAL
;
rdev
=
wiphy_to_dev
(
request_wiphy
);
rdev
->
country_ie_alpha2
[
0
]
=
rd
->
alpha2
[
0
];
rdev
->
country_ie_alpha2
[
1
]
=
rd
->
alpha2
[
1
];
rdev
->
env
=
last_request
->
country_ie_env
;
BUG_ON
(
intersected_rd
==
rd
);
kfree
(
rd
);
rd
=
NULL
;
reset_regdomains
(
false
);
cfg80211_regdomain
=
intersected_rd
;
return
0
;
}
}
...
...
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