diff mbox series

[v3,1/2] nl80211: process additional attributes in NL80211_CMD_SET_BEACON

Message ID 20220509173354.2482-2-quic_alokad@quicinc.com
State Superseded
Headers show
Series Additional processing in NL80211_CMD_SET_BEACON | expand

Commit Message

Aloka Dixit May 9, 2022, 5:33 p.m. UTC
FILS discovery and unsolicited broadcast probe response transmissions
are configured as part of NL80211_CMD_START_AP, however both stop
after userspace uses the NL80211_CMD_SET_BEACON command as these
attributes are not processed as part of this command.
Add the missing implementation.

Modify the local variable in nl80211_set_beacon() and input parameter
to rdev_change_beacon() from type struct cfg80211_beacon_data to
type struct cfg80211_ap_settings to support the new processing.

Signed-off-by: Aloka Dixit <quic_alokad@quicinc.com>
---
v3: Dynamic memory allocation for 'params'.
Also introduced local variable 'attrs' for better readability.

include/net/cfg80211.h  |  2 +-
 net/wireless/nl80211.c  | 28 ++++++++++++++++++----
 net/wireless/rdev-ops.h |  2 +-
 net/wireless/trace.h    | 52 +++++++++++++++++++++++------------------
 4 files changed, 55 insertions(+), 29 deletions(-)

Comments

kernel test robot May 9, 2022, 9:05 p.m. UTC | #1
Hi Aloka,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on fc20106d6e2086dd37bf286605c28b28b4f2492c]

