567
static int nl80211_put_iftypes(struct sk_buff *msg, u32 attr, u16 ifmodes)
569
struct nlattr *nl_modes = nla_nest_start(msg, attr);
573
goto nla_put_failure;
578
NLA_PUT_FLAG(msg, i);
583
nla_nest_end(msg, nl_modes);
590
static int nl80211_put_iface_combinations(struct wiphy *wiphy,
593
struct nlattr *nl_combis;
596
nl_combis = nla_nest_start(msg,
597
NL80211_ATTR_INTERFACE_COMBINATIONS);
599
goto nla_put_failure;
601
for (i = 0; i < wiphy->n_iface_combinations; i++) {
602
const struct ieee80211_iface_combination *c;
603
struct nlattr *nl_combi, *nl_limits;
605
c = &wiphy->iface_combinations[i];
607
nl_combi = nla_nest_start(msg, i + 1);
609
goto nla_put_failure;
611
nl_limits = nla_nest_start(msg, NL80211_IFACE_COMB_LIMITS);
613
goto nla_put_failure;
615
for (j = 0; j < c->n_limits; j++) {
616
struct nlattr *nl_limit;
618
nl_limit = nla_nest_start(msg, j + 1);
620
goto nla_put_failure;
621
NLA_PUT_U32(msg, NL80211_IFACE_LIMIT_MAX,
623
if (nl80211_put_iftypes(msg, NL80211_IFACE_LIMIT_TYPES,
625
goto nla_put_failure;
626
nla_nest_end(msg, nl_limit);
629
nla_nest_end(msg, nl_limits);
631
if (c->beacon_int_infra_match)
633
NL80211_IFACE_COMB_STA_AP_BI_MATCH);
634
NLA_PUT_U32(msg, NL80211_IFACE_COMB_NUM_CHANNELS,
635
c->num_different_channels);
636
NLA_PUT_U32(msg, NL80211_IFACE_COMB_MAXNUM,
639
nla_nest_end(msg, nl_combi);
642
nla_nest_end(msg, nl_combis);
553
649
static int nl80211_send_wiphy(struct sk_buff *msg, u32 pid, u32 seq, int flags,
554
650
struct cfg80211_registered_device *dev)
818
906
nla_nest_end(msg, nl_ifs);
909
if (dev->wiphy.wowlan.flags || dev->wiphy.wowlan.n_patterns) {
910
struct nlattr *nl_wowlan;
912
nl_wowlan = nla_nest_start(msg,
913
NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED);
915
goto nla_put_failure;
917
if (dev->wiphy.wowlan.flags & WIPHY_WOWLAN_ANY)
918
NLA_PUT_FLAG(msg, NL80211_WOWLAN_TRIG_ANY);
919
if (dev->wiphy.wowlan.flags & WIPHY_WOWLAN_DISCONNECT)
920
NLA_PUT_FLAG(msg, NL80211_WOWLAN_TRIG_DISCONNECT);
921
if (dev->wiphy.wowlan.flags & WIPHY_WOWLAN_MAGIC_PKT)
922
NLA_PUT_FLAG(msg, NL80211_WOWLAN_TRIG_MAGIC_PKT);
923
if (dev->wiphy.wowlan.n_patterns) {
924
struct nl80211_wowlan_pattern_support pat = {
925
.max_patterns = dev->wiphy.wowlan.n_patterns,
927
dev->wiphy.wowlan.pattern_min_len,
929
dev->wiphy.wowlan.pattern_max_len,
931
NLA_PUT(msg, NL80211_WOWLAN_TRIG_PKT_PATTERN,
935
nla_nest_end(msg, nl_wowlan);
938
if (nl80211_put_iftypes(msg, NL80211_ATTR_SOFTWARE_IFTYPES,
939
dev->wiphy.software_iftypes))
940
goto nla_put_failure;
942
if (nl80211_put_iface_combinations(&dev->wiphy, msg))
943
goto nla_put_failure;
821
945
return genlmsg_end(msg, hdr);
2094
static bool nl80211_put_sta_rate(struct sk_buff *msg, struct rate_info *info,
2097
struct nlattr *rate;
2100
rate = nla_nest_start(msg, attr);
2102
goto nla_put_failure;
2104
/* cfg80211_calculate_bitrate will return 0 for mcs >= 32 */
2105
bitrate = cfg80211_calculate_bitrate(info);
2107
NLA_PUT_U16(msg, NL80211_RATE_INFO_BITRATE, bitrate);
2109
if (info->flags & RATE_INFO_FLAGS_MCS)
2110
NLA_PUT_U8(msg, NL80211_RATE_INFO_MCS, info->mcs);
2111
if (info->flags & RATE_INFO_FLAGS_40_MHZ_WIDTH)
2112
NLA_PUT_FLAG(msg, NL80211_RATE_INFO_40_MHZ_WIDTH);
2113
if (info->flags & RATE_INFO_FLAGS_SHORT_GI)
2114
NLA_PUT_FLAG(msg, NL80211_RATE_INFO_SHORT_GI);
2116
nla_nest_end(msg, rate);
1971
2123
static int nl80211_send_station(struct sk_buff *msg, u32 pid, u32 seq,
1972
2124
int flags, struct net_device *dev,
1973
2125
const u8 *mac_addr, struct station_info *sinfo)
1976
struct nlattr *sinfoattr, *txrate;
2128
struct nlattr *sinfoattr, *bss_param;
1979
2130
hdr = nl80211hdr_put(msg, pid, seq, flags, NL80211_CMD_NEW_STATION);
2013
2167
NLA_PUT_U8(msg, NL80211_STA_INFO_SIGNAL_AVG,
2014
2168
sinfo->signal_avg);
2015
2169
if (sinfo->filled & STATION_INFO_TX_BITRATE) {
2016
txrate = nla_nest_start(msg, NL80211_STA_INFO_TX_BITRATE);
2018
goto nla_put_failure;
2020
/* cfg80211_calculate_bitrate will return 0 for mcs >= 32 */
2021
bitrate = cfg80211_calculate_bitrate(&sinfo->txrate);
2023
NLA_PUT_U16(msg, NL80211_RATE_INFO_BITRATE, bitrate);
2025
if (sinfo->txrate.flags & RATE_INFO_FLAGS_MCS)
2026
NLA_PUT_U8(msg, NL80211_RATE_INFO_MCS,
2028
if (sinfo->txrate.flags & RATE_INFO_FLAGS_40_MHZ_WIDTH)
2029
NLA_PUT_FLAG(msg, NL80211_RATE_INFO_40_MHZ_WIDTH);
2030
if (sinfo->txrate.flags & RATE_INFO_FLAGS_SHORT_GI)
2031
NLA_PUT_FLAG(msg, NL80211_RATE_INFO_SHORT_GI);
2033
nla_nest_end(msg, txrate);
2170
if (!nl80211_put_sta_rate(msg, &sinfo->txrate,
2171
NL80211_STA_INFO_TX_BITRATE))
2172
goto nla_put_failure;
2174
if (sinfo->filled & STATION_INFO_RX_BITRATE) {
2175
if (!nl80211_put_sta_rate(msg, &sinfo->rxrate,
2176
NL80211_STA_INFO_RX_BITRATE))
2177
goto nla_put_failure;
2035
2179
if (sinfo->filled & STATION_INFO_RX_PACKETS)
2036
2180
NLA_PUT_U32(msg, NL80211_STA_INFO_RX_PACKETS,
2044
2188
if (sinfo->filled & STATION_INFO_TX_FAILED)
2045
2189
NLA_PUT_U32(msg, NL80211_STA_INFO_TX_FAILED,
2046
2190
sinfo->tx_failed);
2191
if (sinfo->filled & STATION_INFO_BSS_PARAM) {
2192
bss_param = nla_nest_start(msg, NL80211_STA_INFO_BSS_PARAM);
2194
goto nla_put_failure;
2196
if (sinfo->bss_param.flags & BSS_PARAM_FLAGS_CTS_PROT)
2197
NLA_PUT_FLAG(msg, NL80211_STA_BSS_PARAM_CTS_PROT);
2198
if (sinfo->bss_param.flags & BSS_PARAM_FLAGS_SHORT_PREAMBLE)
2199
NLA_PUT_FLAG(msg, NL80211_STA_BSS_PARAM_SHORT_PREAMBLE);
2200
if (sinfo->bss_param.flags & BSS_PARAM_FLAGS_SHORT_SLOT_TIME)
2202
NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME);
2203
NLA_PUT_U8(msg, NL80211_STA_BSS_PARAM_DTIM_PERIOD,
2204
sinfo->bss_param.dtim_period);
2205
NLA_PUT_U16(msg, NL80211_STA_BSS_PARAM_BEACON_INTERVAL,
2206
sinfo->bss_param.beacon_interval);
2208
nla_nest_end(msg, bss_param);
2047
2210
nla_nest_end(msg, sinfoattr);
2049
2212
return genlmsg_end(msg, hdr);
3444
static int nl80211_start_sched_scan(struct sk_buff *skb,
3445
struct genl_info *info)
3447
struct cfg80211_sched_scan_request *request;
3448
struct cfg80211_registered_device *rdev = info->user_ptr[0];
3449
struct net_device *dev = info->user_ptr[1];
3450
struct nlattr *attr;
3451
struct wiphy *wiphy;
3452
int err, tmp, n_ssids = 0, n_channels, i;
3454
enum ieee80211_band band;
3457
if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_SCHED_SCAN) ||
3458
!rdev->ops->sched_scan_start)
3461
if (!is_valid_ie_attr(info->attrs[NL80211_ATTR_IE]))
3464
if (!info->attrs[NL80211_ATTR_SCHED_SCAN_INTERVAL])
3467
interval = nla_get_u32(info->attrs[NL80211_ATTR_SCHED_SCAN_INTERVAL]);
3471
wiphy = &rdev->wiphy;
3473
if (info->attrs[NL80211_ATTR_SCAN_FREQUENCIES]) {
3474
n_channels = validate_scan_freqs(
3475
info->attrs[NL80211_ATTR_SCAN_FREQUENCIES]);
3481
for (band = 0; band < IEEE80211_NUM_BANDS; band++)
3482
if (wiphy->bands[band])
3483
n_channels += wiphy->bands[band]->n_channels;
3486
if (info->attrs[NL80211_ATTR_SCAN_SSIDS])
3487
nla_for_each_nested(attr, info->attrs[NL80211_ATTR_SCAN_SSIDS],
3491
if (n_ssids > wiphy->max_scan_ssids)
3494
if (info->attrs[NL80211_ATTR_IE])
3495
ie_len = nla_len(info->attrs[NL80211_ATTR_IE]);
3499
if (ie_len > wiphy->max_scan_ie_len)
3502
mutex_lock(&rdev->sched_scan_mtx);
3504
if (rdev->sched_scan_req) {
3509
request = kzalloc(sizeof(*request)
3510
+ sizeof(*request->ssids) * n_ssids
3511
+ sizeof(*request->channels) * n_channels
3512
+ ie_len, GFP_KERNEL);
3519
request->ssids = (void *)&request->channels[n_channels];
3520
request->n_ssids = n_ssids;
3523
request->ie = (void *)(request->ssids + n_ssids);
3525
request->ie = (void *)(request->channels + n_channels);
3529
if (info->attrs[NL80211_ATTR_SCAN_FREQUENCIES]) {
3530
/* user specified, bail out if channel not found */
3531
nla_for_each_nested(attr,
3532
info->attrs[NL80211_ATTR_SCAN_FREQUENCIES],
3534
struct ieee80211_channel *chan;
3536
chan = ieee80211_get_channel(wiphy, nla_get_u32(attr));
3543
/* ignore disabled channels */
3544
if (chan->flags & IEEE80211_CHAN_DISABLED)
3547
request->channels[i] = chan;
3552
for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
3554
if (!wiphy->bands[band])
3556
for (j = 0; j < wiphy->bands[band]->n_channels; j++) {
3557
struct ieee80211_channel *chan;
3559
chan = &wiphy->bands[band]->channels[j];
3561
if (chan->flags & IEEE80211_CHAN_DISABLED)
3564
request->channels[i] = chan;
3575
request->n_channels = i;
3578
if (info->attrs[NL80211_ATTR_SCAN_SSIDS]) {
3579
nla_for_each_nested(attr, info->attrs[NL80211_ATTR_SCAN_SSIDS],
3581
if (nla_len(attr) > IEEE80211_MAX_SSID_LEN) {
3585
request->ssids[i].ssid_len = nla_len(attr);
3586
memcpy(request->ssids[i].ssid, nla_data(attr),
3592
if (info->attrs[NL80211_ATTR_IE]) {
3593
request->ie_len = nla_len(info->attrs[NL80211_ATTR_IE]);
3594
memcpy((void *)request->ie,
3595
nla_data(info->attrs[NL80211_ATTR_IE]),
3600
request->wiphy = &rdev->wiphy;
3601
request->interval = interval;
3603
err = rdev->ops->sched_scan_start(&rdev->wiphy, dev, request);
3605
rdev->sched_scan_req = request;
3606
nl80211_send_sched_scan(rdev, dev,
3607
NL80211_CMD_START_SCHED_SCAN);
3614
mutex_unlock(&rdev->sched_scan_mtx);
3618
static int nl80211_stop_sched_scan(struct sk_buff *skb,
3619
struct genl_info *info)
3621
struct cfg80211_registered_device *rdev = info->user_ptr[0];
3624
if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_SCHED_SCAN) ||
3625
!rdev->ops->sched_scan_stop)
3628
mutex_lock(&rdev->sched_scan_mtx);
3629
err = __cfg80211_stop_sched_scan(rdev, false);
3630
mutex_unlock(&rdev->sched_scan_mtx);
3265
3635
static int nl80211_send_bss(struct sk_buff *msg, u32 pid, u32 seq, int flags,
3266
3636
struct cfg80211_registered_device *rdev,
3267
3637
struct wireless_dev *wdev,
4760
5130
return cfg80211_leave_mesh(rdev, dev);
5133
static int nl80211_get_wowlan(struct sk_buff *skb, struct genl_info *info)
5135
struct cfg80211_registered_device *rdev = info->user_ptr[0];
5136
struct sk_buff *msg;
5139
if (!rdev->wiphy.wowlan.flags && !rdev->wiphy.wowlan.n_patterns)
5142
msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
5146
hdr = nl80211hdr_put(msg, info->snd_pid, info->snd_seq, 0,
5147
NL80211_CMD_GET_WOWLAN);
5149
goto nla_put_failure;
5152
struct nlattr *nl_wowlan;
5154
nl_wowlan = nla_nest_start(msg, NL80211_ATTR_WOWLAN_TRIGGERS);
5156
goto nla_put_failure;
5158
if (rdev->wowlan->any)
5159
NLA_PUT_FLAG(msg, NL80211_WOWLAN_TRIG_ANY);
5160
if (rdev->wowlan->disconnect)
5161
NLA_PUT_FLAG(msg, NL80211_WOWLAN_TRIG_DISCONNECT);
5162
if (rdev->wowlan->magic_pkt)
5163
NLA_PUT_FLAG(msg, NL80211_WOWLAN_TRIG_MAGIC_PKT);
5164
if (rdev->wowlan->n_patterns) {
5165
struct nlattr *nl_pats, *nl_pat;
5168
nl_pats = nla_nest_start(msg,
5169
NL80211_WOWLAN_TRIG_PKT_PATTERN);
5171
goto nla_put_failure;
5173
for (i = 0; i < rdev->wowlan->n_patterns; i++) {
5174
nl_pat = nla_nest_start(msg, i + 1);
5176
goto nla_put_failure;
5177
pat_len = rdev->wowlan->patterns[i].pattern_len;
5178
NLA_PUT(msg, NL80211_WOWLAN_PKTPAT_MASK,
5179
DIV_ROUND_UP(pat_len, 8),
5180
rdev->wowlan->patterns[i].mask);
5181
NLA_PUT(msg, NL80211_WOWLAN_PKTPAT_PATTERN,
5183
rdev->wowlan->patterns[i].pattern);
5184
nla_nest_end(msg, nl_pat);
5186
nla_nest_end(msg, nl_pats);
5189
nla_nest_end(msg, nl_wowlan);
5192
genlmsg_end(msg, hdr);
5193
return genlmsg_reply(msg, info);
5200
static int nl80211_set_wowlan(struct sk_buff *skb, struct genl_info *info)
5202
struct cfg80211_registered_device *rdev = info->user_ptr[0];
5203
struct nlattr *tb[NUM_NL80211_WOWLAN_TRIG];
5204
struct cfg80211_wowlan no_triggers = {};
5205
struct cfg80211_wowlan new_triggers = {};
5206
struct wiphy_wowlan_support *wowlan = &rdev->wiphy.wowlan;
5209
if (!rdev->wiphy.wowlan.flags && !rdev->wiphy.wowlan.n_patterns)
5212
if (!info->attrs[NL80211_ATTR_WOWLAN_TRIGGERS])
5215
err = nla_parse(tb, MAX_NL80211_WOWLAN_TRIG,
5216
nla_data(info->attrs[NL80211_ATTR_WOWLAN_TRIGGERS]),
5217
nla_len(info->attrs[NL80211_ATTR_WOWLAN_TRIGGERS]),
5218
nl80211_wowlan_policy);
5222
if (tb[NL80211_WOWLAN_TRIG_ANY]) {
5223
if (!(wowlan->flags & WIPHY_WOWLAN_ANY))
5225
new_triggers.any = true;
5228
if (tb[NL80211_WOWLAN_TRIG_DISCONNECT]) {
5229
if (!(wowlan->flags & WIPHY_WOWLAN_DISCONNECT))
5231
new_triggers.disconnect = true;
5234
if (tb[NL80211_WOWLAN_TRIG_MAGIC_PKT]) {
5235
if (!(wowlan->flags & WIPHY_WOWLAN_MAGIC_PKT))
5237
new_triggers.magic_pkt = true;
5240
if (tb[NL80211_WOWLAN_TRIG_PKT_PATTERN]) {
5243
int rem, pat_len, mask_len;
5244
struct nlattr *pat_tb[NUM_NL80211_WOWLAN_PKTPAT];
5246
nla_for_each_nested(pat, tb[NL80211_WOWLAN_TRIG_PKT_PATTERN],
5249
if (n_patterns > wowlan->n_patterns)
5252
new_triggers.patterns = kcalloc(n_patterns,
5253
sizeof(new_triggers.patterns[0]),
5255
if (!new_triggers.patterns)
5258
new_triggers.n_patterns = n_patterns;
5261
nla_for_each_nested(pat, tb[NL80211_WOWLAN_TRIG_PKT_PATTERN],
5263
nla_parse(pat_tb, MAX_NL80211_WOWLAN_PKTPAT,
5264
nla_data(pat), nla_len(pat), NULL);
5266
if (!pat_tb[NL80211_WOWLAN_PKTPAT_MASK] ||
5267
!pat_tb[NL80211_WOWLAN_PKTPAT_PATTERN])
5269
pat_len = nla_len(pat_tb[NL80211_WOWLAN_PKTPAT_PATTERN]);
5270
mask_len = DIV_ROUND_UP(pat_len, 8);
5271
if (nla_len(pat_tb[NL80211_WOWLAN_PKTPAT_MASK]) !=
5274
if (pat_len > wowlan->pattern_max_len ||
5275
pat_len < wowlan->pattern_min_len)
5278
new_triggers.patterns[i].mask =
5279
kmalloc(mask_len + pat_len, GFP_KERNEL);
5280
if (!new_triggers.patterns[i].mask) {
5284
new_triggers.patterns[i].pattern =
5285
new_triggers.patterns[i].mask + mask_len;
5286
memcpy(new_triggers.patterns[i].mask,
5287
nla_data(pat_tb[NL80211_WOWLAN_PKTPAT_MASK]),
5289
new_triggers.patterns[i].pattern_len = pat_len;
5290
memcpy(new_triggers.patterns[i].pattern,
5291
nla_data(pat_tb[NL80211_WOWLAN_PKTPAT_PATTERN]),
5297
if (memcmp(&new_triggers, &no_triggers, sizeof(new_triggers))) {
5298
struct cfg80211_wowlan *ntrig;
5299
ntrig = kmemdup(&new_triggers, sizeof(new_triggers),
5305
cfg80211_rdev_free_wowlan(rdev);
5306
rdev->wowlan = ntrig;
5309
cfg80211_rdev_free_wowlan(rdev);
5310
rdev->wowlan = NULL;
5315
for (i = 0; i < new_triggers.n_patterns; i++)
5316
kfree(new_triggers.patterns[i].mask);
5317
kfree(new_triggers.patterns);
4763
5321
#define NL80211_FLAG_NEED_WIPHY 0x01
4764
5322
#define NL80211_FLAG_NEED_NETDEV 0x02
4765
5323
#define NL80211_FLAG_NEED_RTNL 0x04
5410
6022
nl80211_scan_mcgrp.id, GFP_KERNEL);
6025
void nl80211_send_sched_scan_results(struct cfg80211_registered_device *rdev,
6026
struct net_device *netdev)
6028
struct sk_buff *msg;
6030
msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
6034
if (nl80211_send_sched_scan_msg(msg, rdev, netdev, 0, 0, 0,
6035
NL80211_CMD_SCHED_SCAN_RESULTS) < 0) {
6040
genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0,
6041
nl80211_scan_mcgrp.id, GFP_KERNEL);
6044
void nl80211_send_sched_scan(struct cfg80211_registered_device *rdev,
6045
struct net_device *netdev, u32 cmd)
6047
struct sk_buff *msg;
6049
msg = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
6053
if (nl80211_send_sched_scan_msg(msg, rdev, netdev, 0, 0, 0, cmd) < 0) {
6058
genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0,
6059
nl80211_scan_mcgrp.id, GFP_KERNEL);
5414
6063
* This can happen on global regulatory changes or device specific settings
5415
6064
* based on custom world regulatory domains.
5765
6414
nlmsg_free(msg);
6417
void nl80211_send_new_peer_candidate(struct cfg80211_registered_device *rdev,
6418
struct net_device *netdev,
6419
const u8 *macaddr, const u8* ie, u8 ie_len,
6422
struct sk_buff *msg;
6425
msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
6429
hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_NEW_PEER_CANDIDATE);
6435
NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx);
6436
NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex);
6437
NLA_PUT(msg, NL80211_ATTR_MAC, ETH_ALEN, macaddr);
6439
NLA_PUT(msg, NL80211_ATTR_IE, ie_len , ie);
6441
if (genlmsg_end(msg, hdr) < 0) {
6446
genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0,
6447
nl80211_mlme_mcgrp.id, gfp);
6451
genlmsg_cancel(msg, hdr);
5768
6455
void nl80211_michael_mic_failure(struct cfg80211_registered_device *rdev,
5769
6456
struct net_device *netdev, const u8 *addr,
5770
6457
enum nl80211_key_type key_type, int key_id,
5946
6634
nl80211_mlme_mcgrp.id, gfp);
6637
void nl80211_send_sta_del_event(struct cfg80211_registered_device *rdev,
6638
struct net_device *dev, const u8 *mac_addr,
6641
struct sk_buff *msg;
6644
msg = nlmsg_new(NLMSG_GOODSIZE, gfp);
6648
hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_DEL_STATION);
6654
NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, dev->ifindex);
6655
NLA_PUT(msg, NL80211_ATTR_MAC, ETH_ALEN, mac_addr);
6657
if (genlmsg_end(msg, hdr) < 0) {
6662
genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0,
6663
nl80211_mlme_mcgrp.id, gfp);
6667
genlmsg_cancel(msg, hdr);
5949
6671
int nl80211_send_mgmt(struct cfg80211_registered_device *rdev,
5950
6672
struct net_device *netdev, u32 nlpid,
5951
6673
int freq, const u8 *buf, size_t len, gfp_t gfp)