Lines Matching full:if
11 #include <linux/if.h>
78 if (!have_ifidx && !have_wdev_id) in __cfg80211_wdev_from_attrs()
81 if (have_ifidx) in __cfg80211_wdev_from_attrs()
83 if (have_wdev_id) { in __cfg80211_wdev_from_attrs()
88 if (rdev) { in __cfg80211_wdev_from_attrs()
94 if (have_ifidx && wdev->netdev && in __cfg80211_wdev_from_attrs()
99 if (have_wdev_id && wdev->identifier == (u32)wdev_id) { in __cfg80211_wdev_from_attrs()
113 if (wiphy_net(&rdev->wiphy) != netns) in __cfg80211_wdev_from_attrs()
116 if (have_wdev_id && rdev->wiphy_idx != wiphy_idx) in __cfg80211_wdev_from_attrs()
120 if (have_ifidx && wdev->netdev && in __cfg80211_wdev_from_attrs()
125 if (have_wdev_id && wdev->identifier == (u32)wdev_id) { in __cfg80211_wdev_from_attrs()
131 if (result) in __cfg80211_wdev_from_attrs()
135 if (result) in __cfg80211_wdev_from_attrs()
148 if (!attrs[NL80211_ATTR_WIPHY] && in __cfg80211_rdev_from_attrs()
153 if (attrs[NL80211_ATTR_WIPHY]) in __cfg80211_rdev_from_attrs()
157 if (attrs[NL80211_ATTR_WDEV]) { in __cfg80211_rdev_from_attrs()
163 if (tmp) { in __cfg80211_rdev_from_attrs()
166 if (wdev->identifier != (u32)wdev_id) in __cfg80211_rdev_from_attrs()
172 if (!found) in __cfg80211_rdev_from_attrs()
175 if (rdev && tmp != rdev) in __cfg80211_rdev_from_attrs()
181 if (attrs[NL80211_ATTR_IFINDEX]) { in __cfg80211_rdev_from_attrs()
185 if (netdev) { in __cfg80211_rdev_from_attrs()
186 if (netdev->ieee80211_ptr) in __cfg80211_rdev_from_attrs()
193 if (!tmp) in __cfg80211_rdev_from_attrs()
197 if (rdev && tmp != rdev) in __cfg80211_rdev_from_attrs()
204 if (!rdev) in __cfg80211_rdev_from_attrs()
207 if (netns != wiphy_net(&rdev->wiphy)) in __cfg80211_rdev_from_attrs()
237 if (len < offsetofend(typeof(*mgmt), frame_control)) in validate_beacon_head()
241 if (s1g_bcn) { in validate_beacon_head()
253 if (len < fixedlen) in validate_beacon_head()
256 if (ieee80211_hdrlen(mgmt->frame_control) != hdrlen) in validate_beacon_head()
266 if (for_each_element_completed(elem, data, len)) in validate_beacon_head()
285 if (for_each_element_completed(elem, data, len)) in validate_ie_attr()
295 if (!ieee80211_he_capa_size_ok(nla_data(attr), nla_len(attr))) in validate_he_capa()
309 if (supported_selectors[i] & 0x80) in validate_supported_selectors()
323 if (len != ETH_ALEN) { in validate_nan_cluster_id()
328 if (memcmp(data, cluster_id_prefix, sizeof(cluster_id_prefix))) { in validate_nan_cluster_id()
344 if (len < 3) { in validate_nan_avail_blob()
351 if (data[0] != 0x12) { in validate_nan_avail_blob()
360 if (attr_len != len - 3) { in validate_nan_avail_blob()
381 if (pos + 3 > len) { in validate_nan_ulw()
388 if (data[pos] != 0x17) { in validate_nan_ulw()
401 * Check if length is one of the valid values: 16 (no in validate_nan_ulw()
406 if (attr_len != 16 && attr_len != 18 && attr_len != 21 && in validate_nan_ulw()
414 if (pos + attr_len > len) { in validate_nan_ulw()
433 if (!ieee80211_uhr_capa_size_ok(data, len, false)) in validate_uhr_capa()
444 if (!ieee80211_uhr_oper_size_ok(data, len, false)) in validate_uhr_operation()
1235 if (!cb->args[0]) { in nl80211_prepare_wdev_dump()
1238 if (!attrbuf) { in nl80211_prepare_wdev_dump()
1240 if (!attrbuf) in nl80211_prepare_wdev_dump()
1249 if (err) { in nl80211_prepare_wdev_dump()
1258 if (IS_ERR(*wdev)) { in nl80211_prepare_wdev_dump()
1275 if (!wiphy) { in nl80211_prepare_wdev_dump()
1286 if (!net_eq(wiphy_net(wiphy), sock_net(cb->skb->sk))) { in nl80211_prepare_wdev_dump()
1295 if (tmp->identifier == cb->args[1]) { in nl80211_prepare_wdev_dump()
1301 if (!*wdev) { in nl80211_prepare_wdev_dump()
1327 if (!nl_wmm_rules) in nl80211_msg_put_wmm_rules()
1333 if (!nl_wmm_rule) in nl80211_msg_put_wmm_rules()
1336 if (nla_put_u16(msg, NL80211_WMMR_CW_MIN, in nl80211_msg_put_wmm_rules()
1363 if (!large && chan->flags & in nl80211_msg_put_channel()
1366 if (!large && chan->freq_offset) in nl80211_msg_put_channel()
1369 if (nla_put_u32(msg, NL80211_FREQUENCY_ATTR_FREQ, in nl80211_msg_put_channel()
1373 if (nla_put_u32(msg, NL80211_FREQUENCY_ATTR_OFFSET, chan->freq_offset)) in nl80211_msg_put_channel()
1376 if ((chan->flags & IEEE80211_CHAN_PSD) && in nl80211_msg_put_channel()
1380 if ((chan->flags & IEEE80211_CHAN_DISABLED) && in nl80211_msg_put_channel()
1383 if (chan->flags & IEEE80211_CHAN_NO_IR) { in nl80211_msg_put_channel()
1384 if (nla_put_flag(msg, NL80211_FREQUENCY_ATTR_NO_IR)) in nl80211_msg_put_channel()
1386 if (nla_put_flag(msg, __NL80211_FREQUENCY_ATTR_NO_IBSS)) in nl80211_msg_put_channel()
1389 if (chan->flags & IEEE80211_CHAN_RADAR) { in nl80211_msg_put_channel()
1390 if (nla_put_flag(msg, NL80211_FREQUENCY_ATTR_RADAR)) in nl80211_msg_put_channel()
1392 if (large) { in nl80211_msg_put_channel()
1397 if (nla_put_u32(msg, NL80211_FREQUENCY_ATTR_DFS_STATE, in nl80211_msg_put_channel()
1400 if (nla_put_u32(msg, NL80211_FREQUENCY_ATTR_DFS_TIME, in nl80211_msg_put_channel()
1403 if (nla_put_u32(msg, in nl80211_msg_put_channel()
1410 if (large) { in nl80211_msg_put_channel()
1411 if ((chan->flags & IEEE80211_CHAN_NO_HT40MINUS) && in nl80211_msg_put_channel()
1414 if ((chan->flags & IEEE80211_CHAN_NO_HT40PLUS) && in nl80211_msg_put_channel()
1417 if ((chan->flags & IEEE80211_CHAN_NO_80MHZ) && in nl80211_msg_put_channel()
1420 if ((chan->flags & IEEE80211_CHAN_NO_160MHZ) && in nl80211_msg_put_channel()
1423 if ((chan->flags & IEEE80211_CHAN_INDOOR_ONLY) && in nl80211_msg_put_channel()
1426 if ((chan->flags & IEEE80211_CHAN_IR_CONCURRENT) && in nl80211_msg_put_channel()
1429 if ((chan->flags & IEEE80211_CHAN_NO_20MHZ) && in nl80211_msg_put_channel()
1432 if ((chan->flags & IEEE80211_CHAN_NO_10MHZ) && in nl80211_msg_put_channel()
1435 if ((chan->flags & IEEE80211_CHAN_NO_HE) && in nl80211_msg_put_channel()
1438 if ((chan->flags & IEEE80211_CHAN_NO_320MHZ) && in nl80211_msg_put_channel()
1441 if ((chan->flags & IEEE80211_CHAN_NO_EHT) && in nl80211_msg_put_channel()
1444 if ((chan->flags & IEEE80211_CHAN_DFS_CONCURRENT) && in nl80211_msg_put_channel()
1447 if ((chan->flags & IEEE80211_CHAN_NO_6GHZ_VLP_CLIENT) && in nl80211_msg_put_channel()
1450 if ((chan->flags & IEEE80211_CHAN_NO_6GHZ_AFC_CLIENT) && in nl80211_msg_put_channel()
1453 if ((chan->flags & IEEE80211_CHAN_CAN_MONITOR) && in nl80211_msg_put_channel()
1456 if ((chan->flags & IEEE80211_CHAN_ALLOW_6GHZ_VLP_AP) && in nl80211_msg_put_channel()
1459 if ((chan->flags & IEEE80211_CHAN_ALLOW_20MHZ_ACTIVITY) && in nl80211_msg_put_channel()
1463 if ((chan->flags & IEEE80211_CHAN_NO_4MHZ) && in nl80211_msg_put_channel()
1466 if ((chan->flags & IEEE80211_CHAN_NO_8MHZ) && in nl80211_msg_put_channel()
1469 if ((chan->flags & IEEE80211_CHAN_NO_16MHZ) && in nl80211_msg_put_channel()
1472 if ((chan->flags & IEEE80211_CHAN_S1G_NO_PRIMARY) && in nl80211_msg_put_channel()
1475 if ((chan->flags & IEEE80211_CHAN_NO_UHR) && in nl80211_msg_put_channel()
1478 if (chan->cac_start_time && in nl80211_msg_put_channel()
1486 if (nla_put_u32(msg, NL80211_FREQUENCY_ATTR_MAX_TX_POWER, in nl80211_msg_put_channel()
1490 if (large) { in nl80211_msg_put_channel()
1494 if (!IS_ERR_OR_NULL(rule) && rule->has_wmm) { in nl80211_msg_put_channel()
1495 if (nl80211_msg_put_wmm_rules(msg, rule)) in nl80211_msg_put_channel()
1513 if (txqstats->filled & BIT(NL80211_TXQ_STATS_ ## attr) && \ in nl80211_put_txq_stats()
1519 if (!txqattr) in nl80211_put_txq_stats()
1545 * Returns: the link ID or 0 if not given
1550 * or if additional validation is done.
1563 if (!linkid) in nl80211_link_id_or_invalid()
1584 if (err) in nl80211_parse_key_new()
1591 if (k->def) { in nl80211_parse_key_new()
1595 if (k->defmgmt || k->defbeacon) in nl80211_parse_key_new()
1598 if (tb[NL80211_KEY_IDX]) in nl80211_parse_key_new()
1601 if (tb[NL80211_KEY_DATA]) { in nl80211_parse_key_new()
1606 if (tb[NL80211_KEY_SEQ]) { in nl80211_parse_key_new()
1611 if (tb[NL80211_KEY_CIPHER]) in nl80211_parse_key_new()
1614 if (tb[NL80211_KEY_TYPE]) in nl80211_parse_key_new()
1617 if (tb[NL80211_KEY_DEFAULT_TYPES]) { in nl80211_parse_key_new()
1625 if (err) in nl80211_parse_key_new()
1632 if (tb[NL80211_KEY_MODE]) in nl80211_parse_key_new()
1640 if (info->attrs[NL80211_ATTR_KEY_DATA]) { in nl80211_parse_key_old()
1645 if (info->attrs[NL80211_ATTR_KEY_SEQ]) { in nl80211_parse_key_old()
1650 if (info->attrs[NL80211_ATTR_KEY_IDX]) in nl80211_parse_key_old()
1653 if (info->attrs[NL80211_ATTR_KEY_CIPHER]) in nl80211_parse_key_old()
1659 if (k->def) { in nl80211_parse_key_old()
1663 if (k->defmgmt) in nl80211_parse_key_old()
1666 if (info->attrs[NL80211_ATTR_KEY_TYPE]) in nl80211_parse_key_old()
1669 if (info->attrs[NL80211_ATTR_KEY_DEFAULT_TYPES]) { in nl80211_parse_key_old()
1676 if (err) in nl80211_parse_key_old()
1694 if (info->attrs[NL80211_ATTR_KEY]) in nl80211_parse_key()
1699 if (err) in nl80211_parse_key()
1702 if ((k->def ? 1 : 0) + (k->defmgmt ? 1 : 0) + in nl80211_parse_key()
1709 if (k->defmgmt || k->defbeacon) { in nl80211_parse_key()
1710 if (k->def_uni || !k->def_multi) { in nl80211_parse_key()
1717 if (k->idx != -1) { in nl80211_parse_key()
1718 if (k->defmgmt) { in nl80211_parse_key()
1719 if (k->idx < 4 || k->idx > 5) { in nl80211_parse_key()
1724 } else if (k->defbeacon) { in nl80211_parse_key()
1725 if (k->idx < 6 || k->idx > 7) { in nl80211_parse_key()
1730 } else if (k->def) { in nl80211_parse_key()
1731 if (k->idx < 0 || k->idx > 3) { in nl80211_parse_key()
1736 if (k->idx < 0 || k->idx > 7) { in nl80211_parse_key()
1762 if (!have_key) in nl80211_parse_connkeys()
1766 if (!result) in nl80211_parse_connkeys()
1776 if (err) in nl80211_parse_connkeys()
1779 if (!parse.p.key) in nl80211_parse_connkeys()
1781 if (parse.idx < 0 || parse.idx > 3) { in nl80211_parse_connkeys()
1785 if (parse.def) { in nl80211_parse_connkeys()
1786 if (def) { in nl80211_parse_connkeys()
1793 if (!parse.def_uni || !parse.def_multi) in nl80211_parse_connkeys()
1795 } else if (parse.defmgmt) in nl80211_parse_connkeys()
1799 if (err) in nl80211_parse_connkeys()
1801 if (parse.p.cipher != WLAN_CIPHER_SUITE_WEP40 && in nl80211_parse_connkeys()
1812 /* must be WEP key if we got here */ in nl80211_parse_connkeys()
1813 if (no_ht) in nl80211_parse_connkeys()
1817 if (result->def < 0) { in nl80211_parse_connkeys()
1840 if (wdev->u.ibss.current_bss) in nl80211_key_allowed()
1845 if (wdev->connected || in nl80211_key_allowed()
1852 if (wiphy_ext_feature_isset(wdev->wiphy, in nl80211_key_allowed()
1874 if (!chan || chan->flags & IEEE80211_CHAN_DISABLED) in nl80211_get_valid_chan()
1884 if (!nl_modes) in nl80211_put_iftypes()
1889 if ((ifmodes & 1) && nla_put_flag(msg, i)) in nl80211_put_iftypes()
1910 if (!nl_combi) in nl80211_put_ifcomb_data()
1915 if (!nl_limits) in nl80211_put_ifcomb_data()
1922 if (!nl_limit) in nl80211_put_ifcomb_data()
1924 if (nla_put_u32(msg, NL80211_IFACE_LIMIT_MAX, c->limits[i].max)) in nl80211_put_ifcomb_data()
1926 if (nl80211_put_iftypes(msg, NL80211_IFACE_LIMIT_TYPES, in nl80211_put_ifcomb_data()
1934 if (c->beacon_int_infra_match && in nl80211_put_ifcomb_data()
1937 if (nla_put_u32(msg, NL80211_IFACE_COMB_NUM_CHANNELS, in nl80211_put_ifcomb_data()
1942 if (large && in nl80211_put_ifcomb_data()
1948 if (c->beacon_int_min_gcd && in nl80211_put_ifcomb_data()
1970 if (!nl_combis) in nl80211_put_iface_combinations()
1973 if (radio >= 0) { in nl80211_put_iface_combinations()
1981 if (nl80211_put_ifcomb_data(msg, large, i + 1, &c[i], nested)) in nl80211_put_iface_combinations()
1998 if (!tcp) in nl80211_send_wowlan_tcp_caps()
2003 if (!nl_tcp) in nl80211_send_wowlan_tcp_caps()
2006 if (nla_put_u32(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD, in nl80211_send_wowlan_tcp_caps()
2010 if (nla_put_u32(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD, in nl80211_send_wowlan_tcp_caps()
2014 if (tcp->seq && nla_put_flag(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ)) in nl80211_send_wowlan_tcp_caps()
2017 if (tcp->tok && nla_put(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN, in nl80211_send_wowlan_tcp_caps()
2021 if (nla_put_u32(msg, NL80211_WOWLAN_TCP_DATA_INTERVAL, in nl80211_send_wowlan_tcp_caps()
2025 if (nla_put_u32(msg, NL80211_WOWLAN_TCP_WAKE_PAYLOAD, in nl80211_send_wowlan_tcp_caps()
2039 if (!rdev->wiphy.wowlan) in nl80211_send_wowlan()
2044 if (!nl_wowlan) in nl80211_send_wowlan()
2047 if (((rdev->wiphy.wowlan->flags & WIPHY_WOWLAN_ANY) && in nl80211_send_wowlan()
2065 if (rdev->wiphy.wowlan->n_patterns) { in nl80211_send_wowlan()
2073 if (nla_put(msg, NL80211_WOWLAN_TRIG_PKT_PATTERN, in nl80211_send_wowlan()
2078 if ((rdev->wiphy.wowlan->flags & WIPHY_WOWLAN_NET_DETECT) && in nl80211_send_wowlan()
2083 if (large && nl80211_send_wowlan_tcp_caps(rdev, msg)) in nl80211_send_wowlan()
2097 if (!rdev->wiphy.coalesce) in nl80211_send_coalesce()
2107 if (nla_put(msg, NL80211_ATTR_COALESCE_RULE, sizeof(rule), &rule)) in nl80211_send_coalesce()
2122 if (nl80211_put_iftypes(msg, NL80211_BAND_IFTYPE_ATTR_IFTYPES, in nl80211_send_iftype_data()
2126 if (he_cap->has_he) { in nl80211_send_iftype_data()
2127 if (nla_put(msg, NL80211_BAND_IFTYPE_ATTR_HE_CAP_MAC, in nl80211_send_iftype_data()
2141 if (eht_cap->has_eht && he_cap->has_he) { in nl80211_send_iftype_data()
2159 if (nla_put(msg, NL80211_BAND_IFTYPE_ATTR_EHT_CAP_MAC, in nl80211_send_iftype_data()
2172 if (uhr_cap->has_uhr) { in nl80211_send_iftype_data()
2173 if (nla_put(msg, NL80211_BAND_IFTYPE_ATTR_UHR_CAP_MAC, in nl80211_send_iftype_data()
2180 if (sband->band == NL80211_BAND_6GHZ && in nl80211_send_iftype_data()
2186 if (iftdata->vendor_elems.data && iftdata->vendor_elems.len && in nl80211_send_iftype_data()
2203 if (sband->ht_cap.ht_supported && in nl80211_send_band_rateinfo()
2216 if (sband->vht_cap.vht_supported && in nl80211_send_band_rateinfo()
2224 if (large && sband->n_iftype_data) { in nl80211_send_band_rateinfo()
2231 if (!nl_iftype_data) in nl80211_send_band_rateinfo()
2238 if (!iftdata) in nl80211_send_band_rateinfo()
2242 if (err) in nl80211_send_band_rateinfo()
2252 if (large && sband->edmg_cap.channels && in nl80211_send_band_rateinfo()
2262 if (!nl_rates) in nl80211_send_band_rateinfo()
2267 if (!nl_rate) in nl80211_send_band_rateinfo()
2271 if (nla_put_u32(msg, NL80211_BITRATE_ATTR_RATE, in nl80211_send_band_rateinfo()
2274 if ((rate->flags & IEEE80211_RATE_SHORT_PREAMBLE) && in nl80211_send_band_rateinfo()
2285 if (sband->band == NL80211_BAND_S1GHZ && sband->s1g_cap.s1g && in nl80211_send_band_rateinfo()
2306 if (!mgmt_stypes) in nl80211_send_mgmt_stypes()
2310 if (!nl_ifs) in nl80211_send_mgmt_stypes()
2315 if (!nl_ftypes) in nl80211_send_mgmt_stypes()
2320 if ((stypes & 1) && in nl80211_send_mgmt_stypes()
2333 if (!nl_ifs) in nl80211_send_mgmt_stypes()
2338 if (!nl_ftypes) in nl80211_send_mgmt_stypes()
2343 if ((stypes & 1) && in nl80211_send_mgmt_stypes()
2359 if (rdev->ops->op) { \
2361 if (nla_put_u32(msg, i, NL80211_CMD_ ## n)) \
2393 if (rdev->wiphy.flags & WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL) in nl80211_add_commands_unsplit()
2398 if (rdev->wiphy.flags & WIPHY_FLAG_NETNS_OK) { in nl80211_add_commands_unsplit()
2400 if (nla_put_u32(msg, i, NL80211_CMD_SET_WIPHY_NETNS)) in nl80211_add_commands_unsplit()
2403 if (rdev->ops->set_monitor_channel || rdev->ops->start_ap || in nl80211_add_commands_unsplit()
2406 if (nla_put_u32(msg, i, NL80211_CMD_SET_CHANNEL)) in nl80211_add_commands_unsplit()
2409 if (rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_TDLS) { in nl80211_add_commands_unsplit()
2413 if (rdev->wiphy.max_sched_scan_reqs) in nl80211_add_commands_unsplit()
2417 if (rdev->wiphy.flags & WIPHY_FLAG_REPORTS_OBSS) { in nl80211_add_commands_unsplit()
2419 if (nla_put_u32(msg, i, NL80211_CMD_REGISTER_BEACONS)) in nl80211_add_commands_unsplit()
2428 if (rdev->ops->connect || rdev->ops->auth) { in nl80211_add_commands_unsplit()
2430 if (nla_put_u32(msg, i, NL80211_CMD_CONNECT)) in nl80211_add_commands_unsplit()
2434 if (rdev->ops->disconnect || rdev->ops->deauth) { in nl80211_add_commands_unsplit()
2436 if (nla_put_u32(msg, i, NL80211_CMD_DISCONNECT)) in nl80211_add_commands_unsplit()
2451 if (!cap->ftm.supported) in nl80211_send_pmsr_ftm_capa()
2455 if (!ftm) in nl80211_send_pmsr_ftm_capa()
2458 if (cap->ftm.asap && nla_put_flag(msg, NL80211_PMSR_FTM_CAPA_ATTR_ASAP)) in nl80211_send_pmsr_ftm_capa()
2460 if (cap->ftm.non_asap && in nl80211_send_pmsr_ftm_capa()
2463 if (cap->ftm.request_lci && in nl80211_send_pmsr_ftm_capa()
2466 if (cap->ftm.request_civicloc && in nl80211_send_pmsr_ftm_capa()
2469 if (nla_put_u32(msg, NL80211_PMSR_FTM_CAPA_ATTR_PREAMBLES, in nl80211_send_pmsr_ftm_capa()
2472 if (nla_put_u32(msg, NL80211_PMSR_FTM_CAPA_ATTR_BANDWIDTHS, in nl80211_send_pmsr_ftm_capa()
2475 if (cap->ftm.max_bursts_exponent >= 0 && in nl80211_send_pmsr_ftm_capa()
2479 if (cap->ftm.max_ftms_per_burst && in nl80211_send_pmsr_ftm_capa()
2483 if (cap->ftm.trigger_based && in nl80211_send_pmsr_ftm_capa()
2486 if (cap->ftm.non_trigger_based && in nl80211_send_pmsr_ftm_capa()
2489 if (cap->ftm.support_6ghz && in nl80211_send_pmsr_ftm_capa()
2492 if (nla_put_u32(msg, NL80211_PMSR_FTM_CAPA_ATTR_MAX_TX_LTF_REP, in nl80211_send_pmsr_ftm_capa()
2495 if (nla_put_u32(msg, NL80211_PMSR_FTM_CAPA_ATTR_MAX_RX_LTF_REP, in nl80211_send_pmsr_ftm_capa()
2498 if (nla_put_u32(msg, NL80211_PMSR_FTM_CAPA_ATTR_MAX_TX_STS, in nl80211_send_pmsr_ftm_capa()
2501 if (nla_put_u32(msg, NL80211_PMSR_FTM_CAPA_ATTR_MAX_RX_STS, in nl80211_send_pmsr_ftm_capa()
2504 if (cap->ftm.max_total_ltf_tx > 0 && in nl80211_send_pmsr_ftm_capa()
2508 if (cap->ftm.max_total_ltf_rx > 0 && in nl80211_send_pmsr_ftm_capa()
2512 if (cap->ftm.support_rsta && in nl80211_send_pmsr_ftm_capa()
2526 if (!cap) in nl80211_send_pmsr_capa()
2531 * will genlmsg_cancel() if we fail in nl80211_send_pmsr_capa()
2535 if (!pmsr) in nl80211_send_pmsr_capa()
2538 if (nla_put_u32(msg, NL80211_PMSR_ATTR_MAX_PEERS, cap->max_peers)) in nl80211_send_pmsr_capa()
2541 if (cap->report_ap_tsf && in nl80211_send_pmsr_capa()
2545 if (cap->randomize_mac_addr && in nl80211_send_pmsr_capa()
2550 if (!caps) in nl80211_send_pmsr_capa()
2553 if (nl80211_send_pmsr_ftm_capa(cap, msg)) in nl80211_send_pmsr_capa()
2570 if (!rdev->wiphy.num_iftype_akm_suites || in nl80211_put_iftype_akm_suites()
2575 if (!nested) in nl80211_put_iftype_akm_suites()
2580 if (!nested_akms) in nl80211_put_iftype_akm_suites()
2585 if (nl80211_put_iftypes(msg, NL80211_IFTYPE_AKM_ATTR_IFTYPES, in nl80211_put_iftype_akm_suites()
2589 if (nla_put(msg, NL80211_IFTYPE_AKM_ATTR_SUITES, in nl80211_put_iftype_akm_suites()
2608 if (!rdev->wiphy.tid_config_support.vif && in nl80211_put_tid_config_support()
2613 if (!supp) in nl80211_put_tid_config_support()
2616 if (rdev->wiphy.tid_config_support.vif && in nl80211_put_tid_config_support()
2622 if (rdev->wiphy.tid_config_support.peer && in nl80211_put_tid_config_support()
2629 if (nla_put_u8(msg, NL80211_TID_CONFIG_ATTR_RETRY_SHORT, in nl80211_put_tid_config_support()
2632 if (nla_put_u8(msg, NL80211_TID_CONFIG_ATTR_RETRY_LONG, in nl80211_put_tid_config_support()
2652 if (!rdev->wiphy.sar_capa) in nl80211_put_sar_specs()
2658 if (!sar_capa) in nl80211_put_sar_specs()
2661 if (nla_put_u32(msg, NL80211_SAR_ATTR_TYPE, rdev->wiphy.sar_capa->type)) in nl80211_put_sar_specs()
2665 if (!specs) in nl80211_put_sar_specs()
2671 if (!sub_freq_range) in nl80211_put_sar_specs()
2674 if (nla_put_u32(msg, NL80211_SAR_ATTR_SPECS_START_FREQ, in nl80211_put_sar_specs()
2678 if (nla_put_u32(msg, NL80211_SAR_ATTR_SPECS_END_FREQ, in nl80211_put_sar_specs()
2698 if (!wiphy->mbssid_max_interfaces) in nl80211_put_mbssid_support()
2702 if (!config) in nl80211_put_mbssid_support()
2705 if (nla_put_u8(msg, NL80211_MBSSID_CONFIG_ATTR_MAX_INTERFACES, in nl80211_put_mbssid_support()
2709 if (wiphy->ema_max_profile_periodicity && in nl80211_put_mbssid_support()
2731 if (!radio) in nl80211_put_radio()
2734 if (nla_put_u32(msg, NL80211_WIPHY_RADIO_ATTR_INDEX, idx)) in nl80211_put_radio()
2737 if (rcfg->rts_threshold && in nl80211_put_radio()
2742 if (r->antenna_mask && in nl80211_put_radio()
2751 if (!freq) in nl80211_put_radio()
2754 if (nla_put_u32(msg, NL80211_WIPHY_RADIO_FREQ_ATTR_START, in nl80211_put_radio()
2764 if (nl80211_put_ifcomb_data(msg, true, in nl80211_put_radio()
2783 if (!wiphy->n_radio) in nl80211_put_radios()
2787 if (!radios) in nl80211_put_radios()
2791 if (nl80211_put_radio(wiphy, msg, i)) in nl80211_put_radios()
2796 if (nl80211_put_iface_combinations(wiphy, msg, in nl80211_put_radios()
2815 if (!cfg80211_iftype_allowed(wiphy, NL80211_IFTYPE_NAN_DATA, false, 0)) in nl80211_put_nan_phy_cap()
2823 if (WARN_ON(!ht_cap->ht_supported)) in nl80211_put_nan_phy_cap()
2827 if (!nl_phy_cap) in nl80211_put_nan_phy_cap()
2830 if (nla_put(msg, NL80211_NAN_PHY_CAP_ATTR_HT_MCS_SET, in nl80211_put_nan_phy_cap()
2839 if (vht_cap->vht_supported) { in nl80211_put_nan_phy_cap()
2840 if (nla_put(msg, NL80211_NAN_PHY_CAP_ATTR_VHT_MCS_SET, in nl80211_put_nan_phy_cap()
2847 if (he_cap->has_he) { in nl80211_put_nan_phy_cap()
2848 if (nla_put(msg, NL80211_NAN_PHY_CAP_ATTR_HE_MAC, in nl80211_put_nan_phy_cap()
2875 if (!nan_caps) in nl80211_put_nan_capa()
2878 if (wiphy->nan_capa.flags & WIPHY_NAN_FLAGS_CONFIGURABLE_SYNC && in nl80211_put_nan_capa()
2882 if ((wiphy->nan_capa.flags & WIPHY_NAN_FLAGS_USERSPACE_DE) && in nl80211_put_nan_capa()
2886 if (nla_put_u8(msg, NL80211_NAN_CAPA_OP_MODE, in nl80211_put_nan_capa()
2896 if (nl80211_put_nan_phy_cap(wiphy, msg)) in nl80211_put_nan_capa()
2932 if (!hdr) in nl80211_send_wiphy()
2935 if (WARN_ON(!state)) in nl80211_send_wiphy()
2938 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_wiphy()
2945 if (cmd != NL80211_CMD_NEW_WIPHY) in nl80211_send_wiphy()
2950 if (nla_put_u8(msg, NL80211_ATTR_WIPHY_RETRY_SHORT, in nl80211_send_wiphy()
2972 if ((rdev->wiphy.flags & WIPHY_FLAG_IBSS_RSN) && in nl80211_send_wiphy()
2975 if ((rdev->wiphy.flags & WIPHY_FLAG_MESH_AUTH) && in nl80211_send_wiphy()
2978 if ((rdev->wiphy.flags & WIPHY_FLAG_AP_UAPSD) && in nl80211_send_wiphy()
2981 if ((rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_FW_ROAM) && in nl80211_send_wiphy()
2984 if ((rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_TDLS) && in nl80211_send_wiphy()
2987 if ((rdev->wiphy.flags & WIPHY_FLAG_TDLS_EXTERNAL_SETUP) && in nl80211_send_wiphy()
2991 if (state->split) in nl80211_send_wiphy()
2995 if (nla_put(msg, NL80211_ATTR_CIPHER_SUITES, in nl80211_send_wiphy()
3000 if (nla_put_u8(msg, NL80211_ATTR_MAX_NUM_PMKIDS, in nl80211_send_wiphy()
3004 if ((rdev->wiphy.flags & WIPHY_FLAG_CONTROL_PORT_PROTOCOL) && in nl80211_send_wiphy()
3008 if (nla_put_u32(msg, NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX, in nl80211_send_wiphy()
3014 if ((rdev->wiphy.flags & WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD) && in nl80211_send_wiphy()
3019 if ((rdev->wiphy.available_antennas_tx || in nl80211_send_wiphy()
3026 if (!res) { in nl80211_send_wiphy()
3027 if (nla_put_u32(msg, in nl80211_send_wiphy()
3038 if (state->split) in nl80211_send_wiphy()
3042 if (nl80211_put_iftypes(msg, NL80211_ATTR_SUPPORTED_IFTYPES, in nl80211_send_wiphy()
3046 if (state->split) in nl80211_send_wiphy()
3052 if (!nl_bands) in nl80211_send_wiphy()
3063 if (band > NL80211_BAND_5GHZ && !state->split) in nl80211_send_wiphy()
3068 if (!sband) in nl80211_send_wiphy()
3072 if (!nl_band) in nl80211_send_wiphy()
3077 if (nl80211_send_band_rateinfo(msg, sband, in nl80211_send_wiphy()
3081 if (state->split) in nl80211_send_wiphy()
3088 if (!nl_freqs) in nl80211_send_wiphy()
3096 if (!nl_freq) in nl80211_send_wiphy()
3101 if (nl80211_msg_put_channel( in nl80211_send_wiphy()
3107 if (state->split) in nl80211_send_wiphy()
3110 if (i < sband->n_channels) in nl80211_send_wiphy()
3119 if (state->split) { in nl80211_send_wiphy()
3121 if (state->chan_start) in nl80211_send_wiphy()
3128 if (band < NUM_NL80211_BANDS) in nl80211_send_wiphy()
3133 /* if bands & channels are done, continue outside */ in nl80211_send_wiphy()
3134 if (state->band_start == 0 && state->chan_start == 0) in nl80211_send_wiphy()
3136 if (state->split) in nl80211_send_wiphy()
3142 if (!nl_cmds) in nl80211_send_wiphy()
3146 if (i < 0) in nl80211_send_wiphy()
3148 if (state->split) { in nl80211_send_wiphy()
3151 if (rdev->wiphy.flags & WIPHY_FLAG_HAS_CHANNEL_SWITCH) in nl80211_send_wiphy()
3154 if (rdev->wiphy.features & in nl80211_send_wiphy()
3160 if (rdev->wiphy.sar_capa) in nl80211_send_wiphy()
3168 if (state->split) in nl80211_send_wiphy()
3172 if (rdev->ops->remain_on_channel && in nl80211_send_wiphy()
3179 if ((rdev->wiphy.flags & WIPHY_FLAG_OFFCHAN_TX) && in nl80211_send_wiphy()
3184 if (state->split) in nl80211_send_wiphy()
3189 if (nl80211_send_wowlan(msg, rdev, state->split)) in nl80211_send_wiphy()
3192 if (state->split) in nl80211_send_wiphy()
3199 if (nl80211_put_iftypes(msg, NL80211_ATTR_SOFTWARE_IFTYPES, in nl80211_send_wiphy()
3203 if (nl80211_put_iface_combinations(&rdev->wiphy, msg, in nl80211_send_wiphy()
3210 if (state->split) in nl80211_send_wiphy()
3214 if ((rdev->wiphy.flags & WIPHY_FLAG_HAVE_AP_SME) && in nl80211_send_wiphy()
3221 * We can only add the per-channel limit information if the in nl80211_send_wiphy()
3225 if (state->split) in nl80211_send_wiphy()
3227 if (nla_put_u32(msg, NL80211_ATTR_FEATURE_FLAGS, features)) in nl80211_send_wiphy()
3230 if (rdev->wiphy.ht_capa_mod_mask && in nl80211_send_wiphy()
3236 if (rdev->wiphy.flags & WIPHY_FLAG_HAVE_AP_SME && in nl80211_send_wiphy()
3252 if (state->split) in nl80211_send_wiphy()
3258 if (nl80211_send_mgmt_stypes(msg, mgmt_stypes)) in nl80211_send_wiphy()
3261 if (nla_put_u32(msg, NL80211_ATTR_MAX_NUM_SCHED_SCAN_PLANS, in nl80211_send_wiphy()
3269 if (rdev->wiphy.extended_capabilities && in nl80211_send_wiphy()
3278 if (rdev->wiphy.vht_capa_mod_mask && in nl80211_send_wiphy()
3284 if (nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, in nl80211_send_wiphy()
3288 if (!is_zero_ether_addr(rdev->wiphy.addr_mask) && in nl80211_send_wiphy()
3293 if (rdev->wiphy.n_addresses > 1) { in nl80211_send_wiphy()
3297 if (!attr) in nl80211_send_wiphy()
3301 if (nla_put(msg, i + 1, ETH_ALEN, in nl80211_send_wiphy()
3311 if (nl80211_send_coalesce(msg, rdev)) in nl80211_send_wiphy()
3314 if ((rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_5_10_MHZ) && in nl80211_send_wiphy()
3319 if (rdev->wiphy.max_ap_assoc_sta && in nl80211_send_wiphy()
3327 if (rdev->wiphy.n_vendor_commands) { in nl80211_send_wiphy()
3333 if (!nested) in nl80211_send_wiphy()
3338 if (nla_put(msg, i + 1, sizeof(*info), info)) in nl80211_send_wiphy()
3344 if (rdev->wiphy.n_vendor_events) { in nl80211_send_wiphy()
3350 if (!nested) in nl80211_send_wiphy()
3355 if (nla_put(msg, i + 1, sizeof(*info), info)) in nl80211_send_wiphy()
3363 if (rdev->wiphy.flags & WIPHY_FLAG_HAS_CHANNEL_SWITCH && in nl80211_send_wiphy()
3368 if (rdev->wiphy.regulatory_flags & REGULATORY_WIPHY_SELF_MANAGED && in nl80211_send_wiphy()
3372 if (rdev->wiphy.max_sched_scan_reqs && in nl80211_send_wiphy()
3377 if (nla_put(msg, NL80211_ATTR_EXT_FEATURES, in nl80211_send_wiphy()
3382 if (rdev->wiphy.bss_param_support) { in nl80211_send_wiphy()
3387 if (!nested) in nl80211_send_wiphy()
3390 if ((parsup & WIPHY_BSS_PARAM_CTS_PROT) && in nl80211_send_wiphy()
3393 if ((parsup & WIPHY_BSS_PARAM_SHORT_PREAMBLE) && in nl80211_send_wiphy()
3396 if ((parsup & WIPHY_BSS_PARAM_SHORT_SLOT_TIME) && in nl80211_send_wiphy()
3399 if ((parsup & WIPHY_BSS_PARAM_BASIC_RATES) && in nl80211_send_wiphy()
3402 if ((parsup & WIPHY_BSS_PARAM_AP_ISOLATE) && in nl80211_send_wiphy()
3405 if ((parsup & WIPHY_BSS_PARAM_HT_OPMODE) && in nl80211_send_wiphy()
3408 if ((parsup & WIPHY_BSS_PARAM_P2P_CTWINDOW) && in nl80211_send_wiphy()
3411 if ((parsup & WIPHY_BSS_PARAM_P2P_OPPPS) && in nl80211_send_wiphy()
3416 if (rdev->wiphy.bss_select_support) { in nl80211_send_wiphy()
3422 if (!nested) in nl80211_send_wiphy()
3427 if ((bss_select_support & 1) && in nl80211_send_wiphy()
3439 if (rdev->wiphy.num_iftype_ext_capab && in nl80211_send_wiphy()
3445 if (!nested) in nl80211_send_wiphy()
3456 if (!nested_ext_capab || in nl80211_send_wiphy()
3467 if (rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_MLO && in nl80211_send_wiphy()
3477 if (state->split) in nl80211_send_wiphy()
3481 if (i < rdev->wiphy.num_iftype_ext_capab) { in nl80211_send_wiphy()
3487 if (nla_put_u32(msg, NL80211_ATTR_BANDS, in nl80211_send_wiphy()
3491 if (wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_send_wiphy()
3497 if (!res && in nl80211_send_wiphy()
3502 if (nla_put_u32(msg, NL80211_ATTR_TXQ_LIMIT, in nl80211_send_wiphy()
3505 if (nla_put_u32(msg, NL80211_ATTR_TXQ_MEMORY_LIMIT, in nl80211_send_wiphy()
3508 if (nla_put_u32(msg, NL80211_ATTR_TXQ_QUANTUM, in nl80211_send_wiphy()
3516 if (nl80211_send_pmsr_capa(rdev, msg)) in nl80211_send_wiphy()
3522 if (rdev->wiphy.akm_suites && in nl80211_send_wiphy()
3528 if (nl80211_put_iftype_akm_suites(rdev, msg)) in nl80211_send_wiphy()
3531 if (nl80211_put_tid_config_support(rdev, msg)) in nl80211_send_wiphy()
3536 if (nl80211_put_sar_specs(rdev, msg)) in nl80211_send_wiphy()
3539 if (nl80211_put_mbssid_support(&rdev->wiphy, msg)) in nl80211_send_wiphy()
3542 if (nla_put_u16(msg, NL80211_ATTR_MAX_NUM_AKM_SUITES, in nl80211_send_wiphy()
3546 if (rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_MLO) in nl80211_send_wiphy()
3549 if (rdev->wiphy.hw_timestamp_max_peers && in nl80211_send_wiphy()
3557 if (nl80211_put_radios(&rdev->wiphy, msg)) in nl80211_send_wiphy()
3563 if (nl80211_put_nan_capa(&rdev->wiphy, msg)) in nl80211_send_wiphy()
3586 if (!tb) in nl80211_dump_wiphy_parse()
3594 if (ret) { in nl80211_dump_wiphy_parse()
3600 if (tb[NL80211_ATTR_WIPHY]) in nl80211_dump_wiphy_parse()
3602 if (tb[NL80211_ATTR_WDEV]) in nl80211_dump_wiphy_parse()
3604 if (tb[NL80211_ATTR_IFINDEX]) { in nl80211_dump_wiphy_parse()
3610 if (!netdev) { in nl80211_dump_wiphy_parse()
3614 if (netdev->ieee80211_ptr) { in nl80211_dump_wiphy_parse()
3634 if (!state) { in nl80211_dump_wiphy()
3636 if (!state) { in nl80211_dump_wiphy()
3642 if (ret) { in nl80211_dump_wiphy()
3651 if (!net_eq(wiphy_net(&rdev->wiphy), sock_net(skb->sk))) in nl80211_dump_wiphy()
3653 if (++idx <= state->start) in nl80211_dump_wiphy()
3655 if (state->filter_wiphy != -1 && in nl80211_dump_wiphy()
3666 if (ret < 0) { in nl80211_dump_wiphy()
3668 * If sending the wiphy data didn't fit (ENOBUFS in nl80211_dump_wiphy()
3680 if ((ret == -ENOBUFS || ret == -EMSGSIZE) && in nl80211_dump_wiphy()
3716 if (!msg) in nl80211_get_wiphy()
3719 if (nl80211_send_wiphy(rdev, NL80211_CMD_NEW_WIPHY, msg, in nl80211_get_wiphy()
3742 if (!tb[NL80211_TXQ_ATTR_AC] || !tb[NL80211_TXQ_ATTR_TXOP] || in parse_txq_params()
3753 if (ac >= NL80211_NUM_ACS) in parse_txq_params()
3774 * operation to set the monitor channel if possible. in nl80211_can_set_dev_channel()
3790 if (!attrs[NL80211_ATTR_WIPHY_FREQ]) { in _nl80211_parse_chandef()
3798 if (attrs[NL80211_ATTR_WIPHY_FREQ_OFFSET]) in _nl80211_parse_chandef()
3810 if (!chandef->chan) { in _nl80211_parse_chandef()
3816 if (cfg80211_chandef_is_s1g(chandef)) in _nl80211_parse_chandef()
3819 if (attrs[NL80211_ATTR_WIPHY_CHANNEL_TYPE]) { in _nl80211_parse_chandef()
3829 if (chandef->chan->band == NL80211_BAND_60GHZ || in _nl80211_parse_chandef()
3835 if (attrs[NL80211_ATTR_CENTER_FREQ1] && in _nl80211_parse_chandef()
3843 if (attrs[NL80211_ATTR_CENTER_FREQ2] && in _nl80211_parse_chandef()
3857 } else if (attrs[NL80211_ATTR_CHANNEL_WIDTH]) { in _nl80211_parse_chandef()
3859 if (attrs[NL80211_ATTR_CENTER_FREQ1]) { in _nl80211_parse_chandef()
3866 if (attrs[NL80211_ATTR_CENTER_FREQ2]) in _nl80211_parse_chandef()
3874 if (attrs[NL80211_ATTR_WIPHY_EDMG_CHANNELS]) { in _nl80211_parse_chandef()
3878 if (attrs[NL80211_ATTR_WIPHY_EDMG_BW_CONFIG]) in _nl80211_parse_chandef()
3886 if (attrs[NL80211_ATTR_PUNCT_BITMAP]) { in _nl80211_parse_chandef()
3890 if (chandef->punctured && in _nl80211_parse_chandef()
3900 if (!cfg80211_chandef_valid(chandef)) { in _nl80211_parse_chandef()
3906 if (!_cfg80211_chandef_usable(&rdev->wiphy, chandef, in _nl80211_parse_chandef()
3914 if ((chandef->width == NL80211_CHAN_WIDTH_5 || in _nl80211_parse_chandef()
3943 if (dev) in __nl80211_set_channel()
3945 if (!nl80211_can_set_dev_channel(wdev)) in __nl80211_set_channel()
3947 if (wdev) in __nl80211_set_channel()
3950 if (link_id < 0) { in __nl80211_set_channel()
3951 if (wdev && wdev->valid_links) in __nl80211_set_channel()
3959 if (result) in __nl80211_set_channel()
3965 if (!cfg80211_reg_can_beacon_relax(&rdev->wiphy, &chandef, in __nl80211_set_channel()
3968 if (wdev->links[link_id].ap.beacon_interval) { in __nl80211_set_channel()
3971 if (!dev || !rdev->ops->set_ap_chanwidth || in __nl80211_set_channel()
3978 if (chandef.chan != cur_chan) in __nl80211_set_channel()
4010 if (result) in __nl80211_set_channel()
4044 if (!rdev->ops->set_wiphy_params) in nl80211_set_wiphy_radio()
4047 if (info->attrs[NL80211_ATTR_WIPHY_RTS_THRESHOLD]) { in nl80211_set_wiphy_radio()
4058 if (result) in nl80211_set_wiphy_radio()
4089 if (info->attrs[NL80211_ATTR_IFINDEX]) { in nl80211_set_wiphy()
4093 if (netdev && netdev->ieee80211_ptr) in nl80211_set_wiphy()
4099 if (!netdev) { in nl80211_set_wiphy()
4102 if (IS_ERR(rdev)) { in nl80211_set_wiphy()
4119 if (info->attrs[NL80211_ATTR_WIPHY_NAME]) in nl80211_set_wiphy()
4124 if (result) in nl80211_set_wiphy()
4127 if (info->attrs[NL80211_ATTR_WIPHY_RADIO_INDEX]) { in nl80211_set_wiphy()
4129 if (rdev->wiphy.n_radio <= 0) in nl80211_set_wiphy()
4134 if (radio_idx >= rdev->wiphy.n_radio) in nl80211_set_wiphy()
4140 if (info->attrs[NL80211_ATTR_WIPHY_TXQ_PARAMS]) { in nl80211_set_wiphy()
4144 if (!rdev->ops->set_txq_params) in nl80211_set_wiphy()
4147 if (!netdev) in nl80211_set_wiphy()
4150 if (netdev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP && in nl80211_set_wiphy()
4154 if (!netif_running(netdev)) in nl80211_set_wiphy()
4165 if (result) in nl80211_set_wiphy()
4169 if (result) in nl80211_set_wiphy()
4175 if (txq_params.link_id >= 0 && in nl80211_set_wiphy()
4179 else if (txq_params.link_id >= 0 && in nl80211_set_wiphy()
4185 if (result) in nl80211_set_wiphy()
4190 if (info->attrs[NL80211_ATTR_WIPHY_FREQ]) { in nl80211_set_wiphy()
4193 if (wdev) { in nl80211_set_wiphy()
4202 if (result) in nl80211_set_wiphy()
4206 if (info->attrs[NL80211_ATTR_WIPHY_TX_POWER_SETTING]) { in nl80211_set_wiphy()
4211 if (!(rdev->wiphy.features & NL80211_FEATURE_VIF_TXPOWER)) in nl80211_set_wiphy()
4214 if (!rdev->ops->set_tx_power) in nl80211_set_wiphy()
4220 if (!info->attrs[NL80211_ATTR_WIPHY_TX_POWER_LEVEL] && in nl80211_set_wiphy()
4224 if (type != NL80211_TX_POWER_AUTOMATIC) { in nl80211_set_wiphy()
4231 if (result) in nl80211_set_wiphy()
4235 if (info->attrs[NL80211_ATTR_WIPHY_ANTENNA_TX] && in nl80211_set_wiphy()
4239 if ((!rdev->wiphy.available_antennas_tx && in nl80211_set_wiphy()
4249 if ((~tx_ant && (tx_ant & ~rdev->wiphy.available_antennas_tx)) || in nl80211_set_wiphy()
4257 if (result) in nl80211_set_wiphy()
4263 if (info->attrs[NL80211_ATTR_WIPHY_RETRY_SHORT]) { in nl80211_set_wiphy()
4270 if (info->attrs[NL80211_ATTR_WIPHY_RETRY_LONG]) { in nl80211_set_wiphy()
4277 if (info->attrs[NL80211_ATTR_WIPHY_FRAG_THRESHOLD]) { in nl80211_set_wiphy()
4280 if (frag_threshold < 256) in nl80211_set_wiphy()
4283 if (frag_threshold != (u32) -1) { in nl80211_set_wiphy()
4295 if (info->attrs[NL80211_ATTR_WIPHY_RTS_THRESHOLD]) { in nl80211_set_wiphy()
4301 if (info->attrs[NL80211_ATTR_WIPHY_COVERAGE_CLASS]) { in nl80211_set_wiphy()
4302 if (info->attrs[NL80211_ATTR_WIPHY_DYN_ACK]) in nl80211_set_wiphy()
4310 if (info->attrs[NL80211_ATTR_WIPHY_DYN_ACK]) { in nl80211_set_wiphy()
4311 if (!(rdev->wiphy.features & NL80211_FEATURE_ACKTO_ESTIMATION)) in nl80211_set_wiphy()
4317 if (info->attrs[NL80211_ATTR_TXQ_LIMIT]) { in nl80211_set_wiphy()
4318 if (!wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_set_wiphy()
4327 if (info->attrs[NL80211_ATTR_TXQ_MEMORY_LIMIT]) { in nl80211_set_wiphy()
4328 if (!wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_set_wiphy()
4337 if (info->attrs[NL80211_ATTR_TXQ_QUANTUM]) { in nl80211_set_wiphy()
4338 if (!wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_set_wiphy()
4347 if (changed) { in nl80211_set_wiphy()
4354 if (!rdev->ops->set_wiphy_params) in nl80211_set_wiphy()
4357 if (rdev->wiphy.n_radio) { in nl80211_set_wiphy()
4361 if (!old_radio_rts_threshold) in nl80211_set_wiphy()
4369 if (old_radio_rts_threshold) { in nl80211_set_wiphy()
4379 if (changed & WIPHY_PARAM_RETRY_SHORT) in nl80211_set_wiphy()
4381 if (changed & WIPHY_PARAM_RETRY_LONG) in nl80211_set_wiphy()
4383 if (changed & WIPHY_PARAM_FRAG_THRESHOLD) in nl80211_set_wiphy()
4385 if ((changed & WIPHY_PARAM_RTS_THRESHOLD) && in nl80211_set_wiphy()
4392 if (changed & WIPHY_PARAM_COVERAGE_CLASS) in nl80211_set_wiphy()
4394 if (changed & WIPHY_PARAM_TXQ_LIMIT) in nl80211_set_wiphy()
4396 if (changed & WIPHY_PARAM_TXQ_MEMORY_LIMIT) in nl80211_set_wiphy()
4398 if (changed & WIPHY_PARAM_TXQ_QUANTUM) in nl80211_set_wiphy()
4402 if (result) { in nl80211_set_wiphy()
4407 if (old_radio_rts_threshold) { in nl80211_set_wiphy()
4427 if (WARN_ON(!cfg80211_chandef_valid(chandef))) in nl80211_send_chandef()
4430 if (nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ, in nl80211_send_chandef()
4433 if (nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ_OFFSET, in nl80211_send_chandef()
4440 if (nla_put_u32(msg, NL80211_ATTR_WIPHY_CHANNEL_TYPE, in nl80211_send_chandef()
4447 if (nla_put_u32(msg, NL80211_ATTR_CHANNEL_WIDTH, chandef->width)) in nl80211_send_chandef()
4449 if (nla_put_u32(msg, NL80211_ATTR_CENTER_FREQ1, chandef->center_freq1)) in nl80211_send_chandef()
4451 if (chandef->center_freq2 && in nl80211_send_chandef()
4454 if (chandef->punctured && in nl80211_send_chandef()
4457 if (chandef->s1g_primary_2mhz && in nl80211_send_chandef()
4480 if (!hdr) in nl80211_send_iface()
4483 if (dev && in nl80211_send_iface()
4488 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_iface()
4500 if (rdev->ops->get_channel && !wdev->valid_links) { in nl80211_send_iface()
4505 if (ret == 0 && nl80211_send_chandef(msg, &chandef)) in nl80211_send_iface()
4509 if (rdev->ops->get_tx_power && !wdev->valid_links) { in nl80211_send_iface()
4513 if (ret == 0 && in nl80211_send_iface()
4522 if (wdev->u.ap.ssid_len && in nl80211_send_iface()
4529 if (wdev->u.client.ssid_len && in nl80211_send_iface()
4535 if (wdev->u.ibss.ssid_len && in nl80211_send_iface()
4545 if (rdev->ops->get_txq_stats) { in nl80211_send_iface()
4549 if (ret == 0 && in nl80211_send_iface()
4555 if (wdev->valid_links) { in nl80211_send_iface()
4560 if (!links) in nl80211_send_iface()
4568 if (!link) in nl80211_send_iface()
4571 if (nla_put_u8(msg, NL80211_ATTR_MLO_LINK_ID, link_id)) in nl80211_send_iface()
4573 if (nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, in nl80211_send_iface()
4578 if (ret == 0 && nl80211_send_chandef(msg, &chandef)) in nl80211_send_iface()
4581 if (rdev->ops->get_tx_power) { in nl80211_send_iface()
4585 if (ret == 0 && in nl80211_send_iface()
4616 if (!cb->args[2]) { in nl80211_dump_interface()
4622 if (ret) in nl80211_dump_interface()
4628 * if filtering, set cb->args[2] to +1 since 0 is the default in nl80211_dump_interface()
4631 if (filter_wiphy >= 0) in nl80211_dump_interface()
4635 } else if (cb->args[2] > 0) { in nl80211_dump_interface()
4640 if (!net_eq(wiphy_net(&rdev->wiphy), sock_net(skb->sk))) in nl80211_dump_interface()
4642 if (wp_idx < wp_start) { in nl80211_dump_interface()
4647 if (filter_wiphy >= 0 && filter_wiphy != rdev->wiphy_idx) in nl80211_dump_interface()
4655 if (if_idx < if_start) { in nl80211_dump_interface()
4660 if (nl80211_send_iface(skb, NETLINK_CB(cb->skb).portid, in nl80211_dump_interface()
4690 if (!msg) in nl80211_get_interface()
4693 if (nl80211_send_iface(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_interface()
4719 if (!nla) in parse_monitor_flags()
4722 if (nla_parse_nested_deprecated(flags, NL80211_MNTR_FLAG_MAX, nla, mntr_flags_policy, NULL)) in parse_monitor_flags()
4726 if (flags[flag]) in parse_monitor_flags()
4730 if (*mntrflags & MONITOR_FLAG_COOK_FRAMES && in parse_monitor_flags()
4747 if (info->attrs[NL80211_ATTR_MNTR_FLAGS]) { in nl80211_parse_mon_options()
4748 if (type != NL80211_IFTYPE_MONITOR) in nl80211_parse_mon_options()
4753 if (err) in nl80211_parse_mon_options()
4760 if (params->flags & MONITOR_FLAG_COOK_FRAMES) in nl80211_parse_mon_options()
4763 if (params->flags & MONITOR_FLAG_ACTIVE && in nl80211_parse_mon_options()
4767 if (info->attrs[NL80211_ATTR_MU_MIMO_GROUP_DATA]) { in nl80211_parse_mon_options()
4771 if (type != NL80211_IFTYPE_MONITOR) in nl80211_parse_mon_options()
4774 if (!wiphy_ext_feature_isset(&rdev->wiphy, cap_flag)) in nl80211_parse_mon_options()
4781 if ((mumimo_groups[0] & BIT(0)) || in nl80211_parse_mon_options()
4789 if (info->attrs[NL80211_ATTR_MU_MIMO_FOLLOW_MAC_ADDR]) { in nl80211_parse_mon_options()
4792 if (type != NL80211_IFTYPE_MONITOR) in nl80211_parse_mon_options()
4795 if (!wiphy_ext_feature_isset(&rdev->wiphy, cap_flag)) in nl80211_parse_mon_options()
4810 if (!use_4addr) { in nl80211_valid_4addr()
4811 if (netdev && netif_is_bridge_port(netdev)) in nl80211_valid_4addr()
4818 if (rdev->wiphy.flags & WIPHY_FLAG_4ADDR_AP) in nl80211_valid_4addr()
4822 if (rdev->wiphy.flags & WIPHY_FLAG_4ADDR_STATION) in nl80211_valid_4addr()
4839 if (!attr) { in nl80211_parse_vif_radio_mask()
4846 if (mask & ~allowed) in nl80211_parse_vif_radio_mask()
4848 if (!mask) in nl80211_parse_vif_radio_mask()
4870 if (info->attrs[NL80211_ATTR_IFTYPE]) { in nl80211_set_interface()
4872 if (otype != ntype) in nl80211_set_interface()
4876 if (info->attrs[NL80211_ATTR_MESH_ID]) { in nl80211_set_interface()
4877 if (ntype != NL80211_IFTYPE_MESH_POINT) in nl80211_set_interface()
4879 if (otype != NL80211_IFTYPE_MESH_POINT) in nl80211_set_interface()
4881 if (netif_running(dev)) in nl80211_set_interface()
4891 if (info->attrs[NL80211_ATTR_4ADDR]) { in nl80211_set_interface()
4895 if (err) in nl80211_set_interface()
4902 if (err < 0) in nl80211_set_interface()
4904 if (err > 0) in nl80211_set_interface()
4908 if (err < 0) in nl80211_set_interface()
4910 if (err && netif_running(dev)) in nl80211_set_interface()
4913 if (change) in nl80211_set_interface()
4918 if (!err && params.use_4addr != -1) in nl80211_set_interface()
4921 if (radio_mask) in nl80211_set_interface()
4924 if (change && !err) in nl80211_set_interface()
4942 if (!info->attrs[NL80211_ATTR_IFNAME]) in _nl80211_new_interface()
4945 if (info->attrs[NL80211_ATTR_IFTYPE]) in _nl80211_new_interface()
4948 if (!rdev->ops->add_virtual_intf) in _nl80211_new_interface()
4951 if ((type == NL80211_IFTYPE_P2P_DEVICE || type == NL80211_IFTYPE_NAN || in _nl80211_new_interface()
4956 if (!is_valid_ether_addr(params.macaddr)) in _nl80211_new_interface()
4960 if (info->attrs[NL80211_ATTR_4ADDR]) { in _nl80211_new_interface()
4963 if (err) in _nl80211_new_interface()
4967 if (!cfg80211_iftype_allowed(&rdev->wiphy, type, params.use_4addr, 0)) in _nl80211_new_interface()
4971 if (err < 0) in _nl80211_new_interface()
4975 if (err < 0) in _nl80211_new_interface()
4979 if (!msg) in _nl80211_new_interface()
4985 if (WARN_ON(!wdev)) { in _nl80211_new_interface()
4988 } else if (IS_ERR(wdev)) { in _nl80211_new_interface()
4993 if (info->attrs[NL80211_ATTR_SOCKET_OWNER]) in _nl80211_new_interface()
4998 if (!info->attrs[NL80211_ATTR_MESH_ID]) in _nl80211_new_interface()
5019 if (radio_mask) in _nl80211_new_interface()
5022 if (nl80211_send_iface(msg, info->snd_portid, info->snd_seq, 0, in _nl80211_new_interface()
5048 if (!rdev->ops->del_virtual_intf) in nl80211_del_interface()
5057 * but don't know if we get there from here or from some other in nl80211_del_interface()
5063 * If we remove a wireless device without a netdev then clear in nl80211_del_interface()
5065 * to check if it needs to do dev_put(). Otherwise it crashes in nl80211_del_interface()
5069 if (!wdev->netdev) in nl80211_del_interface()
5087 if (!info->attrs[NL80211_ATTR_NOACK_MAP]) in nl80211_set_noack_map()
5090 if (!rdev->ops->set_noack_map) in nl80211_set_noack_map()
5102 if (pairwise) { in nl80211_validate_key_link_id()
5103 if (link_id != -1) { in nl80211_validate_key_link_id()
5112 if (wdev->valid_links) { in nl80211_validate_key_link_id()
5113 if (link_id == -1) { in nl80211_validate_key_link_id()
5118 if (!(wdev->valid_links & BIT(link_id))) { in nl80211_validate_key_link_id()
5122 } else if (link_id != -1) { in nl80211_validate_key_link_id()
5141 if ((params->seq && in get_key_callback()
5150 if (!key) in get_key_callback()
5153 if ((params->seq && in get_key_callback()
5161 if (nla_put_u8(cookie->msg, NL80211_KEY_IDX, cookie->idx)) in get_key_callback()
5187 if (wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_get_key()
5191 if ((wdev->iftype == NL80211_IFTYPE_STATION || in nl80211_get_key()
5197 if (info->attrs[NL80211_ATTR_KEY_IDX]) { in nl80211_get_key()
5200 if (key_idx >= 6 && key_idx <= 7 && !bigtk_support) { in nl80211_get_key()
5206 if (info->attrs[NL80211_ATTR_MAC]) in nl80211_get_key()
5210 if (info->attrs[NL80211_ATTR_KEY_TYPE]) { in nl80211_get_key()
5213 if (kt != NL80211_KEYTYPE_GROUP && in nl80211_get_key()
5219 if (!rdev->ops->get_key) in nl80211_get_key()
5222 if (!pairwise && mac_addr && !(rdev->wiphy.flags & WIPHY_FLAG_IBSS_RSN)) in nl80211_get_key()
5226 if (!msg) in nl80211_get_key()
5231 if (!hdr) in nl80211_get_key()
5237 if ((wdev->netdev && in nl80211_get_key()
5243 if (mac_addr && in nl80211_get_key()
5248 if (err) in nl80211_get_key()
5254 if (err) in nl80211_get_key()
5257 if (cookie.error) in nl80211_get_key()
5279 if (err) in nl80211_set_key()
5282 if (key.idx < 0) in nl80211_set_key()
5288 if (!key.def && !key.defmgmt && !key.defbeacon && in nl80211_set_key()
5292 if (key.def) { in nl80211_set_key()
5293 if (!rdev->ops->set_default_key) in nl80211_set_key()
5296 if (!wdev->netdev) in nl80211_set_key()
5300 if (err) in nl80211_set_key()
5304 if (err) in nl80211_set_key()
5310 if (err) in nl80211_set_key()
5317 } else if (key.defmgmt) { in nl80211_set_key()
5318 if (key.def_uni || !key.def_multi) in nl80211_set_key()
5321 if (!rdev->ops->set_default_mgmt_key) in nl80211_set_key()
5325 if (err) in nl80211_set_key()
5329 if (err) in nl80211_set_key()
5333 if (err) in nl80211_set_key()
5340 } else if (key.defbeacon) { in nl80211_set_key()
5341 if (key.def_uni || !key.def_multi) in nl80211_set_key()
5344 if (!rdev->ops->set_default_beacon_key) in nl80211_set_key()
5348 if (err) in nl80211_set_key()
5352 if (err) in nl80211_set_key()
5357 } else if (key.p.mode == NL80211_KEY_SET_TX && in nl80211_set_key()
5362 if (info->attrs[NL80211_ATTR_MAC]) in nl80211_set_key()
5365 if (!mac_addr || key.idx < 0 || key.idx > 1) in nl80211_set_key()
5369 if (err) in nl80211_set_key()
5390 if (err) in nl80211_new_key()
5393 if (!key.p.key) { in nl80211_new_key()
5398 if (info->attrs[NL80211_ATTR_MAC]) in nl80211_new_key()
5401 if (key.type == -1) { in nl80211_new_key()
5402 if (mac_addr) in nl80211_new_key()
5409 if (key.type != NL80211_KEYTYPE_PAIRWISE && in nl80211_new_key()
5415 if (key.type == NL80211_KEYTYPE_GROUP && in nl80211_new_key()
5419 if (!rdev->ops->add_key) in nl80211_new_key()
5422 if (cfg80211_validate_key_settings(rdev, &key.p, key.idx, in nl80211_new_key()
5430 if (err) in nl80211_new_key()
5433 if (!err) in nl80211_new_key()
5437 if (!err) { in nl80211_new_key()
5441 if (err) in nl80211_new_key()
5458 if (err) in nl80211_del_key()
5461 if (info->attrs[NL80211_ATTR_MAC]) in nl80211_del_key()
5464 if (key.type == -1) { in nl80211_del_key()
5465 if (mac_addr) in nl80211_del_key()
5472 if (key.type != NL80211_KEYTYPE_PAIRWISE && in nl80211_del_key()
5476 if (!cfg80211_valid_key_idx(rdev, key.idx, in nl80211_del_key()
5480 if (!rdev->ops->del_key) in nl80211_del_key()
5485 if (key.type == NL80211_KEYTYPE_GROUP && mac_addr && in nl80211_del_key()
5489 if (!err) in nl80211_del_key()
5493 if (!err) in nl80211_del_key()
5499 if (!err) { in nl80211_del_key()
5500 if (key.idx == wdev->wext.default_key) in nl80211_del_key()
5502 else if (key.idx == wdev->wext.default_mgmt_key) in nl80211_del_key()
5517 if (nla_len(attr) != ETH_ALEN) in validate_acl_mac_addrs()
5539 if (!wiphy->max_acl_mac_addrs) in parse_acl_data()
5542 if (!info->attrs[NL80211_ATTR_ACL_POLICY]) in parse_acl_data()
5546 if (acl_policy != NL80211_ACL_POLICY_ACCEPT_UNLESS_LISTED && in parse_acl_data()
5550 if (!info->attrs[NL80211_ATTR_MAC_ADDRS]) in parse_acl_data()
5554 if (n_entries < 0) in parse_acl_data()
5557 if (n_entries > wiphy->max_acl_mac_addrs) in parse_acl_data()
5561 if (!acl) in parse_acl_data()
5581 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP && in nl80211_set_mac_acl()
5585 if (!dev->ieee80211_ptr->links[0].ap.beacon_interval) in nl80211_set_mac_acl()
5589 if (IS_ERR(acl)) in nl80211_set_mac_acl()
5612 if (rate == srate->bitrate) { in rateset_to_mask()
5617 if (ridx == sband->n_bitrates) in rateset_to_mask()
5639 if ((ridx < 0) || (ridx >= IEEE80211_HT_MCS_MASK_LEN)) in ht_rateset_to_mask()
5644 if (sband->ht_cap.mcs.rx_mask[ridx] & rbit) in ht_rateset_to_mask()
5695 if (!sband->vht_cap.vht_supported) in vht_set_mcs_mask()
5704 if ((tx_mcs_mask[i] & txrate->mcs[i]) == txrate->mcs[i]) in vht_set_mcs_mask()
5750 if (!chandef) { in he_get_txmcsmap()
5786 if (!he_cap) in he_set_mcs_mask()
5797 if ((tx_mcs_mask[i] & txrate->mcs[i]) == txrate->mcs[i]) in he_set_mcs_mask()
5815 if (mcs_nss_len == 4) { in eht_build_mcs_mask()
5843 if (wdev->valid_links) in eht_build_mcs_mask()
5873 if (eht_cap->eht_cap_elem.phy_cap_info[6] & in eht_build_mcs_mask()
5881 if (!mcs_7) in eht_build_mcs_mask()
5886 if (!mcs_9) in eht_build_mcs_mask()
5891 if (!mcs_11) in eht_build_mcs_mask()
5896 if (!mcs_13) in eht_build_mcs_mask()
5914 if (!he_cap) in eht_set_mcs_mask()
5918 if (!eht_cap) in eht_set_mcs_mask()
5922 if (txrate->mcs[0] & 0x4000) { in eht_set_mcs_mask()
5923 if (sband->band != NL80211_BAND_6GHZ) in eht_set_mcs_mask()
5926 if (!(eht_cap->eht_cap_elem.phy_cap_info[6] & in eht_set_mcs_mask()
5936 if (mcs_nss_len == 3) { in eht_set_mcs_mask()
5955 if ((tx_mcs_mask[i] & txrate->mcs[i]) == txrate->mcs[i]) in eht_set_mcs_mask()
5987 if (!default_all_enabled) in nl80211_parse_tx_bitrate_mask()
5992 if (!sband) in nl80211_parse_tx_bitrate_mask()
6000 if (sband->vht_cap.vht_supported) { in nl80211_parse_tx_bitrate_mask()
6006 if (!he_cap) in nl80211_parse_tx_bitrate_mask()
6016 if (!eht_cap) in nl80211_parse_tx_bitrate_mask()
6031 /* if no rates are given set it back to the defaults */ in nl80211_parse_tx_bitrate_mask()
6032 if (!attrs[attr]) in nl80211_parse_tx_bitrate_mask()
6043 if (band < 0 || band >= NUM_NL80211_BANDS) in nl80211_parse_tx_bitrate_mask()
6046 if (sband == NULL) in nl80211_parse_tx_bitrate_mask()
6052 if (err) in nl80211_parse_tx_bitrate_mask()
6054 if (tb[NL80211_TXRATE_LEGACY]) { in nl80211_parse_tx_bitrate_mask()
6059 if ((mask->control[band].legacy == 0) && in nl80211_parse_tx_bitrate_mask()
6063 if (tb[NL80211_TXRATE_HT]) { in nl80211_parse_tx_bitrate_mask()
6064 if (!ht_rateset_to_mask( in nl80211_parse_tx_bitrate_mask()
6072 if (tb[NL80211_TXRATE_VHT]) { in nl80211_parse_tx_bitrate_mask()
6073 if (!vht_set_mcs_mask( in nl80211_parse_tx_bitrate_mask()
6080 if (tb[NL80211_TXRATE_GI]) { in nl80211_parse_tx_bitrate_mask()
6083 if (mask->control[band].gi > NL80211_TXRATE_FORCE_LGI) in nl80211_parse_tx_bitrate_mask()
6086 if (tb[NL80211_TXRATE_HE] && in nl80211_parse_tx_bitrate_mask()
6093 if (tb[NL80211_TXRATE_HE_GI]) in nl80211_parse_tx_bitrate_mask()
6096 if (tb[NL80211_TXRATE_HE_LTF]) in nl80211_parse_tx_bitrate_mask()
6100 if (tb[NL80211_TXRATE_EHT] && in nl80211_parse_tx_bitrate_mask()
6106 if (tb[NL80211_TXRATE_EHT_GI]) in nl80211_parse_tx_bitrate_mask()
6109 if (tb[NL80211_TXRATE_EHT_LTF]) in nl80211_parse_tx_bitrate_mask()
6113 if (mask->control[band].legacy == 0) { in nl80211_parse_tx_bitrate_mask()
6114 /* don't allow empty legacy rates if HT, VHT, HE or EHT in nl80211_parse_tx_bitrate_mask()
6117 if (!(rdev->wiphy.bands[band]->ht_cap.ht_supported || in nl80211_parse_tx_bitrate_mask()
6124 if (mask->control[band].ht_mcs[i]) in nl80211_parse_tx_bitrate_mask()
6128 if (mask->control[band].vht_mcs[i]) in nl80211_parse_tx_bitrate_mask()
6132 if (mask->control[band].he_mcs[i]) in nl80211_parse_tx_bitrate_mask()
6136 if (mask->control[band].eht_mcs[i]) in nl80211_parse_tx_bitrate_mask()
6156 if (hweight32(rate) > 1) in validate_beacon_tx_rate()
6161 if (hweight8(beacon_rate->control[band].ht_mcs[i]) > 1) { in validate_beacon_tx_rate()
6163 } else if (beacon_rate->control[band].ht_mcs[i]) { in validate_beacon_tx_rate()
6165 if (count_ht > 1) in validate_beacon_tx_rate()
6168 if (count_ht && rate) in validate_beacon_tx_rate()
6174 if (hweight16(beacon_rate->control[band].vht_mcs[i]) > 1) { in validate_beacon_tx_rate()
6176 } else if (beacon_rate->control[band].vht_mcs[i]) { in validate_beacon_tx_rate()
6178 if (count_vht > 1) in validate_beacon_tx_rate()
6181 if (count_vht && rate) in validate_beacon_tx_rate()
6187 if (hweight16(beacon_rate->control[band].he_mcs[i]) > 1) { in validate_beacon_tx_rate()
6189 } else if (beacon_rate->control[band].he_mcs[i]) { in validate_beacon_tx_rate()
6191 if (count_he > 1) in validate_beacon_tx_rate()
6194 if (count_he && rate) in validate_beacon_tx_rate()
6200 if (hweight16(beacon_rate->control[band].eht_mcs[i]) > 1) { in validate_beacon_tx_rate()
6202 } else if (beacon_rate->control[band].eht_mcs[i]) { in validate_beacon_tx_rate()
6204 if (count_eht > 1) in validate_beacon_tx_rate()
6207 if (count_eht && rate) in validate_beacon_tx_rate()
6211 if ((count_ht && count_vht && count_he && count_eht) || in validate_beacon_tx_rate()
6215 if (rate && in validate_beacon_tx_rate()
6219 if (count_ht && in validate_beacon_tx_rate()
6223 if (count_vht && in validate_beacon_tx_rate()
6227 if (count_he && in validate_beacon_tx_rate()
6232 if (count_eht && in validate_beacon_tx_rate()
6250 if (!wiphy->mbssid_max_interfaces) in nl80211_parse_mbssid_config()
6253 if (nla_parse_nested(tb, NL80211_MBSSID_CONFIG_ATTR_MAX, attrs, NULL, in nl80211_parse_mbssid_config()
6259 if (config->ema) { in nl80211_parse_mbssid_config()
6260 if (!wiphy->ema_max_profile_periodicity) in nl80211_parse_mbssid_config()
6263 if (num_elems > wiphy->ema_max_profile_periodicity) in nl80211_parse_mbssid_config()
6268 if (config->index >= wiphy->mbssid_max_interfaces || in nl80211_parse_mbssid_config()
6272 if (tb[NL80211_MBSSID_CONFIG_ATTR_TX_LINK_ID]) in nl80211_parse_mbssid_config()
6275 if (tb[NL80211_MBSSID_CONFIG_ATTR_TX_IFINDEX]) { in nl80211_parse_mbssid_config()
6279 if ((!config->index && tx_ifindex != dev->ifindex) || in nl80211_parse_mbssid_config()
6283 if (tx_ifindex != dev->ifindex) { in nl80211_parse_mbssid_config()
6287 if (!tx_netdev || !tx_netdev->ieee80211_ptr || in nl80211_parse_mbssid_config()
6298 if (config->tx_wdev->valid_links) { in nl80211_parse_mbssid_config()
6299 if (tx_link_id == -1 || in nl80211_parse_mbssid_config()
6306 if (tx_link_id >= 0 && tx_link_id != link_id) in nl80211_parse_mbssid_config()
6311 } else if (!config->index) { in nl80211_parse_mbssid_config()
6312 if (tx_link_id >= 0 && tx_link_id != link_id) in nl80211_parse_mbssid_config()
6331 if (!wiphy->mbssid_max_interfaces) in nl80211_parse_mbssid_elems()
6335 if (num_elems >= 255) in nl80211_parse_mbssid_elems()
6341 if (!elems) in nl80211_parse_mbssid_elems()
6366 if (ret) in nl80211_parse_rnr_elems()
6373 if (!elems) in nl80211_parse_rnr_elems()
6393 if (err) in nl80211_parse_he_bss_color()
6396 if (!tb[NL80211_HE_BSS_COLOR_ATTR_COLOR]) in nl80211_parse_he_bss_color()
6421 if (attrs[NL80211_ATTR_BEACON_HEAD]) { in nl80211_parse_beacon()
6424 if (!bcn->head_len) in nl80211_parse_beacon()
6429 if (attrs[NL80211_ATTR_BEACON_TAIL]) { in nl80211_parse_beacon()
6435 if (!haveinfo) in nl80211_parse_beacon()
6438 if (attrs[NL80211_ATTR_IE]) { in nl80211_parse_beacon()
6443 if (attrs[NL80211_ATTR_IE_PROBE_RESP]) { in nl80211_parse_beacon()
6450 if (attrs[NL80211_ATTR_IE_ASSOC_RESP]) { in nl80211_parse_beacon()
6457 if (attrs[NL80211_ATTR_PROBE_RESP]) { in nl80211_parse_beacon()
6462 if (attrs[NL80211_ATTR_FTM_RESPONDER]) { in nl80211_parse_beacon()
6469 if (err) in nl80211_parse_beacon()
6472 if (tb[NL80211_FTM_RESP_ATTR_ENABLED] && in nl80211_parse_beacon()
6479 if (tb[NL80211_FTM_RESP_ATTR_LCI]) { in nl80211_parse_beacon()
6484 if (tb[NL80211_FTM_RESP_ATTR_CIVICLOC]) { in nl80211_parse_beacon()
6492 if (attrs[NL80211_ATTR_HE_BSS_COLOR]) { in nl80211_parse_beacon()
6495 if (err) in nl80211_parse_beacon()
6500 if (attrs[NL80211_ATTR_MBSSID_ELEMS]) { in nl80211_parse_beacon()
6505 if (IS_ERR(mbssid)) in nl80211_parse_beacon()
6510 if (bcn->mbssid_ies && attrs[NL80211_ATTR_EMA_RNR_ELEMS]) { in nl80211_parse_beacon()
6516 if (IS_ERR(rnr)) in nl80211_parse_beacon()
6519 if (rnr && rnr->cnt < bcn->mbssid_ies->cnt) in nl80211_parse_beacon()
6537 if (err) in nl80211_parse_he_obss_pd()
6540 if (!tb[NL80211_HE_OBSS_PD_ATTR_SR_CTRL]) in nl80211_parse_he_obss_pd()
6545 if (tb[NL80211_HE_OBSS_PD_ATTR_MIN_OFFSET]) in nl80211_parse_he_obss_pd()
6548 if (tb[NL80211_HE_OBSS_PD_ATTR_MAX_OFFSET]) in nl80211_parse_he_obss_pd()
6551 if (tb[NL80211_HE_OBSS_PD_ATTR_NON_SRG_MAX_OFFSET]) in nl80211_parse_he_obss_pd()
6555 if (he_obss_pd->min_offset > he_obss_pd->max_offset) in nl80211_parse_he_obss_pd()
6558 if (tb[NL80211_HE_OBSS_PD_ATTR_BSS_COLOR_BITMAP]) in nl80211_parse_he_obss_pd()
6563 if (tb[NL80211_HE_OBSS_PD_ATTR_PARTIAL_BSSID_BITMAP]) in nl80211_parse_he_obss_pd()
6580 if (!wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_parse_fils_discovery()
6586 if (ret) in nl80211_parse_fils_discovery()
6589 if (!tb[NL80211_FILS_DISCOVERY_ATTR_INT_MIN] && in nl80211_parse_fils_discovery()
6596 if (!tb[NL80211_FILS_DISCOVERY_ATTR_INT_MIN] || in nl80211_parse_fils_discovery()
6617 if (!wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_parse_unsol_bcast_probe_resp()
6623 if (ret) in nl80211_parse_unsol_bcast_probe_resp()
6626 if (!tb[NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_INT] && in nl80211_parse_unsol_bcast_probe_resp()
6632 if (!tb[NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_INT] || in nl80211_parse_unsol_bcast_probe_resp()
6648 if (!rates) in nl80211_check_ap_rate_selectors()
6652 if (rates->data[i] == BSS_MEMBERSHIP_SELECTOR_HT_PHY) in nl80211_check_ap_rate_selectors()
6654 if (rates->data[i] == BSS_MEMBERSHIP_SELECTOR_VHT_PHY) in nl80211_check_ap_rate_selectors()
6656 if (rates->data[i] == BSS_MEMBERSHIP_SELECTOR_HE_PHY) in nl80211_check_ap_rate_selectors()
6658 if (rates->data[i] == BSS_MEMBERSHIP_SELECTOR_SAE_H2E) in nl80211_check_ap_rate_selectors()
6683 if (cap && cap->datalen >= sizeof(*params->ht_cap)) in nl80211_calculate_ap_params()
6686 if (cap && cap->datalen >= sizeof(*params->vht_cap)) in nl80211_calculate_ap_params()
6689 if (cap && cap->datalen >= sizeof(*params->he_cap) + 1) in nl80211_calculate_ap_params()
6692 if (cap && cap->datalen >= sizeof(*params->he_oper) + 1) in nl80211_calculate_ap_params()
6695 if (cap) { in nl80211_calculate_ap_params()
6696 if (!cap->datalen) in nl80211_calculate_ap_params()
6699 if (!ieee80211_eht_capa_size_ok((const u8 *)params->he_cap, in nl80211_calculate_ap_params()
6705 if (cap) { in nl80211_calculate_ap_params()
6706 if (!cap->datalen) in nl80211_calculate_ap_params()
6709 if (!ieee80211_eht_oper_size_ok((const u8 *)params->eht_oper, in nl80211_calculate_ap_params()
6723 if (wdev->iftype != NL80211_IFTYPE_AP && in nl80211_get_ap_channel()
6727 if (!wdev->u.ap.preset_chandef.chan) in nl80211_get_ap_channel()
6741 if (auth_type > NL80211_AUTHTYPE_MAX) in nl80211_valid_auth_type()
6746 if (!(rdev->wiphy.features & NL80211_FEATURE_SAE) && in nl80211_valid_auth_type()
6749 if (!wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_valid_auth_type()
6755 if (!wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_valid_auth_type()
6759 if (!wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_valid_auth_type()
6765 if (!(rdev->wiphy.features & NL80211_FEATURE_SAE) && in nl80211_valid_auth_type()
6772 if (auth_type == NL80211_AUTHTYPE_FILS_SK_PFS || in nl80211_valid_auth_type()
6775 if (!wiphy_ext_feature_isset( in nl80211_valid_auth_type()
6780 if (!wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_valid_auth_type()
6784 if (!wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_valid_auth_type()
6790 if (!wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_valid_auth_type()
6795 if (auth_type == NL80211_AUTHTYPE_FILS_SK || in nl80211_valid_auth_type()
6814 if (!msg) in nl80211_send_ap_started()
6818 if (!hdr) in nl80211_send_ap_started()
6821 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_ap_started()
6845 if ((params->he_cap || params->he_oper) && in nl80211_validate_ap_phy_operation()
6849 if ((params->eht_cap || params->eht_oper) && in nl80211_validate_ap_phy_operation()
6853 if (params->uhr_oper && (channel->flags & IEEE80211_CHAN_NO_UHR)) in nl80211_validate_ap_phy_operation()
6867 if (!rdev->wiphy.bands[NL80211_BAND_S1GHZ]) in nl80211_parse_s1g_short_beacon()
6872 if (ret) in nl80211_parse_s1g_short_beacon()
6876 if (!tb[NL80211_S1G_SHORT_BEACON_ATTR_HEAD]) in nl80211_parse_s1g_short_beacon()
6883 if (tb[NL80211_S1G_SHORT_BEACON_ATTR_TAIL]) { in nl80211_parse_s1g_short_beacon()
6904 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP && in nl80211_start_ap()
6908 if (!rdev->ops->start_ap) in nl80211_start_ap()
6911 if (wdev->links[link_id].cac_started) in nl80211_start_ap()
6914 if (wdev->links[link_id].ap.beacon_interval) in nl80211_start_ap()
6918 if (!info->attrs[NL80211_ATTR_BEACON_INTERVAL] || in nl80211_start_ap()
6923 if (info->attrs[NL80211_ATTR_SMPS_MODE] && in nl80211_start_ap()
6928 if (!params) in nl80211_start_ap()
6933 if (err) in nl80211_start_ap()
6943 if (err) in nl80211_start_ap()
6953 if (info->attrs[NL80211_ATTR_SSID]) { in nl80211_start_ap()
6957 if (params->ssid_len == 0) { in nl80211_start_ap()
6962 if (wdev->u.ap.ssid_len && in nl80211_start_ap()
6969 } else if (wdev->valid_links) { in nl80211_start_ap()
6975 if (info->attrs[NL80211_ATTR_HIDDEN_SSID]) in nl80211_start_ap()
6981 if (info->attrs[NL80211_ATTR_AUTH_TYPE]) { in nl80211_start_ap()
6984 if (!nl80211_valid_auth_type(rdev, params->auth_type, in nl80211_start_ap()
6994 if (err) in nl80211_start_ap()
6997 if (info->attrs[NL80211_ATTR_INACTIVITY_TIMEOUT]) { in nl80211_start_ap()
6998 if (!(rdev->wiphy.features & NL80211_FEATURE_INACTIVITY_TIMER)) { in nl80211_start_ap()
7006 if (info->attrs[NL80211_ATTR_P2P_CTWINDOW]) { in nl80211_start_ap()
7007 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_GO) { in nl80211_start_ap()
7013 if (params->p2p_ctwindow != 0 && in nl80211_start_ap()
7020 if (info->attrs[NL80211_ATTR_P2P_OPPPS]) { in nl80211_start_ap()
7023 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_GO) { in nl80211_start_ap()
7029 if (params->p2p_opp_ps != 0 && in nl80211_start_ap()
7036 if (info->attrs[NL80211_ATTR_WIPHY_FREQ]) { in nl80211_start_ap()
7039 if (err) in nl80211_start_ap()
7041 } else if (wdev->valid_links) { in nl80211_start_ap()
7045 } else if (wdev->u.ap.preset_chandef.chan) { in nl80211_start_ap()
7047 } else if (!nl80211_get_ap_channel(rdev, params)) { in nl80211_start_ap()
7057 if (!cfg80211_reg_check_beaconing(&rdev->wiphy, ¶ms->chandef, in nl80211_start_ap()
7063 if (info->attrs[NL80211_ATTR_TX_RATES]) { in nl80211_start_ap()
7068 if (err) in nl80211_start_ap()
7073 if (err) in nl80211_start_ap()
7078 if (params->pbss && !rdev->wiphy.bands[NL80211_BAND_60GHZ]) { in nl80211_start_ap()
7083 if (info->attrs[NL80211_ATTR_ACL_POLICY]) { in nl80211_start_ap()
7085 if (IS_ERR(params->acl)) { in nl80211_start_ap()
7095 if (info->attrs[NL80211_ATTR_HE_OBSS_PD]) { in nl80211_start_ap()
7099 if (err) in nl80211_start_ap()
7103 if (info->attrs[NL80211_ATTR_FILS_DISCOVERY]) { in nl80211_start_ap()
7107 if (err) in nl80211_start_ap()
7111 if (info->attrs[NL80211_ATTR_UNSOL_BCAST_PROBE_RESP]) { in nl80211_start_ap()
7115 if (err) in nl80211_start_ap()
7119 if (info->attrs[NL80211_ATTR_MBSSID_CONFIG]) { in nl80211_start_ap()
7126 if (err) in nl80211_start_ap()
7130 if (!params->mbssid_config.ema && params->beacon.rnr_ies) { in nl80211_start_ap()
7135 if (info->attrs[NL80211_ATTR_S1G_SHORT_BEACON]) { in nl80211_start_ap()
7136 if (!info->attrs[NL80211_ATTR_S1G_LONG_BEACON_PERIOD]) { in nl80211_start_ap()
7147 if (err) in nl80211_start_ap()
7152 if (err) in nl80211_start_ap()
7155 if (info->attrs[NL80211_ATTR_UHR_OPERATION]) in nl80211_start_ap()
7159 if (err) in nl80211_start_ap()
7162 if (info->attrs[NL80211_ATTR_AP_SETTINGS_FLAGS]) in nl80211_start_ap()
7165 else if (info->attrs[NL80211_ATTR_EXTERNAL_AUTH_SUPPORT]) in nl80211_start_ap()
7168 if (wdev->conn_owner_nlportid && in nl80211_start_ap()
7178 if (!err) { in nl80211_start_ap()
7185 if (info->attrs[NL80211_ATTR_SOCKET_OWNER]) in nl80211_start_ap()
7193 if (params->mbssid_config.tx_wdev && in nl80211_start_ap()
7214 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP && in nl80211_set_beacon()
7218 if (!rdev->ops->change_beacon) in nl80211_set_beacon()
7221 if (!wdev->links[link_id].ap.beacon_interval) in nl80211_set_beacon()
7225 if (!params) in nl80211_set_beacon()
7230 if (err) in nl80211_set_beacon()
7239 if (!cfg80211_reg_check_beaconing(&rdev->wiphy, in nl80211_set_beacon()
7247 if (attr) { in nl80211_set_beacon()
7250 if (err) in nl80211_set_beacon()
7255 if (attr) { in nl80211_set_beacon()
7258 if (err) in nl80211_set_beacon()
7263 if (attr) { in nl80211_set_beacon()
7266 if (err) in nl80211_set_beacon()
7310 if (nla) { in parse_station_flags()
7317 if ((params->sta_flags_mask | in parse_station_flags()
7321 if ((iftype == NL80211_IFTYPE_NAN || in parse_station_flags()
7331 if (iftype == NL80211_IFTYPE_NAN_DATA) { in parse_station_flags()
7333 if (params->sta_flags_mask & BIT(NL80211_STA_FLAG_WME)) in parse_station_flags()
7343 /* if present, parse the old attribute */ in parse_station_flags()
7346 if (!nla) in parse_station_flags()
7349 if (nla_parse_nested_deprecated(flags, NL80211_STA_FLAG_MAX, nla, sta_flags_policy, info->extack)) in parse_station_flags()
7382 if (flags[flag]) { in parse_station_flags()
7386 if (flag > NL80211_STA_FLAG_MAX_OLD_API) in parse_station_flags()
7402 if (!rate) in nl80211_put_sta_rate()
7407 /* report 16-bit bitrate only if we can */ in nl80211_put_sta_rate()
7409 if (bitrate > 0 && in nl80211_put_sta_rate()
7412 if (bitrate_compat > 0 && in nl80211_put_sta_rate()
7467 if (rate_flg && nla_put_flag(msg, rate_flg)) in nl80211_put_sta_rate()
7470 if (info->flags & RATE_INFO_FLAGS_MCS) { in nl80211_put_sta_rate()
7471 if (nla_put_u8(msg, NL80211_RATE_INFO_MCS, info->mcs)) in nl80211_put_sta_rate()
7473 if (info->flags & RATE_INFO_FLAGS_SHORT_GI && in nl80211_put_sta_rate()
7476 } else if (info->flags & RATE_INFO_FLAGS_VHT_MCS) { in nl80211_put_sta_rate()
7477 if (nla_put_u8(msg, NL80211_RATE_INFO_VHT_MCS, info->mcs)) in nl80211_put_sta_rate()
7479 if (nla_put_u8(msg, NL80211_RATE_INFO_VHT_NSS, info->nss)) in nl80211_put_sta_rate()
7481 if (info->flags & RATE_INFO_FLAGS_SHORT_GI && in nl80211_put_sta_rate()
7484 } else if (info->flags & RATE_INFO_FLAGS_HE_MCS) { in nl80211_put_sta_rate()
7485 if (nla_put_u8(msg, NL80211_RATE_INFO_HE_MCS, info->mcs)) in nl80211_put_sta_rate()
7487 if (nla_put_u8(msg, NL80211_RATE_INFO_HE_NSS, info->nss)) in nl80211_put_sta_rate()
7489 if (nla_put_u8(msg, NL80211_RATE_INFO_HE_GI, info->he_gi)) in nl80211_put_sta_rate()
7491 if (nla_put_u8(msg, NL80211_RATE_INFO_HE_DCM, info->he_dcm)) in nl80211_put_sta_rate()
7493 if (info->bw == RATE_INFO_BW_HE_RU && in nl80211_put_sta_rate()
7497 } else if (info->flags & RATE_INFO_FLAGS_S1G_MCS) { in nl80211_put_sta_rate()
7498 if (nla_put_u8(msg, NL80211_RATE_INFO_S1G_MCS, info->mcs)) in nl80211_put_sta_rate()
7500 if (nla_put_u8(msg, NL80211_RATE_INFO_S1G_NSS, info->nss)) in nl80211_put_sta_rate()
7502 if (info->flags & RATE_INFO_FLAGS_SHORT_GI && in nl80211_put_sta_rate()
7505 } else if (info->flags & RATE_INFO_FLAGS_EHT_MCS) { in nl80211_put_sta_rate()
7506 if (nla_put_u8(msg, NL80211_RATE_INFO_EHT_MCS, info->mcs)) in nl80211_put_sta_rate()
7508 if (nla_put_u8(msg, NL80211_RATE_INFO_EHT_NSS, info->nss)) in nl80211_put_sta_rate()
7510 if (nla_put_u8(msg, NL80211_RATE_INFO_EHT_GI, info->eht_gi)) in nl80211_put_sta_rate()
7512 if (info->bw == RATE_INFO_BW_EHT_RU && in nl80211_put_sta_rate()
7516 } else if (info->flags & RATE_INFO_FLAGS_UHR_MCS) { in nl80211_put_sta_rate()
7517 if (nla_put_u8(msg, NL80211_RATE_INFO_UHR_MCS, info->mcs)) in nl80211_put_sta_rate()
7519 if (nla_put_u8(msg, NL80211_RATE_INFO_EHT_NSS, info->nss)) in nl80211_put_sta_rate()
7521 if (nla_put_u8(msg, NL80211_RATE_INFO_EHT_GI, info->eht_gi)) in nl80211_put_sta_rate()
7523 if (info->bw == RATE_INFO_BW_EHT_RU && in nl80211_put_sta_rate()
7527 if (info->flags & RATE_INFO_FLAGS_UHR_ELR_MCS && in nl80211_put_sta_rate()
7530 if (info->flags & RATE_INFO_FLAGS_UHR_IM && in nl80211_put_sta_rate()
7545 if (!mask) in nl80211_put_signal()
7549 if (!attr) in nl80211_put_signal()
7553 if (!(mask & BIT(i))) in nl80211_put_signal()
7556 if (nla_put_u8(msg, i, signal[i])) in nl80211_put_signal()
7573 if (link_sinfo->filled & BIT_ULL(NL80211_STA_INFO_ ## attr) && \ in nl80211_fill_link_station()
7579 if (link_sinfo->filled & BIT_ULL(NL80211_STA_INFO_ ## attr) && \ in nl80211_fill_link_station()
7586 if (!link_sinfoattr) in nl80211_fill_link_station()
7591 if (link_sinfo->filled & (BIT_ULL(NL80211_STA_INFO_RX_BYTES) | in nl80211_fill_link_station()
7597 if (link_sinfo->filled & (BIT_ULL(NL80211_STA_INFO_TX_BYTES) | in nl80211_fill_link_station()
7608 if (wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_fill_link_station()
7620 if (link_sinfo->filled & BIT_ULL(NL80211_STA_INFO_CHAIN_SIGNAL)) { in nl80211_fill_link_station()
7621 if (!nl80211_put_signal(msg, link_sinfo->chains, in nl80211_fill_link_station()
7626 if (link_sinfo->filled & BIT_ULL(NL80211_STA_INFO_CHAIN_SIGNAL_AVG)) { in nl80211_fill_link_station()
7627 if (!nl80211_put_signal(msg, link_sinfo->chains, in nl80211_fill_link_station()
7632 if (link_sinfo->filled & BIT_ULL(NL80211_STA_INFO_TX_BITRATE)) { in nl80211_fill_link_station()
7633 if (!nl80211_put_sta_rate(msg, &link_sinfo->txrate, in nl80211_fill_link_station()
7637 if (link_sinfo->filled & BIT_ULL(NL80211_STA_INFO_RX_BITRATE)) { in nl80211_fill_link_station()
7638 if (!nl80211_put_sta_rate(msg, &link_sinfo->rxrate, in nl80211_fill_link_station()
7650 if (link_sinfo->filled & BIT_ULL(NL80211_STA_INFO_BSS_PARAM)) { in nl80211_fill_link_station()
7653 if (!bss_param) in nl80211_fill_link_station()
7656 if (((link_sinfo->bss_param.flags & in nl80211_fill_link_station()
7681 if (wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_fill_link_station()
7690 if (link_sinfo->pertid) { in nl80211_fill_link_station()
7696 if (!tidsattr) in nl80211_fill_link_station()
7705 if (!tidstats->filled) in nl80211_fill_link_station()
7709 if (!tidattr) in nl80211_fill_link_station()
7713 if (tidstats->filled & BIT(NL80211_TID_STATS_ ## attr) && \ in nl80211_fill_link_station()
7725 if ((tidstats->filled & in nl80211_fill_link_station()
7758 if (!hdr) { in nl80211_send_station()
7763 if ((wdev->netdev && in nl80211_send_station()
7772 if (!sinfoattr) in nl80211_send_station()
7777 if (sinfo->filled & BIT_ULL(NL80211_STA_INFO_ ## attr) && \ in nl80211_send_station()
7783 if (sinfo->filled & BIT_ULL(NL80211_STA_INFO_ ## attr) && \ in nl80211_send_station()
7793 if (sinfo->filled & (BIT_ULL(NL80211_STA_INFO_RX_BYTES) | in nl80211_send_station()
7799 if (sinfo->filled & (BIT_ULL(NL80211_STA_INFO_TX_BYTES) | in nl80211_send_station()
7810 if (wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_send_station()
7822 if (sinfo->filled & BIT_ULL(NL80211_STA_INFO_CHAIN_SIGNAL)) { in nl80211_send_station()
7823 if (!nl80211_put_signal(msg, sinfo->chains, in nl80211_send_station()
7828 if (sinfo->filled & BIT_ULL(NL80211_STA_INFO_CHAIN_SIGNAL_AVG)) { in nl80211_send_station()
7829 if (!nl80211_put_signal(msg, sinfo->chains, in nl80211_send_station()
7834 if (sinfo->filled & BIT_ULL(NL80211_STA_INFO_TX_BITRATE)) { in nl80211_send_station()
7835 if (!nl80211_put_sta_rate(msg, &sinfo->txrate, in nl80211_send_station()
7839 if (sinfo->filled & BIT_ULL(NL80211_STA_INFO_RX_BITRATE)) { in nl80211_send_station()
7840 if (!nl80211_put_sta_rate(msg, &sinfo->rxrate, in nl80211_send_station()
7863 if (sinfo->filled & BIT_ULL(NL80211_STA_INFO_BSS_PARAM)) { in nl80211_send_station()
7866 if (!bss_param) in nl80211_send_station()
7869 if (((sinfo->bss_param.flags & BSS_PARAM_FLAGS_CTS_PROT) && in nl80211_send_station()
7883 if ((sinfo->filled & BIT_ULL(NL80211_STA_INFO_STA_FLAGS)) && in nl80211_send_station()
7894 if (wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_send_station()
7903 if (sinfo->pertid) { in nl80211_send_station()
7909 if (!tidsattr) in nl80211_send_station()
7918 if (!tidstats->filled) in nl80211_send_station()
7922 if (!tidattr) in nl80211_send_station()
7926 if (tidstats->filled & BIT(NL80211_TID_STATS_ ## attr) && \ in nl80211_send_station()
7938 if ((tidstats->filled & in nl80211_send_station()
7952 if (sinfo->assoc_req_ies_len && in nl80211_send_station()
7957 if (sinfo->assoc_resp_ies_len && in nl80211_send_station()
7962 if (sinfo->mlo_params_valid) { in nl80211_send_station()
7963 if (nla_put_u8(msg, NL80211_ATTR_MLO_LINK_ID, in nl80211_send_station()
7967 if (!is_zero_ether_addr(sinfo->mld_addr) && in nl80211_send_station()
7973 if (link_stats && sinfo->valid_links) { in nl80211_send_station()
7975 if (!links) in nl80211_send_station()
7981 if (WARN_ON_ONCE(!link_sinfo)) in nl80211_send_station()
7984 if (!is_valid_ether_addr(link_sinfo->addr)) in nl80211_send_station()
7988 if (!link) in nl80211_send_station()
7991 if (nla_put_u8(msg, NL80211_ATTR_MLO_LINK_ID, in nl80211_send_station()
7995 if (nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, in nl80211_send_station()
7999 if (nl80211_fill_link_station(msg, rdev, link_sinfo)) in nl80211_send_station()
8027 if (!link_sinfo) in cfg80211_sta_set_mld_sinfo()
8030 if ((link_sinfo->filled & in cfg80211_sta_set_mld_sinfo()
8036 if ((link_sinfo->filled & in cfg80211_sta_set_mld_sinfo()
8042 if (link_sinfo->filled & in cfg80211_sta_set_mld_sinfo()
8049 if (link_sinfo->filled & in cfg80211_sta_set_mld_sinfo()
8056 if (link_sinfo->filled & in cfg80211_sta_set_mld_sinfo()
8062 if (link_sinfo->filled & BIT_ULL(NL80211_STA_INFO_TX_FAILED)) { in cfg80211_sta_set_mld_sinfo()
8067 if (link_sinfo->filled & in cfg80211_sta_set_mld_sinfo()
8074 if (link_sinfo->filled & in cfg80211_sta_set_mld_sinfo()
8081 if (link_sinfo->filled & in cfg80211_sta_set_mld_sinfo()
8089 if (link_sinfo->filled & BIT_ULL(NL80211_STA_INFO_RX_MPDUS)) { in cfg80211_sta_set_mld_sinfo()
8094 if (link_sinfo->filled & in cfg80211_sta_set_mld_sinfo()
8101 if (link_sinfo->filled & in cfg80211_sta_set_mld_sinfo()
8108 if ((link_sinfo->filled & BIT_ULL(NL80211_STA_INFO_SIGNAL)) && in cfg80211_sta_set_mld_sinfo()
8114 if ((link_sinfo->filled & in cfg80211_sta_set_mld_sinfo()
8124 if ((link_sinfo->filled & in cfg80211_sta_set_mld_sinfo()
8133 if (link_sinfo->filled & BIT_ULL(NL80211_STA_INFO_BSS_PARAM) && in cfg80211_sta_set_mld_sinfo()
8146 if ((link_sinfo->filled & in cfg80211_sta_set_mld_sinfo()
8153 if ((link_sinfo->filled & in cfg80211_sta_set_mld_sinfo()
8161 if (link_sinfo->filled & in cfg80211_sta_set_mld_sinfo()
8169 if (link_sinfo->filled & in cfg80211_sta_set_mld_sinfo()
8180 if (sinfo->pertid) { in cfg80211_sta_set_mld_sinfo()
8217 if (err) in nl80211_dump_station()
8222 if (!wdev->netdev && wdev->iftype != NL80211_IFTYPE_NAN) { in nl80211_dump_station()
8227 if (!rdev->ops->dump_station) { in nl80211_dump_station()
8238 if (!sinfo.links[i]) { in nl80211_dump_station()
8247 if (err == -ENOENT) in nl80211_dump_station()
8249 if (err) in nl80211_dump_station()
8252 if (sinfo.valid_links) in nl80211_dump_station()
8260 if (nl80211_send_station(skb, NL80211_CMD_NEW_STATION, in nl80211_dump_station()
8274 if (sinfo_alloc) in nl80211_dump_station()
8292 if (!wdev->netdev) in nl80211_get_station()
8295 if (!info->attrs[NL80211_ATTR_MAC]) in nl80211_get_station()
8300 if (!rdev->ops->get_station) in nl80211_get_station()
8305 if (!sinfo.links[i]) { in nl80211_get_station()
8312 if (err) { in nl80211_get_station()
8318 if (!msg) { in nl80211_get_station()
8323 if (sinfo.valid_links) in nl80211_get_station()
8326 if (nl80211_send_station(msg, NL80211_CMD_NEW_STATION, in nl80211_get_station()
8340 if (params->listen_interval != -1 && in cfg80211_check_station_change()
8344 if (params->support_p2p_ps != -1 && in cfg80211_check_station_change()
8348 if (params->aid && in cfg80211_check_station_change()
8364 if (params->sta_flags_mask & in cfg80211_check_station_change()
8372 if (!(params->sta_flags_set & BIT(NL80211_STA_FLAG_TDLS_PEER))) in cfg80211_check_station_change()
8379 if (params->plink_action != NL80211_PLINK_ACTION_NO_ACTION) in cfg80211_check_station_change()
8381 if (params->local_pm) in cfg80211_check_station_change()
8383 if (params->sta_modify_mask & STATION_PARAM_APPLY_PLINK_STATE) in cfg80211_check_station_change()
8387 if (statype != CFG80211_STA_TDLS_PEER_SETUP && in cfg80211_check_station_change()
8390 if (params->sta_flags_set & BIT(NL80211_STA_FLAG_TDLS_PEER)) in cfg80211_check_station_change()
8400 if (statype != CFG80211_STA_TDLS_PEER_SETUP && in cfg80211_check_station_change()
8403 if (params->sta_modify_mask & STATION_PARAM_APPLY_UAPSD) in cfg80211_check_station_change()
8405 if (params->sta_modify_mask & STATION_PARAM_APPLY_CAPABILITY) in cfg80211_check_station_change()
8407 if (params->link_sta_params.supported_rates) in cfg80211_check_station_change()
8409 if (statype != CFG80211_STA_NAN_MGMT && in cfg80211_check_station_change()
8414 if (params->ext_capab || params->link_sta_params.eht_capa || in cfg80211_check_station_change()
8417 if (params->sta_flags_mask & BIT(NL80211_STA_FLAG_SPP_AMSDU)) in cfg80211_check_station_change()
8421 if (statype != CFG80211_STA_AP_CLIENT && in cfg80211_check_station_change()
8423 if (params->vlan) in cfg80211_check_station_change()
8428 if (statype != CFG80211_STA_AP_CLIENT_UNASSOC && in cfg80211_check_station_change()
8435 if (!(params->sta_flags_mask & BIT(NL80211_STA_FLAG_AUTHORIZED))) in cfg80211_check_station_change()
8441 if (params->sta_flags_mask & in cfg80211_check_station_change()
8451 /* but authenticated/associated only if driver handles it */ in cfg80211_check_station_change()
8452 if (!(wiphy->features & NL80211_FEATURE_FULL_AP_CLIENT_STATE) && in cfg80211_check_station_change()
8461 if (params->sta_flags_mask & ~BIT(NL80211_STA_FLAG_AUTHORIZED)) in cfg80211_check_station_change()
8466 if (params->sta_flags_mask & ~(BIT(NL80211_STA_FLAG_AUTHORIZED) | in cfg80211_check_station_change()
8470 if (params->sta_flags_set & BIT(NL80211_STA_FLAG_AUTHORIZED) && in cfg80211_check_station_change()
8478 if (params->sta_modify_mask & STATION_PARAM_APPLY_PLINK_STATE) in cfg80211_check_station_change()
8482 if (params->plink_action != NL80211_PLINK_ACTION_NO_ACTION && in cfg80211_check_station_change()
8487 if (params->sta_flags_mask & in cfg80211_check_station_change()
8493 if (params->sta_flags_mask & in cfg80211_check_station_change()
8506 if (statype != CFG80211_STA_AP_CLIENT_UNASSOC && in cfg80211_check_station_change()
8524 if (!vlanattr) in get_vlan()
8528 if (!v) in get_vlan()
8531 if (!v->ieee80211_ptr || v->ieee80211_ptr->wiphy != &rdev->wiphy) { in get_vlan()
8536 if (v->ieee80211_ptr->iftype != NL80211_IFTYPE_AP_VLAN && in get_vlan()
8543 if (!netif_running(v)) { in get_vlan()
8561 /* parse WME attributes if present */ in nl80211_parse_sta_wme()
8562 if (!info->attrs[NL80211_ATTR_STA_WME]) in nl80211_parse_sta_wme()
8569 if (err) in nl80211_parse_sta_wme()
8572 if (tb[NL80211_STA_WME_UAPSD_QUEUES]) in nl80211_parse_sta_wme()
8575 if (params->uapsd_queues & ~IEEE80211_WMM_IE_STA_QOSINFO_AC_MASK) in nl80211_parse_sta_wme()
8578 if (tb[NL80211_STA_WME_MAX_SP]) in nl80211_parse_sta_wme()
8581 if (params->max_sp & ~IEEE80211_WMM_IE_STA_QOSINFO_SP_MASK) in nl80211_parse_sta_wme()
8592 if (info->attrs[NL80211_ATTR_STA_SUPPORTED_CHANNELS]) { in nl80211_parse_sta_channel_info()
8602 if (params->supported_channels_len % 2) in nl80211_parse_sta_channel_info()
8606 if (info->attrs[NL80211_ATTR_STA_SUPPORTED_OPER_CLASSES]) { in nl80211_parse_sta_channel_info()
8620 if (info->attrs[NL80211_ATTR_PEER_AID]) in nl80211_set_station_tdls()
8622 if (info->attrs[NL80211_ATTR_HT_CAPABILITY]) in nl80211_set_station_tdls()
8625 if (info->attrs[NL80211_ATTR_VHT_CAPABILITY]) in nl80211_set_station_tdls()
8628 if (info->attrs[NL80211_ATTR_HE_CAPABILITY]) { in nl80211_set_station_tdls()
8634 if (info->attrs[NL80211_ATTR_EHT_CAPABILITY]) { in nl80211_set_station_tdls()
8640 if (!ieee80211_eht_capa_size_ok((const u8 *)params->link_sta_params.he_capa, in nl80211_set_station_tdls()
8648 if (info->attrs[NL80211_ATTR_UHR_CAPABILITY]) { in nl80211_set_station_tdls()
8649 if (!params->link_sta_params.eht_capa) in nl80211_set_station_tdls()
8658 if (info->attrs[NL80211_ATTR_S1G_CAPABILITY]) in nl80211_set_station_tdls()
8663 if (err) in nl80211_set_station_tdls()
8676 if (info->attrs[NL80211_ATTR_STA_TX_POWER_SETTING]) { in nl80211_parse_sta_txpower_setting()
8677 if (!rdev->ops->set_tx_power || in nl80211_parse_sta_txpower_setting()
8685 if (txpwr->type == NL80211_TX_POWER_LIMITED) { in nl80211_parse_sta_txpower_setting()
8688 if (info->attrs[idx]) in nl80211_parse_sta_txpower_setting()
8713 if (!dev && wdev->iftype != NL80211_IFTYPE_NAN && in nl80211_set_station()
8717 if (!rdev->ops->change_station) in nl80211_set_station()
8725 if (info->attrs[NL80211_ATTR_STA_AID]) in nl80211_set_station()
8728 if (info->attrs[NL80211_ATTR_VLAN_ID]) in nl80211_set_station()
8731 if (info->attrs[NL80211_ATTR_STA_LISTEN_INTERVAL]) in nl80211_set_station()
8737 if (info->attrs[NL80211_ATTR_STA_SUPPORT_P2P_PS]) in nl80211_set_station()
8743 if (!info->attrs[NL80211_ATTR_MAC]) in nl80211_set_station()
8749 if (info->attrs[NL80211_ATTR_MLD_ADDR]) { in nl80211_set_station()
8750 /* If MLD_ADDR attribute is set then this is an MLD station in nl80211_set_station()
8755 if (params.link_sta_params.link_id < 0) in nl80211_set_station()
8762 if (!is_valid_ether_addr(params.link_sta_params.link_mac)) in nl80211_set_station()
8769 if (info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]) { in nl80211_set_station()
8776 if (info->attrs[NL80211_ATTR_STA_CAPABILITY]) { in nl80211_set_station()
8782 if (info->attrs[NL80211_ATTR_STA_EXT_CAPABILITY]) { in nl80211_set_station()
8789 if (parse_station_flags(info, wdev->iftype, ¶ms)) in nl80211_set_station()
8792 if (info->attrs[NL80211_ATTR_STA_PLINK_ACTION]) in nl80211_set_station()
8796 if (info->attrs[NL80211_ATTR_STA_PLINK_STATE]) { in nl80211_set_station()
8799 if (info->attrs[NL80211_ATTR_MESH_PEER_AID]) in nl80211_set_station()
8805 if (info->attrs[NL80211_ATTR_LOCAL_MESH_POWER_MODE]) in nl80211_set_station()
8809 if (info->attrs[NL80211_ATTR_OPMODE_NOTIF]) { in nl80211_set_station()
8815 if (info->attrs[NL80211_ATTR_HE_6GHZ_CAPABILITY]) in nl80211_set_station()
8819 if (info->attrs[NL80211_ATTR_EML_CAPABILITY]) { in nl80211_set_station()
8825 if (info->attrs[NL80211_ATTR_AIRTIME_WEIGHT]) in nl80211_set_station()
8829 if (params.airtime_weight && in nl80211_set_station()
8837 if (err) in nl80211_set_station()
8842 if (err) in nl80211_set_station()
8846 if (IS_ERR(params.vlan)) in nl80211_set_station()
8887 if (!dev && wdev->iftype != NL80211_IFTYPE_NAN) in nl80211_new_station()
8890 if (!rdev->ops->add_station) in nl80211_new_station()
8893 if (!info->attrs[NL80211_ATTR_MAC]) in nl80211_new_station()
8896 if (wdev->iftype == NL80211_IFTYPE_NAN || in nl80211_new_station()
8898 if (info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]) in nl80211_new_station()
8900 if (wdev->iftype == NL80211_IFTYPE_NAN_DATA) { in nl80211_new_station()
8901 if (!info->attrs[NL80211_ATTR_NAN_NMI_MAC]) in nl80211_new_station()
8905 if (info->attrs[NL80211_ATTR_HT_CAPABILITY] || in nl80211_new_station()
8911 if (!info->attrs[NL80211_ATTR_STA_LISTEN_INTERVAL]) in nl80211_new_station()
8914 if (!info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]) in nl80211_new_station()
8917 if (!info->attrs[NL80211_ATTR_STA_AID] && in nl80211_new_station()
8925 if (info->attrs[NL80211_ATTR_MLD_ADDR]) { in nl80211_new_station()
8930 if (!is_valid_ether_addr(params.link_sta_params.link_mac)) in nl80211_new_station()
8936 if (info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]) { in nl80211_new_station()
8943 if (info->attrs[NL80211_ATTR_STA_LISTEN_INTERVAL]) in nl80211_new_station()
8947 if (info->attrs[NL80211_ATTR_VLAN_ID]) in nl80211_new_station()
8950 if (info->attrs[NL80211_ATTR_STA_SUPPORT_P2P_PS]) { in nl80211_new_station()
8955 * if not specified, assume it's supported for P2P GO interface, in nl80211_new_station()
8962 if (info->attrs[NL80211_ATTR_PEER_AID]) in nl80211_new_station()
8964 else if (info->attrs[NL80211_ATTR_STA_AID]) in nl80211_new_station()
8967 if (info->attrs[NL80211_ATTR_STA_CAPABILITY]) { in nl80211_new_station()
8973 if (info->attrs[NL80211_ATTR_STA_EXT_CAPABILITY]) { in nl80211_new_station()
8980 if (info->attrs[NL80211_ATTR_HT_CAPABILITY]) in nl80211_new_station()
8984 if (info->attrs[NL80211_ATTR_VHT_CAPABILITY]) in nl80211_new_station()
8988 if (info->attrs[NL80211_ATTR_HE_CAPABILITY]) { in nl80211_new_station()
8994 if (info->attrs[NL80211_ATTR_EHT_CAPABILITY]) { in nl80211_new_station()
9000 if (!ieee80211_eht_capa_size_ok((const u8 *)params.link_sta_params.he_capa, in nl80211_new_station()
9008 if (info->attrs[NL80211_ATTR_UHR_CAPABILITY]) { in nl80211_new_station()
9009 if (!params.link_sta_params.eht_capa) in nl80211_new_station()
9018 if (info->attrs[NL80211_ATTR_EML_CAPABILITY]) { in nl80211_new_station()
9024 if (info->attrs[NL80211_ATTR_HE_6GHZ_CAPABILITY]) in nl80211_new_station()
9028 if (info->attrs[NL80211_ATTR_S1G_CAPABILITY]) in nl80211_new_station()
9032 if (info->attrs[NL80211_ATTR_OPMODE_NOTIF]) { in nl80211_new_station()
9038 if (info->attrs[NL80211_ATTR_STA_PLINK_ACTION]) in nl80211_new_station()
9042 if (info->attrs[NL80211_ATTR_AIRTIME_WEIGHT]) in nl80211_new_station()
9046 if (params.airtime_weight && in nl80211_new_station()
9054 if (err) in nl80211_new_station()
9058 if (err) in nl80211_new_station()
9062 if (err) in nl80211_new_station()
9065 if (parse_station_flags(info, wdev->iftype, ¶ms)) in nl80211_new_station()
9068 /* HT/VHT requires QoS, but if we don't have that just ignore HT/VHT in nl80211_new_station()
9073 if (!(params.sta_flags_set & BIT(NL80211_STA_FLAG_WME))) { in nl80211_new_station()
9078 if (params.link_sta_params.he_capa_len || in nl80211_new_station()
9085 if (wdev->iftype == NL80211_IFTYPE_NAN || in nl80211_new_station()
9087 if (params.sta_modify_mask & STATION_PARAM_APPLY_UAPSD) in nl80211_new_station()
9090 if (!(params.sta_flags_set & (BIT(NL80211_STA_FLAG_ASSOCIATED) | in nl80211_new_station()
9096 if (params.link_sta_params.he_6ghz_capa && in nl80211_new_station()
9107 /* ignore WME attributes if iface/sta is not capable */ in nl80211_new_station()
9108 if (!(rdev->wiphy.flags & WIPHY_FLAG_AP_UAPSD) || in nl80211_new_station()
9113 if ((params.sta_flags_set & BIT(NL80211_STA_FLAG_TDLS_PEER)) || in nl80211_new_station()
9119 /* allow authenticated/associated only if driver handles it */ in nl80211_new_station()
9120 if (!(rdev->wiphy.features & in nl80211_new_station()
9125 if (!wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_new_station()
9140 if (!(params.sta_flags_mask & auth_assoc)) { in nl80211_new_station()
9147 if (IS_ERR(params.vlan)) in nl80211_new_station()
9155 if (params.sta_flags_mask & BIT(NL80211_STA_FLAG_ASSOCIATED)) in nl80211_new_station()
9158 if ((params.sta_flags_set & BIT(NL80211_STA_FLAG_TDLS_PEER)) || in nl80211_new_station()
9168 if (params.sta_flags_mask & in nl80211_new_station()
9173 if (!(params.sta_flags_set & BIT(NL80211_STA_FLAG_TDLS_PEER))) in nl80211_new_station()
9175 /* Can only add if TDLS ... */ in nl80211_new_station()
9176 if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_TDLS)) in nl80211_new_station()
9179 if (!(rdev->wiphy.flags & WIPHY_FLAG_TDLS_EXTERNAL_SETUP)) in nl80211_new_station()
9198 if (wdev->valid_links) { in nl80211_new_station()
9199 if (params.link_sta_params.link_id < 0) { in nl80211_new_station()
9203 if (!(wdev->valid_links & BIT(params.link_sta_params.link_id))) { in nl80211_new_station()
9208 if (params.link_sta_params.link_id >= 0) { in nl80211_new_station()
9233 if (!dev && wdev->iftype != NL80211_IFTYPE_NAN) in nl80211_del_station()
9236 if (info->attrs[NL80211_ATTR_MAC]) in nl80211_del_station()
9250 if (wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_del_station()
9258 if (!rdev->ops->del_station) in nl80211_del_station()
9261 if (info->attrs[NL80211_ATTR_MGMT_SUBTYPE]) { in nl80211_del_station()
9264 if (params.subtype != IEEE80211_STYPE_DISASSOC >> 4 && in nl80211_del_station()
9272 if (info->attrs[NL80211_ATTR_REASON_CODE]) { in nl80211_del_station()
9275 if (params.reason_code == 0) in nl80211_del_station()
9283 if (!wdev->valid_links && link_id != -1) in nl80211_del_station()
9286 /* If given, a valid link ID should be passed during MLO */ in nl80211_del_station()
9287 if (wdev->valid_links && link_id >= 0 && in nl80211_del_station()
9305 if (!hdr) in nl80211_send_mpath()
9308 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) || in nl80211_send_mpath()
9315 if (!pinfoattr) in nl80211_send_mpath()
9317 if ((pinfo->filled & MPATH_INFO_FRAME_QLEN) && in nl80211_send_mpath()
9321 if (((pinfo->filled & MPATH_INFO_SN) && in nl80211_send_mpath()
9368 if (err) in nl80211_dump_mpath()
9373 if (!rdev->ops->dump_mpath) { in nl80211_dump_mpath()
9378 if (wdev->iftype != NL80211_IFTYPE_MESH_POINT) { in nl80211_dump_mpath()
9386 if (err == -ENOENT) in nl80211_dump_mpath()
9388 if (err) in nl80211_dump_mpath()
9391 if (nl80211_send_mpath(skb, NETLINK_CB(cb->skb).portid, in nl80211_dump_mpath()
9420 if (!info->attrs[NL80211_ATTR_MAC]) in nl80211_get_mpath()
9425 if (!rdev->ops->get_mpath) in nl80211_get_mpath()
9428 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_MESH_POINT) in nl80211_get_mpath()
9432 if (err) in nl80211_get_mpath()
9436 if (!msg) in nl80211_get_mpath()
9439 if (nl80211_send_mpath(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_mpath()
9455 if (!info->attrs[NL80211_ATTR_MAC]) in nl80211_set_mpath()
9458 if (!info->attrs[NL80211_ATTR_MPATH_NEXT_HOP]) in nl80211_set_mpath()
9464 if (!rdev->ops->change_mpath) in nl80211_set_mpath()
9467 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_MESH_POINT) in nl80211_set_mpath()
9480 if (!info->attrs[NL80211_ATTR_MAC]) in nl80211_new_mpath()
9483 if (!info->attrs[NL80211_ATTR_MPATH_NEXT_HOP]) in nl80211_new_mpath()
9489 if (!rdev->ops->add_mpath) in nl80211_new_mpath()
9492 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_MESH_POINT) in nl80211_new_mpath()
9504 if (info->attrs[NL80211_ATTR_MAC]) in nl80211_del_mpath()
9507 if (!rdev->ops->del_mpath) in nl80211_del_mpath()
9510 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_MESH_POINT) in nl80211_del_mpath()
9528 if (!info->attrs[NL80211_ATTR_MAC]) in nl80211_get_mpp()
9533 if (!rdev->ops->get_mpp) in nl80211_get_mpp()
9536 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_MESH_POINT) in nl80211_get_mpp()
9540 if (err) in nl80211_get_mpp()
9544 if (!msg) in nl80211_get_mpp()
9547 if (nl80211_send_mpath(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_mpp()
9568 if (err) in nl80211_dump_mpp()
9573 if (!rdev->ops->dump_mpp) { in nl80211_dump_mpp()
9578 if (wdev->iftype != NL80211_IFTYPE_MESH_POINT) { in nl80211_dump_mpp()
9586 if (err == -ENOENT) in nl80211_dump_mpp()
9588 if (err) in nl80211_dump_mpp()
9591 if (nl80211_send_mpath(skb, NETLINK_CB(cb->skb).portid, in nl80211_dump_mpp()
9629 if (info->attrs[NL80211_ATTR_BSS_CTS_PROT]) { in nl80211_set_bss()
9630 if (strict && !(bss_param_support & WIPHY_BSS_PARAM_CTS_PROT)) in nl80211_set_bss()
9636 if (info->attrs[NL80211_ATTR_BSS_SHORT_PREAMBLE]) { in nl80211_set_bss()
9637 if (strict && in nl80211_set_bss()
9644 if (info->attrs[NL80211_ATTR_BSS_SHORT_SLOT_TIME]) { in nl80211_set_bss()
9645 if (strict && in nl80211_set_bss()
9652 if (info->attrs[NL80211_ATTR_BSS_BASIC_RATES]) { in nl80211_set_bss()
9653 if (strict && in nl80211_set_bss()
9662 if (info->attrs[NL80211_ATTR_AP_ISOLATE]) { in nl80211_set_bss()
9663 if (strict && !(bss_param_support & WIPHY_BSS_PARAM_AP_ISOLATE)) in nl80211_set_bss()
9669 if (info->attrs[NL80211_ATTR_BSS_HT_OPMODE]) { in nl80211_set_bss()
9670 if (strict && !(bss_param_support & WIPHY_BSS_PARAM_HT_OPMODE)) in nl80211_set_bss()
9677 if (info->attrs[NL80211_ATTR_P2P_CTWINDOW]) { in nl80211_set_bss()
9678 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_GO) in nl80211_set_bss()
9682 if (params.p2p_ctwindow != 0 && in nl80211_set_bss()
9688 if (info->attrs[NL80211_ATTR_P2P_OPPPS]) { in nl80211_set_bss()
9691 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_GO) in nl80211_set_bss()
9694 if (tmp && !(bss_param_support & WIPHY_BSS_PARAM_P2P_OPPPS)) in nl80211_set_bss()
9697 if (params.p2p_opp_ps && in nl80211_set_bss()
9702 if (!rdev->ops->change_bss) in nl80211_set_bss()
9705 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP && in nl80211_set_bss()
9710 if (!changed) in nl80211_set_bss()
9726 * window between nl80211_init() and regulatory_init(), if that is in nl80211_req_set_reg()
9729 if (unlikely(!rcu_access_pointer(cfg80211_regdomain))) in nl80211_req_set_reg()
9739 if (!info->attrs[NL80211_ATTR_REG_ALPHA2]) in nl80211_req_set_reg()
9745 if (info->attrs[NL80211_ATTR_SOCKET_OWNER]) { in nl80211_req_set_reg()
9777 if (wdev->iftype != NL80211_IFTYPE_MESH_POINT) in nl80211_get_mesh_config()
9780 if (!rdev->ops->get_mesh_config) in nl80211_get_mesh_config()
9783 /* If not connected, get default parameters */ in nl80211_get_mesh_config()
9784 if (!wdev->u.mesh.id_len) in nl80211_get_mesh_config()
9789 if (err) in nl80211_get_mesh_config()
9794 if (!msg) in nl80211_get_mesh_config()
9798 if (!hdr) in nl80211_get_mesh_config()
9801 if (!pinfoattr) in nl80211_get_mesh_config()
9803 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) || in nl80211_get_mesh_config()
9951 if (tb[attr]) { \ in nl80211_parse_mesh_config()
9957 if (!info->attrs[NL80211_ATTR_MESH_CONFIG]) in nl80211_parse_mesh_config()
9959 …if (nla_parse_nested_deprecated(tb, NL80211_MESHCONF_ATTR_MAX, info->attrs[NL80211_ATTR_MESH_CONFI… in nl80211_parse_mesh_config()
9997 if (mask & BIT(NL80211_MESHCONF_PATH_REFRESH_TIME) && in nl80211_parse_mesh_config()
10007 if (mask & BIT(NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT) && in nl80211_parse_mesh_config()
10044 if (tb[NL80211_MESHCONF_HT_OPMODE]) { in nl80211_parse_mesh_config()
10047 if (ht_opmode & ~(IEEE80211_HT_OP_MODE_PROTECTION | in nl80211_parse_mesh_config()
10062 if (mask & BIT(NL80211_MESHCONF_HWMP_PATH_TO_ROOT_TIMEOUT) && in nl80211_parse_mesh_config()
10081 if (mask_out) in nl80211_parse_mesh_config()
10095 if (!info->attrs[NL80211_ATTR_MESH_SETUP]) in nl80211_parse_mesh_setup()
10097 …if (nla_parse_nested_deprecated(tb, NL80211_MESH_SETUP_ATTR_MAX, info->attrs[NL80211_ATTR_MESH_SET… in nl80211_parse_mesh_setup()
10100 if (tb[NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC]) in nl80211_parse_mesh_setup()
10106 if (tb[NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL]) in nl80211_parse_mesh_setup()
10112 if (tb[NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC]) in nl80211_parse_mesh_setup()
10118 if (tb[NL80211_MESH_SETUP_IE]) { in nl80211_parse_mesh_setup()
10124 if (tb[NL80211_MESH_SETUP_USERSPACE_MPM] && in nl80211_parse_mesh_setup()
10130 if (setup->is_secure) in nl80211_parse_mesh_setup()
10133 if (tb[NL80211_MESH_SETUP_AUTH_PROTOCOL]) { in nl80211_parse_mesh_setup()
10134 if (!setup->user_mpm) in nl80211_parse_mesh_setup()
10153 if (wdev->iftype != NL80211_IFTYPE_MESH_POINT) in nl80211_update_mesh_config()
10156 if (!rdev->ops->update_mesh_config) in nl80211_update_mesh_config()
10160 if (err) in nl80211_update_mesh_config()
10163 if (!wdev->u.mesh.id_len) in nl80211_update_mesh_config()
10166 if (!err) in nl80211_update_mesh_config()
10178 if (nla_put_string(msg, NL80211_ATTR_REG_ALPHA2, regdom->alpha2) || in nl80211_put_regdom()
10184 if (!nl_reg_rules) in nl80211_put_regdom()
10199 if (!nl_reg_rule) in nl80211_put_regdom()
10203 if (!max_bandwidth_khz) in nl80211_put_regdom()
10207 if (nla_put_u32(msg, NL80211_ATTR_REG_RULE_FLAGS, in nl80211_put_regdom()
10223 if ((reg_rule->flags & NL80211_RRF_PSD) && in nl80211_put_regdom()
10248 if (!msg) in nl80211_get_reg_do()
10253 if (!hdr) in nl80211_get_reg_do()
10258 if (info->attrs[NL80211_ATTR_WIPHY]) { in nl80211_get_reg_do()
10262 if (IS_ERR(rdev)) { in nl80211_get_reg_do()
10276 if (WARN_ON(!regdom && self_managed)) { in nl80211_get_reg_do()
10281 if (regdom && in nl80211_get_reg_do()
10288 if (!wiphy && reg_last_request_cell_base() && in nl80211_get_reg_do()
10293 if (!regdom) in nl80211_get_reg_do()
10296 if (nl80211_put_regdom(regdom, msg)) in nl80211_get_reg_do()
10321 if (!hdr) in nl80211_send_regdom()
10326 if (nl80211_put_regdom(regdom, msg)) in nl80211_send_regdom()
10329 if (!wiphy && reg_last_request_cell_base() && in nl80211_send_regdom()
10334 if (wiphy && in nl80211_send_regdom()
10338 if (wiphy && wiphy->regulatory_flags & REGULATORY_WIPHY_SELF_MANAGED && in nl80211_send_regdom()
10359 if (cfg80211_regdomain && start == 0) { in nl80211_get_reg_dump()
10363 if (err < 0) in nl80211_get_reg_dump()
10371 if (!regdom) in nl80211_get_reg_dump()
10374 if (++reg_idx <= start) in nl80211_get_reg_dump()
10379 if (err < 0) { in nl80211_get_reg_dump()
10409 if (!tb[NL80211_ATTR_REG_RULE_FLAGS]) in parse_reg_rule()
10411 if (!tb[NL80211_ATTR_FREQ_RANGE_START]) in parse_reg_rule()
10413 if (!tb[NL80211_ATTR_FREQ_RANGE_END]) in parse_reg_rule()
10415 if (!tb[NL80211_ATTR_FREQ_RANGE_MAX_BW]) in parse_reg_rule()
10417 if (!tb[NL80211_ATTR_POWER_RULE_MAX_EIRP]) in parse_reg_rule()
10432 if (tb[NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN]) in parse_reg_rule()
10436 if (tb[NL80211_ATTR_DFS_CAC_TIME]) in parse_reg_rule()
10453 if (!info->attrs[NL80211_ATTR_REG_ALPHA2]) in nl80211_set_reg()
10456 if (!info->attrs[NL80211_ATTR_REG_RULES]) in nl80211_set_reg()
10461 if (info->attrs[NL80211_ATTR_DFS_REGION]) in nl80211_set_reg()
10467 if (num_rules > NL80211_MAX_SUPP_REG_RULES) in nl80211_set_reg()
10472 if (!reg_is_valid_request(alpha2)) { in nl80211_set_reg()
10478 if (!rd) { in nl80211_set_reg()
10488 * Disable DFS master mode if the DFS region was in nl80211_set_reg()
10491 if (reg_supported_dfs_region(dfs_region)) in nl80211_set_reg()
10499 if (r) in nl80211_set_reg()
10502 if (r) in nl80211_set_reg()
10507 if (rule_idx > NL80211_MAX_SUPP_REG_RULES) { in nl80211_set_reg()
10530 if (nla_len(attr1) != sizeof(u32)) in validate_scan_freqs()
10545 if (attr1 != attr2 && in validate_scan_freqs()
10569 if (!nla_ok(nest, nla_len(nest))) in parse_bss_select()
10575 if (err) in parse_bss_select()
10580 if (attr[i]) { in parse_bss_select()
10581 if (found) in parse_bss_select()
10589 if (attr[NL80211_BSS_SELECT_ATTR_RSSI]) in parse_bss_select()
10592 if (attr[NL80211_BSS_SELECT_ATTR_BAND_PREF]) { in parse_bss_select()
10596 if (!is_band_valid(wiphy, bss_select->param.band_pref)) in parse_bss_select()
10600 if (attr[NL80211_BSS_SELECT_ATTR_RSSI_ADJUST]) { in parse_bss_select()
10607 if (!is_band_valid(wiphy, bss_select->param.adjust.band)) in parse_bss_select()
10612 if (bss_select->behaviour == __NL80211_BSS_SELECT_ATTR_INVALID) in parse_bss_select()
10615 if (!(wiphy->bss_select_support & BIT(bss_select->behaviour))) in parse_bss_select()
10626 if (!attrs[NL80211_ATTR_MAC] && !attrs[NL80211_ATTR_MAC_MASK]) { in nl80211_parse_random_mac()
10636 if (!attrs[NL80211_ATTR_MAC] || !attrs[NL80211_ATTR_MAC_MASK]) in nl80211_parse_random_mac()
10643 if (!is_multicast_ether_addr(mac_addr_mask) || in nl80211_parse_random_mac()
10667 if (!cfg80211_wdev_channel_allowed(wdev, chan)) in cfg80211_off_channel_oper_allowed()
10670 if (!cfg80211_beaconing_iface_active(wdev)) in cfg80211_off_channel_oper_allowed()
10676 * FIXME: check if we have a free radio/link for chan in cfg80211_off_channel_oper_allowed()
10688 if (!chandef || !chandef->chan) in cfg80211_off_channel_oper_allowed()
10691 if (!(chandef->chan->flags & IEEE80211_CHAN_RADAR)) in cfg80211_off_channel_oper_allowed()
10695 * chandef->chan is a radar channel. If the radio/link onto in cfg80211_off_channel_oper_allowed()
10703 if (link_radio_idx == radio_idx) { in cfg80211_off_channel_oper_allowed()
10709 if (all_ok) in cfg80211_off_channel_oper_allowed()
10718 if (!(flags & flag)) in nl80211_check_scan_feat()
10720 if (wiphy_ext_feature_isset(wiphy, feat)) in nl80211_check_scan_feat()
10730 if (!attrs[NL80211_ATTR_SCAN_FLAGS]) in nl80211_check_scan_flags()
10735 if (((*flags & NL80211_SCAN_FLAG_LOW_PRIORITY) && in nl80211_check_scan_flags()
10766 if (*flags & NL80211_SCAN_FLAG_RANDOM_ADDR) { in nl80211_check_scan_flags()
10769 if (!(wiphy->features & randomness_flag) || in nl80211_check_scan_flags()
10774 if (err) in nl80211_check_scan_flags()
10820 if (wdev->iftype == NL80211_IFTYPE_NAN) in nl80211_trigger_scan()
10823 if (!rdev->ops->scan) in nl80211_trigger_scan()
10826 if (rdev->scan_req || rdev->scan_msg) in nl80211_trigger_scan()
10829 if (info->attrs[NL80211_ATTR_SCAN_FREQ_KHZ]) { in nl80211_trigger_scan()
10830 if (!wiphy_ext_feature_isset(wiphy, in nl80211_trigger_scan()
10835 } else if (info->attrs[NL80211_ATTR_SCAN_FREQUENCIES]) in nl80211_trigger_scan()
10838 if (scan_freqs) { in nl80211_trigger_scan()
10840 if (!n_channels) in nl80211_trigger_scan()
10846 if (info->attrs[NL80211_ATTR_SCAN_SSIDS]) in nl80211_trigger_scan()
10850 if (n_ssids > wiphy->max_scan_ssids) in nl80211_trigger_scan()
10853 if (info->attrs[NL80211_ATTR_IE]) in nl80211_trigger_scan()
10858 if (ie_len > wiphy->max_scan_ie_len) in nl80211_trigger_scan()
10867 if (!request) in nl80211_trigger_scan()
10870 if (n_ssids) in nl80211_trigger_scan()
10873 if (ie_len) in nl80211_trigger_scan()
10877 if (scan_freqs) { in nl80211_trigger_scan()
10878 /* user specified, bail out if channel not found */ in nl80211_trigger_scan()
10883 if (!scan_freqs_khz) in nl80211_trigger_scan()
10887 if (!chan) { in nl80211_trigger_scan()
10893 if (chan->flags & IEEE80211_CHAN_DISABLED || in nl80211_trigger_scan()
10908 if (!wiphy->bands[band]) in nl80211_trigger_scan()
10915 if (chan->flags & IEEE80211_CHAN_DISABLED || in nl80211_trigger_scan()
10927 if (!i) { in nl80211_trigger_scan()
10937 /* if we can go off-channel to the target channel we're good */ in nl80211_trigger_scan()
10938 if (cfg80211_off_channel_oper_allowed(wdev, chan)) in nl80211_trigger_scan()
10941 if (!cfg80211_wdev_on_sub_chan(wdev, chan, true)) { in nl80211_trigger_scan()
10948 if (n_ssids) { in nl80211_trigger_scan()
10950 if (nla_len(attr) > IEEE80211_MAX_SSID_LEN) { in nl80211_trigger_scan()
10961 if (info->attrs[NL80211_ATTR_IE]) { in nl80211_trigger_scan()
10969 if (wiphy->bands[i]) in nl80211_trigger_scan()
10973 if (info->attrs[NL80211_ATTR_SCAN_SUPP_RATES]) { in nl80211_trigger_scan()
10979 if (band < 0 || band >= NUM_NL80211_BANDS) { in nl80211_trigger_scan()
10984 if (!wiphy->bands[band]) in nl80211_trigger_scan()
10991 if (err) in nl80211_trigger_scan()
10996 if (info->attrs[NL80211_ATTR_MEASUREMENT_DURATION]) { in nl80211_trigger_scan()
11004 if (err) in nl80211_trigger_scan()
11015 * NL80211_ATTR_MAC value here if it can be determined to be used for in nl80211_trigger_scan()
11019 if (info->attrs[NL80211_ATTR_BSSID]) in nl80211_trigger_scan()
11022 else if (!(request->req.flags & NL80211_SCAN_FLAG_RANDOM_ADDR) && in nl80211_trigger_scan()
11039 if (err) in nl80211_trigger_scan()
11059 if (!rdev->ops->abort_scan) in nl80211_abort_scan()
11062 if (rdev->scan_msg) in nl80211_abort_scan()
11065 if (!rdev->scan_req) in nl80211_abort_scan()
11080 if (!attrs[NL80211_ATTR_SCHED_SCAN_PLANS]) { in nl80211_parse_sched_scan_plans()
11084 * If scan plans are not specified, in nl80211_parse_sched_scan_plans()
11090 if (!interval) in nl80211_parse_sched_scan_plans()
11095 if (!request->scan_plans[0].interval) in nl80211_parse_sched_scan_plans()
11098 if (request->scan_plans[0].interval > in nl80211_parse_sched_scan_plans()
11109 if (WARN_ON(i >= n_plans)) in nl80211_parse_sched_scan_plans()
11116 if (err) in nl80211_parse_sched_scan_plans()
11119 if (!plan[NL80211_SCHED_SCAN_PLAN_INTERVAL]) in nl80211_parse_sched_scan_plans()
11124 if (!request->scan_plans[i].interval || in nl80211_parse_sched_scan_plans()
11129 if (plan[NL80211_SCHED_SCAN_PLAN_ITERATIONS]) { in nl80211_parse_sched_scan_plans()
11132 if (!request->scan_plans[i].iterations || in nl80211_parse_sched_scan_plans()
11136 } else if (i < n_plans - 1) { in nl80211_parse_sched_scan_plans()
11151 if (request->scan_plans[n_plans - 1].iterations) in nl80211_parse_sched_scan_plans()
11169 if (attrs[NL80211_ATTR_SCAN_FREQUENCIES]) { in nl80211_parse_sched_scan()
11172 if (!n_channels) in nl80211_parse_sched_scan()
11178 if (attrs[NL80211_ATTR_SCAN_SSIDS]) in nl80211_parse_sched_scan()
11183 if (n_ssids > wiphy->max_sched_scan_ssids) in nl80211_parse_sched_scan()
11193 * global RSSI for all other matchsets - if there are other matchsets. in nl80211_parse_sched_scan()
11195 if (attrs[NL80211_ATTR_SCHED_SCAN_MATCH]) { in nl80211_parse_sched_scan()
11206 if (err) in nl80211_parse_sched_scan()
11210 if (tb[NL80211_SCHED_SCAN_MATCH_ATTR_SSID] && in nl80211_parse_sched_scan()
11215 if (tb[NL80211_SCHED_SCAN_MATCH_ATTR_SSID] || in nl80211_parse_sched_scan()
11221 if (rssi) in nl80211_parse_sched_scan()
11226 /* However, if there's no other matchset, add the RSSI one */ in nl80211_parse_sched_scan()
11227 if (!n_match_sets && default_match_rssi != NL80211_SCAN_RSSI_THOLD_OFF) in nl80211_parse_sched_scan()
11230 if (n_match_sets > max_match_sets) in nl80211_parse_sched_scan()
11233 if (attrs[NL80211_ATTR_IE]) in nl80211_parse_sched_scan()
11238 if (ie_len > wiphy->max_sched_scan_ie_len) in nl80211_parse_sched_scan()
11241 if (attrs[NL80211_ATTR_SCHED_SCAN_PLANS]) { in nl80211_parse_sched_scan()
11246 if (attrs[NL80211_ATTR_SCHED_SCAN_INTERVAL]) in nl80211_parse_sched_scan()
11255 * compatibility. If no scan plans are specified and sched scan in nl80211_parse_sched_scan()
11259 if (!attrs[NL80211_ATTR_SCHED_SCAN_INTERVAL]) in nl80211_parse_sched_scan()
11265 if (!n_plans || n_plans > wiphy->max_sched_scan_plans) in nl80211_parse_sched_scan()
11268 if (!wiphy_ext_feature_isset( in nl80211_parse_sched_scan()
11282 if (!request) in nl80211_parse_sched_scan()
11286 if (n_ssids) in nl80211_parse_sched_scan()
11290 if (ie_len) { in nl80211_parse_sched_scan()
11291 if (n_ssids) in nl80211_parse_sched_scan()
11297 if (n_match_sets) { in nl80211_parse_sched_scan()
11298 if (request->ie) in nl80211_parse_sched_scan()
11300 else if (n_ssids) in nl80211_parse_sched_scan()
11309 if (n_match_sets) in nl80211_parse_sched_scan()
11312 else if (request->ie) in nl80211_parse_sched_scan()
11314 else if (n_ssids) in nl80211_parse_sched_scan()
11322 if (attrs[NL80211_ATTR_SCAN_FREQUENCIES]) { in nl80211_parse_sched_scan()
11323 /* user specified, bail out if channel not found */ in nl80211_parse_sched_scan()
11331 if (!chan) { in nl80211_parse_sched_scan()
11337 if (chan->flags & IEEE80211_CHAN_DISABLED) in nl80211_parse_sched_scan()
11348 if (!wiphy->bands[band]) in nl80211_parse_sched_scan()
11355 if (chan->flags & IEEE80211_CHAN_DISABLED) in nl80211_parse_sched_scan()
11364 if (!i) { in nl80211_parse_sched_scan()
11372 if (n_ssids) { in nl80211_parse_sched_scan()
11375 if (nla_len(attr) > IEEE80211_MAX_SSID_LEN) { in nl80211_parse_sched_scan()
11387 if (attrs[NL80211_ATTR_SCHED_SCAN_MATCH]) { in nl80211_parse_sched_scan()
11398 if (err) in nl80211_parse_sched_scan()
11403 if (!ssid && !bssid) { in nl80211_parse_sched_scan()
11408 if (WARN_ON(i >= n_match_sets)) { in nl80211_parse_sched_scan()
11417 if (ssid) { in nl80211_parse_sched_scan()
11423 if (bssid) in nl80211_parse_sched_scan()
11430 if (rssi) in nl80211_parse_sched_scan()
11437 if (i == 0 && n_match_sets) in nl80211_parse_sched_scan()
11449 if (ie_len) { in nl80211_parse_sched_scan()
11457 if (err) in nl80211_parse_sched_scan()
11460 if (attrs[NL80211_ATTR_SCHED_SCAN_DELAY]) in nl80211_parse_sched_scan()
11464 if (attrs[NL80211_ATTR_SCHED_SCAN_RELATIVE_RSSI]) { in nl80211_parse_sched_scan()
11470 if (request->relative_rssi_set && in nl80211_parse_sched_scan()
11478 if (!is_band_valid(wiphy, request->rssi_adjust.band)) { in nl80211_parse_sched_scan()
11485 if (err) in nl80211_parse_sched_scan()
11507 if (!rdev->wiphy.max_sched_scan_reqs || !rdev->ops->sched_scan_start) in nl80211_start_sched_scan()
11512 if (err) in nl80211_start_sched_scan()
11520 if (err) in nl80211_start_sched_scan()
11524 * or if driver does not support multi-scheduled scan in nl80211_start_sched_scan()
11526 if (want_multi && rdev->wiphy.max_sched_scan_reqs > 1) in nl80211_start_sched_scan()
11530 if (err) in nl80211_start_sched_scan()
11536 if (info->attrs[NL80211_ATTR_SOCKET_OWNER]) in nl80211_start_sched_scan()
11557 if (!rdev->wiphy.max_sched_scan_reqs || !rdev->ops->sched_scan_stop) in nl80211_stop_sched_scan()
11560 if (info->attrs[NL80211_ATTR_COOKIE]) { in nl80211_stop_sched_scan()
11568 if (!req || req->reqid || in nl80211_stop_sched_scan()
11605 if (dfs_region == NL80211_DFS_UNSET) in nl80211_start_radar_detection()
11609 if (err) in nl80211_start_radar_detection()
11613 if (err < 0) in nl80211_start_radar_detection()
11616 if (err == 0) in nl80211_start_radar_detection()
11619 if (!cfg80211_chandef_dfs_usable(wiphy, &chandef)) in nl80211_start_radar_detection()
11622 if (nla_get_flag(info->attrs[NL80211_ATTR_RADAR_BACKGROUND])) in nl80211_start_radar_detection()
11626 if (cfg80211_beaconing_iface_active(wdev)) { in nl80211_start_radar_detection()
11630 if (wdev->valid_links && in nl80211_start_radar_detection()
11638 if (wdev->links[link_id].cac_started) in nl80211_start_radar_detection()
11642 if (wiphy_ext_feature_isset(wiphy, NL80211_EXT_FEATURE_DFS_OFFLOAD)) in nl80211_start_radar_detection()
11645 if (!rdev->ops->start_radar_detection) in nl80211_start_radar_detection()
11649 if (WARN_ON(!cac_time_ms)) in nl80211_start_radar_detection()
11654 if (err) in nl80211_start_radar_detection()
11691 if (dfs_region == NL80211_DFS_UNSET) { in nl80211_notify_radar_detection()
11698 if (err) { in nl80211_notify_radar_detection()
11704 if (err < 0) { in nl80211_notify_radar_detection()
11709 if (err == 0) { in nl80211_notify_radar_detection()
11715 /* Do not process this notification if radar is already detected in nl80211_notify_radar_detection()
11718 if (chandef.chan->dfs_state == NL80211_DFS_UNAVAILABLE) in nl80211_notify_radar_detection()
11742 if (!attr) in nl80211_parse_counter_offsets()
11745 if (!nla_len(attr) || (nla_len(attr) % sizeof(u16))) in nl80211_parse_counter_offsets()
11749 if (rdev->wiphy.max_num_csa_counters && in nl80211_parse_counter_offsets()
11759 if (offset >= datalen) in nl80211_parse_counter_offsets()
11762 if (first_count != -1 && data[offset] != first_count) in nl80211_parse_counter_offsets()
11782 if (!rdev->ops->channel_switch || in nl80211_channel_switch()
11797 /* useless if AP is not running */ in nl80211_channel_switch()
11798 if (!wdev->links[link_id].ap.beacon_interval) in nl80211_channel_switch()
11802 if (!wdev->u.ibss.ssid_len) in nl80211_channel_switch()
11806 if (!wdev->u.mesh.id_len) in nl80211_channel_switch()
11816 if (!info->attrs[NL80211_ATTR_WIPHY_FREQ] || in nl80211_channel_switch()
11821 if (need_new_beacon && !info->attrs[NL80211_ATTR_CSA_IES]) in nl80211_channel_switch()
11828 if (cs_count > 255) in nl80211_channel_switch()
11833 if (!need_new_beacon) in nl80211_channel_switch()
11838 if (err) in nl80211_channel_switch()
11842 if (!csa_attrs) { in nl80211_channel_switch()
11850 if (err) in nl80211_channel_switch()
11855 if (err) in nl80211_channel_switch()
11858 if (!csa_attrs[NL80211_ATTR_CNTDWN_OFFS_BEACON]) { in nl80211_channel_switch()
11869 if (err) in nl80211_channel_switch()
11878 if (err) in nl80211_channel_switch()
11884 if (err) in nl80211_channel_switch()
11887 if (!cfg80211_reg_can_beacon_relax(&rdev->wiphy, ¶ms.chandef, in nl80211_channel_switch()
11896 if (err < 0) in nl80211_channel_switch()
11899 if (err > 0) { in nl80211_channel_switch()
11901 if (need_handle_dfs_flag && in nl80211_channel_switch()
11908 if (info->attrs[NL80211_ATTR_CH_SWITCH_BLOCK_TX]) in nl80211_channel_switch()
11911 if ((wdev->iftype == NL80211_IFTYPE_AP || in nl80211_channel_switch()
11917 if (err) in nl80211_channel_switch()
11949 if (!hdr) in nl80211_send_bss()
11954 if (nla_put_u32(msg, NL80211_ATTR_GENERATION, rdev->bss_generation)) in nl80211_send_bss()
11956 if (wdev->netdev && in nl80211_send_bss()
11959 if (nla_put_u64_64bit(msg, NL80211_ATTR_WDEV, wdev_id(wdev), in nl80211_send_bss()
11964 if (!bss) in nl80211_send_bss()
11966 if ((!is_zero_ether_addr(res->bssid) && in nl80211_send_bss()
11972 if (rcu_access_pointer(res->proberesp_ies) && in nl80211_send_bss()
11980 if (ies) { in nl80211_send_bss()
11981 if (nla_put_u64_64bit(msg, NL80211_BSS_TSF, ies->tsf, in nl80211_send_bss()
11984 if (ies->len && nla_put(msg, NL80211_BSS_INFORMATION_ELEMENTS, in nl80211_send_bss()
11991 if (ies && ies->from_beacon) { in nl80211_send_bss()
11992 if (nla_put_u64_64bit(msg, NL80211_BSS_BEACON_TSF, ies->tsf, in nl80211_send_bss()
11995 if (ies->len && nla_put(msg, NL80211_BSS_BEACON_IES, in nl80211_send_bss()
12001 if (res->beacon_interval && in nl80211_send_bss()
12004 if (nla_put_u16(msg, NL80211_BSS_CAPABILITY, res->capability) || in nl80211_send_bss()
12012 if (intbss->parent_tsf && in nl80211_send_bss()
12019 if (res->ts_boottime && in nl80211_send_bss()
12024 if (!nl80211_put_signal(msg, intbss->pub.chains, in nl80211_send_bss()
12029 if (intbss->bss_source != BSS_SOURCE_STA_PROFILE) { in nl80211_send_bss()
12032 if (nla_put_u32(msg, NL80211_BSS_SIGNAL_MBM, in nl80211_send_bss()
12037 if (nla_put_u8(msg, NL80211_BSS_SIGNAL_UNSPEC, in nl80211_send_bss()
12050 if (intbss == wdev->links[link_id].client.current_bss && in nl80211_send_bss()
12062 if (intbss == wdev->u.ibss.current_bss && in nl80211_send_bss()
12071 if (nla_put_u32(msg, NL80211_BSS_USE_FOR, res->use_for)) in nl80211_send_bss()
12074 if (res->cannot_use_reasons && in nl80211_send_bss()
12103 if (!attrbuf) in nl80211_dump_scan()
12107 if (err) { in nl80211_dump_scan()
12126 if (start == 0) in nl80211_dump_scan()
12132 if (++idx <= start) in nl80211_dump_scan()
12134 if (!dump_include_use_data && in nl80211_dump_scan()
12137 if (nl80211_send_bss(skb, cb, in nl80211_dump_scan()
12161 /* skip radio stats if userspace didn't request them */ in nl80211_send_survey()
12162 if (!survey->channel && !allow_radio_stats) in nl80211_send_survey()
12167 if (!hdr) in nl80211_send_survey()
12170 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex)) in nl80211_send_survey()
12174 if (!infoattr) in nl80211_send_survey()
12177 if (survey->channel && in nl80211_send_survey()
12182 if (survey->channel && survey->channel->freq_offset && in nl80211_send_survey()
12187 if ((survey->filled & SURVEY_INFO_NOISE_DBM) && in nl80211_send_survey()
12190 if ((survey->filled & SURVEY_INFO_IN_USE) && in nl80211_send_survey()
12193 if ((survey->filled & SURVEY_INFO_TIME) && in nl80211_send_survey()
12197 if ((survey->filled & SURVEY_INFO_TIME_BUSY) && in nl80211_send_survey()
12201 if ((survey->filled & SURVEY_INFO_TIME_EXT_BUSY) && in nl80211_send_survey()
12205 if ((survey->filled & SURVEY_INFO_TIME_RX) && in nl80211_send_survey()
12209 if ((survey->filled & SURVEY_INFO_TIME_TX) && in nl80211_send_survey()
12213 if ((survey->filled & SURVEY_INFO_TIME_SCAN) && in nl80211_send_survey()
12217 if ((survey->filled & SURVEY_INFO_TIME_BSS_RX) && in nl80211_send_survey()
12243 if (!attrbuf) in nl80211_dump_survey()
12247 if (res) { in nl80211_dump_survey()
12257 if (!wdev->netdev) { in nl80211_dump_survey()
12262 if (!rdev->ops->dump_survey) { in nl80211_dump_survey()
12269 if (res == -ENOENT) in nl80211_dump_survey()
12271 if (res) in nl80211_dump_survey()
12275 if (survey.channel && in nl80211_dump_survey()
12281 if (nl80211_send_survey(skb, in nl80211_dump_survey()
12311 if (!info->attrs[NL80211_ATTR_MAC]) in nl80211_authenticate()
12314 if (!info->attrs[NL80211_ATTR_AUTH_TYPE]) in nl80211_authenticate()
12317 if (!info->attrs[NL80211_ATTR_SSID]) in nl80211_authenticate()
12320 if (!info->attrs[NL80211_ATTR_WIPHY_FREQ]) in nl80211_authenticate()
12324 if (err) in nl80211_authenticate()
12327 if (key.idx >= 0) { in nl80211_authenticate()
12328 if (key.type != -1 && key.type != NL80211_KEYTYPE_GROUP) in nl80211_authenticate()
12330 if (!key.p.key || !key.p.key_len) in nl80211_authenticate()
12332 if ((key.p.cipher != WLAN_CIPHER_SUITE_WEP40 || in nl80211_authenticate()
12337 if (key.idx > 3) in nl80211_authenticate()
12344 if (key.idx >= 0) { in nl80211_authenticate()
12349 if (key.p.cipher == rdev->wiphy.cipher_suites[i]) { in nl80211_authenticate()
12354 if (!ok) in nl80211_authenticate()
12358 if (!rdev->ops->auth) in nl80211_authenticate()
12361 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION && in nl80211_authenticate()
12367 if (info->attrs[NL80211_ATTR_WIPHY_FREQ_OFFSET]) in nl80211_authenticate()
12372 if (!chan) in nl80211_authenticate()
12378 if (info->attrs[NL80211_ATTR_IE]) { in nl80211_authenticate()
12383 if (info->attrs[NL80211_ATTR_SUPPORTED_SELECTORS]) { in nl80211_authenticate()
12391 if (!nl80211_valid_auth_type(rdev, auth_type, NL80211_CMD_AUTHENTICATE)) in nl80211_authenticate()
12394 if ((auth_type == NL80211_AUTHTYPE_SAE || in nl80211_authenticate()
12403 if (info->attrs[NL80211_ATTR_AUTH_DATA]) { in nl80211_authenticate()
12404 if (auth_type != NL80211_AUTHTYPE_SAE && in nl80211_authenticate()
12421 if (local_state_change) in nl80211_authenticate()
12429 if (req.link_id >= 0) { in nl80211_authenticate()
12430 if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_MLO)) in nl80211_authenticate()
12432 if (!info->attrs[NL80211_ATTR_MLD_ADDR]) in nl80211_authenticate()
12435 if (!is_valid_ether_addr(req.ap_mld_addr)) in nl80211_authenticate()
12442 if (!req.bss) in nl80211_authenticate()
12455 if (!info->attrs[NL80211_ATTR_SOCKET_OWNER]) { in validate_pae_over_nl80211()
12460 if (!rdev->ops->tx_control_port || in validate_pae_over_nl80211()
12477 if (info->attrs[NL80211_ATTR_CONTROL_PORT_ETHERTYPE]) { in nl80211_crypto_settings()
12483 if (!(rdev->wiphy.flags & WIPHY_FLAG_CONTROL_PORT_PROTOCOL) && in nl80211_crypto_settings()
12486 if (info->attrs[NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT]) in nl80211_crypto_settings()
12491 if (info->attrs[NL80211_ATTR_CONTROL_PORT_OVER_NL80211]) { in nl80211_crypto_settings()
12494 if (r < 0) in nl80211_crypto_settings()
12499 if (info->attrs[NL80211_ATTR_CONTROL_PORT_NO_PREAUTH]) in nl80211_crypto_settings()
12503 if (info->attrs[NL80211_ATTR_CIPHER_SUITES_PAIRWISE]) { in nl80211_crypto_settings()
12511 if (len % sizeof(u32)) in nl80211_crypto_settings()
12514 if (settings->n_ciphers_pairwise > cipher_limit) in nl80211_crypto_settings()
12520 if (!cfg80211_supported_cipher_suite( in nl80211_crypto_settings()
12526 if (info->attrs[NL80211_ATTR_CIPHER_SUITE_GROUP]) { in nl80211_crypto_settings()
12529 if (!cfg80211_supported_cipher_suite(&rdev->wiphy, in nl80211_crypto_settings()
12534 if (info->attrs[NL80211_ATTR_WPA_VERSIONS]) in nl80211_crypto_settings()
12538 if (info->attrs[NL80211_ATTR_AKM_SUITES]) { in nl80211_crypto_settings()
12546 if (len % sizeof(u32)) in nl80211_crypto_settings()
12549 if (settings->n_akm_suites > rdev->wiphy.max_num_akm_suites) in nl80211_crypto_settings()
12555 if (info->attrs[NL80211_ATTR_PMK]) { in nl80211_crypto_settings()
12556 if (nla_len(info->attrs[NL80211_ATTR_PMK]) != WLAN_PMK_LEN) in nl80211_crypto_settings()
12558 if (!wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_crypto_settings()
12566 if (info->attrs[NL80211_ATTR_SAE_PASSWORD]) { in nl80211_crypto_settings()
12567 if (!wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_crypto_settings()
12595 if (!attrs[NL80211_ATTR_MAC] || !attrs[NL80211_ATTR_WIPHY_FREQ]) in nl80211_assoc_bss()
12601 if (attrs[NL80211_ATTR_WIPHY_FREQ_OFFSET]) in nl80211_assoc_bss()
12605 if (!chan) in nl80211_assoc_bss()
12608 if (assoc_link_id >= 0) in nl80211_assoc_bss()
12610 if (assoc_link_id == link_id) in nl80211_assoc_bss()
12618 if (!bss) in nl80211_assoc_bss()
12636 if (!attrs) in nl80211_process_links()
12644 if (!attrs[NL80211_ATTR_MLO_LINK_ID]) { in nl80211_process_links()
12651 if (links[link_id].bss) { in nl80211_process_links()
12658 if (IS_ERR(links[link_id].bss)) { in nl80211_process_links()
12666 if (attrs[NL80211_ATTR_IE]) { in nl80211_process_links()
12671 if (cfg80211_find_elem(WLAN_EID_FRAGMENT, in nl80211_process_links()
12680 if (cfg80211_find_ext_elem(WLAN_EID_EXT_NON_INHERITANCE, in nl80211_process_links()
12703 if (dev->ieee80211_ptr->conn_owner_nlportid && in nl80211_associate()
12707 if (!info->attrs[NL80211_ATTR_SSID]) in nl80211_associate()
12710 if (!rdev->ops->assoc) in nl80211_associate()
12713 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION && in nl80211_associate()
12720 if (info->attrs[NL80211_ATTR_IE]) { in nl80211_associate()
12724 if (cfg80211_find_ext_elem(WLAN_EID_EXT_NON_INHERITANCE, in nl80211_associate()
12733 if (info->attrs[NL80211_ATTR_USE_MFP]) { in nl80211_associate()
12736 if (mfp == NL80211_MFP_REQUIRED) in nl80211_associate()
12738 else if (mfp != NL80211_MFP_NO) in nl80211_associate()
12742 if (info->attrs[NL80211_ATTR_PREV_BSSID]) in nl80211_associate()
12745 if (info->attrs[NL80211_ATTR_SUPPORTED_SELECTORS]) { in nl80211_associate()
12752 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_HT])) in nl80211_associate()
12755 if (info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK]) in nl80211_associate()
12760 if (info->attrs[NL80211_ATTR_HT_CAPABILITY]) { in nl80211_associate()
12761 if (!info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK]) in nl80211_associate()
12768 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_VHT])) in nl80211_associate()
12771 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_HE])) in nl80211_associate()
12774 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_EHT])) in nl80211_associate()
12777 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_UHR])) in nl80211_associate()
12780 if (info->attrs[NL80211_ATTR_VHT_CAPABILITY_MASK]) in nl80211_associate()
12785 if (info->attrs[NL80211_ATTR_VHT_CAPABILITY]) { in nl80211_associate()
12786 if (!info->attrs[NL80211_ATTR_VHT_CAPABILITY_MASK]) in nl80211_associate()
12793 if (nla_get_flag(info->attrs[NL80211_ATTR_USE_RRM])) { in nl80211_associate()
12794 if (!((rdev->wiphy.features & in nl80211_associate()
12803 if (info->attrs[NL80211_ATTR_FILS_KEK]) { in nl80211_associate()
12806 if (!info->attrs[NL80211_ATTR_FILS_NONCES]) in nl80211_associate()
12812 if (info->attrs[NL80211_ATTR_S1G_CAPABILITY_MASK]) { in nl80211_associate()
12813 if (!info->attrs[NL80211_ATTR_S1G_CAPABILITY]) in nl80211_associate()
12820 if (info->attrs[NL80211_ATTR_S1G_CAPABILITY]) { in nl80211_associate()
12821 if (!info->attrs[NL80211_ATTR_S1G_CAPABILITY_MASK]) in nl80211_associate()
12828 if (nla_get_flag(info->attrs[NL80211_ATTR_ASSOC_SPP_AMSDU])) { in nl80211_associate()
12829 if (!wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_associate()
12839 if (info->attrs[NL80211_ATTR_MLO_LINKS]) { in nl80211_associate()
12840 if (req.link_id < 0) in nl80211_associate()
12843 if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_MLO)) in nl80211_associate()
12846 if (info->attrs[NL80211_ATTR_MAC] || in nl80211_associate()
12856 if (err) in nl80211_associate()
12859 if (!req.links[req.link_id].bss) { in nl80211_associate()
12864 if (req.links[req.link_id].elems_len) { in nl80211_associate()
12871 if (info->attrs[NL80211_ATTR_ASSOC_MLD_EXT_CAPA_OPS]) in nl80211_associate()
12875 if (req.link_id >= 0) in nl80211_associate()
12880 if (IS_ERR(req.bss)) in nl80211_associate()
12884 if (info->attrs[NL80211_ATTR_ASSOC_MLD_EXT_CAPA_OPS]) in nl80211_associate()
12889 if (!err) { in nl80211_associate()
12896 if (!err && info->attrs[NL80211_ATTR_SOCKET_OWNER]) { in nl80211_associate()
12904 if (info->attrs[NL80211_ATTR_MLO_LINKS]) { in nl80211_associate()
12911 if (!link_id_attr) in nl80211_associate()
12916 if (link_id == req.link_id) in nl80211_associate()
12919 if (!req.links[link_id].error || in nl80211_associate()
12949 if (dev->ieee80211_ptr->conn_owner_nlportid && in nl80211_deauthenticate()
12953 if (!info->attrs[NL80211_ATTR_MAC]) in nl80211_deauthenticate()
12956 if (!info->attrs[NL80211_ATTR_REASON_CODE]) in nl80211_deauthenticate()
12959 if (!rdev->ops->deauth) in nl80211_deauthenticate()
12962 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION && in nl80211_deauthenticate()
12969 if (reason_code == 0) { in nl80211_deauthenticate()
12974 if (info->attrs[NL80211_ATTR_IE]) { in nl80211_deauthenticate()
12994 if (dev->ieee80211_ptr->conn_owner_nlportid && in nl80211_disassociate()
12998 if (!info->attrs[NL80211_ATTR_MAC]) in nl80211_disassociate()
13001 if (!info->attrs[NL80211_ATTR_REASON_CODE]) in nl80211_disassociate()
13004 if (!rdev->ops->disassoc) in nl80211_disassociate()
13007 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION && in nl80211_disassociate()
13014 if (reason_code == 0) { in nl80211_disassociate()
13019 if (info->attrs[NL80211_ATTR_IE]) { in nl80211_disassociate()
13043 if (!sband) in nl80211_parse_mcast_rate()
13047 if (sband->bitrates[i].bitrate == rateval) { in nl80211_parse_mcast_rate()
13069 if (!info->attrs[NL80211_ATTR_SSID] || in nl80211_join_ibss()
13075 if (info->attrs[NL80211_ATTR_BEACON_INTERVAL]) in nl80211_join_ibss()
13081 if (err) in nl80211_join_ibss()
13084 if (!rdev->ops->join_ibss) in nl80211_join_ibss()
13087 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_ADHOC) in nl80211_join_ibss()
13092 if (info->attrs[NL80211_ATTR_MAC]) { in nl80211_join_ibss()
13095 if (!is_valid_ether_addr(ibss.bssid)) in nl80211_join_ibss()
13101 if (info->attrs[NL80211_ATTR_IE]) { in nl80211_join_ibss()
13108 if (err) in nl80211_join_ibss()
13111 if (!cfg80211_reg_can_beacon(&rdev->wiphy, &ibss.chandef, in nl80211_join_ibss()
13122 if (!(rdev->wiphy.features & NL80211_FEATURE_HT_IBSS)) in nl80211_join_ibss()
13128 if (!(rdev->wiphy.features & NL80211_FEATURE_HT_IBSS)) in nl80211_join_ibss()
13130 if (!wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_join_ibss()
13143 if (info->attrs[NL80211_ATTR_BSS_BASIC_RATES]) { in nl80211_join_ibss()
13153 if (err) in nl80211_join_ibss()
13157 if (info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK]) in nl80211_join_ibss()
13162 if (info->attrs[NL80211_ATTR_HT_CAPABILITY]) { in nl80211_join_ibss()
13163 if (!info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK]) in nl80211_join_ibss()
13170 if (info->attrs[NL80211_ATTR_MCAST_RATE] && in nl80211_join_ibss()
13175 if (ibss.privacy && info->attrs[NL80211_ATTR_KEYS]) { in nl80211_join_ibss()
13179 if (IS_ERR(connkeys)) in nl80211_join_ibss()
13182 if ((ibss.chandef.width != NL80211_CHAN_WIDTH_20_NOHT) && in nl80211_join_ibss()
13192 if (info->attrs[NL80211_ATTR_CONTROL_PORT_OVER_NL80211]) { in nl80211_join_ibss()
13195 if (r < 0) { in nl80211_join_ibss()
13207 if (err) in nl80211_join_ibss()
13209 else if (info->attrs[NL80211_ATTR_SOCKET_OWNER]) in nl80211_join_ibss()
13220 if (!rdev->ops->leave_ibss) in nl80211_leave_ibss()
13223 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_ADHOC) in nl80211_leave_ibss()
13236 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_ADHOC && in nl80211_set_mcast_rate()
13241 if (!rdev->ops->set_mcast_rate) in nl80211_set_mcast_rate()
13246 if (!info->attrs[NL80211_ATTR_MCAST_RATE]) in nl80211_set_mcast_rate()
13250 if (!nl80211_parse_mcast_rate(rdev, mcast_rate, nla_rate)) in nl80211_set_mcast_rate()
13269 if (!skb) in __cfg80211_alloc_vendor_skb()
13273 if (!hdr) { in __cfg80211_alloc_vendor_skb()
13278 if (nla_put_u32(skb, NL80211_ATTR_WIPHY, rdev->wiphy_idx)) in __cfg80211_alloc_vendor_skb()
13281 if (info) { in __cfg80211_alloc_vendor_skb()
13282 if (nla_put_u32(skb, NL80211_ATTR_VENDOR_ID, in __cfg80211_alloc_vendor_skb()
13285 if (nla_put_u32(skb, NL80211_ATTR_VENDOR_SUBCMD, in __cfg80211_alloc_vendor_skb()
13290 if (wdev) { in __cfg80211_alloc_vendor_skb()
13291 if (nla_put_u64_64bit(skb, NL80211_ATTR_WDEV, in __cfg80211_alloc_vendor_skb()
13294 if (wdev->netdev && in __cfg80211_alloc_vendor_skb()
13301 if (!data) in __cfg80211_alloc_vendor_skb()
13328 if (WARN_ON(vendor_event_idx != -1)) in __cfg80211_alloc_event_skb()
13333 if (WARN_ON(vendor_event_idx < 0 || in __cfg80211_alloc_event_skb()
13362 if (nlhdr->nlmsg_pid) { in __cfg80211_send_event_skb()
13366 if (data->nla_type == NL80211_ATTR_VENDOR_DATA) in __cfg80211_send_event_skb()
13387 if (!rdev->ops->testmode_cmd) in nl80211_testmode_do()
13390 if (IS_ERR(wdev)) { in nl80211_testmode_do()
13392 if (err != -EINVAL) in nl80211_testmode_do()
13395 } else if (wdev->wiphy != &rdev->wiphy) { in nl80211_testmode_do()
13399 if (!info->attrs[NL80211_ATTR_TESTDATA]) in nl80211_testmode_do()
13423 if (cb->args[0]) { in nl80211_testmode_dump()
13431 if (!rdev) { in nl80211_testmode_dump()
13437 if (!attrbuf) { in nl80211_testmode_dump()
13446 if (err) in nl80211_testmode_dump()
13450 if (IS_ERR(rdev)) { in nl80211_testmode_dump()
13456 if (attrbuf[NL80211_ATTR_TESTDATA]) in nl80211_testmode_dump()
13460 if (cb->args[1]) { in nl80211_testmode_dump()
13465 if (!rdev->ops->testmode_dump) { in nl80211_testmode_dump()
13476 if (!hdr) in nl80211_testmode_dump()
13479 if (nla_put_u32(skb, NL80211_ATTR_WIPHY, phy_idx)) { in nl80211_testmode_dump()
13485 if (!tmdata) { in nl80211_testmode_dump()
13492 if (err == -ENOBUFS || err == -ENOENT) { in nl80211_testmode_dump()
13495 } else if (err) { in nl80211_testmode_dump()
13525 if (!info->attrs[NL80211_ATTR_SSID] || in nl80211_connect()
13529 if (info->attrs[NL80211_ATTR_AUTH_TYPE]) { in nl80211_connect()
13532 if (!nl80211_valid_auth_type(rdev, connect.auth_type, in nl80211_connect()
13540 if (info->attrs[NL80211_ATTR_WANT_1X_4WAY_HS] && in nl80211_connect()
13548 if (err) in nl80211_connect()
13551 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION && in nl80211_connect()
13558 if (info->attrs[NL80211_ATTR_BG_SCAN_PERIOD] && in nl80211_connect()
13564 if (info->attrs[NL80211_ATTR_MAC]) in nl80211_connect()
13566 else if (info->attrs[NL80211_ATTR_MAC_HINT]) in nl80211_connect()
13572 if (info->attrs[NL80211_ATTR_IE]) { in nl80211_connect()
13577 if (info->attrs[NL80211_ATTR_USE_MFP]) { in nl80211_connect()
13579 if (connect.mfp == NL80211_MFP_OPTIONAL && in nl80211_connect()
13587 if (info->attrs[NL80211_ATTR_PREV_BSSID]) in nl80211_connect()
13591 if (info->attrs[NL80211_ATTR_WIPHY_FREQ]) in nl80211_connect()
13594 if (info->attrs[NL80211_ATTR_WIPHY_FREQ_OFFSET]) in nl80211_connect()
13598 if (freq) { in nl80211_connect()
13600 if (!connect.channel) in nl80211_connect()
13602 } else if (info->attrs[NL80211_ATTR_WIPHY_FREQ_HINT]) { in nl80211_connect()
13606 if (!connect.channel_hint) in nl80211_connect()
13610 if (info->attrs[NL80211_ATTR_WIPHY_EDMG_CHANNELS]) { in nl80211_connect()
13614 if (info->attrs[NL80211_ATTR_WIPHY_EDMG_BW_CONFIG]) in nl80211_connect()
13619 if (connect.privacy && info->attrs[NL80211_ATTR_KEYS]) { in nl80211_connect()
13621 if (IS_ERR(connkeys)) in nl80211_connect()
13625 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_HT])) in nl80211_connect()
13628 if (info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK]) in nl80211_connect()
13633 if (info->attrs[NL80211_ATTR_HT_CAPABILITY]) { in nl80211_connect()
13634 if (!info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK]) { in nl80211_connect()
13643 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_VHT])) in nl80211_connect()
13646 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_HE])) in nl80211_connect()
13649 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_EHT])) in nl80211_connect()
13652 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_UHR])) in nl80211_connect()
13655 if (info->attrs[NL80211_ATTR_VHT_CAPABILITY_MASK]) in nl80211_connect()
13660 if (info->attrs[NL80211_ATTR_VHT_CAPABILITY]) { in nl80211_connect()
13661 if (!info->attrs[NL80211_ATTR_VHT_CAPABILITY_MASK]) { in nl80211_connect()
13670 if (nla_get_flag(info->attrs[NL80211_ATTR_USE_RRM])) { in nl80211_connect()
13671 if (!((rdev->wiphy.features & in nl80211_connect()
13683 if (connect.pbss && !rdev->wiphy.bands[NL80211_BAND_60GHZ]) { in nl80211_connect()
13688 if (info->attrs[NL80211_ATTR_BSS_SELECT]) { in nl80211_connect()
13689 /* bss selection makes no sense if bssid is set */ in nl80211_connect()
13690 if (connect.bssid) { in nl80211_connect()
13697 if (err) { in nl80211_connect()
13703 if (wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_connect()
13724 } else if (info->attrs[NL80211_ATTR_FILS_ERP_USERNAME] || in nl80211_connect()
13732 if (nla_get_flag(info->attrs[NL80211_ATTR_EXTERNAL_AUTH_SUPPORT])) { in nl80211_connect()
13733 if (!info->attrs[NL80211_ATTR_SOCKET_OWNER]) { in nl80211_connect()
13742 if (nla_get_flag(info->attrs[NL80211_ATTR_MLO_SUPPORT])) in nl80211_connect()
13747 if (err) in nl80211_connect()
13750 if (!err && info->attrs[NL80211_ATTR_SOCKET_OWNER]) { in nl80211_connect()
13752 if (connect.bssid) in nl80211_connect()
13773 if (!rdev->ops->update_connect_params) in nl80211_update_connect_params()
13776 if (info->attrs[NL80211_ATTR_IE]) { in nl80211_update_connect_params()
13790 if (fils_sk_offload && in nl80211_update_connect_params()
13811 } else if (info->attrs[NL80211_ATTR_FILS_ERP_USERNAME] || in nl80211_update_connect_params()
13818 if (info->attrs[NL80211_ATTR_AUTH_TYPE]) { in nl80211_update_connect_params()
13820 if (!nl80211_valid_auth_type(rdev, auth_type, in nl80211_update_connect_params()
13824 if (auth_type == NL80211_AUTHTYPE_FILS_SK && in nl80211_update_connect_params()
13832 if (!wdev->connected) in nl80211_update_connect_params()
13844 if (dev->ieee80211_ptr->conn_owner_nlportid && in nl80211_disconnect()
13851 if (reason == 0) in nl80211_disconnect()
13854 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION && in nl80211_disconnect()
13867 if (info->attrs[NL80211_ATTR_PID]) { in nl80211_wiphy_netns()
13871 } else if (info->attrs[NL80211_ATTR_NETNS_FD]) { in nl80211_wiphy_netns()
13879 if (IS_ERR(net)) in nl80211_wiphy_netns()
13890 if (!ns_capable(net->user_ns, CAP_NET_ADMIN)) { in nl80211_wiphy_netns()
13897 /* check if anything to do */ in nl80211_wiphy_netns()
13898 if (!net_eq(wiphy_net(&rdev->wiphy), net)) in nl80211_wiphy_netns()
13917 if (!info->attrs[NL80211_ATTR_PMKID]) in nl80211_set_pmksa()
13922 if (info->attrs[NL80211_ATTR_MAC]) { in nl80211_set_pmksa()
13924 } else if (info->attrs[NL80211_ATTR_SSID] && in nl80211_set_pmksa()
13934 if (info->attrs[NL80211_ATTR_PMK]) { in nl80211_set_pmksa()
13939 if (info->attrs[NL80211_ATTR_PMK_LIFETIME]) in nl80211_set_pmksa()
13943 if (info->attrs[NL80211_ATTR_PMK_REAUTH_THRESHOLD]) in nl80211_set_pmksa()
13947 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION && in nl80211_set_pmksa()
13954 if (!rdev->ops->set_pmksa) in nl80211_set_pmksa()
13978 if (info->attrs[NL80211_ATTR_PMKID]) in nl80211_del_pmksa()
13981 if (info->attrs[NL80211_ATTR_MAC]) { in nl80211_del_pmksa()
13983 } else if (info->attrs[NL80211_ATTR_SSID]) { in nl80211_del_pmksa()
13987 if (info->attrs[NL80211_ATTR_FILS_CACHE_ID] && in nl80211_del_pmksa()
13990 } else if (!sae_offload_support && !owe_offload_support) { in nl80211_del_pmksa()
13999 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION && in nl80211_del_pmksa()
14006 if (!rdev->ops->del_pmksa) in nl80211_del_pmksa()
14017 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION && in nl80211_flush_pmksa()
14021 if (!rdev->ops->flush_pmksa) in nl80211_flush_pmksa()
14038 if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_TDLS) || in nl80211_tdls_mgmt()
14042 if (!info->attrs[NL80211_ATTR_TDLS_ACTION] || in nl80211_tdls_mgmt()
14054 if (info->attrs[NL80211_ATTR_TDLS_PEER_CAPABILITY]) in nl80211_tdls_mgmt()
14073 if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_TDLS) || in nl80211_tdls_oper()
14077 if (!info->attrs[NL80211_ATTR_TDLS_OPERATION] || in nl80211_tdls_oper()
14100 if (!info->attrs[NL80211_ATTR_WIPHY_FREQ] || in nl80211_remain_on_channel()
14106 if (!rdev->ops->remain_on_channel || in nl80211_remain_on_channel()
14114 if (duration < NL80211_MIN_REMAIN_ON_CHANNEL_TIME || in nl80211_remain_on_channel()
14119 if (err) in nl80211_remain_on_channel()
14122 if (!cfg80211_off_channel_oper_allowed(wdev, chandef.chan)) { in nl80211_remain_on_channel()
14127 if (WARN_ON(!oper_chandef)) { in nl80211_remain_on_channel()
14133 /* note: returns first one if identical chandefs */ in nl80211_remain_on_channel()
14137 if (compat_chandef != &chandef) in nl80211_remain_on_channel()
14142 if (!msg) in nl80211_remain_on_channel()
14147 if (!hdr) { in nl80211_remain_on_channel()
14155 if (err) in nl80211_remain_on_channel()
14158 if (nla_put_u64_64bit(msg, NL80211_ATTR_COOKIE, cookie, in nl80211_remain_on_channel()
14180 if (!info->attrs[NL80211_ATTR_COOKIE]) in nl80211_cancel_remain_on_channel()
14183 if (!rdev->ops->cancel_remain_on_channel) in nl80211_cancel_remain_on_channel()
14200 if (!rdev->ops->set_bitrate_mask) in nl80211_set_tx_bitrate_mask()
14206 if (err) in nl80211_set_tx_bitrate_mask()
14218 if (!info->attrs[NL80211_ATTR_FRAME_MATCH]) in nl80211_register_mgmt()
14221 if (info->attrs[NL80211_ATTR_FRAME_TYPE]) in nl80211_register_mgmt()
14236 if (!wiphy_ext_feature_isset(wdev->wiphy, in nl80211_register_mgmt()
14246 /* not much point in registering if we can't reply */ in nl80211_register_mgmt()
14247 if (!rdev->ops->mgmt_tx) in nl80211_register_mgmt()
14250 if (info->attrs[NL80211_ATTR_RECEIVE_MULTICAST] && in nl80211_register_mgmt()
14279 if (!info->attrs[NL80211_ATTR_FRAME]) in nl80211_tx_mgmt()
14282 if (!rdev->ops->mgmt_tx) in nl80211_tx_mgmt()
14287 if (!info->attrs[NL80211_ATTR_WIPHY_FREQ]) in nl80211_tx_mgmt()
14300 if (!wiphy_ext_feature_isset(wdev->wiphy, in nl80211_tx_mgmt()
14310 if (info->attrs[NL80211_ATTR_DURATION]) { in nl80211_tx_mgmt()
14311 if (!(rdev->wiphy.flags & WIPHY_FLAG_OFFCHAN_TX)) in nl80211_tx_mgmt()
14319 if (params.wait < NL80211_MIN_REMAIN_ON_CHANNEL_TIME || in nl80211_tx_mgmt()
14326 if (params.offchan && !(rdev->wiphy.flags & WIPHY_FLAG_OFFCHAN_TX)) in nl80211_tx_mgmt()
14331 /* get the channel if any has been specified, otherwise pass NULL to in nl80211_tx_mgmt()
14335 if (info->attrs[NL80211_ATTR_WIPHY_FREQ]) { in nl80211_tx_mgmt()
14338 if (err) in nl80211_tx_mgmt()
14342 if (!chandef.chan && params.offchan) in nl80211_tx_mgmt()
14345 if (params.offchan && in nl80211_tx_mgmt()
14355 if (params.link_id >= 0 && in nl80211_tx_mgmt()
14366 if (err) in nl80211_tx_mgmt()
14369 if (!params.dont_wait_for_ack) { in nl80211_tx_mgmt()
14371 if (!msg) in nl80211_tx_mgmt()
14376 if (!hdr) { in nl80211_tx_mgmt()
14384 if (err) in nl80211_tx_mgmt()
14387 if (msg) { in nl80211_tx_mgmt()
14388 if (nla_put_u64_64bit(msg, NL80211_ATTR_COOKIE, cookie, in nl80211_tx_mgmt()
14411 if (!info->attrs[NL80211_ATTR_COOKIE]) in nl80211_tx_mgmt_cancel_wait()
14414 if (!rdev->ops->mgmt_tx_cancel_wait) in nl80211_tx_mgmt_cancel_wait()
14427 if (!wiphy_ext_feature_isset(wdev->wiphy, in nl80211_tx_mgmt_cancel_wait()
14449 if (!info->attrs[NL80211_ATTR_PS_STATE]) in nl80211_set_power_save()
14456 if (!rdev->ops->set_power_mgmt) in nl80211_set_power_save()
14461 if (state == wdev->ps) in nl80211_set_power_save()
14465 if (!err) in nl80211_set_power_save()
14482 if (!rdev->ops->set_power_mgmt) in nl80211_get_power_save()
14486 if (!msg) in nl80211_get_power_save()
14491 if (!hdr) { in nl80211_get_power_save()
14496 if (wdev->ps) in nl80211_get_power_save()
14501 if (nla_put_u32(msg, NL80211_ATTR_PS_STATE, ps_state)) in nl80211_get_power_save()
14532 if (rate > 100 || intvl > NL80211_CQM_TXE_MAX_INTVL) in nl80211_set_cqm_txe()
14535 if (!rdev->ops->set_cqm_txe_config) in nl80211_set_cqm_txe()
14538 if (wdev->iftype != NL80211_IFTYPE_STATION && in nl80211_set_cqm_txe()
14556 * Obtain current RSSI value if possible, if not and no RSSI threshold in cfg80211_cqm_rssi_update()
14561 if (!cqm_config->last_rssi_event_value && in cfg80211_cqm_rssi_update()
14570 if (err) in cfg80211_cqm_rssi_update()
14574 if (sinfo.filled & BIT_ULL(NL80211_STA_INFO_BEACON_SIGNAL_AVG)) in cfg80211_cqm_rssi_update()
14585 if (last < cqm_config->rssi_thresholds[i]) in cfg80211_cqm_rssi_update()
14590 if (low_index >= 0) { in cfg80211_cqm_rssi_update()
14596 if (i < n) { in cfg80211_cqm_rssi_update()
14619 if (thresholds[i] > 0 || thresholds[i] <= prev) in nl80211_set_cqm_rssi()
14625 if (wdev->iftype != NL80211_IFTYPE_STATION && in nl80211_set_cqm_rssi()
14629 if (n_thresholds == 1 && thresholds[0] == 0) /* Disabling */ in nl80211_set_cqm_rssi()
14634 /* if already disabled just succeed */ in nl80211_set_cqm_rssi()
14635 if (!n_thresholds && !old) in nl80211_set_cqm_rssi()
14638 if (n_thresholds > 1) { in nl80211_set_cqm_rssi()
14639 if (!wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_set_cqm_rssi()
14644 if (!rdev->ops->set_cqm_rssi_config) in nl80211_set_cqm_rssi()
14648 if (n_thresholds) { in nl80211_set_cqm_rssi()
14651 if (!cqm_config) in nl80211_set_cqm_rssi()
14664 if (cqm_config->use_range_api) in nl80211_set_cqm_rssi()
14672 /* if enabled as range also disable via range */ in nl80211_set_cqm_rssi()
14673 if (old->use_range_api) in nl80211_set_cqm_rssi()
14679 if (err) { in nl80211_set_cqm_rssi()
14696 if (!cqm) in nl80211_set_cqm()
14702 if (err) in nl80211_set_cqm()
14705 if (attrs[NL80211_ATTR_CQM_RSSI_THOLD] && in nl80211_set_cqm()
14712 if (len % 4) in nl80211_set_cqm()
14719 if (attrs[NL80211_ATTR_CQM_TXE_RATE] && in nl80211_set_cqm()
14741 if (err) in nl80211_join_ocb()
14767 if (info->attrs[NL80211_ATTR_MESH_CONFIG]) { in nl80211_join_mesh()
14768 /* and parse parameters if given */ in nl80211_join_mesh()
14770 if (err) in nl80211_join_mesh()
14774 if (!info->attrs[NL80211_ATTR_MESH_ID] || in nl80211_join_mesh()
14781 if (info->attrs[NL80211_ATTR_MCAST_RATE] && in nl80211_join_mesh()
14786 if (info->attrs[NL80211_ATTR_BEACON_INTERVAL]) { in nl80211_join_mesh()
14793 if (err) in nl80211_join_mesh()
14797 if (info->attrs[NL80211_ATTR_DTIM_PERIOD]) { in nl80211_join_mesh()
14800 if (setup.dtim_period < 1 || setup.dtim_period > 100) in nl80211_join_mesh()
14804 if (info->attrs[NL80211_ATTR_MESH_SETUP]) { in nl80211_join_mesh()
14805 /* parse additional setup parameters if given */ in nl80211_join_mesh()
14807 if (err) in nl80211_join_mesh()
14811 if (setup.user_mpm) in nl80211_join_mesh()
14814 if (info->attrs[NL80211_ATTR_WIPHY_FREQ]) { in nl80211_join_mesh()
14817 if (err) in nl80211_join_mesh()
14824 if (info->attrs[NL80211_ATTR_BSS_BASIC_RATES]) { in nl80211_join_mesh()
14830 if (!setup.chandef.chan) in nl80211_join_mesh()
14837 if (err) in nl80211_join_mesh()
14841 if (info->attrs[NL80211_ATTR_TX_RATES]) { in nl80211_join_mesh()
14846 if (err) in nl80211_join_mesh()
14849 if (!setup.chandef.chan) in nl80211_join_mesh()
14854 if (err) in nl80211_join_mesh()
14861 if (info->attrs[NL80211_ATTR_CONTROL_PORT_OVER_NL80211]) { in nl80211_join_mesh()
14864 if (r < 0) in nl80211_join_mesh()
14871 if (!err && info->attrs[NL80211_ATTR_SOCKET_OWNER]) in nl80211_join_mesh()
14893 if (!wowlan->n_patterns) in nl80211_send_wowlan_patterns()
14897 if (!nl_pats) in nl80211_send_wowlan_patterns()
14902 if (!nl_pat) in nl80211_send_wowlan_patterns()
14905 if (nla_put(msg, NL80211_PKTPAT_MASK, DIV_ROUND_UP(pat_len, 8), in nl80211_send_wowlan_patterns()
14924 if (!tcp) in nl80211_send_wowlan_tcp()
14929 if (!nl_tcp) in nl80211_send_wowlan_tcp()
14932 if (nla_put_in_addr(msg, NL80211_WOWLAN_TCP_SRC_IPV4, tcp->src) || in nl80211_send_wowlan_tcp()
14947 if (tcp->payload_seq.len && in nl80211_send_wowlan_tcp()
14952 if (tcp->payload_tok.len && in nl80211_send_wowlan_tcp()
14969 if (!req) in nl80211_send_wowlan_nd()
14973 if (!nd) in nl80211_send_wowlan_nd()
14976 if (req->n_scan_plans == 1 && in nl80211_send_wowlan_nd()
14981 if (nla_put_u32(msg, NL80211_ATTR_SCHED_SCAN_DELAY, req->delay)) in nl80211_send_wowlan_nd()
14984 if (req->relative_rssi_set) { in nl80211_send_wowlan_nd()
14987 if (nla_put_s8(msg, NL80211_ATTR_SCHED_SCAN_RELATIVE_RSSI, in nl80211_send_wowlan_nd()
14993 if (nla_put(msg, NL80211_ATTR_SCHED_SCAN_RSSI_ADJUST, in nl80211_send_wowlan_nd()
14999 if (!freqs) in nl80211_send_wowlan_nd()
15003 if (nla_put_u32(msg, i, req->channels[i]->center_freq)) in nl80211_send_wowlan_nd()
15009 if (req->n_match_sets) { in nl80211_send_wowlan_nd()
15012 if (!matches) in nl80211_send_wowlan_nd()
15017 if (!match) in nl80211_send_wowlan_nd()
15020 if (nla_put(msg, NL80211_SCHED_SCAN_MATCH_ATTR_SSID, in nl80211_send_wowlan_nd()
15030 if (!scan_plans) in nl80211_send_wowlan_nd()
15035 if (!scan_plan) in nl80211_send_wowlan_nd()
15038 if (nla_put_u32(msg, NL80211_SCHED_SCAN_PLAN_INTERVAL, in nl80211_send_wowlan_nd()
15060 if (!rdev->wiphy.wowlan) in nl80211_get_wowlan()
15063 if (rdev->wiphy.wowlan_config && rdev->wiphy.wowlan_config->tcp) { in nl80211_get_wowlan()
15072 if (!msg) in nl80211_get_wowlan()
15077 if (!hdr) in nl80211_get_wowlan()
15080 if (rdev->wiphy.wowlan_config) { in nl80211_get_wowlan()
15085 if (!nl_wowlan) in nl80211_get_wowlan()
15088 if ((rdev->wiphy.wowlan_config->any && in nl80211_get_wowlan()
15104 if (nl80211_send_wowlan_patterns(msg, rdev)) in nl80211_get_wowlan()
15107 if (nl80211_send_wowlan_tcp(msg, in nl80211_get_wowlan()
15111 if (nl80211_send_wowlan_nd( in nl80211_get_wowlan()
15139 if (!rdev->wiphy.wowlan->tcp) in nl80211_parse_wowlan_tcp()
15144 if (err) in nl80211_parse_wowlan_tcp()
15147 if (!tb[NL80211_WOWLAN_TCP_SRC_IPV4] || in nl80211_parse_wowlan_tcp()
15158 if (data_size > rdev->wiphy.wowlan->tcp->data_payload_max) in nl80211_parse_wowlan_tcp()
15161 if (nla_get_u32(tb[NL80211_WOWLAN_TCP_DATA_INTERVAL]) > in nl80211_parse_wowlan_tcp()
15167 if (wake_size > rdev->wiphy.wowlan->tcp->wake_payload_max) in nl80211_parse_wowlan_tcp()
15171 if (wake_mask_size != DIV_ROUND_UP(wake_size, 8)) in nl80211_parse_wowlan_tcp()
15174 if (tb[NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN]) { in nl80211_parse_wowlan_tcp()
15180 if (!tok->len || tokens_size % tok->len) in nl80211_parse_wowlan_tcp()
15182 if (!rdev->wiphy.wowlan->tcp->tok) in nl80211_parse_wowlan_tcp()
15184 if (tok->len > rdev->wiphy.wowlan->tcp->tok->max_len) in nl80211_parse_wowlan_tcp()
15186 if (tok->len < rdev->wiphy.wowlan->tcp->tok->min_len) in nl80211_parse_wowlan_tcp()
15188 if (tokens_size > rdev->wiphy.wowlan->tcp->tok->bufsize) in nl80211_parse_wowlan_tcp()
15190 if (tok->offset + tok->len > data_size) in nl80211_parse_wowlan_tcp()
15194 if (tb[NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ]) { in nl80211_parse_wowlan_tcp()
15196 if (!rdev->wiphy.wowlan->tcp->seq) in nl80211_parse_wowlan_tcp()
15198 if (seq->len == 0 || seq->len > 4) in nl80211_parse_wowlan_tcp()
15200 if (seq->len + seq->offset > data_size) in nl80211_parse_wowlan_tcp()
15210 if (!cfg) in nl80211_parse_wowlan_tcp()
15221 if (err) { in nl80211_parse_wowlan_tcp()
15225 if (inet_csk_get_port(cfg->sock->sk, port)) { in nl80211_parse_wowlan_tcp()
15232 if (!port) { in nl80211_parse_wowlan_tcp()
15245 if (seq) in nl80211_parse_wowlan_tcp()
15258 if (tok) { in nl80211_parse_wowlan_tcp()
15279 if (!tb) in nl80211_parse_wowlan_nd()
15282 if (!(wowlan->flags & WIPHY_WOWLAN_NET_DETECT)) { in nl80211_parse_wowlan_nd()
15289 if (err) in nl80211_parse_wowlan_nd()
15295 if (err) in nl80211_parse_wowlan_nd()
15314 if (!wowlan) in nl80211_set_wowlan()
15317 if (!info->attrs[NL80211_ATTR_WOWLAN_TRIGGERS]) { in nl80211_set_wowlan()
15326 if (err) in nl80211_set_wowlan()
15329 if (tb[NL80211_WOWLAN_TRIG_ANY]) { in nl80211_set_wowlan()
15330 if (!(wowlan->flags & WIPHY_WOWLAN_ANY)) in nl80211_set_wowlan()
15335 if (tb[NL80211_WOWLAN_TRIG_DISCONNECT]) { in nl80211_set_wowlan()
15336 if (!(wowlan->flags & WIPHY_WOWLAN_DISCONNECT)) in nl80211_set_wowlan()
15342 if (tb[NL80211_WOWLAN_TRIG_MAGIC_PKT]) { in nl80211_set_wowlan()
15343 if (!(wowlan->flags & WIPHY_WOWLAN_MAGIC_PKT)) in nl80211_set_wowlan()
15349 if (tb[NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED]) in nl80211_set_wowlan()
15352 if (tb[NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE]) { in nl80211_set_wowlan()
15353 if (!(wowlan->flags & WIPHY_WOWLAN_GTK_REKEY_FAILURE)) in nl80211_set_wowlan()
15359 if (tb[NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST]) { in nl80211_set_wowlan()
15360 if (!(wowlan->flags & WIPHY_WOWLAN_EAP_IDENTITY_REQ)) in nl80211_set_wowlan()
15366 if (tb[NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE]) { in nl80211_set_wowlan()
15367 if (!(wowlan->flags & WIPHY_WOWLAN_4WAY_HANDSHAKE)) in nl80211_set_wowlan()
15373 if (tb[NL80211_WOWLAN_TRIG_RFKILL_RELEASE]) { in nl80211_set_wowlan()
15374 if (!(wowlan->flags & WIPHY_WOWLAN_RFKILL_RELEASE)) in nl80211_set_wowlan()
15380 if (tb[NL80211_WOWLAN_TRIG_PKT_PATTERN]) { in nl80211_set_wowlan()
15391 if (n_patterns > wowlan->n_patterns) in nl80211_set_wowlan()
15396 if (!new_triggers.patterns) in nl80211_set_wowlan()
15411 if (err) in nl80211_set_wowlan()
15415 if (!pat_tb[NL80211_PKTPAT_MASK] || in nl80211_set_wowlan()
15420 if (nla_len(pat_tb[NL80211_PKTPAT_MASK]) != mask_len) in nl80211_set_wowlan()
15422 if (pat_len > wowlan->pattern_max_len || in nl80211_set_wowlan()
15429 if (pkt_offset > wowlan->max_pkt_offset) in nl80211_set_wowlan()
15434 if (!mask_pat) { in nl80211_set_wowlan()
15451 if (tb[NL80211_WOWLAN_TRIG_TCP_CONNECTION]) { in nl80211_set_wowlan()
15456 if (err) in nl80211_set_wowlan()
15460 if (tb[NL80211_WOWLAN_TRIG_NET_DETECT]) { in nl80211_set_wowlan()
15465 if (err) in nl80211_set_wowlan()
15475 if (new_triggers.any && regular) { in nl80211_set_wowlan()
15481 if (!ntrig) { in nl80211_set_wowlan()
15489 if (rdev->ops->set_wakeup && in nl80211_set_wowlan()
15498 if (new_triggers.tcp && new_triggers.tcp->sock) in nl80211_set_wowlan()
15513 if (!rdev->coalesce->n_rules) in nl80211_send_coalesce_rules()
15517 if (!nl_rules) in nl80211_send_coalesce_rules()
15522 if (!nl_rule) in nl80211_send_coalesce_rules()
15526 if (nla_put_u32(msg, NL80211_ATTR_COALESCE_RULE_DELAY, in nl80211_send_coalesce_rules()
15530 if (nla_put_u32(msg, NL80211_ATTR_COALESCE_RULE_CONDITION, in nl80211_send_coalesce_rules()
15536 if (!nl_pats) in nl80211_send_coalesce_rules()
15541 if (!nl_pat) in nl80211_send_coalesce_rules()
15544 if (nla_put(msg, NL80211_PKTPAT_MASK, in nl80211_send_coalesce_rules()
15568 if (!rdev->wiphy.coalesce) in nl80211_get_coalesce()
15572 if (!msg) in nl80211_get_coalesce()
15577 if (!hdr) in nl80211_get_coalesce()
15580 if (rdev->coalesce && nl80211_send_coalesce_rules(msg, rdev)) in nl80211_get_coalesce()
15596 if (!coalesce) in cfg80211_free_coalesce()
15620 if (err) in nl80211_parse_coalesce_rule()
15623 if (tb[NL80211_ATTR_COALESCE_RULE_DELAY]) in nl80211_parse_coalesce_rule()
15626 if (new_rule->delay > coalesce->max_delay) in nl80211_parse_coalesce_rule()
15629 if (tb[NL80211_ATTR_COALESCE_RULE_CONDITION]) in nl80211_parse_coalesce_rule()
15633 if (!tb[NL80211_ATTR_COALESCE_RULE_PKT_PATTERN]) in nl80211_parse_coalesce_rule()
15639 if (n_patterns > coalesce->n_patterns) in nl80211_parse_coalesce_rule()
15643 if (!new_rule->patterns) in nl80211_parse_coalesce_rule()
15657 if (err) in nl80211_parse_coalesce_rule()
15660 if (!pat_tb[NL80211_PKTPAT_MASK] || in nl80211_parse_coalesce_rule()
15665 if (nla_len(pat_tb[NL80211_PKTPAT_MASK]) != mask_len) in nl80211_parse_coalesce_rule()
15667 if (pat_len > coalesce->pattern_max_len || in nl80211_parse_coalesce_rule()
15673 if (pkt_offset > coalesce->max_pkt_offset) in nl80211_parse_coalesce_rule()
15678 if (!mask_pat) in nl80211_parse_coalesce_rule()
15704 if (!rdev->wiphy.coalesce || !rdev->ops->set_coalesce) in nl80211_set_coalesce()
15707 if (!info->attrs[NL80211_ATTR_COALESCE_RULE]) { in nl80211_set_coalesce()
15717 if (n_rules > coalesce->n_rules) in nl80211_set_coalesce()
15721 if (!new_coalesce) in nl80211_set_coalesce()
15731 if (err) in nl80211_set_coalesce()
15738 if (err) in nl80211_set_coalesce()
15760 if (!info->attrs[NL80211_ATTR_REKEY_DATA]) in nl80211_set_rekey_data()
15766 if (err) in nl80211_set_rekey_data()
15769 if (!tb[NL80211_REKEY_DATA_REPLAY_CTR] || !tb[NL80211_REKEY_DATA_KEK] || in nl80211_set_rekey_data()
15772 if (nla_len(tb[NL80211_REKEY_DATA_KEK]) != NL80211_KEK_LEN && in nl80211_set_rekey_data()
15776 if (nla_len(tb[NL80211_REKEY_DATA_KCK]) != NL80211_KCK_LEN && in nl80211_set_rekey_data()
15788 if (tb[NL80211_REKEY_DATA_AKM]) in nl80211_set_rekey_data()
15791 if (!wdev->connected) in nl80211_set_rekey_data()
15794 if (!rdev->ops->set_rekey_data) in nl80211_set_rekey_data()
15806 if (wdev->iftype != NL80211_IFTYPE_AP && in nl80211_register_unexpected_frame()
15811 if (wdev->unexpected_nlportid) in nl80211_register_unexpected_frame()
15830 if (wdev->iftype != NL80211_IFTYPE_AP && in nl80211_probe_client()
15834 if (!info->attrs[NL80211_ATTR_MAC]) in nl80211_probe_client()
15837 if (!rdev->ops->probe_client) in nl80211_probe_client()
15841 if (!msg) in nl80211_probe_client()
15846 if (!hdr) { in nl80211_probe_client()
15854 if (err) in nl80211_probe_client()
15857 if (nla_put_u64_64bit(msg, NL80211_ATTR_COOKIE, cookie, in nl80211_probe_client()
15878 if (!(rdev->wiphy.flags & WIPHY_FLAG_REPORTS_OBSS)) in nl80211_register_beacons()
15882 if (!nreg) in nl80211_register_beacons()
15885 /* First, check if already registered. */ in nl80211_register_beacons()
15888 if (reg->nlportid == info->snd_portid) { in nl80211_register_beacons()
15912 if (!rdev->ops->start_p2p_device) in nl80211_start_p2p_device()
15915 if (wdev->iftype != NL80211_IFTYPE_P2P_DEVICE) in nl80211_start_p2p_device()
15918 if (wdev_running(wdev)) in nl80211_start_p2p_device()
15921 if (rfkill_blocked(rdev->wiphy.rfkill)) in nl80211_start_p2p_device()
15925 if (err) in nl80211_start_p2p_device()
15939 if (wdev->iftype != NL80211_IFTYPE_P2P_DEVICE) in nl80211_stop_p2p_device()
15942 if (!rdev->ops->stop_p2p_device) in nl80211_stop_p2p_device()
15956 /* Check if the frequency is valid for NAN */ in nl80211_get_nan_channel()
15957 if (freq != 5220 && freq != 5745 && freq != 2437) in nl80211_get_nan_channel()
15961 if (!chan) in nl80211_get_nan_channel()
15966 /* Check if the channel is allowed */ in nl80211_get_nan_channel()
15967 if (cfg80211_reg_can_beacon(wiphy, &def, NL80211_IFTYPE_NAN)) in nl80211_get_nan_channel()
15978 if (BIT(band) & ~(u32)wiphy->nan_supported_bands) in nl80211_parse_nan_band_config()
15981 if (tb[NL80211_NAN_BAND_CONF_FREQ]) { in nl80211_parse_nan_band_config()
15984 if (band != NL80211_BAND_5GHZ) in nl80211_parse_nan_band_config()
15988 if (!cfg->chan) in nl80211_parse_nan_band_config()
15992 if (tb[NL80211_NAN_BAND_CONF_RSSI_CLOSE]) { in nl80211_parse_nan_band_config()
15995 if (!tb[NL80211_NAN_BAND_CONF_RSSI_MIDDLE]) in nl80211_parse_nan_band_config()
15999 if (tb[NL80211_NAN_BAND_CONF_RSSI_MIDDLE]) { in nl80211_parse_nan_band_config()
16002 if (!cfg->rssi_close || cfg->rssi_middle >= cfg->rssi_close) in nl80211_parse_nan_band_config()
16006 if (tb[NL80211_NAN_BAND_CONF_WAKE_DW]) { in nl80211_parse_nan_band_config()
16010 if (band == NL80211_BAND_2GHZ && cfg->awake_dw_interval == 0) in nl80211_parse_nan_band_config()
16030 if (info->attrs[NL80211_ATTR_NAN_MASTER_PREF]) { in nl80211_parse_nan_conf()
16037 if (info->attrs[NL80211_ATTR_BANDS]) { in nl80211_parse_nan_conf()
16040 if (bands & ~(u32)wiphy->nan_supported_bands) in nl80211_parse_nan_conf()
16043 if (bands && !(bands & BIT(NL80211_BAND_2GHZ))) in nl80211_parse_nan_conf()
16051 if (conf->bands & BIT(NL80211_BAND_5GHZ) || !conf->bands) in nl80211_parse_nan_conf()
16057 if (!conf->band_cfgs[NL80211_BAND_2GHZ].chan) in nl80211_parse_nan_conf()
16060 if (!info->attrs[NL80211_ATTR_NAN_CONFIG]) in nl80211_parse_nan_conf()
16066 if (err) in nl80211_parse_nan_conf()
16070 if (attrs[NL80211_NAN_CONF_CLUSTER_ID] && start) { in nl80211_parse_nan_conf()
16073 } else if (start) { in nl80211_parse_nan_conf()
16081 if (attrs[NL80211_NAN_CONF_EXTRA_ATTRS]) { in nl80211_parse_nan_conf()
16088 if (attrs[NL80211_NAN_CONF_VENDOR_ELEMS]) { in nl80211_parse_nan_conf()
16095 if (attrs[NL80211_NAN_CONF_BAND_CONFIGS]) { in nl80211_parse_nan_conf()
16107 if (err) in nl80211_parse_nan_conf()
16110 if (!tb[NL80211_NAN_BAND_CONF_BAND]) in nl80211_parse_nan_conf()
16114 if (conf->bands && !(conf->bands & BIT(band))) in nl80211_parse_nan_conf()
16121 if (err) in nl80211_parse_nan_conf()
16126 if (attrs[NL80211_NAN_CONF_SCAN_PERIOD]) in nl80211_parse_nan_conf()
16130 if (attrs[NL80211_NAN_CONF_SCAN_DWELL_TIME]) in nl80211_parse_nan_conf()
16134 if (attrs[NL80211_NAN_CONF_DISCOVERY_BEACON_INTERVAL]) in nl80211_parse_nan_conf()
16138 if (attrs[NL80211_NAN_CONF_NOTIFY_DW]) in nl80211_parse_nan_conf()
16143 if (!conf->band_cfgs[NL80211_BAND_5GHZ].chan && in nl80211_parse_nan_conf()
16145 /* If no 5GHz channel is specified use default, if possible */ in nl80211_parse_nan_conf()
16148 if (!conf->band_cfgs[NL80211_BAND_5GHZ].chan) in nl80211_parse_nan_conf()
16152 /* Return error if user space asked explicitly for 5 GHz */ in nl80211_parse_nan_conf()
16153 if (!conf->band_cfgs[NL80211_BAND_5GHZ].chan && in nl80211_parse_nan_conf()
16162 if (changed_flags) in nl80211_parse_nan_conf()
16175 if (wdev->iftype != NL80211_IFTYPE_NAN) in nl80211_start_nan()
16178 if (wdev_running(wdev)) in nl80211_start_nan()
16181 if (rfkill_blocked(rdev->wiphy.rfkill)) in nl80211_start_nan()
16185 if (!info->attrs[NL80211_ATTR_NAN_MASTER_PREF]) in nl80211_start_nan()
16189 if (err) in nl80211_start_nan()
16193 if (err) in nl80211_start_nan()
16207 if (wdev->iftype != NL80211_IFTYPE_NAN) in nl80211_stop_nan()
16229 if (len >= U8_MAX) in validate_nan_filter()
16244 if (n_entries < 0) in handle_nan_filter()
16250 if (!filter) in handle_nan_filter()
16256 if (!filter[i].filter) in handle_nan_filter()
16262 if (tx) { in handle_nan_filter()
16293 if (wdev->iftype != NL80211_IFTYPE_NAN) in nl80211_nan_add_func()
16296 if (!wdev_running(wdev)) in nl80211_nan_add_func()
16299 if (!info->attrs[NL80211_ATTR_NAN_FUNC]) in nl80211_nan_add_func()
16306 if (err) in nl80211_nan_add_func()
16310 if (!func) in nl80211_nan_add_func()
16315 if (!tb[NL80211_NAN_FUNC_TYPE]) { in nl80211_nan_add_func()
16323 if (!tb[NL80211_NAN_FUNC_SERVICE_ID]) { in nl80211_nan_add_func()
16334 if (tb[NL80211_NAN_FUNC_SERVICE_INFO]) { in nl80211_nan_add_func()
16341 if (!func->serv_spec_info) { in nl80211_nan_add_func()
16347 if (tb[NL80211_NAN_FUNC_TTL]) in nl80211_nan_add_func()
16352 if (!tb[NL80211_NAN_FUNC_PUBLISH_TYPE]) { in nl80211_nan_add_func()
16362 if ((!(func->publish_type & NL80211_NAN_SOLICITED_PUBLISH)) && in nl80211_nan_add_func()
16373 if (!tb[NL80211_NAN_FUNC_FOLLOW_UP_ID] || in nl80211_nan_add_func()
16387 if (func->ttl) { in nl80211_nan_add_func()
16397 if (tb[NL80211_NAN_FUNC_SRF]) { in nl80211_nan_add_func()
16405 if (err) in nl80211_nan_add_func()
16411 if (srf_tb[NL80211_NAN_SRF_BF]) { in nl80211_nan_add_func()
16412 if (srf_tb[NL80211_NAN_SRF_MAC_ADDRS] || in nl80211_nan_add_func()
16423 if (!func->srf_bf) { in nl80211_nan_add_func()
16435 if (!mac_attr) { in nl80211_nan_add_func()
16441 if (n_entries <= 0) { in nl80211_nan_add_func()
16449 if (!func->srf_macs) { in nl80211_nan_add_func()
16460 if (tb[NL80211_NAN_FUNC_TX_MATCH_FILTER]) { in nl80211_nan_add_func()
16463 if (err) in nl80211_nan_add_func()
16467 if (tb[NL80211_NAN_FUNC_RX_MATCH_FILTER]) { in nl80211_nan_add_func()
16470 if (err) in nl80211_nan_add_func()
16475 if (!msg) { in nl80211_nan_add_func()
16483 if (WARN_ON(!hdr)) { in nl80211_nan_add_func()
16490 if (err < 0) { in nl80211_nan_add_func()
16497 if (nla_put_u64_64bit(msg, NL80211_ATTR_COOKIE, func->cookie, in nl80211_nan_add_func()
16502 if (!func_attr) in nl80211_nan_add_func()
16505 if (nla_put_u8(msg, NL80211_NAN_FUNC_INSTANCE_ID, in nl80211_nan_add_func()
16526 if (wdev->iftype != NL80211_IFTYPE_NAN) in nl80211_nan_del_func()
16529 if (!wdev_running(wdev)) in nl80211_nan_del_func()
16532 if (!info->attrs[NL80211_ATTR_COOKIE]) in nl80211_nan_del_func()
16551 if (wdev->iftype != NL80211_IFTYPE_NAN) in nl80211_nan_change_config()
16554 if (!wdev_running(wdev)) in nl80211_nan_change_config()
16558 if (err) in nl80211_nan_change_config()
16561 if (!changed) in nl80211_nan_change_config()
16576 if (WARN_ON(wiphy->nan_capa.flags & WIPHY_NAN_FLAGS_USERSPACE_DE)) in cfg80211_nan_match()
16579 if (WARN_ON(!match->inst_id || !match->peer_inst_id || !match->addr)) in cfg80211_nan_match()
16583 if (!msg) in cfg80211_nan_match()
16587 if (!hdr) { in cfg80211_nan_match()
16592 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_nan_match()
16599 if (nla_put_u64_64bit(msg, NL80211_ATTR_COOKIE, match->cookie, in cfg80211_nan_match()
16605 if (!match_attr) in cfg80211_nan_match()
16610 if (!local_func_attr) in cfg80211_nan_match()
16613 if (nla_put_u8(msg, NL80211_NAN_FUNC_INSTANCE_ID, match->inst_id)) in cfg80211_nan_match()
16620 if (!peer_func_attr) in cfg80211_nan_match()
16623 if (nla_put_u8(msg, NL80211_NAN_FUNC_TYPE, match->type) || in cfg80211_nan_match()
16627 if (match->info && match->info_len && in cfg80211_nan_match()
16636 if (!wdev->owner_nlportid) in cfg80211_nan_match()
16661 if (WARN_ON(wiphy->nan_capa.flags & WIPHY_NAN_FLAGS_USERSPACE_DE)) in cfg80211_nan_func_terminated()
16664 if (WARN_ON(!inst_id)) in cfg80211_nan_func_terminated()
16668 if (!msg) in cfg80211_nan_func_terminated()
16672 if (!hdr) { in cfg80211_nan_func_terminated()
16677 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_nan_func_terminated()
16684 if (nla_put_u64_64bit(msg, NL80211_ATTR_COOKIE, cookie, in cfg80211_nan_func_terminated()
16689 if (!func_attr) in cfg80211_nan_func_terminated()
16692 if (nla_put_u8(msg, NL80211_NAN_FUNC_INSTANCE_ID, inst_id) || in cfg80211_nan_func_terminated()
16699 if (!wdev->owner_nlportid) in cfg80211_nan_func_terminated()
16723 /* Can happen if we stopped NAN */ in cfg80211_nan_sched_update_done()
16724 if (!wdev->u.nan.sched_update_pending) in cfg80211_nan_sched_update_done()
16729 if (!wdev->owner_nlportid) in cfg80211_nan_sched_update_done()
16733 if (!msg) in cfg80211_nan_sched_update_done()
16737 if (!hdr) in cfg80211_nan_sched_update_done()
16740 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_nan_sched_update_done()
16771 if (!channel_parsed) in nl80211_parse_nan_channel()
16776 if (ret) in nl80211_parse_nan_channel()
16781 if (ret) in nl80211_parse_nan_channel()
16784 if (chandef.chan->band == NL80211_BAND_6GHZ) { in nl80211_parse_nan_channel()
16790 if (!cfg80211_reg_can_beacon(&rdev->wiphy, &chandef, in nl80211_parse_nan_channel()
16797 if (local) { in nl80211_parse_nan_channel()
16799 if (cfg80211_chandef_compatible(&nan_channels[i].chandef, in nl80211_parse_nan_channel()
16808 if (!channel_parsed[NL80211_ATTR_NAN_CHANNEL_ENTRY]) { in nl80211_parse_nan_channel()
16817 if (!channel_parsed[NL80211_ATTR_NAN_RX_NSS]) { in nl80211_parse_nan_channel()
16827 if ((local && nan_channels[index].rx_nss > n_rx_nss) || in nl80211_parse_nan_channel()
16844 if (WARN_ON(nla_len(slots_attr) != CFG80211_NAN_SCHED_NUM_TIME_SLOTS)) in nl80211_parse_nan_schedule()
16850 if (schedule[slot] != NL80211_NAN_SCHED_NOT_AVAIL_SLOT && in nl80211_parse_nan_schedule()
16871 if (ret) in nl80211_parse_nan_peer_map()
16874 if (!tb[NL80211_NAN_PEER_MAP_ATTR_MAP_ID] || in nl80211_parse_nan_peer_map()
16896 if (map1->map_id == map2->map_id) { in nl80211_nan_validate_map_pair()
16904 if (map1->schedule[i] == NL80211_NAN_SCHED_NOT_AVAIL_SLOT) in nl80211_nan_validate_map_pair()
16911 if (ch2 == NL80211_NAN_SCHED_NOT_AVAIL_SLOT) in nl80211_nan_validate_map_pair()
16914 if (cfg80211_chandef_compatible(&nan_channels[ch1].chandef, in nl80211_nan_validate_map_pair()
16930 if (wiphy->n_radio > 1) in nl80211_nan_validate_map_pair()
16934 if (map1->schedule[i] != NL80211_NAN_SCHED_NOT_AVAIL_SLOT && in nl80211_nan_validate_map_pair()
16956 if (wdev->iftype != NL80211_IFTYPE_NAN) in nl80211_nan_set_peer_sched()
16959 if (!info->attrs[NL80211_ATTR_MAC] || in nl80211_nan_set_peer_sched()
16971 if (!((info->attrs[NL80211_ATTR_NAN_SEQ_ID] && in nl80211_nan_set_peer_sched()
16984 if (n_channels && n_channels > wdev->u.nan.n_channels * 4 * 2) { in nl80211_nan_set_peer_sched()
16992 if (n_channels) { in nl80211_nan_set_peer_sched()
16995 if (!nan_channels) in nl80211_nan_set_peer_sched()
17006 if (ret) in nl80211_nan_set_peer_sched()
17011 if (cfg80211_chandef_compatible(&nan_channels[i].chandef, in nl80211_nan_set_peer_sched()
17017 if (!compatible) { in nl80211_nan_set_peer_sched()
17034 if (info->attrs[NL80211_ATTR_NAN_ULW]) { in nl80211_nan_set_peer_sched()
17043 if (info->attrs[NL80211_ATTR_NAN_PEER_MAPS]) { in nl80211_nan_set_peer_sched()
17047 if (n_maps >= ARRAY_SIZE(sched.maps)) { in nl80211_nan_set_peer_sched()
17055 if (ret) in nl80211_nan_set_peer_sched()
17064 if (ret) in nl80211_nan_set_peer_sched()
17078 if (sched.maps[m].schedule[s] == ch) { in nl80211_nan_set_peer_sched()
17084 if (!scheduled) { in nl80211_nan_set_peer_sched()
17097 if (!sched->n_channels) in nl80211_nan_is_sched_empty()
17101 if (sched->schedule[i] != NL80211_NAN_SCHED_NOT_AVAIL_SLOT) in nl80211_nan_is_sched_empty()
17118 if (wdev->iftype != NL80211_IFTYPE_NAN) in nl80211_nan_set_local_sched()
17121 if (!wdev_running(wdev)) in nl80211_nan_set_local_sched()
17124 if (!info->attrs[NL80211_ATTR_NAN_TIME_SLOTS]) in nl80211_nan_set_local_sched()
17134 if (!sched) in nl80211_nan_set_local_sched()
17144 if (ret) in nl80211_nan_set_local_sched()
17153 if (ret) in nl80211_nan_set_local_sched()
17161 if (sched_empty) { in nl80211_nan_set_local_sched()
17162 if (sched->deferred) { in nl80211_nan_set_local_sched()
17164 "Schedule cannot be deferred if all time slots are unavailable"); in nl80211_nan_set_local_sched()
17168 if (info->attrs[NL80211_ATTR_NAN_AVAIL_BLOB]) { in nl80211_nan_set_local_sched()
17170 "NAN Availability blob must be empty if all time slots are unavailable"); in nl80211_nan_set_local_sched()
17174 if (!info->attrs[NL80211_ATTR_NAN_AVAIL_BLOB]) { in nl80211_nan_set_local_sched()
17196 if (!msg) in nl80211_get_protocol_features()
17201 if (!hdr) in nl80211_get_protocol_features()
17204 if (nla_put_u32(msg, NL80211_ATTR_PROTOCOL_FEATURES, in nl80211_get_protocol_features()
17222 if (!rdev->ops->update_ft_ies) in nl80211_update_ft_ies()
17225 if (!info->attrs[NL80211_ATTR_MDID] || in nl80211_update_ft_ies()
17246 if (!rdev->ops->crit_proto_start) in nl80211_crit_protocol_start()
17249 if (WARN_ON(!rdev->ops->crit_proto_stop)) in nl80211_crit_protocol_start()
17252 if (rdev->crit_proto_nlportid) in nl80211_crit_protocol_start()
17255 /* determine protocol if provided */ in nl80211_crit_protocol_start()
17256 if (info->attrs[NL80211_ATTR_CRIT_PROT_ID]) in nl80211_crit_protocol_start()
17259 if (proto >= NUM_NL80211_CRIT_PROTO) in nl80211_crit_protocol_start()
17263 if (!info->attrs[NL80211_ATTR_MAX_CRIT_PROT_DURATION]) in nl80211_crit_protocol_start()
17270 if (!ret) in nl80211_crit_protocol_start()
17282 if (!rdev->ops->crit_proto_stop) in nl80211_crit_protocol_stop()
17285 if (rdev->crit_proto_nlportid) { in nl80211_crit_protocol_stop()
17296 if (vcmd->policy == VENDOR_CMD_RAW_DATA) { in nl80211_vendor_check_policy()
17297 if (attr->nla_type & NLA_F_NESTED) { in nl80211_vendor_check_policy()
17306 if (!(attr->nla_type & NLA_F_NESTED)) { in nl80211_vendor_check_policy()
17323 if (!rdev->wiphy.vendor_commands) in nl80211_vendor_cmd()
17326 if (IS_ERR(wdev)) { in nl80211_vendor_cmd()
17328 if (err != -EINVAL) in nl80211_vendor_cmd()
17331 } else if (wdev->wiphy != &rdev->wiphy) { in nl80211_vendor_cmd()
17335 if (!info->attrs[NL80211_ATTR_VENDOR_ID] || in nl80211_vendor_cmd()
17348 if (vcmd->info.vendor_id != vid || vcmd->info.subcmd != subcmd) in nl80211_vendor_cmd()
17351 if (vcmd->flags & (WIPHY_VENDOR_CMD_NEED_WDEV | in nl80211_vendor_cmd()
17353 if (!wdev) in nl80211_vendor_cmd()
17355 if (vcmd->flags & WIPHY_VENDOR_CMD_NEED_NETDEV && in nl80211_vendor_cmd()
17359 if (vcmd->flags & WIPHY_VENDOR_CMD_NEED_RUNNING) { in nl80211_vendor_cmd()
17360 if (!wdev_running(wdev)) in nl80211_vendor_cmd()
17367 if (!vcmd->doit) in nl80211_vendor_cmd()
17370 if (info->attrs[NL80211_ATTR_VENDOR_DATA]) { in nl80211_vendor_cmd()
17377 if (err) in nl80211_vendor_cmd()
17403 if (cb->args[0]) { in nl80211_prepare_vendor_dump()
17408 if (!wiphy) in nl80211_prepare_vendor_dump()
17413 if (cb->args[1]) { in nl80211_prepare_vendor_dump()
17415 if (tmp->identifier == cb->args[1] - 1) { in nl80211_prepare_vendor_dump()
17427 if (!attrbuf) in nl80211_prepare_vendor_dump()
17434 if (err) in nl80211_prepare_vendor_dump()
17437 if (!attrbuf[NL80211_ATTR_VENDOR_ID] || in nl80211_prepare_vendor_dump()
17444 if (IS_ERR(*wdev)) in nl80211_prepare_vendor_dump()
17448 if (IS_ERR(*rdev)) { in nl80211_prepare_vendor_dump()
17461 if (vcmd->info.vendor_id != vid || vcmd->info.subcmd != subcmd) in nl80211_prepare_vendor_dump()
17464 if (!vcmd->dumpit) { in nl80211_prepare_vendor_dump()
17473 if (vcmd_idx < 0) { in nl80211_prepare_vendor_dump()
17478 if (attrbuf[NL80211_ATTR_VENDOR_DATA]) { in nl80211_prepare_vendor_dump()
17486 if (err) in nl80211_prepare_vendor_dump()
17492 /* add 1 to know if it was NULL */ in nl80211_prepare_vendor_dump()
17519 if (err) in nl80211_vendor_cmd_dump()
17527 if (vcmd->flags & (WIPHY_VENDOR_CMD_NEED_WDEV | in nl80211_vendor_cmd_dump()
17529 if (!wdev) { in nl80211_vendor_cmd_dump()
17533 if (vcmd->flags & WIPHY_VENDOR_CMD_NEED_NETDEV && in nl80211_vendor_cmd_dump()
17539 if (vcmd->flags & WIPHY_VENDOR_CMD_NEED_RUNNING) { in nl80211_vendor_cmd_dump()
17540 if (!wdev_running(wdev)) { in nl80211_vendor_cmd_dump()
17551 if (!hdr) in nl80211_vendor_cmd_dump()
17554 if (nla_put_u32(skb, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_vendor_cmd_dump()
17564 if (!vendor_data) { in nl80211_vendor_cmd_dump()
17573 if (err == -ENOBUFS || err == -ENOENT) { in nl80211_vendor_cmd_dump()
17576 } else if (err <= 0) { in nl80211_vendor_cmd_dump()
17597 if (WARN_ON(!rdev->cur_cmd_info)) in __cfg80211_alloc_reply_skb()
17616 if (WARN_ON(!rdev->cur_cmd_info)) { in cfg80211_vendor_cmd_reply()
17631 if (WARN_ON(!rdev->cur_cmd_info)) in cfg80211_vendor_cmd_get_sender()
17647 if (!rdev->ops->set_qos_map) in nl80211_set_qos_map()
17650 if (info->attrs[NL80211_ATTR_QOS_MAP]) { in nl80211_set_qos_map()
17654 if (len % 2) in nl80211_set_qos_map()
17658 if (!qos_map) in nl80211_set_qos_map()
17662 if (num_des) { in nl80211_set_qos_map()
17668 if (qos_map->dscp_exception[des].up > 7) { in nl80211_set_qos_map()
17679 if (!ret) in nl80211_set_qos_map()
17695 if (!(rdev->wiphy.features & NL80211_FEATURE_SUPPORTS_WMM_ADMISSION)) in nl80211_add_tx_ts()
17698 if (!info->attrs[NL80211_ATTR_TSID] || !info->attrs[NL80211_ATTR_MAC] || in nl80211_add_tx_ts()
17706 if (tsid >= IEEE80211_FIRST_TSPEC_TSID) { in nl80211_add_tx_ts()
17716 if (info->attrs[NL80211_ATTR_ADMITTED_TIME]) { in nl80211_add_tx_ts()
17719 if (!admitted_time) in nl80211_add_tx_ts()
17726 if (wdev->connected) in nl80211_add_tx_ts()
17743 if (!info->attrs[NL80211_ATTR_TSID] || !info->attrs[NL80211_ATTR_MAC]) in nl80211_del_tx_ts()
17763 if (!rdev->ops->tdls_channel_switch || in nl80211_tdls_channel_switch()
17775 if (!info->attrs[NL80211_ATTR_MAC] || in nl80211_tdls_channel_switch()
17780 if (err) in nl80211_tdls_channel_switch()
17788 if (chandef.chan->band == NL80211_BAND_2GHZ && in nl80211_tdls_channel_switch()
17794 if (!cfg80211_reg_can_beacon_relax(&rdev->wiphy, &chandef, in nl80211_tdls_channel_switch()
17799 if (cfg80211_chandef_dfs_required(wdev->wiphy, &chandef, wdev->iftype)) in nl80211_tdls_channel_switch()
17815 if (!rdev->ops->tdls_channel_switch || in nl80211_tdls_cancel_channel_switch()
17828 if (!info->attrs[NL80211_ATTR_MAC]) in nl80211_tdls_cancel_channel_switch()
17847 if (!rdev->ops->set_multicast_to_unicast) in nl80211_set_multicast_to_unicast()
17850 if (wdev->iftype != NL80211_IFTYPE_AP && in nl80211_set_multicast_to_unicast()
17867 if (wdev->iftype != NL80211_IFTYPE_STATION && in nl80211_set_pmk()
17871 if (!wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_set_pmk()
17875 if (!info->attrs[NL80211_ATTR_MAC] || !info->attrs[NL80211_ATTR_PMK]) in nl80211_set_pmk()
17878 if (!wdev->connected) in nl80211_set_pmk()
17882 if (memcmp(pmk_conf.aa, wdev->u.client.connected_addr, ETH_ALEN)) in nl80211_set_pmk()
17887 if (pmk_conf.pmk_len != WLAN_PMK_LEN && in nl80211_set_pmk()
17891 if (info->attrs[NL80211_ATTR_PMKR0_NAME]) in nl80211_set_pmk()
17905 if (wdev->iftype != NL80211_IFTYPE_STATION && in nl80211_del_pmk()
17909 if (!wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_del_pmk()
17913 if (!info->attrs[NL80211_ATTR_MAC]) in nl80211_del_pmk()
17926 if (!rdev->ops->external_auth) in nl80211_external_auth()
17929 if (!info->attrs[NL80211_ATTR_SSID] && in nl80211_external_auth()
17934 if (!info->attrs[NL80211_ATTR_BSSID]) in nl80211_external_auth()
17937 if (!info->attrs[NL80211_ATTR_STATUS_CODE]) in nl80211_external_auth()
17942 if (info->attrs[NL80211_ATTR_SSID]) { in nl80211_external_auth()
17944 if (params.ssid.ssid_len == 0) in nl80211_external_auth()
17956 if (info->attrs[NL80211_ATTR_PMKID]) in nl80211_external_auth()
17977 if (!wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_tx_control_port()
17981 if (!rdev->ops->tx_control_port) in nl80211_tx_control_port()
17984 if (!info->attrs[NL80211_ATTR_FRAME] || in nl80211_tx_control_port()
17997 if (wdev->u.ibss.current_bss) in nl80211_tx_control_port()
18002 if (wdev->connected) in nl80211_tx_control_port()
18021 if (!err && !dont_wait_for_ack) in nl80211_tx_control_port()
18039 if (wdev->iftype != NL80211_IFTYPE_AP || in nl80211_get_ftm_responder_stats()
18044 if (err) in nl80211_get_ftm_responder_stats()
18047 if (!ftm_stats.filled) in nl80211_get_ftm_responder_stats()
18051 if (!msg) in nl80211_get_ftm_responder_stats()
18056 if (!hdr) in nl80211_get_ftm_responder_stats()
18059 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex)) in nl80211_get_ftm_responder_stats()
18064 if (!ftm_stats_attr) in nl80211_get_ftm_responder_stats()
18068 do { if ((ftm_stats.filled & BIT(NL80211_FTM_STATS_ ## name)) && \ in nl80211_get_ftm_responder_stats()
18073 do { if ((ftm_stats.filled & BIT(NL80211_FTM_STATS_ ## name)) && \ in nl80211_get_ftm_responder_stats()
18105 if (!rdev->ops->update_owe_info) in nl80211_update_owe_info()
18108 if (!info->attrs[NL80211_ATTR_STATUS_CODE] || in nl80211_update_owe_info()
18116 if (info->attrs[NL80211_ATTR_IE]) { in nl80211_update_owe_info()
18135 if (!rdev->ops->probe_mesh_link || !rdev->ops->get_station) in nl80211_probe_mesh_link()
18138 if (!info->attrs[NL80211_ATTR_MAC] || in nl80211_probe_mesh_link()
18144 if (wdev->iftype != NL80211_IFTYPE_MESH_POINT) in nl80211_probe_mesh_link()
18151 if (len < sizeof(struct ethhdr)) in nl80211_probe_mesh_link()
18154 if (!ether_addr_equal(buf, dest) || is_multicast_ether_addr(buf) || in nl80211_probe_mesh_link()
18159 if (err) in nl80211_probe_mesh_link()
18177 if (!attrs[NL80211_TID_CONFIG_ATTR_TIDS]) in parse_tid_conf()
18184 if (tid_conf->config_override) { in parse_tid_conf()
18185 if (rdev->ops->reset_tid_config) { in parse_tid_conf()
18188 if (err) in parse_tid_conf()
18195 if (attrs[NL80211_TID_CONFIG_ATTR_NOACK]) { in parse_tid_conf()
18201 if (attrs[NL80211_TID_CONFIG_ATTR_RETRY_SHORT]) { in parse_tid_conf()
18206 if (tid_conf->retry_short > rdev->wiphy.max_data_retry_count) in parse_tid_conf()
18210 if (attrs[NL80211_TID_CONFIG_ATTR_RETRY_LONG]) { in parse_tid_conf()
18215 if (tid_conf->retry_long > rdev->wiphy.max_data_retry_count) in parse_tid_conf()
18219 if (attrs[NL80211_TID_CONFIG_ATTR_AMPDU_CTRL]) { in parse_tid_conf()
18225 if (attrs[NL80211_TID_CONFIG_ATTR_RTSCTS_CTRL]) { in parse_tid_conf()
18231 if (attrs[NL80211_TID_CONFIG_ATTR_AMSDU_CTRL]) { in parse_tid_conf()
18237 if (attrs[NL80211_TID_CONFIG_ATTR_TX_RATE_TYPE]) { in parse_tid_conf()
18242 if (tid_conf->txrate_type != NL80211_TX_RATE_AUTOMATIC) { in parse_tid_conf()
18247 if (err) in parse_tid_conf()
18255 if (peer) in parse_tid_conf()
18260 if (tid_conf->mask & ~mask) { in parse_tid_conf()
18281 if (!info->attrs[NL80211_ATTR_TID_CONFIG]) in nl80211_set_tid_config()
18284 if (!rdev->ops->set_tid_config) in nl80211_set_tid_config()
18292 if (!tid_config) in nl80211_set_tid_config()
18297 if (info->attrs[NL80211_ATTR_MAC]) in nl80211_set_tid_config()
18305 if (ret) in nl80211_set_tid_config()
18311 if (ret) in nl80211_set_tid_config()
18334 if (!rdev->ops->color_change) in nl80211_color_change()
18337 if (!wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_color_change()
18341 if (wdev->iftype != NL80211_IFTYPE_AP) in nl80211_color_change()
18344 if (!info->attrs[NL80211_ATTR_COLOR_CHANGE_COUNT] || in nl80211_color_change()
18354 if (err) in nl80211_color_change()
18358 if (!tb) in nl80211_color_change()
18364 if (err) in nl80211_color_change()
18369 if (err) in nl80211_color_change()
18372 if (!tb[NL80211_ATTR_CNTDWN_OFFS_BEACON]) { in nl80211_color_change()
18377 if (nla_len(tb[NL80211_ATTR_CNTDWN_OFFS_BEACON]) != sizeof(u16)) { in nl80211_color_change()
18383 if (offset >= params.beacon_color_change.tail_len) { in nl80211_color_change()
18388 if (params.beacon_color_change.tail[offset] != params.count) { in nl80211_color_change()
18395 if (tb[NL80211_ATTR_CNTDWN_OFFS_PRESP]) { in nl80211_color_change()
18396 if (nla_len(tb[NL80211_ATTR_CNTDWN_OFFS_PRESP]) != in nl80211_color_change()
18403 if (offset >= params.beacon_color_change.probe_resp_len) { in nl80211_color_change()
18408 if (params.beacon_color_change.probe_resp[offset] != in nl80211_color_change()
18417 if (info->attrs[NL80211_ATTR_UNSOL_BCAST_PROBE_RESP]) { in nl80211_color_change()
18421 if (err) in nl80211_color_change()
18445 if (!info->attrs[NL80211_ATTR_MAC] || in nl80211_set_fils_aad()
18468 if (!(wdev->wiphy->flags & WIPHY_FLAG_SUPPORTS_MLO)) in nl80211_add_link()
18478 if (!info->attrs[NL80211_ATTR_MAC] || in nl80211_add_link()
18487 if (ret) { in nl80211_add_link()
18501 /* cannot remove if there's no link */ in nl80211_remove_link()
18502 if (!info->attrs[NL80211_ATTR_MLO_LINK_ID]) in nl80211_remove_link()
18526 if ((add && !rdev->ops->add_link_station) || in nl80211_add_mod_link_station()
18530 if (add && !info->attrs[NL80211_ATTR_MAC]) in nl80211_add_mod_link_station()
18533 if (!info->attrs[NL80211_ATTR_MLD_ADDR]) in nl80211_add_mod_link_station()
18536 if (add && !info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]) in nl80211_add_mod_link_station()
18541 if (info->attrs[NL80211_ATTR_MAC]) { in nl80211_add_mod_link_station()
18543 if (!is_valid_ether_addr(params.link_mac)) in nl80211_add_mod_link_station()
18547 if (!info->attrs[NL80211_ATTR_MLO_LINK_ID]) in nl80211_add_mod_link_station()
18552 if (info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]) { in nl80211_add_mod_link_station()
18559 if (info->attrs[NL80211_ATTR_HT_CAPABILITY]) in nl80211_add_mod_link_station()
18563 if (info->attrs[NL80211_ATTR_VHT_CAPABILITY]) in nl80211_add_mod_link_station()
18567 if (info->attrs[NL80211_ATTR_HE_CAPABILITY]) { in nl80211_add_mod_link_station()
18573 if (info->attrs[NL80211_ATTR_EHT_CAPABILITY]) { in nl80211_add_mod_link_station()
18579 if (!ieee80211_eht_capa_size_ok((const u8 *)params.he_capa, in nl80211_add_mod_link_station()
18587 if (info->attrs[NL80211_ATTR_UHR_CAPABILITY]) { in nl80211_add_mod_link_station()
18588 if (!params.eht_capa) in nl80211_add_mod_link_station()
18597 if (info->attrs[NL80211_ATTR_HE_6GHZ_CAPABILITY]) in nl80211_add_mod_link_station()
18601 if (info->attrs[NL80211_ATTR_OPMODE_NOTIF]) { in nl80211_add_mod_link_station()
18609 if (err) in nl80211_add_mod_link_station()
18612 if (add) in nl80211_add_mod_link_station()
18637 if (!rdev->ops->del_link_station) in nl80211_remove_link_station()
18640 if (!info->attrs[NL80211_ATTR_MLD_ADDR] || in nl80211_remove_link_station()
18657 if (!rdev->wiphy.hw_timestamp_max_peers) in nl80211_set_hw_timestamp()
18660 if (!info->attrs[NL80211_ATTR_MAC] && in nl80211_set_hw_timestamp()
18664 if (info->attrs[NL80211_ATTR_MAC]) in nl80211_set_hw_timestamp()
18681 if (wdev->iftype != NL80211_IFTYPE_STATION && in nl80211_set_ttlm()
18685 if (!wdev->connected) in nl80211_set_ttlm()
18688 if (!info->attrs[NL80211_ATTR_MLO_TTLM_DLINK] || in nl80211_set_ttlm()
18712 if (!wdev->valid_links) in nl80211_assoc_ml_reconf()
18715 if (dev->ieee80211_ptr->conn_owner_nlportid && in nl80211_assoc_ml_reconf()
18719 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION && in nl80211_assoc_ml_reconf()
18724 if (info->attrs[NL80211_ATTR_MLO_LINKS]) { in nl80211_assoc_ml_reconf()
18729 if (err) in nl80211_assoc_ml_reconf()
18734 if (!req.add_links[link_id].bss) in nl80211_assoc_ml_reconf()
18740 if (info->attrs[NL80211_ATTR_MLO_RECONF_REM_LINKS]) in nl80211_assoc_ml_reconf()
18747 if ((add_links & req.rem_links) || !(add_links | req.rem_links) || in nl80211_assoc_ml_reconf()
18754 if (info->attrs[NL80211_ATTR_ASSOC_MLD_EXT_CAPA_OPS]) in nl80211_assoc_ml_reconf()
18775 if (wdev->iftype != NL80211_IFTYPE_STATION && in nl80211_epcs_cfg()
18779 if (!wdev->connected) in nl80211_epcs_cfg()
18794 /* If a netdev is associated, it must be UP, P2P must be started */
18892 if (WARN_ON(ops->internal_flags >= ARRAY_SIZE(nl80211_internal_flags))) in nl80211_pre_doit()
18898 if (internal_flags & NL80211_FLAG_NEED_WIPHY) { in nl80211_pre_doit()
18900 if (IS_ERR(rdev)) { in nl80211_pre_doit()
18905 } else if (internal_flags & NL80211_FLAG_NEED_NETDEV || in nl80211_pre_doit()
18909 if (IS_ERR(wdev)) { in nl80211_pre_doit()
18918 if (internal_flags & NL80211_FLAG_NEED_NETDEV) { in nl80211_pre_doit()
18919 if (!dev) { in nl80211_pre_doit()
18929 if (internal_flags & NL80211_FLAG_CHECK_NETDEV_UP && in nl80211_pre_doit()
18938 if (internal_flags & NL80211_FLAG_MLO_VALID_LINK_ID) { in nl80211_pre_doit()
18941 if (!wdev) { in nl80211_pre_doit()
18947 if (wdev->valid_links && in nl80211_pre_doit()
18955 if (!wdev->valid_links && link_id) { in nl80211_pre_doit()
18961 if (internal_flags & NL80211_FLAG_MLO_UNSUPPORTED) { in nl80211_pre_doit()
18962 if (info->attrs[NL80211_ATTR_MLO_LINK_ID] || in nl80211_pre_doit()
18969 if (rdev && !(internal_flags & NL80211_FLAG_NO_WIPHY_MTX)) { in nl80211_pre_doit()
18974 if (!(internal_flags & NL80211_FLAG_NEED_RTNL)) in nl80211_pre_doit()
18990 if (info->user_ptr[1]) { in nl80211_post_doit()
18991 if (internal_flags & NL80211_FLAG_NEED_WDEV) { in nl80211_post_doit()
19000 if (info->user_ptr[0] && in nl80211_post_doit()
19009 if (internal_flags & NL80211_FLAG_NEED_RTNL) in nl80211_post_doit()
19012 /* If needed, clear the netlink message payload from the SKB in nl80211_post_doit()
19017 if (internal_flags & NL80211_FLAG_CLEAR_SKB) { in nl80211_post_doit()
19030 if (!sar_specs || !spec) in nl80211_set_sar_sub_specs()
19033 if (!spec[NL80211_SAR_ATTR_SPECS_POWER] || in nl80211_set_sar_sub_specs()
19039 /* check if range_index exceeds num_freq_ranges */ in nl80211_set_sar_sub_specs()
19040 if (range_index >= rdev->wiphy.sar_capa->num_freq_ranges) in nl80211_set_sar_sub_specs()
19043 /* check if range_index duplicates */ in nl80211_set_sar_sub_specs()
19045 if (sar_specs->sub_specs[i].freq_range_index == range_index) in nl80211_set_sar_sub_specs()
19068 if (!rdev->wiphy.sar_capa || !rdev->ops->set_sar_specs) in nl80211_set_sar_specs()
19071 if (!info->attrs[NL80211_ATTR_SAR_SPEC]) in nl80211_set_sar_specs()
19078 if (!tb[NL80211_SAR_ATTR_TYPE] || !tb[NL80211_SAR_ATTR_SPECS]) in nl80211_set_sar_specs()
19082 if (type != rdev->wiphy.sar_capa->type) in nl80211_set_sar_specs()
19089 if (specs > rdev->wiphy.sar_capa->num_freq_ranges) in nl80211_set_sar_specs()
19093 if (!sar_spec) in nl80211_set_sar_specs()
19105 if (nl80211_set_sar_sub_specs(rdev, sar_spec, in nl80211_set_sar_specs()
19269 * whether MAC address is passed or not. If MAC address is
20048 if (!msg) in nl80211_notify_wiphy()
20051 if (nl80211_send_wiphy(rdev, cmd, msg, 0, 0, 0, &state) < 0) { in nl80211_notify_wiphy()
20067 if (!msg) in nl80211_notify_iface()
20070 if (nl80211_send_iface(msg, 0, 0, 0, rdev, wdev, cmd) < 0) { in nl80211_notify_iface()
20087 if (WARN_ON(!req)) in nl80211_add_scan_req()
20091 if (!nest) in nl80211_add_scan_req()
20094 if (nla_put(msg, i, req->req.ssids[i].ssid_len, in nl80211_add_scan_req()
20100 if (req->req.flags & NL80211_SCAN_FLAG_FREQ_KHZ) { in nl80211_add_scan_req()
20102 if (!nest) in nl80211_add_scan_req()
20105 if (nla_put_u32(msg, i, in nl80211_add_scan_req()
20113 if (!nest) in nl80211_add_scan_req()
20116 if (nla_put_u32(msg, i, in nl80211_add_scan_req()
20123 if (req->req.ie && in nl80211_add_scan_req()
20127 if (req->req.flags && in nl80211_add_scan_req()
20133 if (info->scan_start_tsf && in nl80211_add_scan_req()
20154 if (!hdr) in nl80211_prep_scan_msg()
20157 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_prep_scan_msg()
20182 if (!hdr) in nl80211_prep_sched_scan_msg()
20185 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, in nl80211_prep_sched_scan_msg()
20206 if (!msg) in nl80211_send_scan_start()
20209 if (nl80211_prep_scan_msg(msg, rdev, wdev, 0, 0, 0, in nl80211_send_scan_start()
20225 if (!msg) in nl80211_build_scan_msg()
20228 if (nl80211_prep_scan_msg(msg, rdev, wdev, 0, 0, 0, in nl80211_build_scan_msg()
20242 if (!msg) in nl80211_send_scan_msg()
20254 if (!msg) in nl80211_send_sched_scan()
20257 if (nl80211_prep_sched_scan_msg(msg, req, cmd) < 0) { in nl80211_send_sched_scan()
20270 if (nla_put_u8(msg, NL80211_ATTR_REG_INITIATOR, request->initiator)) in nl80211_reg_change_event_fill()
20273 if (request->alpha2[0] == '0' && request->alpha2[1] == '0') { in nl80211_reg_change_event_fill()
20274 if (nla_put_u8(msg, NL80211_ATTR_REG_TYPE, in nl80211_reg_change_event_fill()
20277 } else if (request->alpha2[0] == '9' && request->alpha2[1] == '9') { in nl80211_reg_change_event_fill()
20278 if (nla_put_u8(msg, NL80211_ATTR_REG_TYPE, in nl80211_reg_change_event_fill()
20281 } else if ((request->alpha2[0] == '9' && request->alpha2[1] == '8') || in nl80211_reg_change_event_fill()
20283 if (nla_put_u8(msg, NL80211_ATTR_REG_TYPE, in nl80211_reg_change_event_fill()
20287 if (nla_put_u8(msg, NL80211_ATTR_REG_TYPE, in nl80211_reg_change_event_fill()
20294 if (request->wiphy_idx != WIPHY_IDX_INVALID) { in nl80211_reg_change_event_fill()
20297 if (wiphy && in nl80211_reg_change_event_fill()
20301 if (wiphy && in nl80211_reg_change_event_fill()
20324 if (!msg) in nl80211_common_reg_change_event()
20328 if (!hdr) in nl80211_common_reg_change_event()
20331 if (!nl80211_reg_change_event_fill(msg, request)) in nl80211_common_reg_change_event()
20364 if (!msg) in nl80211_send_mlme_event()
20368 if (!hdr) { in nl80211_send_mlme_event()
20373 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_mlme_event()
20381 if (event->reconnect && in nl80211_send_mlme_event()
20385 if (event->uapsd_queues >= 0) { in nl80211_send_mlme_event()
20388 if (!nla_wmm) in nl80211_send_mlme_event()
20391 if (nla_put_u8(msg, NL80211_STA_WME_UAPSD_QUEUES, in nl80211_send_mlme_event()
20481 if (WARN_ON(len < 2)) in cfg80211_rx_unprot_mlme_mgmt()
20484 if (ieee80211_is_deauth(mgmt->frame_control)) { in cfg80211_rx_unprot_mlme_mgmt()
20486 } else if (ieee80211_is_disassoc(mgmt->frame_control)) { in cfg80211_rx_unprot_mlme_mgmt()
20488 } else if (ieee80211_is_beacon(mgmt->frame_control)) { in cfg80211_rx_unprot_mlme_mgmt()
20489 if (wdev->unprot_beacon_reported && in cfg80211_rx_unprot_mlme_mgmt()
20511 if (!msg) in nl80211_send_mlme_timeout()
20515 if (!hdr) { in nl80211_send_mlme_timeout()
20520 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_mlme_timeout()
20564 if (cr->valid_links) { in nl80211_send_connect_result()
20583 if (!msg) in nl80211_send_connect_result()
20587 if (!hdr) { in nl80211_send_connect_result()
20592 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_connect_result()
20621 if (cr->valid_links) { in nl80211_send_connect_result()
20626 if (!nested) in nl80211_send_connect_result()
20636 if (!nested_mlo_links) in nl80211_send_connect_result()
20639 if (nla_put_u8(msg, NL80211_ATTR_MLO_LINK_ID, link) || in nl80211_send_connect_result()
20679 if (info->valid_links) { in nl80211_send_roamed()
20697 if (!msg) in nl80211_send_roamed()
20701 if (!hdr) { in nl80211_send_roamed()
20706 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_roamed()
20727 if (info->valid_links) { in nl80211_send_roamed()
20732 if (!nested) in nl80211_send_roamed()
20742 if (!nested_mlo_links) in nl80211_send_roamed()
20745 if (nla_put_u8(msg, NL80211_ATTR_MLO_LINK_ID, link) || in nl80211_send_roamed()
20777 if (!msg) in nl80211_send_port_authorized()
20781 if (!hdr) { in nl80211_send_port_authorized()
20786 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_port_authorized()
20791 if (td_bitmap_len > 0 && td_bitmap && in nl80211_send_port_authorized()
20813 if (!msg) in nl80211_send_disconnected()
20817 if (!hdr) { in nl80211_send_disconnected()
20822 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_disconnected()
20853 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION && in cfg80211_links_removed()
20857 if (WARN_ON(!wdev->valid_links || !link_mask || in cfg80211_links_removed()
20866 if (!msg) in cfg80211_links_removed()
20870 if (!hdr) { in cfg80211_links_removed()
20875 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_links_removed()
20880 if (!links) in cfg80211_links_removed()
20888 if (!link) in cfg80211_links_removed()
20891 if (nla_put_u8(msg, NL80211_ATTR_MLO_LINK_ID, link_id)) in cfg80211_links_removed()
20936 if (!msg) in nl80211_send_ibss_bssid()
20940 if (!hdr) { in nl80211_send_ibss_bssid()
20945 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_ibss_bssid()
20969 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_MESH_POINT)) in cfg80211_notify_new_peer_candidate()
20975 if (!msg) in cfg80211_notify_new_peer_candidate()
20979 if (!hdr) { in cfg80211_notify_new_peer_candidate()
20984 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_notify_new_peer_candidate()
21013 if (!msg) in nl80211_michael_mic_failure()
21017 if (!hdr) { in nl80211_michael_mic_failure()
21022 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_michael_mic_failure()
21050 if (!msg) in nl80211_send_beacon_hint_event()
21054 if (!hdr) { in nl80211_send_beacon_hint_event()
21063 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, get_wiphy_idx(wiphy))) in nl80211_send_beacon_hint_event()
21068 if (!nl_freq) in nl80211_send_beacon_hint_event()
21071 if (nl80211_msg_put_channel(msg, wiphy, channel_before, false)) in nl80211_send_beacon_hint_event()
21077 if (!nl_freq) in nl80211_send_beacon_hint_event()
21080 if (nl80211_msg_put_channel(msg, wiphy, channel_after, false)) in nl80211_send_beacon_hint_event()
21105 if (!msg) in nl80211_send_remain_on_chan_event()
21109 if (!hdr) { in nl80211_send_remain_on_chan_event()
21114 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_remain_on_chan_event()
21126 if (cmd == NL80211_CMD_REMAIN_ON_CHANNEL && in nl80211_send_remain_on_chan_event()
21152 if (!msg) in cfg80211_assoc_comeback()
21156 if (!hdr) { in cfg80211_assoc_comeback()
21161 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_assoc_comeback()
21228 if (!msg) in cfg80211_new_sta()
21231 if (nl80211_send_station(msg, NL80211_CMD_NEW_STATION, 0, 0, 0, in cfg80211_new_sta()
21250 if (!sinfo) in cfg80211_del_sta_sinfo()
21256 if (!msg) { in cfg80211_del_sta_sinfo()
21261 if (nl80211_send_station(msg, NL80211_CMD_DEL_STATION, 0, 0, 0, in cfg80211_del_sta_sinfo()
21282 if (!msg) in cfg80211_conn_failed()
21286 if (!hdr) { in cfg80211_conn_failed()
21291 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) || in cfg80211_conn_failed()
21316 if (!nlportid) in __nl80211_unexpected_frame()
21320 if (!msg) in __nl80211_unexpected_frame()
21324 if (!hdr) { in __nl80211_unexpected_frame()
21329 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in __nl80211_unexpected_frame()
21353 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_AP && in cfg80211_rx_spurious_frame()
21374 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_AP && in cfg80211_rx_unexpected_4addr_frame()
21397 if (!msg) in nl80211_send_mgmt()
21401 if (!hdr) { in nl80211_send_mgmt()
21406 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_mgmt()
21449 if (command == NL80211_CMD_FRAME_TX_STATUS) in nl80211_frame_tx_status()
21457 if (!msg) in nl80211_frame_tx_status()
21461 if (!hdr) { in nl80211_frame_tx_status()
21466 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_frame_tx_status()
21533 if (!nlportid) in __nl80211_rx_control_port()
21537 if (!msg) in __nl80211_rx_control_port()
21541 if (!hdr) { in __nl80211_rx_control_port()
21546 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in __nl80211_rx_control_port()
21559 if (!frame) in __nl80211_rx_control_port()
21593 if (!msg) in cfg80211_prepare_cqm()
21599 if (!cb[0]) { in cfg80211_prepare_cqm()
21604 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_prepare_cqm()
21608 if (mac && nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, mac)) in cfg80211_prepare_cqm()
21612 if (!cb[1]) in cfg80211_prepare_cqm()
21646 if (WARN_ON(rssi_event != NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW && in cfg80211_cqm_rssi_notify()
21652 if (cqm_config) { in cfg80211_cqm_rssi_notify()
21672 if (!cqm_config) in cfg80211_cqm_rssi_notify_work()
21675 if (cqm_config->use_range_api) in cfg80211_cqm_rssi_notify_work()
21682 if (!msg) in cfg80211_cqm_rssi_notify_work()
21685 if (nla_put_u32(msg, NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT, in cfg80211_cqm_rssi_notify_work()
21689 if (rssi_level && nla_put_s32(msg, NL80211_ATTR_CQM_RSSI_LEVEL, in cfg80211_cqm_rssi_notify_work()
21708 if (!msg) in cfg80211_cqm_txe_notify()
21711 if (nla_put_u32(msg, NL80211_ATTR_CQM_TXE_PKTS, num_packets)) in cfg80211_cqm_txe_notify()
21714 if (nla_put_u32(msg, NL80211_ATTR_CQM_TXE_RATE, rate)) in cfg80211_cqm_txe_notify()
21717 if (nla_put_u32(msg, NL80211_ATTR_CQM_TXE_INTVL, intvl)) in cfg80211_cqm_txe_notify()
21736 if (!msg) in cfg80211_cqm_pktloss_notify()
21739 if (nla_put_u32(msg, NL80211_ATTR_CQM_PKT_LOSS_EVENT, num_packets)) in cfg80211_cqm_pktloss_notify()
21755 if (!msg) in cfg80211_cqm_beacon_loss_notify()
21758 if (nla_put_flag(msg, NL80211_ATTR_CQM_BEACON_LOSS_EVENT)) in cfg80211_cqm_beacon_loss_notify()
21778 if (!msg) in nl80211_gtk_rekey_notify()
21782 if (!hdr) { in nl80211_gtk_rekey_notify()
21787 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_gtk_rekey_notify()
21793 if (!rekey_attr) in nl80211_gtk_rekey_notify()
21796 if (nla_put(msg, NL80211_REKEY_DATA_REPLAY_CTR, in nl80211_gtk_rekey_notify()
21834 if (!msg) in nl80211_pmksa_candidate_notify()
21838 if (!hdr) { in nl80211_pmksa_candidate_notify()
21843 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_pmksa_candidate_notify()
21848 if (!attr) in nl80211_pmksa_candidate_notify()
21851 if (nla_put_u32(msg, NL80211_PMKSA_CANDIDATE_INDEX, index) || in nl80211_pmksa_candidate_notify()
21894 if (!msg) in nl80211_ch_switch_notify()
21898 if (!hdr) { in nl80211_ch_switch_notify()
21903 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex)) in nl80211_ch_switch_notify()
21906 if (wdev->valid_links && in nl80211_ch_switch_notify()
21910 if (nl80211_send_chandef(msg, chandef)) in nl80211_ch_switch_notify()
21913 if (notif == NL80211_CMD_CH_SWITCH_STARTED_NOTIFY) { in nl80211_ch_switch_notify()
21914 if (nla_put_u32(msg, NL80211_ATTR_CH_SWITCH_COUNT, count)) in nl80211_ch_switch_notify()
21916 if (quiet && in nl80211_ch_switch_notify()
21947 if (!WARN_ON(!wdev->links[link_id].client.current_bss)) in cfg80211_ch_switch_notify()
21987 if (!msg) in cfg80211_incumbent_signal_notify()
21991 if (!hdr) in cfg80211_incumbent_signal_notify()
21994 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx)) in cfg80211_incumbent_signal_notify()
21997 if (nl80211_send_chandef(msg, chandef)) in cfg80211_incumbent_signal_notify()
22000 if (nla_put_u32(msg, NL80211_ATTR_INCUMBENT_SIGNAL_INTERFERENCE_BITMAP, in cfg80211_incumbent_signal_notify()
22051 if (!msg) in cfg80211_bss_color_notify()
22055 if (!hdr) in cfg80211_bss_color_notify()
22058 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex)) in cfg80211_bss_color_notify()
22061 if (wdev->valid_links && in cfg80211_bss_color_notify()
22065 if (cmd == NL80211_CMD_COLOR_CHANGE_STARTED && in cfg80211_bss_color_notify()
22069 if (cmd == NL80211_CMD_OBSS_COLOR_COLLISION && in cfg80211_bss_color_notify()
22095 if (!msg) in nl80211_radar_notify()
22099 if (!hdr) { in nl80211_radar_notify()
22104 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx)) in nl80211_radar_notify()
22108 if (netdev) { in nl80211_radar_notify()
22111 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) || in nl80211_radar_notify()
22117 if (rdev->background_radar_wdev && in nl80211_radar_notify()
22120 if (nla_put_flag(msg, NL80211_ATTR_RADAR_BACKGROUND)) in nl80211_radar_notify()
22124 if (nla_put_u32(msg, NL80211_ATTR_RADAR_EVENT, event)) in nl80211_radar_notify()
22127 if (nl80211_send_chandef(msg, chandef)) in nl80211_radar_notify()
22149 if (WARN_ON(!mac)) in cfg80211_sta_opmode_change_notify()
22153 if (!msg) in cfg80211_sta_opmode_change_notify()
22157 if (!hdr) { in cfg80211_sta_opmode_change_notify()
22162 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx)) in cfg80211_sta_opmode_change_notify()
22165 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex)) in cfg80211_sta_opmode_change_notify()
22168 if (nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, mac)) in cfg80211_sta_opmode_change_notify()
22171 if ((sta_opmode->changed & STA_OPMODE_SMPS_MODE_CHANGED) && in cfg80211_sta_opmode_change_notify()
22175 if ((sta_opmode->changed & STA_OPMODE_MAX_BW_CHANGED) && in cfg80211_sta_opmode_change_notify()
22179 if ((sta_opmode->changed & STA_OPMODE_N_SS_CHANGED) && in cfg80211_sta_opmode_change_notify()
22208 if (!msg) in cfg80211_probe_status()
22212 if (!hdr) { in cfg80211_probe_status()
22217 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_probe_status()
22251 if (!msg) { in cfg80211_report_obss_beacon_khz()
22257 if (!hdr) in cfg80211_report_obss_beacon_khz()
22260 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_report_obss_beacon_khz()
22294 if (!nl_results) in cfg80211_net_detect_results()
22301 if (!nl_match) in cfg80211_net_detect_results()
22306 * cfg80211 structure. If a driver can't pass the in cfg80211_net_detect_results()
22311 if (nla_put(msg, NL80211_ATTR_SSID, match->ssid.ssid_len, in cfg80211_net_detect_results()
22317 if (match->n_channels) { in cfg80211_net_detect_results()
22320 if (!nl_freqs) { in cfg80211_net_detect_results()
22326 if (nla_put_u32(msg, j, match->channels[j])) { in cfg80211_net_detect_results()
22355 if (wakeup) in cfg80211_report_wowlan_wakeup()
22359 if (!msg) in cfg80211_report_wowlan_wakeup()
22363 if (!hdr) in cfg80211_report_wowlan_wakeup()
22366 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_report_wowlan_wakeup()
22371 if (wdev->netdev && nla_put_u32(msg, NL80211_ATTR_IFINDEX, in cfg80211_report_wowlan_wakeup()
22375 if (wakeup) { in cfg80211_report_wowlan_wakeup()
22380 if (!reasons) in cfg80211_report_wowlan_wakeup()
22383 if (wakeup->disconnect && in cfg80211_report_wowlan_wakeup()
22386 if (wakeup->magic_pkt && in cfg80211_report_wowlan_wakeup()
22389 if (wakeup->gtk_rekey_failure && in cfg80211_report_wowlan_wakeup()
22392 if (wakeup->eap_identity_req && in cfg80211_report_wowlan_wakeup()
22395 if (wakeup->four_way_handshake && in cfg80211_report_wowlan_wakeup()
22398 if (wakeup->rfkill_release && in cfg80211_report_wowlan_wakeup()
22402 if (wakeup->pattern_idx >= 0 && in cfg80211_report_wowlan_wakeup()
22407 if (wakeup->tcp_match && in cfg80211_report_wowlan_wakeup()
22411 if (wakeup->tcp_connlost && in cfg80211_report_wowlan_wakeup()
22415 if (wakeup->tcp_nomoretokens && in cfg80211_report_wowlan_wakeup()
22420 if (wakeup->unprot_deauth_disassoc && in cfg80211_report_wowlan_wakeup()
22425 if (wakeup->packet) { in cfg80211_report_wowlan_wakeup()
22429 if (!wakeup->packet_80211) { in cfg80211_report_wowlan_wakeup()
22436 if (wakeup->packet_len && in cfg80211_report_wowlan_wakeup()
22440 if (nla_put(msg, pkt_attr, wakeup->packet_present_len, in cfg80211_report_wowlan_wakeup()
22445 if (wakeup->net_detect && in cfg80211_report_wowlan_wakeup()
22477 if (!msg) in cfg80211_tdls_oper_request()
22481 if (!hdr) { in cfg80211_tdls_oper_request()
22486 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_tdls_oper_request()
22514 if (state != NETLINK_URELEASE || notify->protocol != NETLINK_GENERIC) in nl80211_netlink_notify()
22525 if (sched_scan_req->owner_nlportid == notify->portid) { in nl80211_netlink_notify()
22535 if (wdev->owner_nlportid == notify->portid) { in nl80211_netlink_notify()
22538 } else if (wdev->conn_owner_nlportid == notify->portid) { in nl80211_netlink_notify()
22548 if (reg->nlportid == notify->portid) { in nl80211_netlink_notify()
22581 if (!ft_event->target_ap) in cfg80211_ft_event()
22586 if (!msg) in cfg80211_ft_event()
22590 if (!hdr) in cfg80211_ft_event()
22593 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_ft_event()
22598 if (ft_event->ies && in cfg80211_ft_event()
22601 if (ft_event->ric_ies && in cfg80211_ft_event()
22624 if (!rdev->crit_proto_nlportid) in cfg80211_crit_proto_stopped()
22631 if (!msg) in cfg80211_crit_proto_stopped()
22635 if (!hdr) in cfg80211_crit_proto_stopped()
22638 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_crit_proto_stopped()
22661 if (!msg) in nl80211_send_ap_stopped()
22665 if (!hdr) in nl80211_send_ap_stopped()
22668 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_ap_stopped()
22694 if (!wdev->conn_owner_nlportid) in cfg80211_external_auth_request()
22698 if (!msg) in cfg80211_external_auth_request()
22702 if (!hdr) in cfg80211_external_auth_request()
22713 if (params->key_mgmt_suite == WLAN_AKM_SUITE_SAE) { in cfg80211_external_auth_request()
22714 if (nla_put_be32(msg, NL80211_ATTR_AKM_SUITES, in cfg80211_external_auth_request()
22718 if (nla_put_u32(msg, NL80211_ATTR_AKM_SUITES, in cfg80211_external_auth_request()
22723 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_external_auth_request()
22757 if (!msg) in cfg80211_update_owe_info_event()
22761 if (!hdr) in cfg80211_update_owe_info_event()
22764 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_update_owe_info_event()
22769 if (!owe_info->ie_len || in cfg80211_update_owe_info_event()
22773 if (owe_info->assoc_link_id != -1) { in cfg80211_update_owe_info_event()
22774 if (nla_put_u8(msg, NL80211_ATTR_MLO_LINK_ID, in cfg80211_update_owe_info_event()
22778 if (!is_zero_ether_addr(owe_info->peer_mld_addr) && in cfg80211_update_owe_info_event()
22800 /* Schedule channels check if NO_IR or DFS relaxations are supported */ in cfg80211_schedule_channels_check()
22801 if (wdev->iftype == NL80211_IFTYPE_STATION && in cfg80211_schedule_channels_check()
22821 if (!msg) in cfg80211_epcs_changed()
22825 if (!hdr) { in cfg80211_epcs_changed()
22830 if (enabled && nla_put_flag(msg, NL80211_ATTR_EPCS)) in cfg80211_epcs_changed()
22853 if (!wdev->owner_nlportid) in cfg80211_next_nan_dw_notif()
22857 if (!msg) in cfg80211_next_nan_dw_notif()
22862 if (!hdr) in cfg80211_next_nan_dw_notif()
22865 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_next_nan_dw_notif()
22896 if (!msg) in cfg80211_nan_cluster_joined()
22900 if (!hdr) in cfg80211_nan_cluster_joined()
22903 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_nan_cluster_joined()
22912 if (!wdev->owner_nlportid) in cfg80211_nan_cluster_joined()
22935 if (!wdev->owner_nlportid) in cfg80211_nan_ulw_update()
22943 if (!msg) in cfg80211_nan_ulw_update()
22947 if (!hdr) in cfg80211_nan_ulw_update()
22950 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_nan_ulw_update()
22980 if (!wdev->owner_nlportid) in cfg80211_nan_channel_evac()
22984 if (!msg) in cfg80211_nan_channel_evac()
22988 if (!hdr) in cfg80211_nan_channel_evac()
22991 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_nan_channel_evac()
22997 if (!chan_attr) in cfg80211_nan_channel_evac()
23000 if (nl80211_send_chandef(msg, chandef)) in cfg80211_nan_channel_evac()
23023 if (err) in nl80211_init()
23027 if (err) in nl80211_init()