url:    https://github.com/intel-lab-lkp/linux/commits/Aloka-Dixit/Additional-processing-in-NL80211_CMD_SET_BEACON/20220510-013948
base:   fc20106d6e2086dd37bf286605c28b28b4f2492c
config: arm-defconfig (https://download.01.org/0day-ci/archive/20220510/202205100426.MpSAZv4b-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 3abb68a626160e019c30a4860e569d7bc75e486a)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install arm cross compiling tool for clang build
        # apt-get install binutils-arm-linux-gnueabi
        # https://github.com/intel-lab-lkp/linux/commit/4b2583148641664d3a44d750efff98707ea07b23
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Aloka-Dixit/Additional-processing-in-NL80211_CMD_SET_BEACON/20220510-013948
        git checkout 4b2583148641664d3a44d750efff98707ea07b23
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm SHELL=/bin/bash drivers/net/wireless/broadcom/brcm80211/brcmfmac/

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

>> drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c:5577:19: error: incompatible function pointer types initializing 'int (*)(struct wiphy *, struct net_device *, struct cfg80211_ap_settings *)' with an expression of type 's32 (struct wiphy *, struct net_device *, struct cfg80211_beacon_data *)' (aka 'int (struct wiphy *, struct net_device *, struct cfg80211_beacon_data *)') [-Werror,-Wincompatible-function-pointer-types]
           .change_beacon = brcmf_cfg80211_change_beacon,
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   1 error generated.


vim +5577 drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c

2526ff21aa77c2 drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c Arend van Spriel 2017-06-09  5549  
5c22fb85102a75 drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c Hante Meuleman   2016-02-17  5550  static struct cfg80211_ops brcmf_cfg80211_ops = {
9f440b7bc78688 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2013-02-08  5551  	.add_virtual_intf = brcmf_cfg80211_add_iface,
9f440b7bc78688 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2013-02-08  5552  	.del_virtual_intf = brcmf_cfg80211_del_iface,
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2011-10-05  5553  	.change_virtual_intf = brcmf_cfg80211_change_iface,
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2011-10-05  5554  	.scan = brcmf_cfg80211_scan,
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2011-10-05  5555  	.set_wiphy_params = brcmf_cfg80211_set_wiphy_params,
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2011-10-05  5556  	.join_ibss = brcmf_cfg80211_join_ibss,
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2011-10-05  5557  	.leave_ibss = brcmf_cfg80211_leave_ibss,
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2011-10-05  5558  	.get_station = brcmf_cfg80211_get_station,
bf2a7e0499b922 drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c          Hante Meuleman   2015-10-08  5559  	.dump_station = brcmf_cfg80211_dump_station,
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2011-10-05  5560  	.set_tx_power = brcmf_cfg80211_set_tx_power,
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2011-10-05  5561  	.get_tx_power = brcmf_cfg80211_get_tx_power,
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2011-10-05  5562  	.add_key = brcmf_cfg80211_add_key,
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2011-10-05  5563  	.del_key = brcmf_cfg80211_del_key,
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2011-10-05  5564  	.get_key = brcmf_cfg80211_get_key,
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2011-10-05  5565  	.set_default_key = brcmf_cfg80211_config_default_key,
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2011-10-05  5566  	.set_default_mgmt_key = brcmf_cfg80211_config_default_mgmt_key,
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2011-10-05  5567  	.set_power_mgmt = brcmf_cfg80211_set_power_mgmt,
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2011-10-05  5568  	.connect = brcmf_cfg80211_connect,
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2011-10-05  5569  	.disconnect = brcmf_cfg80211_disconnect,
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2011-10-05  5570  	.suspend = brcmf_cfg80211_suspend,
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2011-10-05  5571  	.resume = brcmf_cfg80211_resume,
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2011-10-05  5572  	.set_pmksa = brcmf_cfg80211_set_pmksa,
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2011-10-05  5573  	.del_pmksa = brcmf_cfg80211_del_pmksa,
cbaa177d2b2f93 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2012-08-30  5574  	.flush_pmksa = brcmf_cfg80211_flush_pmksa,
1a87334239757b drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Hante Meuleman   2012-09-27  5575  	.start_ap = brcmf_cfg80211_start_ap,
1a87334239757b drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Hante Meuleman   2012-09-27  5576  	.stop_ap = brcmf_cfg80211_stop_ap,
a0f07959ee6e7f drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Hante Meuleman   2013-02-08 @5577  	.change_beacon = brcmf_cfg80211_change_beacon,
1a87334239757b drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Hante Meuleman   2012-09-27  5578  	.del_station = brcmf_cfg80211_del_station,
6b89dcb35bfc78 drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c          Hante Meuleman   2014-12-21  5579  	.change_station = brcmf_cfg80211_change_station,
e58060723c91a2 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2012-09-19  5580  	.sched_scan_start = brcmf_cfg80211_sched_scan_start,
e58060723c91a2 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2012-09-19  5581  	.sched_scan_stop = brcmf_cfg80211_sched_scan_stop,
6cd536fe62ef58 drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c Johannes Berg    2020-04-17  5582  	.update_mgmt_frame_registrations =
6cd536fe62ef58 drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c Johannes Berg    2020-04-17  5583  		brcmf_cfg80211_update_mgmt_frame_registrations,
0de8aace0ff499 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Hante Meuleman   2013-02-08  5584  	.mgmt_tx = brcmf_cfg80211_mgmt_tx,
7dd56ea45a6686 drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c Alvin Šipraga    2021-02-08  5585  	.set_cqm_rssi_range_config = brcmf_cfg80211_set_cqm_rssi_range_config,
0de8aace0ff499 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Hante Meuleman   2013-02-08  5586  	.remain_on_channel = brcmf_p2p_remain_on_channel,
0de8aace0ff499 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Hante Meuleman   2013-02-08  5587  	.cancel_remain_on_channel = brcmf_cfg80211_cancel_remain_on_channel,
ee6e7aa383944c drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c Rafał Miłecki    2016-05-20  5588  	.get_channel = brcmf_cfg80211_get_channel,
27f10e380ad912 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2013-04-05  5589  	.start_p2p_device = brcmf_p2p_start_device,
27f10e380ad912 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2013-04-05  5590  	.stop_p2p_device = brcmf_p2p_stop_device,
61730d4dfffc2c drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Piotr Haber      2013-04-23  5591  	.crit_proto_start = brcmf_cfg80211_crit_proto_start,
61730d4dfffc2c drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Piotr Haber      2013-04-23  5592  	.crit_proto_stop = brcmf_cfg80211_crit_proto_stop,
89c2f382fff4ec drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2013-08-10  5593  	.tdls_oper = brcmf_cfg80211_tdls_oper,
2a2a5d1835b6f0 drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c Arend Van Spriel 2017-01-27  5594  	.update_connect_params = brcmf_cfg80211_update_conn_params,
2526ff21aa77c2 drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c Arend van Spriel 2017-06-09  5595  	.set_pmk = brcmf_cfg80211_set_pmk,
2526ff21aa77c2 drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c Arend van Spriel 2017-06-09  5596  	.del_pmk = brcmf_cfg80211_del_pmk,
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2011-10-05  5597  };
5b435de0d78686 drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c       Arend van Spriel 2011-10-05  5598
kernel test robot May 9, 2022, 11:10 p.m. UTC | #2
Hi Aloka,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on fc20106d6e2086dd37bf286605c28b28b4f2492c]

url:    https://github.com/intel-lab-lkp/linux/commits/Aloka-Dixit/Additional-processing-in-NL80211_CMD_SET_BEACON/20220510-013948
base:   fc20106d6e2086dd37bf286605c28b28b4f2492c
config: mips-randconfig-r011-20220509 (https://download.01.org/0day-ci/archive/20220510/202205100703.8aYeYjJx-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 3abb68a626160e019c30a4860e569d7bc75e486a)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install mips cross compiling tool for clang build
        # apt-get install binutils-mips-linux-gnu
        # https://github.com/intel-lab-lkp/linux/commit/4b2583148641664d3a44d750efff98707ea07b23
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Aloka-Dixit/Additional-processing-in-NL80211_CMD_SET_BEACON/20220510-013948
        git checkout 4b2583148641664d3a44d750efff98707ea07b23
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=mips SHELL=/bin/bash drivers/net/

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

>> drivers/net/wireless/ath/ath6kl/cfg80211.c:3457:19: error: incompatible function pointer types initializing 'int (*)(struct wiphy *, struct net_device *, struct cfg80211_ap_settings *)' with an expression of type 'int (struct wiphy *, struct net_device *, struct cfg80211_beacon_data *)' [-Werror,-Wincompatible-function-pointer-types]
           .change_beacon = ath6kl_change_beacon,
                            ^~~~~~~~~~~~~~~~~~~~
   1 error generated.
--
>> drivers/net/wireless/marvell/mwifiex/cfg80211.c:4239:19: error: incompatible function pointer types initializing 'int (*)(struct wiphy *, struct net_device *, struct cfg80211_ap_settings *)' with an expression of type 'int (struct wiphy *, struct net_device *, struct cfg80211_beacon_data *)' [-Werror,-Wincompatible-function-pointer-types]
           .change_beacon = mwifiex_cfg80211_change_beacon,
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   1 error generated.
--
>> drivers/net/wireless/quantenna/qtnfmac/cfg80211.c:1004:20: error: incompatible function pointer types initializing 'int (*)(struct wiphy *, struct net_device *, struct cfg80211_ap_settings *)' with an expression of type 'int (struct wiphy *, struct net_device *, struct cfg80211_beacon_data *)' [-Werror,-Wincompatible-function-pointer-types]
           .change_beacon          = qtnf_change_beacon,
                                     ^~~~~~~~~~~~~~~~~~
   1 error generated.
--
>> drivers/net/wireless/ath/wil6210/cfg80211.c:2656:19: error: incompatible function pointer types initializing 'int (*)(struct wiphy *, struct net_device *, struct cfg80211_ap_settings *)' with an expression of type 'int (struct wiphy *, struct net_device *, struct cfg80211_beacon_data *)' [-Werror,-Wincompatible-function-pointer-types]
           .change_beacon = wil_cfg80211_change_beacon,
                            ^~~~~~~~~~~~~~~~~~~~~~~~~~
   1 error generated.


vim +3457 drivers/net/wireless/ath/ath6kl/cfg80211.c

f80574ae1538f6 Jouni Malinen             2011-08-30  3429  
bdcd81707973cf Kalle Valo                2011-07-18  3430  static struct cfg80211_ops ath6kl_cfg80211_ops = {
55055976fe15f4 Vasanthakumar Thiagarajan 2011-10-25  3431  	.add_virtual_intf = ath6kl_cfg80211_add_iface,
55055976fe15f4 Vasanthakumar Thiagarajan 2011-10-25  3432  	.del_virtual_intf = ath6kl_cfg80211_del_iface,
bdcd81707973cf Kalle Valo                2011-07-18  3433  	.change_virtual_intf = ath6kl_cfg80211_change_iface,
bdcd81707973cf Kalle Valo                2011-07-18  3434  	.scan = ath6kl_cfg80211_scan,
bdcd81707973cf Kalle Valo                2011-07-18  3435  	.connect = ath6kl_cfg80211_connect,
bdcd81707973cf Kalle Valo                2011-07-18  3436  	.disconnect = ath6kl_cfg80211_disconnect,
bdcd81707973cf Kalle Valo                2011-07-18  3437  	.add_key = ath6kl_cfg80211_add_key,
bdcd81707973cf Kalle Valo                2011-07-18  3438  	.get_key = ath6kl_cfg80211_get_key,
bdcd81707973cf Kalle Valo                2011-07-18  3439  	.del_key = ath6kl_cfg80211_del_key,
bdcd81707973cf Kalle Valo                2011-07-18  3440  	.set_default_key = ath6kl_cfg80211_set_default_key,
bdcd81707973cf Kalle Valo                2011-07-18  3441  	.set_wiphy_params = ath6kl_cfg80211_set_wiphy_params,
bdcd81707973cf Kalle Valo                2011-07-18  3442  	.set_tx_power = ath6kl_cfg80211_set_txpower,
bdcd81707973cf Kalle Valo                2011-07-18  3443  	.get_tx_power = ath6kl_cfg80211_get_txpower,
bdcd81707973cf Kalle Valo                2011-07-18  3444  	.set_power_mgmt = ath6kl_cfg80211_set_power_mgmt,
bdcd81707973cf Kalle Valo                2011-07-18  3445  	.join_ibss = ath6kl_cfg80211_join_ibss,
bdcd81707973cf Kalle Valo                2011-07-18  3446  	.leave_ibss = ath6kl_cfg80211_leave_ibss,
bdcd81707973cf Kalle Valo                2011-07-18  3447  	.get_station = ath6kl_get_station,
bdcd81707973cf Kalle Valo                2011-07-18  3448  	.set_pmksa = ath6kl_set_pmksa,
bdcd81707973cf Kalle Valo                2011-07-18  3449  	.del_pmksa = ath6kl_del_pmksa,
bdcd81707973cf Kalle Valo                2011-07-18  3450  	.flush_pmksa = ath6kl_flush_pmksa,
003353b0d27489 Kalle Valo                2011-09-01  3451  	CFG80211_TESTMODE_CMD(ath6kl_tm_cmd)
abcb344b3b823c Kalle Valo                2011-07-22  3452  #ifdef CONFIG_PM
52d81a6883fb36 Kalle Valo                2011-11-01  3453  	.suspend = __ath6kl_cfg80211_suspend,
52d81a6883fb36 Kalle Valo                2011-11-01  3454  	.resume = __ath6kl_cfg80211_resume,
abcb344b3b823c Kalle Valo                2011-07-22  3455  #endif
8860020e0be1f0 Johannes Berg             2012-02-13  3456  	.start_ap = ath6kl_start_ap,
8860020e0be1f0 Johannes Berg             2012-02-13 @3457  	.change_beacon = ath6kl_change_beacon,
8860020e0be1f0 Johannes Berg             2012-02-13  3458  	.stop_ap = ath6kl_stop_ap,
33e5308d8a0fb8 Jouni Malinen             2011-12-27  3459  	.del_station = ath6kl_del_station,
238751365a1c42 Jouni Malinen             2011-08-30  3460  	.change_station = ath6kl_change_station,
63fa1e0ca7a2c1 Jouni Malinen             2011-08-30  3461  	.remain_on_channel = ath6kl_remain_on_channel,
63fa1e0ca7a2c1 Jouni Malinen             2011-08-30  3462  	.cancel_remain_on_channel = ath6kl_cancel_remain_on_channel,
8a6c8060c0b166 Jouni Malinen             2011-08-30  3463  	.mgmt_tx = ath6kl_mgmt_tx,
6cd536fe62ef58 Johannes Berg             2020-04-17  3464  	.update_mgmt_frame_registrations =
6cd536fe62ef58 Johannes Berg             2020-04-17  3465  		ath6kl_update_mgmt_frame_registrations,
9c2e90ffc97a8f Ben Greear                2015-10-21  3466  	.get_antenna = ath6kl_get_antenna,
10509f903ebb7d Kalle Valo                2011-12-13  3467  	.sched_scan_start = ath6kl_cfg80211_sscan_start,
10509f903ebb7d Kalle Valo                2011-12-13  3468  	.sched_scan_stop = ath6kl_cfg80211_sscan_stop,
06e360ace9434b Bala Shanmugam            2012-05-22  3469  	.set_bitrate_mask = ath6kl_cfg80211_set_bitrate,
279b2862ee6ba9 Thomas Pedersen           2012-07-17  3470  	.set_cqm_txe_config = ath6kl_cfg80211_set_txe_config,
bdcd81707973cf Kalle Valo                2011-07-18  3471  };
bdcd81707973cf Kalle Valo                2011-07-18  3472
diff mbox series

Patch

diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 68713388b617..b388e5c9beb8 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -4195,7 +4195,7 @@  struct cfg80211_ops {
 	int	(*start_ap)(struct wiphy *wiphy, struct net_device *dev,
 			    struct cfg80211_ap_settings *settings);
 	int	(*change_beacon)(struct wiphy *wiphy, struct net_device *dev,
-				 struct cfg80211_beacon_data *info);
+				 struct cfg80211_ap_settings *info);
 	int	(*stop_ap)(struct wiphy *wiphy, struct net_device *dev);
 
 
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 945ed87d12e0..5ce4215125f0 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -5799,7 +5799,8 @@  static int nl80211_set_beacon(struct sk_buff *skb, struct genl_info *info)
 	struct cfg80211_registered_device *rdev = info->user_ptr[0];
 	struct net_device *dev = info->user_ptr[1];
 	struct wireless_dev *wdev = dev->ieee80211_ptr;
-	struct cfg80211_beacon_data params;
+	struct cfg80211_ap_settings *params;
+	struct nlattr *attrs;
 	int err;
 
 	if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP &&
@@ -5812,16 +5813,35 @@  static int nl80211_set_beacon(struct sk_buff *skb, struct genl_info *info)
 	if (!wdev->beacon_interval)
 		return -EINVAL;
 
-	err = nl80211_parse_beacon(rdev, info->attrs, &params);
+	params = kzalloc(sizeof(*params), GFP_KERNEL);
+	if (!params)
+		return -ENOMEM;
+
+	err = nl80211_parse_beacon(rdev, info->attrs, &params->beacon);
 	if (err)
 		goto out;
 
+	attrs = info->attrs[NL80211_ATTR_FILS_DISCOVERY];
+	if (attrs) {
+		err = nl80211_parse_fils_discovery(rdev, attrs, params);
+		if (err)
+			goto out;
+	}
+
+	attrs = info->attrs[NL80211_ATTR_UNSOL_BCAST_PROBE_RESP];
+	if (attrs) {
+		err = nl80211_parse_unsol_bcast_probe_resp(rdev, attrs,	params);
+		if (err)
+			goto out;
+	}
+
 	wdev_lock(wdev);
-	err = rdev_change_beacon(rdev, dev, &params);
+	err = rdev_change_beacon(rdev, dev, params);
 	wdev_unlock(wdev);
 
 out:
-	kfree(params.mbssid_ies);
+	kfree(params->beacon.mbssid_ies);
+	kfree(params);
 	return err;
 }
 
diff --git a/net/wireless/rdev-ops.h b/net/wireless/rdev-ops.h
index 439bcf52369c..131fbe9c3199 100644
--- a/net/wireless/rdev-ops.h
+++ b/net/wireless/rdev-ops.h
@@ -162,7 +162,7 @@  static inline int rdev_start_ap(struct cfg80211_registered_device *rdev,
 
 static inline int rdev_change_beacon(struct cfg80211_registered_device *rdev,
 				     struct net_device *dev,
-				     struct cfg80211_beacon_data *info)
+				     struct cfg80211_ap_settings *info)
 {
 	int ret;
 	trace_rdev_change_beacon(&rdev->wiphy, dev, info);
diff --git a/net/wireless/trace.h b/net/wireless/trace.h
index 228079d7690a..97ca10cbbfee 100644
--- a/net/wireless/trace.h
+++ b/net/wireless/trace.h
@@ -597,44 +597,50 @@  TRACE_EVENT(rdev_start_ap,
 
 TRACE_EVENT(rdev_change_beacon,
 	TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
-		 struct cfg80211_beacon_data *info),
+		 struct cfg80211_ap_settings *info),
 	TP_ARGS(wiphy, netdev, info),
 	TP_STRUCT__entry(
 		WIPHY_ENTRY
 		NETDEV_ENTRY
-		__dynamic_array(u8, head, info ? info->head_len : 0)
-		__dynamic_array(u8, tail, info ? info->tail_len : 0)
-		__dynamic_array(u8, beacon_ies, info ? info->beacon_ies_len : 0)
+		__dynamic_array(u8, head, info ? info->beacon.head_len : 0)
+		__dynamic_array(u8, tail, info ? info->beacon.tail_len : 0)
+		__dynamic_array(u8, beacon_ies,
+				info ? info->beacon.beacon_ies_len : 0)
 		__dynamic_array(u8, proberesp_ies,
-				info ? info->proberesp_ies_len : 0)
+				info ? info->beacon.proberesp_ies_len : 0)
 		__dynamic_array(u8, assocresp_ies,
-				info ? info->assocresp_ies_len : 0)
-		__dynamic_array(u8, probe_resp, info ? info->probe_resp_len : 0)
+				info ? info->beacon.assocresp_ies_len : 0)
+		__dynamic_array(u8, probe_resp,
+				info ? info->beacon.probe_resp_len : 0)
 	),
 	TP_fast_assign(
 		WIPHY_ASSIGN;
 		NETDEV_ASSIGN;
 		if (info) {
-			if (info->head)
-				memcpy(__get_dynamic_array(head), info->head,
-				       info->head_len);
-			if (info->tail)
-				memcpy(__get_dynamic_array(tail), info->tail,
-				       info->tail_len);
-			if (info->beacon_ies)
+			if (info->beacon.head)
+				memcpy(__get_dynamic_array(head),
+				       info->beacon.head,
+				       info->beacon.head_len);
+			if (info->beacon.tail)
+				memcpy(__get_dynamic_array(tail),
+				       info->beacon.tail,
+				       info->beacon.tail_len);
+			if (info->beacon.beacon_ies)
 				memcpy(__get_dynamic_array(beacon_ies),
-				       info->beacon_ies, info->beacon_ies_len);
-			if (info->proberesp_ies)
+				       info->beacon.beacon_ies,
+				       info->beacon.beacon_ies_len);
+			if (info->beacon.proberesp_ies)
 				memcpy(__get_dynamic_array(proberesp_ies),
-				       info->proberesp_ies,
-				       info->proberesp_ies_len);
-			if (info->assocresp_ies)
+				       info->beacon.proberesp_ies,
+				       info->beacon.proberesp_ies_len);
+			if (info->beacon.assocresp_ies)
 				memcpy(__get_dynamic_array(assocresp_ies),
-				       info->assocresp_ies,
-				       info->assocresp_ies_len);
-			if (info->probe_resp)
+				       info->beacon.assocresp_ies,
+				       info->beacon.assocresp_ies_len);
+			if (info->beacon.probe_resp)
 				memcpy(__get_dynamic_array(probe_resp),
-				       info->probe_resp, info->probe_resp_len);
+				       info->beacon.probe_resp,
+				       info->beacon.probe_resp_len);
 		}
 	),
 	TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT, WIPHY_PR_ARG, NETDEV_PR_ARG)