Lines Matching full:if

11 #include <linux/if.h>
78 if (!have_ifidx && !have_wdev_id)
81 if (have_ifidx)
83 if (have_wdev_id) {
88 if (rdev) {
94 if (have_ifidx && wdev->netdev &&
99 if (have_wdev_id && wdev->identifier == (u32)wdev_id) {
113 if (wiphy_net(&rdev->wiphy) != netns)
116 if (have_wdev_id && rdev->wiphy_idx != wiphy_idx)
120 if (have_ifidx && wdev->netdev &&
125 if (have_wdev_id && wdev->identifier == (u32)wdev_id) {
131 if (result)
135 if (result)
148 if (!attrs[NL80211_ATTR_WIPHY] &&
153 if (attrs[NL80211_ATTR_WIPHY])
157 if (attrs[NL80211_ATTR_WDEV]) {
163 if (tmp) {
166 if (wdev->identifier != (u32)wdev_id)
172 if (!found)
175 if (rdev && tmp != rdev)
181 if (attrs[NL80211_ATTR_IFINDEX]) {
185 if (netdev) {
186 if (netdev->ieee80211_ptr)
193 if (!tmp)
197 if (rdev && tmp != rdev)
204 if (!rdev)
207 if (netns != wiphy_net(&rdev->wiphy))
237 if (len < offsetofend(typeof(*mgmt), frame_control))
241 if (s1g_bcn) {
253 if (len < fixedlen)
256 if (ieee80211_hdrlen(mgmt->frame_control) != hdrlen)
266 if (for_each_element_completed(elem, data, len))
285 if (for_each_element_completed(elem, data, len))
295 if (!ieee80211_he_capa_size_ok(nla_data(attr), nla_len(attr)))
309 if (supported_selectors[i] & 0x80)
323 if (len != ETH_ALEN) {
328 if (memcmp(data, cluster_id_prefix, sizeof(cluster_id_prefix))) {
344 if (len < 3) {
351 if (data[0] != 0x12) {
360 if (attr_len != len - 3) {
381 if (pos + 3 > len) {
388 if (data[pos] != 0x17) {
401 * Check if length is one of the valid values: 16 (no
406 if (attr_len != 16 && attr_len != 18 && attr_len != 21 &&
414 if (pos + attr_len > len) {
433 if (!ieee80211_uhr_capa_size_ok(data, len, false))
444 if (!ieee80211_uhr_oper_size_ok(data, len, false))
1256 if (!cb->args[0]) {
1259 if (!attrbuf) {
1261 if (!attrbuf)
1270 if (err) {
1279 if (IS_ERR(*wdev)) {
1296 if (!wiphy) {
1307 if (!net_eq(wiphy_net(wiphy), sock_net(cb->skb->sk))) {
1316 if (tmp->identifier == cb->args[1]) {
1322 if (!*wdev) {
1348 if (!nl_wmm_rules)
1354 if (!nl_wmm_rule)
1357 if (nla_put_u16(msg, NL80211_WMMR_CW_MIN,
1384 if (!large && chan->flags &
1387 if (!large && chan->freq_offset)
1390 if (nla_put_u32(msg, NL80211_FREQUENCY_ATTR_FREQ,
1394 if (nla_put_u32(msg, NL80211_FREQUENCY_ATTR_OFFSET, chan->freq_offset))
1397 if ((chan->flags & IEEE80211_CHAN_PSD) &&
1401 if ((chan->flags & IEEE80211_CHAN_DISABLED) &&
1404 if (chan->flags & IEEE80211_CHAN_NO_IR) {
1405 if (nla_put_flag(msg, NL80211_FREQUENCY_ATTR_NO_IR))
1407 if (nla_put_flag(msg, __NL80211_FREQUENCY_ATTR_NO_IBSS))
1410 if (chan->flags & IEEE80211_CHAN_RADAR) {
1411 if (nla_put_flag(msg, NL80211_FREQUENCY_ATTR_RADAR))
1413 if (large) {
1418 if (nla_put_u32(msg, NL80211_FREQUENCY_ATTR_DFS_STATE,
1421 if (nla_put_u32(msg, NL80211_FREQUENCY_ATTR_DFS_TIME,
1424 if (nla_put_u32(msg,
1431 if (large) {
1432 if ((chan->flags & IEEE80211_CHAN_NO_HT40MINUS) &&
1435 if ((chan->flags & IEEE80211_CHAN_NO_HT40PLUS) &&
1438 if ((chan->flags & IEEE80211_CHAN_NO_80MHZ) &&
1441 if ((chan->flags & IEEE80211_CHAN_NO_160MHZ) &&
1444 if ((chan->flags & IEEE80211_CHAN_INDOOR_ONLY) &&
1447 if ((chan->flags & IEEE80211_CHAN_IR_CONCURRENT) &&
1450 if ((chan->flags & IEEE80211_CHAN_NO_20MHZ) &&
1453 if ((chan->flags & IEEE80211_CHAN_NO_10MHZ) &&
1456 if ((chan->flags & IEEE80211_CHAN_NO_HE) &&
1459 if ((chan->flags & IEEE80211_CHAN_NO_320MHZ) &&
1462 if ((chan->flags & IEEE80211_CHAN_NO_EHT) &&
1465 if ((chan->flags & IEEE80211_CHAN_DFS_CONCURRENT) &&
1468 if ((chan->flags & IEEE80211_CHAN_NO_6GHZ_VLP_CLIENT) &&
1471 if ((chan->flags & IEEE80211_CHAN_NO_6GHZ_AFC_CLIENT) &&
1474 if ((chan->flags & IEEE80211_CHAN_CAN_MONITOR) &&
1477 if ((chan->flags & IEEE80211_CHAN_ALLOW_6GHZ_VLP_AP) &&
1480 if ((chan->flags & IEEE80211_CHAN_ALLOW_20MHZ_ACTIVITY) &&
1484 if ((chan->flags & IEEE80211_CHAN_NO_4MHZ) &&
1487 if ((chan->flags & IEEE80211_CHAN_NO_8MHZ) &&
1490 if ((chan->flags & IEEE80211_CHAN_NO_16MHZ) &&
1493 if ((chan->flags & IEEE80211_CHAN_S1G_NO_PRIMARY) &&
1496 if ((chan->flags & IEEE80211_CHAN_NO_UHR) &&
1499 if (chan->cac_start_time &&
1507 if (nla_put_u32(msg, NL80211_FREQUENCY_ATTR_MAX_TX_POWER,
1511 if (large) {
1515 if (!IS_ERR_OR_NULL(rule) && rule->has_wmm) {
1516 if (nl80211_msg_put_wmm_rules(msg, rule))
1534 if (txqstats->filled & BIT(NL80211_TXQ_STATS_ ## attr) && \
1540 if (!txqattr)
1566 * Returns: the link ID or 0 if not given
1571 * or if additional validation is done.
1584 if (!linkid)
1605 if (err)
1612 if (k->def) {
1616 if (k->defmgmt || k->defbeacon)
1619 if (tb[NL80211_KEY_IDX])
1622 if (tb[NL80211_KEY_DATA]) {
1627 if (tb[NL80211_KEY_SEQ]) {
1632 if (tb[NL80211_KEY_CIPHER])
1635 if (tb[NL80211_KEY_TYPE])
1638 if (tb[NL80211_KEY_DEFAULT_TYPES]) {
1646 if (err)
1653 if (tb[NL80211_KEY_MODE])
1656 if (tb[NL80211_KEY_LTF_SEED]) {
1666 if (info->attrs[NL80211_ATTR_KEY_DATA]) {
1671 if (info->attrs[NL80211_ATTR_KEY_SEQ]) {
1676 if (info->attrs[NL80211_ATTR_KEY_IDX])
1679 if (info->attrs[NL80211_ATTR_KEY_CIPHER])
1685 if (k->def) {
1689 if (k->defmgmt)
1692 if (info->attrs[NL80211_ATTR_KEY_TYPE])
1695 if (info->attrs[NL80211_ATTR_KEY_DEFAULT_TYPES]) {
1702 if (err)
1720 if (info->attrs[NL80211_ATTR_KEY])
1725 if (err)
1728 if ((k->def ? 1 : 0) + (k->defmgmt ? 1 : 0) +
1735 if (k->defmgmt || k->defbeacon) {
1736 if (k->def_uni || !k->def_multi) {
1743 if (k->idx != -1) {
1744 if (k->defmgmt) {
1745 if (k->idx < 4 || k->idx > 5) {
1750 } else if (k->defbeacon) {
1751 if (k->idx < 6 || k->idx > 7) {
1756 } else if (k->def) {
1757 if (k->idx < 0 || k->idx > 3) {
1762 if (k->idx < 0 || k->idx > 7) {
1789 if (!have_key)
1793 if (!result)
1803 if (err)
1806 if (!parse.p.key)
1808 if (parse.idx < 0 || parse.idx > 3) {
1812 if (parse.def) {
1813 if (def) {
1820 if (!parse.def_uni || !parse.def_multi)
1822 } else if (parse.defmgmt)
1826 if (err)
1828 if (parse.p.cipher != WLAN_CIPHER_SUITE_WEP40 &&
1839 /* must be WEP key if we got here */
1840 if (no_ht)
1844 if (result->def < 0) {
1867 if (wdev->u.ibss.current_bss)
1872 if (wdev->connected ||
1879 if (wiphy_ext_feature_isset(wdev->wiphy,
1884 if (wiphy_ext_feature_isset(wdev->wiphy,
1906 if (!chan || chan->flags & IEEE80211_CHAN_DISABLED)
1916 if (!nl_modes)
1921 if ((ifmodes & 1) && nla_put_flag(msg, i))
1942 if (!nl_combi)
1947 if (!nl_limits)
1954 if (!nl_limit)
1956 if (nla_put_u32(msg, NL80211_IFACE_LIMIT_MAX, c->limits[i].max))
1958 if (nl80211_put_iftypes(msg, NL80211_IFACE_LIMIT_TYPES,
1966 if (c->beacon_int_infra_match &&
1969 if (nla_put_u32(msg, NL80211_IFACE_COMB_NUM_CHANNELS,
1974 if (large &&
1980 if (c->beacon_int_min_gcd &&
2002 if (!nl_combis)
2005 if (radio >= 0) {
2013 if (nl80211_put_ifcomb_data(msg, large, i + 1, &c[i], nested))
2030 if (!tcp)
2035 if (!nl_tcp)
2038 if (nla_put_u32(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD,
2042 if (nla_put_u32(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD,
2046 if (tcp->seq && nla_put_flag(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ))
2049 if (tcp->tok && nla_put(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN,
2053 if (nla_put_u32(msg, NL80211_WOWLAN_TCP_DATA_INTERVAL,
2057 if (nla_put_u32(msg, NL80211_WOWLAN_TCP_WAKE_PAYLOAD,
2071 if (!rdev->wiphy.wowlan)
2076 if (!nl_wowlan)
2079 if (((rdev->wiphy.wowlan->flags & WIPHY_WOWLAN_ANY) &&
2097 if (rdev->wiphy.wowlan->n_patterns) {
2105 if (nla_put(msg, NL80211_WOWLAN_TRIG_PKT_PATTERN,
2110 if ((rdev->wiphy.wowlan->flags & WIPHY_WOWLAN_NET_DETECT) &&
2115 if (large && nl80211_send_wowlan_tcp_caps(rdev, msg))
2129 if (!rdev->wiphy.coalesce)
2139 if (nla_put(msg, NL80211_ATTR_COALESCE_RULE, sizeof(rule), &rule))
2154 if (nl80211_put_iftypes(msg, NL80211_BAND_IFTYPE_ATTR_IFTYPES,
2158 if (he_cap->has_he) {
2159 if (nla_put(msg, NL80211_BAND_IFTYPE_ATTR_HE_CAP_MAC,
2173 if (eht_cap->has_eht && he_cap->has_he) {
2191 if (nla_put(msg, NL80211_BAND_IFTYPE_ATTR_EHT_CAP_MAC,
2204 if (uhr_cap->has_uhr) {
2205 if (nla_put(msg, NL80211_BAND_IFTYPE_ATTR_UHR_CAP_MAC,
2212 if (sband->band == NL80211_BAND_6GHZ &&
2218 if (iftdata->vendor_elems.data && iftdata->vendor_elems.len &&
2235 if (sband->ht_cap.ht_supported &&
2248 if (sband->vht_cap.vht_supported &&
2256 if (large && sband->n_iftype_data) {
2263 if (!nl_iftype_data)
2270 if (!iftdata)
2274 if (err)
2284 if (large && sband->edmg_cap.channels &&
2294 if (!nl_rates)
2299 if (!nl_rate)
2303 if (nla_put_u32(msg, NL80211_BITRATE_ATTR_RATE,
2306 if ((rate->flags & IEEE80211_RATE_SHORT_PREAMBLE) &&
2317 if (sband->band == NL80211_BAND_S1GHZ && sband->s1g_cap.s1g &&
2338 if (!mgmt_stypes)
2342 if (!nl_ifs)
2347 if (!nl_ftypes)
2352 if ((stypes & 1) &&
2365 if (!nl_ifs)
2370 if (!nl_ftypes)
2375 if ((stypes & 1) &&
2391 if (rdev->ops->op) { \
2393 if (nla_put_u32(msg, i, NL80211_CMD_ ## n)) \
2425 if (rdev->wiphy.flags & WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL)
2430 if (rdev->wiphy.flags & WIPHY_FLAG_NETNS_OK) {
2432 if (nla_put_u32(msg, i, NL80211_CMD_SET_WIPHY_NETNS))
2435 if (rdev->ops->set_monitor_channel || rdev->ops->start_ap ||
2438 if (nla_put_u32(msg, i, NL80211_CMD_SET_CHANNEL))
2441 if (rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_TDLS) {
2445 if (rdev->wiphy.max_sched_scan_reqs)
2449 if (rdev->wiphy.flags & WIPHY_FLAG_REPORTS_OBSS) {
2451 if (nla_put_u32(msg, i, NL80211_CMD_REGISTER_BEACONS))
2460 if (rdev->ops->connect || rdev->ops->auth) {
2462 if (nla_put_u32(msg, i, NL80211_CMD_CONNECT))
2466 if (rdev->ops->disconnect || rdev->ops->deauth) {
2468 if (nla_put_u32(msg, i, NL80211_CMD_DISCONNECT))
2483 if (!cap->ftm.supported)
2487 if (!ftm)
2490 if (cap->ftm.asap && nla_put_flag(msg, NL80211_PMSR_FTM_CAPA_ATTR_ASAP))
2492 if (cap->ftm.non_asap &&
2495 if (cap->ftm.request_lci &&
2498 if (cap->ftm.request_civicloc &&
2501 if (nla_put_u32(msg, NL80211_PMSR_FTM_CAPA_ATTR_PREAMBLES,
2504 if (nla_put_u32(msg, NL80211_PMSR_FTM_CAPA_ATTR_BANDWIDTHS,
2507 if (cap->ftm.max_bursts_exponent >= 0 &&
2511 if (cap->ftm.max_ftms_per_burst &&
2515 if (cap->ftm.trigger_based &&
2518 if (cap->ftm.non_trigger_based &&
2521 if (cap->ftm.support_6ghz &&
2524 if (nla_put_u32(msg, NL80211_PMSR_FTM_CAPA_ATTR_MAX_TX_LTF_REP,
2527 if (nla_put_u32(msg, NL80211_PMSR_FTM_CAPA_ATTR_MAX_RX_LTF_REP,
2530 if (nla_put_u32(msg, NL80211_PMSR_FTM_CAPA_ATTR_MAX_TX_STS,
2533 if (nla_put_u32(msg, NL80211_PMSR_FTM_CAPA_ATTR_MAX_RX_STS,
2536 if (cap->ftm.max_total_ltf_tx > 0 &&
2540 if (cap->ftm.max_total_ltf_rx > 0 &&
2545 if (cap->ftm.ista.support_ntb || cap->ftm.ista.support_tb ||
2551 if (!ista_caps)
2553 if (cap->ftm.ista.support_ntb &&
2556 if (cap->ftm.ista.support_tb &&
2559 if (cap->ftm.ista.support_edca &&
2562 if (cap->ftm.ista.max_peers &&
2569 if (cap->ftm.rsta.support_ntb || cap->ftm.rsta.support_tb ||
2574 * Set the generic RSTA_SUPPORT flag if any of the specific
2578 if (nla_put_flag(msg, NL80211_PMSR_FTM_CAPA_ATTR_RSTA_SUPPORT))
2583 if (!rsta_caps)
2585 if (cap->ftm.rsta.support_ntb &&
2588 if (cap->ftm.rsta.support_tb &&
2591 if (cap->ftm.rsta.support_edca &&
2594 if (cap->ftm.rsta.max_peers &&
2601 if (cap->ftm.max_no_of_tx_antennas &&
2606 if (cap->ftm.max_no_of_rx_antennas &&
2611 if (cap->ftm.min_allowed_ranging_interval_edca &&
2616 if (cap->ftm.min_allowed_ranging_interval_ntb &&
2621 if (cap->ftm.type.infra_support || cap->ftm.type.pd_support) {
2626 if (!pd_caps)
2629 if (cap->ftm.type.infra_support &&
2633 if (cap->ftm.type.pd_support &&
2640 if (cap->ftm.concurrent_ista_rsta_support &&
2644 if (cap->ftm.type.pd_support) {
2645 if (cap->ftm.pd_preambles &&
2649 if (cap->ftm.pd_bandwidths &&
2665 if (!cap)
2670 * will genlmsg_cancel() if we fail
2674 if (!pmsr)
2677 if (nla_put_u32(msg, NL80211_PMSR_ATTR_MAX_PEERS, cap->max_peers))
2680 if (cap->report_ap_tsf &&
2684 if (cap->randomize_mac_addr &&
2689 if (!caps)
2692 if (nl80211_send_pmsr_ftm_capa(cap, msg))
2709 if (!rdev->wiphy.num_iftype_akm_suites ||
2714 if (!nested)
2719 if (!nested_akms)
2724 if (nl80211_put_iftypes(msg, NL80211_IFTYPE_AKM_ATTR_IFTYPES,
2728 if (nla_put(msg, NL80211_IFTYPE_AKM_ATTR_SUITES,
2747 if (!rdev->wiphy.tid_config_support.vif &&
2752 if (!supp)
2755 if (rdev->wiphy.tid_config_support.vif &&
2761 if (rdev->wiphy.tid_config_support.peer &&
2768 if (nla_put_u8(msg, NL80211_TID_CONFIG_ATTR_RETRY_SHORT,
2771 if (nla_put_u8(msg, NL80211_TID_CONFIG_ATTR_RETRY_LONG,
2791 if (!rdev->wiphy.sar_capa)
2797 if (!sar_capa)
2800 if (nla_put_u32(msg, NL80211_SAR_ATTR_TYPE, rdev->wiphy.sar_capa->type))
2804 if (!specs)
2810 if (!sub_freq_range)
2813 if (nla_put_u32(msg, NL80211_SAR_ATTR_SPECS_START_FREQ,
2817 if (nla_put_u32(msg, NL80211_SAR_ATTR_SPECS_END_FREQ,
2837 if (!wiphy->mbssid_max_interfaces)
2841 if (!config)
2844 if (nla_put_u8(msg, NL80211_MBSSID_CONFIG_ATTR_MAX_INTERFACES,
2848 if (wiphy->ema_max_profile_periodicity &&
2870 if (!radio)
2873 if (nla_put_u32(msg, NL80211_WIPHY_RADIO_ATTR_INDEX, idx))
2876 if (rcfg->rts_threshold &&
2881 if (r->antenna_mask &&
2890 if (!freq)
2893 if (nla_put_u32(msg, NL80211_WIPHY_RADIO_FREQ_ATTR_START,
2903 if (nl80211_put_ifcomb_data(msg, true,
2922 if (!wiphy->n_radio)
2926 if (!radios)
2930 if (nl80211_put_radio(wiphy, msg, i))
2935 if (nl80211_put_iface_combinations(wiphy, msg,
2954 if (!cfg80211_iftype_allowed(wiphy, NL80211_IFTYPE_NAN_DATA, false, 0))
2962 if (WARN_ON(!ht_cap->ht_supported))
2966 if (!nl_phy_cap)
2969 if (nla_put(msg, NL80211_NAN_PHY_CAP_ATTR_HT_MCS_SET,
2978 if (vht_cap->vht_supported) {
2979 if (nla_put(msg, NL80211_NAN_PHY_CAP_ATTR_VHT_MCS_SET,
2986 if (he_cap->has_he) {
2987 if (nla_put(msg, NL80211_NAN_PHY_CAP_ATTR_HE_MAC,
3014 if (!nan_caps)
3017 if (wiphy->nan_capa.flags & WIPHY_NAN_FLAGS_CONFIGURABLE_SYNC &&
3021 if ((wiphy->nan_capa.flags & WIPHY_NAN_FLAGS_USERSPACE_DE) &&
3025 if (nla_put_u8(msg, NL80211_NAN_CAPA_OP_MODE,
3035 if (nl80211_put_nan_phy_cap(wiphy, msg))
3071 if (!hdr)
3074 if (WARN_ON(!state))
3077 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
3084 if (cmd != NL80211_CMD_NEW_WIPHY)
3089 if (nla_put_u8(msg, NL80211_ATTR_WIPHY_RETRY_SHORT,
3111 if ((rdev->wiphy.flags & WIPHY_FLAG_IBSS_RSN) &&
3114 if ((rdev->wiphy.flags & WIPHY_FLAG_MESH_AUTH) &&
3117 if ((rdev->wiphy.flags & WIPHY_FLAG_AP_UAPSD) &&
3120 if ((rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_FW_ROAM) &&
3123 if ((rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_TDLS) &&
3126 if ((rdev->wiphy.flags & WIPHY_FLAG_TDLS_EXTERNAL_SETUP) &&
3130 if (state->split)
3134 if (nla_put(msg, NL80211_ATTR_CIPHER_SUITES,
3139 if (nla_put_u8(msg, NL80211_ATTR_MAX_NUM_PMKIDS,
3143 if ((rdev->wiphy.flags & WIPHY_FLAG_CONTROL_PORT_PROTOCOL) &&
3147 if (nla_put_u32(msg, NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX,
3153 if ((rdev->wiphy.flags & WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD) &&
3158 if ((rdev->wiphy.available_antennas_tx ||
3165 if (!res) {
3166 if (nla_put_u32(msg,
3177 if (state->split)
3181 if (nl80211_put_iftypes(msg, NL80211_ATTR_SUPPORTED_IFTYPES,
3185 if (state->split)
3191 if (!nl_bands)
3202 if (band > NL80211_BAND_5GHZ && !state->split)
3207 if (!sband)
3211 if (!nl_band)
3216 if (nl80211_send_band_rateinfo(msg, sband,
3220 if (state->split)
3227 if (!nl_freqs)
3235 if (!nl_freq)
3240 if (nl80211_msg_put_channel(
3246 if (state->split)
3249 if (i < sband->n_channels)
3258 if (state->split) {
3260 if (state->chan_start)
3267 if (band < NUM_NL80211_BANDS)
3272 /* if bands & channels are done, continue outside */
3273 if (state->band_start == 0 && state->chan_start == 0)
3275 if (state->split)
3281 if (!nl_cmds)
3285 if (i < 0)
3287 if (state->split) {
3290 if (rdev->wiphy.flags & WIPHY_FLAG_HAS_CHANNEL_SWITCH)
3293 if (rdev->wiphy.features &
3299 if (rdev->wiphy.sar_capa)
3307 if (state->split)
3311 if (rdev->ops->remain_on_channel &&
3318 if ((rdev->wiphy.flags & WIPHY_FLAG_OFFCHAN_TX) &&
3323 if (state->split)
3328 if (nl80211_send_wowlan(msg, rdev, state->split))
3331 if (state->split)
3338 if (nl80211_put_iftypes(msg, NL80211_ATTR_SOFTWARE_IFTYPES,
3342 if (nl80211_put_iface_combinations(&rdev->wiphy, msg,
3349 if (state->split)
3353 if ((rdev->wiphy.flags & WIPHY_FLAG_HAVE_AP_SME) &&
3360 * We can only add the per-channel limit information if the
3364 if (state->split)
3366 if (nla_put_u32(msg, NL80211_ATTR_FEATURE_FLAGS, features))
3369 if (rdev->wiphy.ht_capa_mod_mask &&
3375 if (rdev->wiphy.flags & WIPHY_FLAG_HAVE_AP_SME &&
3391 if (state->split)
3397 if (nl80211_send_mgmt_stypes(msg, mgmt_stypes))
3400 if (nla_put_u32(msg, NL80211_ATTR_MAX_NUM_SCHED_SCAN_PLANS,
3408 if (rdev->wiphy.extended_capabilities &&
3417 if (rdev->wiphy.vht_capa_mod_mask &&
3423 if (nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN,
3427 if (!is_zero_ether_addr(rdev->wiphy.addr_mask) &&
3432 if (rdev->wiphy.n_addresses > 1) {
3436 if (!attr)
3440 if (nla_put(msg, i + 1, ETH_ALEN,
3450 if (nl80211_send_coalesce(msg, rdev))
3453 if (rdev->wiphy.max_ap_assoc_sta &&
3461 if (rdev->wiphy.n_vendor_commands) {
3467 if (!nested)
3472 if (nla_put(msg, i + 1, sizeof(*info), info))
3478 if (rdev->wiphy.n_vendor_events) {
3484 if (!nested)
3489 if (nla_put(msg, i + 1, sizeof(*info), info))
3497 if (rdev->wiphy.flags & WIPHY_FLAG_HAS_CHANNEL_SWITCH &&
3502 if (rdev->wiphy.regulatory_flags & REGULATORY_WIPHY_SELF_MANAGED &&
3506 if (rdev->wiphy.max_sched_scan_reqs &&
3511 if (nla_put(msg, NL80211_ATTR_EXT_FEATURES,
3516 if (rdev->wiphy.bss_param_support) {
3521 if (!nested)
3524 if ((parsup & WIPHY_BSS_PARAM_CTS_PROT) &&
3527 if ((parsup & WIPHY_BSS_PARAM_SHORT_PREAMBLE) &&
3530 if ((parsup & WIPHY_BSS_PARAM_SHORT_SLOT_TIME) &&
3533 if ((parsup & WIPHY_BSS_PARAM_BASIC_RATES) &&
3536 if ((parsup & WIPHY_BSS_PARAM_AP_ISOLATE) &&
3539 if ((parsup & WIPHY_BSS_PARAM_HT_OPMODE) &&
3542 if ((parsup & WIPHY_BSS_PARAM_P2P_CTWINDOW) &&
3545 if ((parsup & WIPHY_BSS_PARAM_P2P_OPPPS) &&
3550 if (rdev->wiphy.bss_select_support) {
3556 if (!nested)
3561 if ((bss_select_support & 1) &&
3573 if (rdev->wiphy.num_iftype_ext_capab &&
3579 if (!nested)
3590 if (!nested_ext_capab ||
3601 if (rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_MLO &&
3609 if (rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_MLO &&
3617 if (state->split)
3621 if (i < rdev->wiphy.num_iftype_ext_capab) {
3627 if (nla_put_u32(msg, NL80211_ATTR_BANDS,
3631 if (wiphy_ext_feature_isset(&rdev->wiphy,
3637 if (!res &&
3642 if (nla_put_u32(msg, NL80211_ATTR_TXQ_LIMIT,
3645 if (nla_put_u32(msg, NL80211_ATTR_TXQ_MEMORY_LIMIT,
3648 if (nla_put_u32(msg, NL80211_ATTR_TXQ_QUANTUM,
3656 if (nl80211_send_pmsr_capa(rdev, msg))
3662 if (rdev->wiphy.akm_suites &&
3668 if (nl80211_put_iftype_akm_suites(rdev, msg))
3671 if (nl80211_put_tid_config_support(rdev, msg))
3676 if (nl80211_put_sar_specs(rdev, msg))
3679 if (nl80211_put_mbssid_support(&rdev->wiphy, msg))
3682 if (nla_put_u16(msg, NL80211_ATTR_MAX_NUM_AKM_SUITES,
3686 if (rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_MLO)
3689 if (rdev->wiphy.hw_timestamp_max_peers &&
3697 if (nl80211_put_radios(&rdev->wiphy, msg))
3703 if (nl80211_put_nan_capa(&rdev->wiphy, msg))
3726 if (!tb)
3734 if (ret) {
3740 if (tb[NL80211_ATTR_WIPHY])
3742 if (tb[NL80211_ATTR_WDEV])
3744 if (tb[NL80211_ATTR_IFINDEX]) {
3750 if (!netdev) {
3754 if (netdev->ieee80211_ptr) {
3774 if (!state) {
3776 if (!state) {
3782 if (ret) {
3791 if (!net_eq(wiphy_net(&rdev->wiphy), sock_net(skb->sk)))
3793 if (++idx <= state->start)
3795 if (state->filter_wiphy != -1 &&
3806 if (ret < 0) {
3808 * If sending the wiphy data didn't fit (ENOBUFS
3820 if ((ret == -ENOBUFS || ret == -EMSGSIZE) &&
3856 if (!msg)
3859 if (nl80211_send_wiphy(rdev, NL80211_CMD_NEW_WIPHY, msg,
3882 if (!tb[NL80211_TXQ_ATTR_AC] || !tb[NL80211_TXQ_ATTR_TXOP] ||
3893 if (ac >= NL80211_NUM_ACS)
3914 * operation to set the monitor channel if possible.
3931 if (!attrs[NL80211_ATTR_WIPHY_FREQ]) {
3939 if (attrs[NL80211_ATTR_WIPHY_FREQ_OFFSET])
3951 if (!chandef->chan) {
3957 if (cfg80211_chandef_is_s1g(chandef))
3960 if (attrs[NL80211_ATTR_WIPHY_CHANNEL_TYPE]) {
3970 if (chandef->chan->band == NL80211_BAND_60GHZ ||
3976 if (attrs[NL80211_ATTR_CENTER_FREQ1] &&
3984 if (attrs[NL80211_ATTR_CENTER_FREQ2] &&
3998 } else if (attrs[NL80211_ATTR_CHANNEL_WIDTH]) {
4000 if (attrs[NL80211_ATTR_CENTER_FREQ1]) {
4007 if (attrs[NL80211_ATTR_CENTER_FREQ2])
4015 if (attrs[NL80211_ATTR_WIPHY_EDMG_CHANNELS]) {
4019 if (attrs[NL80211_ATTR_WIPHY_EDMG_BW_CONFIG])
4027 if (attrs[NL80211_ATTR_PUNCT_BITMAP]) {
4031 if (chandef->punctured &&
4041 if (attrs[NL80211_ATTR_NPCA_PRIMARY_FREQ]) {
4042 if (!permit_npca) {
4052 if (!chandef->npca_chan) {
4062 } else if (attrs[NL80211_ATTR_NPCA_PUNCT_BITMAP]) {
4069 if (!cfg80211_chandef_valid(chandef)) {
4075 if (!_cfg80211_chandef_usable(&rdev->wiphy, chandef,
4083 if (chandef->width == NL80211_CHAN_WIDTH_5 ||
4114 if (dev)
4116 if (!nl80211_can_set_dev_channel(wdev))
4118 if (wdev)
4121 if (link_id < 0) {
4122 if (wdev && wdev->valid_links)
4134 if (result)
4140 if (!cfg80211_reg_can_beacon_relax(&rdev->wiphy, &chandef,
4143 if (wdev->links[link_id].ap.beacon_interval) {
4146 if (!dev || !rdev->ops->set_ap_chanwidth ||
4153 if (chandef.npca_chan != cur_chan)
4156 if (chandef.chan != cur_chan)
4188 if (result)
4222 if (!rdev->ops->set_wiphy_params)
4225 if (info->attrs[NL80211_ATTR_WIPHY_RTS_THRESHOLD]) {
4236 if (result)
4267 if (info->attrs[NL80211_ATTR_IFINDEX]) {
4271 if (netdev && netdev->ieee80211_ptr)
4277 if (!netdev) {
4280 if (IS_ERR(rdev)) {
4297 if (info->attrs[NL80211_ATTR_WIPHY_NAME])
4302 if (result)
4305 if (info->attrs[NL80211_ATTR_WIPHY_RADIO_INDEX]) {
4307 if (rdev->wiphy.n_radio <= 0)
4312 if (radio_idx >= rdev->wiphy.n_radio)
4318 if (info->attrs[NL80211_ATTR_WIPHY_TXQ_PARAMS]) {
4322 if (!rdev->ops->set_txq_params)
4325 if (!netdev)
4328 if (netdev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP &&
4332 if (!netif_running(netdev))
4343 if (result)
4347 if (result)
4353 if (txq_params.link_id >= 0 &&
4357 else if (txq_params.link_id >= 0 &&
4363 if (result)
4368 if (info->attrs[NL80211_ATTR_WIPHY_FREQ]) {
4371 if (wdev) {
4380 if (result)
4384 if (info->attrs[NL80211_ATTR_WIPHY_TX_POWER_SETTING]) {
4389 if (!(rdev->wiphy.features & NL80211_FEATURE_VIF_TXPOWER))
4392 if (!rdev->ops->set_tx_power)
4398 if (!info->attrs[NL80211_ATTR_WIPHY_TX_POWER_LEVEL] &&
4402 if (type != NL80211_TX_POWER_AUTOMATIC) {
4409 if (result)
4413 if (info->attrs[NL80211_ATTR_WIPHY_ANTENNA_TX] &&
4417 if ((!rdev->wiphy.available_antennas_tx &&
4427 if ((~tx_ant && (tx_ant & ~rdev->wiphy.available_antennas_tx)) ||
4435 if (result)
4441 if (info->attrs[NL80211_ATTR_WIPHY_RETRY_SHORT]) {
4448 if (info->attrs[NL80211_ATTR_WIPHY_RETRY_LONG]) {
4455 if (info->attrs[NL80211_ATTR_WIPHY_FRAG_THRESHOLD]) {
4458 if (frag_threshold < 256)
4461 if (frag_threshold != (u32) -1) {
4473 if (info->attrs[NL80211_ATTR_WIPHY_RTS_THRESHOLD]) {
4479 if (info->attrs[NL80211_ATTR_WIPHY_COVERAGE_CLASS]) {
4480 if (info->attrs[NL80211_ATTR_WIPHY_DYN_ACK])
4488 if (info->attrs[NL80211_ATTR_WIPHY_DYN_ACK]) {
4489 if (!(rdev->wiphy.features & NL80211_FEATURE_ACKTO_ESTIMATION))
4495 if (info->attrs[NL80211_ATTR_TXQ_LIMIT]) {
4496 if (!wiphy_ext_feature_isset(&rdev->wiphy,
4505 if (info->attrs[NL80211_ATTR_TXQ_MEMORY_LIMIT]) {
4506 if (!wiphy_ext_feature_isset(&rdev->wiphy,
4515 if (info->attrs[NL80211_ATTR_TXQ_QUANTUM]) {
4516 if (!wiphy_ext_feature_isset(&rdev->wiphy,
4525 if (changed) {
4532 if (!rdev->ops->set_wiphy_params)
4535 if (rdev->wiphy.n_radio) {
4539 if (!old_radio_rts_threshold)
4547 if (old_radio_rts_threshold) {
4557 if (changed & WIPHY_PARAM_RETRY_SHORT)
4559 if (changed & WIPHY_PARAM_RETRY_LONG)
4561 if (changed & WIPHY_PARAM_FRAG_THRESHOLD)
4563 if ((changed & WIPHY_PARAM_RTS_THRESHOLD) &&
4570 if (changed & WIPHY_PARAM_COVERAGE_CLASS)
4572 if (changed & WIPHY_PARAM_TXQ_LIMIT)
4574 if (changed & WIPHY_PARAM_TXQ_MEMORY_LIMIT)
4576 if (changed & WIPHY_PARAM_TXQ_QUANTUM)
4580 if (result) {
4585 if (old_radio_rts_threshold) {
4605 if (WARN_ON(!cfg80211_chandef_valid(chandef)))
4608 if (nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ,
4611 if (nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ_OFFSET,
4618 if (nla_put_u32(msg, NL80211_ATTR_WIPHY_CHANNEL_TYPE,
4625 if (nla_put_u32(msg, NL80211_ATTR_CHANNEL_WIDTH, chandef->width))
4627 if (nla_put_u32(msg, NL80211_ATTR_CENTER_FREQ1, chandef->center_freq1))
4629 if (chandef->center_freq2 &&
4632 if (chandef->punctured &&
4635 if (chandef->s1g_primary_2mhz &&
4639 if (chandef->npca_chan &&
4643 if (chandef->npca_punctured &&
4667 if (!hdr)
4670 if (dev &&
4675 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
4687 if (rdev->ops->get_channel && !wdev->valid_links) {
4692 if (ret == 0 && nl80211_send_chandef(msg, &chandef))
4696 if (rdev->ops->get_tx_power && !wdev->valid_links) {
4700 if (ret == 0 &&
4709 if (wdev->u.ap.ssid_len &&
4716 if (wdev->u.client.ssid_len &&
4722 if (wdev->u.ibss.ssid_len &&
4732 if (rdev->ops->get_txq_stats) {
4736 if (ret == 0 &&
4742 if (wdev->valid_links) {
4747 if (!links)
4755 if (!link)
4758 if (nla_put_u8(msg, NL80211_ATTR_MLO_LINK_ID, link_id))
4760 if (nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN,
4765 if (ret == 0 && nl80211_send_chandef(msg, &chandef))
4768 if (rdev->ops->get_tx_power) {
4772 if (ret == 0 &&
4803 if (!cb->args[2]) {
4809 if (ret)
4815 * if filtering, set cb->args[2] to +1 since 0 is the default
4818 if (filter_wiphy >= 0)
4822 } else if (cb->args[2] > 0) {
4827 if (!net_eq(wiphy_net(&rdev->wiphy), sock_net(skb->sk)))
4829 if (wp_idx < wp_start) {
4834 if (filter_wiphy >= 0 && filter_wiphy != rdev->wiphy_idx)
4842 if (if_idx < if_start) {
4847 if (nl80211_send_iface(skb, NETLINK_CB(cb->skb).portid,
4877 if (!msg)
4880 if (nl80211_send_iface(msg, info->snd_portid, info->snd_seq, 0,
4906 if (!nla)
4909 if (nla_parse_nested_deprecated(flags, NL80211_MNTR_FLAG_MAX, nla, mntr_flags_policy, NULL))
4913 if (flags[flag])
4917 if (*mntrflags & MONITOR_FLAG_COOK_FRAMES &&
4934 if (info->attrs[NL80211_ATTR_MNTR_FLAGS]) {
4935 if (type != NL80211_IFTYPE_MONITOR)
4940 if (err)
4947 if (params->flags & MONITOR_FLAG_COOK_FRAMES)
4950 if (params->flags & MONITOR_FLAG_ACTIVE &&
4954 if (info->attrs[NL80211_ATTR_MU_MIMO_GROUP_DATA]) {
4958 if (type != NL80211_IFTYPE_MONITOR)
4961 if (!wiphy_ext_feature_isset(&rdev->wiphy, cap_flag))
4968 if ((mumimo_groups[0] & BIT(0)) ||
4976 if (info->attrs[NL80211_ATTR_MU_MIMO_FOLLOW_MAC_ADDR]) {
4979 if (type != NL80211_IFTYPE_MONITOR)
4982 if (!wiphy_ext_feature_isset(&rdev->wiphy, cap_flag))
4997 if (!use_4addr) {
4998 if (netdev && netif_is_bridge_port(netdev))
5005 if (rdev->wiphy.flags & WIPHY_FLAG_4ADDR_AP)
5009 if (rdev->wiphy.flags & WIPHY_FLAG_4ADDR_STATION)
5026 if (!attr) {
5033 if (mask & ~allowed)
5035 if (!mask)
5057 if (info->attrs[NL80211_ATTR_IFTYPE]) {
5059 if (otype != ntype)
5063 if (info->attrs[NL80211_ATTR_MESH_ID]) {
5064 if (ntype != NL80211_IFTYPE_MESH_POINT)
5066 if (otype != NL80211_IFTYPE_MESH_POINT)
5068 if (netif_running(dev))
5078 if (info->attrs[NL80211_ATTR_4ADDR]) {
5082 if (err)
5089 if (err < 0)
5091 if (err > 0)
5095 if (err < 0)
5097 if (err && netif_running(dev))
5100 if (change)
5105 if (!err && params.use_4addr != -1)
5108 if (radio_mask)
5111 if (change && !err)
5129 if (!info->attrs[NL80211_ATTR_IFNAME])
5132 if (info->attrs[NL80211_ATTR_IFTYPE])
5135 if (!rdev->ops->add_virtual_intf)
5138 if ((type == NL80211_IFTYPE_P2P_DEVICE || type == NL80211_IFTYPE_NAN ||
5144 if (!is_valid_ether_addr(params.macaddr))
5148 if (info->attrs[NL80211_ATTR_4ADDR]) {
5151 if (err)
5155 if (!cfg80211_iftype_allowed(&rdev->wiphy, type, params.use_4addr, 0))
5159 if (err < 0)
5163 if (err < 0)
5167 if (!msg)
5173 if (WARN_ON(!wdev)) {
5176 } else if (IS_ERR(wdev)) {
5181 if (info->attrs[NL80211_ATTR_SOCKET_OWNER])
5186 if (!info->attrs[NL80211_ATTR_MESH_ID])
5208 if (radio_mask)
5211 if (nl80211_send_iface(msg, info->snd_portid, info->snd_seq, 0,
5237 if (!rdev->ops->del_virtual_intf)
5246 * but don't know if we get there from here or from some other
5252 * If we remove a wireless device without a netdev then clear
5254 * to check if it needs to do dev_put(). Otherwise it crashes
5258 if (!wdev->netdev)
5276 if (!info->attrs[NL80211_ATTR_NOACK_MAP])
5279 if (!rdev->ops->set_noack_map)
5291 if (pairwise) {
5292 if (link_id != -1) {
5301 if (wdev->valid_links) {
5302 if (link_id == -1) {
5307 if (!(wdev->valid_links & BIT(link_id))) {
5311 } else if (link_id != -1) {
5330 if ((params->seq &&
5339 if (!key)
5342 if ((params->seq &&
5350 if (nla_put_u8(cookie->msg, NL80211_KEY_IDX, cookie->idx))
5376 if (wiphy_ext_feature_isset(&rdev->wiphy,
5380 if ((wdev->iftype == NL80211_IFTYPE_STATION ||
5386 if (info->attrs[NL80211_ATTR_KEY_IDX]) {
5389 if (key_idx >= 6 && key_idx <= 7 && !bigtk_support) {
5395 if (info->attrs[NL80211_ATTR_MAC])
5399 if (info->attrs[NL80211_ATTR_KEY_TYPE]) {
5402 if (kt != NL80211_KEYTYPE_GROUP &&
5408 if (!rdev->ops->get_key)
5411 if (!pairwise && mac_addr && !(rdev->wiphy.flags & WIPHY_FLAG_IBSS_RSN))
5415 if (!msg)
5420 if (!hdr)
5426 if ((wdev->netdev &&
5432 if (mac_addr &&
5437 if (err)
5443 if (err)
5446 if (cookie.error)
5468 if (err)
5471 if (key.idx < 0)
5477 if (!key.def && !key.defmgmt && !key.defbeacon &&
5481 if (key.def) {
5482 if (!rdev->ops->set_default_key)
5485 if (!wdev->netdev)
5489 if (err)
5493 if (err)
5499 if (err)
5506 } else if (key.defmgmt) {
5507 if (key.def_uni || !key.def_multi)
5510 if (!rdev->ops->set_default_mgmt_key)
5514 if (err)
5518 if (err)
5522 if (err)
5529 } else if (key.defbeacon) {
5530 if (key.def_uni || !key.def_multi)
5533 if (!rdev->ops->set_default_beacon_key)
5537 if (err)
5541 if (err)
5546 } else if (key.p.mode == NL80211_KEY_SET_TX &&
5551 if (info->attrs[NL80211_ATTR_MAC])
5554 if (!mac_addr || key.idx < 0 || key.idx > 1)
5558 if (err)
5579 if (err)
5582 if (!key.p.key) {
5587 if (info->attrs[NL80211_ATTR_MAC])
5590 if (key.type == -1) {
5591 if (mac_addr)
5598 if (key.type != NL80211_KEYTYPE_PAIRWISE &&
5604 if (key.type == NL80211_KEYTYPE_GROUP &&
5608 if (!rdev->ops->add_key)
5611 if (cfg80211_validate_key_settings(rdev, wdev, &key.p, key.idx,
5619 if (err)
5622 if (!err)
5626 if (!err) {
5630 if (err)
5647 if (err)
5650 if (info->attrs[NL80211_ATTR_MAC])
5653 if (key.type == -1) {
5654 if (mac_addr)
5661 if (key.type != NL80211_KEYTYPE_PAIRWISE &&
5665 if (!cfg80211_valid_key_idx(rdev, key.idx,
5669 if (!rdev->ops->del_key)
5674 if (key.type == NL80211_KEYTYPE_GROUP && mac_addr &&
5678 if (!err)
5682 if (!err)
5688 if (!err) {
5689 if (key.idx == wdev->wext.default_key)
5691 else if (key.idx == wdev->wext.default_mgmt_key)
5706 if (nla_len(attr) != ETH_ALEN)
5728 if (!wiphy->max_acl_mac_addrs)
5731 if (!info->attrs[NL80211_ATTR_ACL_POLICY])
5735 if (acl_policy != NL80211_ACL_POLICY_ACCEPT_UNLESS_LISTED &&
5739 if (!info->attrs[NL80211_ATTR_MAC_ADDRS])
5743 if (n_entries < 0)
5746 if (n_entries > wiphy->max_acl_mac_addrs)
5750 if (!acl)
5770 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP &&
5774 if (!dev->ieee80211_ptr->links[0].ap.beacon_interval)
5778 if (IS_ERR(acl))
5801 if (rate == srate->bitrate) {
5806 if (ridx == sband->n_bitrates)
5828 if ((ridx < 0) || (ridx >= IEEE80211_HT_MCS_MASK_LEN))
5833 if (sband->ht_cap.mcs.rx_mask[ridx] & rbit)
5884 if (!sband->vht_cap.vht_supported)
5893 if ((tx_mcs_mask[i] & txrate->mcs[i]) == txrate->mcs[i])
5939 if (!chandef) {
5975 if (!he_cap)
5986 if ((tx_mcs_mask[i] & txrate->mcs[i]) == txrate->mcs[i])
6004 if (mcs_nss_len == 4) {
6032 if (wdev->valid_links)
6062 if (eht_cap->eht_cap_elem.phy_cap_info[6] &
6070 if (!mcs_7)
6075 if (!mcs_9)
6080 if (!mcs_11)
6085 if (!mcs_13)
6103 if (!he_cap)
6107 if (!eht_cap)
6111 if (txrate->mcs[0] & 0x4000) {
6112 if (sband->band != NL80211_BAND_6GHZ)
6115 if (!(eht_cap->eht_cap_elem.phy_cap_info[6] &
6125 if (mcs_nss_len == 3) {
6144 if ((tx_mcs_mask[i] & txrate->mcs[i]) == txrate->mcs[i])
6176 if (!default_all_enabled)
6181 if (!sband)
6189 if (sband->vht_cap.vht_supported) {
6195 if (!he_cap)
6205 if (!eht_cap)
6220 /* if no rates are given set it back to the defaults */
6221 if (!attrs[attr])
6232 if (band < 0 || band >= NUM_NL80211_BANDS)
6235 if (sband == NULL)
6241 if (err)
6243 if (tb[NL80211_TXRATE_LEGACY]) {
6248 if ((mask->control[band].legacy == 0) &&
6252 if (tb[NL80211_TXRATE_HT]) {
6253 if (!ht_rateset_to_mask(
6261 if (tb[NL80211_TXRATE_VHT]) {
6262 if (!vht_set_mcs_mask(
6269 if (tb[NL80211_TXRATE_GI]) {
6272 if (mask->control[band].gi > NL80211_TXRATE_FORCE_LGI)
6275 if (tb[NL80211_TXRATE_HE] &&
6282 if (tb[NL80211_TXRATE_HE_GI])
6285 if (tb[NL80211_TXRATE_HE_LTF])
6289 if (tb[NL80211_TXRATE_EHT] &&
6295 if (tb[NL80211_TXRATE_EHT_GI])
6298 if (tb[NL80211_TXRATE_EHT_LTF])
6302 if (mask->control[band].legacy == 0) {
6303 /* don't allow empty legacy rates if HT, VHT, HE or EHT
6306 if (!(rdev->wiphy.bands[band]->ht_cap.ht_supported ||
6313 if (mask->control[band].ht_mcs[i])
6317 if (mask->control[band].vht_mcs[i])
6321 if (mask->control[band].he_mcs[i])
6325 if (mask->control[band].eht_mcs[i])
6345 if (hweight32(rate) > 1)
6350 if (hweight8(beacon_rate->control[band].ht_mcs[i]) > 1) {
6352 } else if (beacon_rate->control[band].ht_mcs[i]) {
6354 if (count_ht > 1)
6357 if (count_ht && rate)
6363 if (hweight16(beacon_rate->control[band].vht_mcs[i]) > 1) {
6365 } else if (beacon_rate->control[band].vht_mcs[i]) {
6367 if (count_vht > 1)
6370 if (count_vht && rate)
6376 if (hweight16(beacon_rate->control[band].he_mcs[i]) > 1) {
6378 } else if (beacon_rate->control[band].he_mcs[i]) {
6380 if (count_he > 1)
6383 if (count_he && rate)
6389 if (hweight16(beacon_rate->control[band].eht_mcs[i]) > 1) {
6391 } else if (beacon_rate->control[band].eht_mcs[i]) {
6393 if (count_eht > 1)
6396 if (count_eht && rate)
6400 if ((count_ht && count_vht && count_he && count_eht) ||
6404 if (rate &&
6408 if (count_ht &&
6412 if (count_vht &&
6416 if (count_he &&
6421 if (count_eht &&
6439 if (!wiphy->mbssid_max_interfaces)
6442 if (nla_parse_nested(tb, NL80211_MBSSID_CONFIG_ATTR_MAX, attrs, NULL,
6448 if (config->ema) {
6449 if (!wiphy->ema_max_profile_periodicity)
6452 if (num_elems > wiphy->ema_max_profile_periodicity)
6457 if (config->index >= wiphy->mbssid_max_interfaces ||
6461 if (tb[NL80211_MBSSID_CONFIG_ATTR_TX_LINK_ID])
6464 if (tb[NL80211_MBSSID_CONFIG_ATTR_TX_IFINDEX]) {
6468 if ((!config->index && tx_ifindex != dev->ifindex) ||
6472 if (tx_ifindex != dev->ifindex) {
6476 if (!tx_netdev || !tx_netdev->ieee80211_ptr ||
6487 if (config->tx_wdev->valid_links) {
6488 if (tx_link_id == -1 ||
6495 if (tx_link_id >= 0 && tx_link_id != link_id)
6500 } else if (!config->index) {
6501 if (tx_link_id >= 0 && tx_link_id != link_id)
6520 if (!wiphy->mbssid_max_interfaces)
6524 if (num_elems >= 255)
6530 if (!elems)
6555 if (ret)
6558 if (num_elems >= 255)
6565 if (!elems)
6585 if (err)
6588 if (!tb[NL80211_HE_BSS_COLOR_ATTR_COLOR])
6606 if (!rates)
6610 if (rates->data[i] == BSS_MEMBERSHIP_SELECTOR_HT_PHY)
6612 if (rates->data[i] == BSS_MEMBERSHIP_SELECTOR_VHT_PHY)
6638 if (op) {
6639 if (op->datalen < sizeof(*bcn->he_oper) + 1) {
6645 if (op->datalen < ieee80211_he_oper_size((void *)bcn->he_oper)) {
6652 if (op) {
6653 if (op->datalen < sizeof(*bcn->ht_oper)) {
6661 if (op) {
6662 if (op->datalen < sizeof(*bcn->vht_oper)) {
6670 if (op) {
6671 if (!ieee80211_eht_oper_size_ok(op->data + 1,
6680 if (op) {
6682 if (!attrs[NL80211_ATTR_UHR_OPERATION]) {
6687 } else if (attrs[NL80211_ATTR_UHR_OPERATION]) {
6708 if (attrs[NL80211_ATTR_BEACON_HEAD]) {
6711 if (!bcn->head_len)
6716 if (attrs[NL80211_ATTR_BEACON_TAIL]) {
6722 if (!haveinfo)
6725 if (attrs[NL80211_ATTR_IE]) {
6730 if (attrs[NL80211_ATTR_IE_PROBE_RESP]) {
6737 if (attrs[NL80211_ATTR_IE_ASSOC_RESP]) {
6744 if (attrs[NL80211_ATTR_PROBE_RESP]) {
6749 if (attrs[NL80211_ATTR_FTM_RESPONDER]) {
6756 if (err)
6759 if (tb[NL80211_FTM_RESP_ATTR_ENABLED] &&
6766 if (tb[NL80211_FTM_RESP_ATTR_LCI]) {
6771 if (tb[NL80211_FTM_RESP_ATTR_CIVICLOC]) {
6779 if (attrs[NL80211_ATTR_HE_BSS_COLOR]) {
6782 if (err)
6787 if (attrs[NL80211_ATTR_MBSSID_ELEMS]) {
6792 if (IS_ERR(mbssid))
6797 if (bcn->mbssid_ies && attrs[NL80211_ATTR_EMA_RNR_ELEMS]) {
6803 if (IS_ERR(rnr))
6806 if (rnr && rnr->cnt < bcn->mbssid_ies->cnt)
6814 if (err)
6817 if (bcn->he_oper && (chan->flags & IEEE80211_CHAN_NO_HE))
6820 if (bcn->eht_oper && (chan->flags & IEEE80211_CHAN_NO_EHT))
6823 if (bcn->uhr_oper && (chan->flags & IEEE80211_CHAN_NO_UHR))
6837 if (err)
6840 if (!tb[NL80211_HE_OBSS_PD_ATTR_SR_CTRL])
6845 if (tb[NL80211_HE_OBSS_PD_ATTR_MIN_OFFSET])
6848 if (tb[NL80211_HE_OBSS_PD_ATTR_MAX_OFFSET])
6851 if (tb[NL80211_HE_OBSS_PD_ATTR_NON_SRG_MAX_OFFSET])
6855 if (he_obss_pd->min_offset > he_obss_pd->max_offset)
6858 if (tb[NL80211_HE_OBSS_PD_ATTR_BSS_COLOR_BITMAP])
6863 if (tb[NL80211_HE_OBSS_PD_ATTR_PARTIAL_BSSID_BITMAP])
6880 if (!wiphy_ext_feature_isset(&rdev->wiphy,
6886 if (ret)
6889 if (!tb[NL80211_FILS_DISCOVERY_ATTR_INT_MIN] &&
6896 if (!tb[NL80211_FILS_DISCOVERY_ATTR_INT_MIN] ||
6917 if (!wiphy_ext_feature_isset(&rdev->wiphy,
6923 if (ret)
6926 if (!tb[NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_INT] &&
6932 if (!tb[NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_INT] ||
6956 if (cap) {
6957 if (cap->datalen < sizeof(*params->ht_cap)) {
6965 if (cap) {
6966 if (cap->datalen < sizeof(*params->vht_cap)) {
6974 if (cap) {
6975 if (cap->datalen < sizeof(*params->he_cap) + 1) {
6983 if (cap) {
6985 if (!ieee80211_eht_capa_size_ok((const u8 *)params->he_cap,
6993 if (!!params->he_cap != !!params->beacon.he_oper)
6996 if (!!params->eht_cap != !!params->beacon.eht_oper)
7008 if (wdev->iftype != NL80211_IFTYPE_AP &&
7012 if (!wdev->u.ap.preset_chandef.chan)
7026 if (auth_type > NL80211_AUTHTYPE_MAX)
7031 if (!(rdev->wiphy.features & NL80211_FEATURE_SAE) &&
7034 if (!wiphy_ext_feature_isset(&rdev->wiphy,
7040 if (!wiphy_ext_feature_isset(&rdev->wiphy,
7044 if (!wiphy_ext_feature_isset(&rdev->wiphy,
7050 if (!(rdev->wiphy.features & NL80211_FEATURE_SAE) &&
7057 if (auth_type == NL80211_AUTHTYPE_FILS_SK_PFS ||
7060 if (!wiphy_ext_feature_isset(
7065 if (!wiphy_ext_feature_isset(&rdev->wiphy,
7069 if (!wiphy_ext_feature_isset(&rdev->wiphy,
7075 if (!wiphy_ext_feature_isset(&rdev->wiphy,
7080 if (auth_type == NL80211_AUTHTYPE_FILS_SK ||
7099 if (!msg)
7103 if (!hdr)
7106 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
7134 if (!rdev->wiphy.bands[NL80211_BAND_S1GHZ])
7139 if (ret)
7143 if (!tb[NL80211_S1G_SHORT_BEACON_ATTR_HEAD])
7150 if (tb[NL80211_S1G_SHORT_BEACON_ATTR_TAIL]) {
7169 if (!chandef->npca_chan)
7175 if (uhr_cap &&
7193 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP &&
7197 if (!rdev->ops->start_ap)
7200 if (wdev->links[link_id].cac_started)
7203 if (wdev->links[link_id].ap.beacon_interval)
7207 if (!info->attrs[NL80211_ATTR_BEACON_INTERVAL] ||
7212 if (info->attrs[NL80211_ATTR_SMPS_MODE] &&
7217 if (!params)
7227 if (err)
7237 if (info->attrs[NL80211_ATTR_SSID]) {
7241 if (params->ssid_len == 0) {
7246 if (wdev->u.ap.ssid_len &&
7253 } else if (wdev->valid_links) {
7259 if (info->attrs[NL80211_ATTR_HIDDEN_SSID])
7265 if (info->attrs[NL80211_ATTR_AUTH_TYPE]) {
7268 if (!nl80211_valid_auth_type(rdev, params->auth_type,
7278 if (err)
7281 if (info->attrs[NL80211_ATTR_INACTIVITY_TIMEOUT]) {
7282 if (!(rdev->wiphy.features & NL80211_FEATURE_INACTIVITY_TIMER)) {
7290 if (info->attrs[NL80211_ATTR_P2P_CTWINDOW]) {
7291 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_GO) {
7297 if (params->p2p_ctwindow != 0 &&
7304 if (info->attrs[NL80211_ATTR_P2P_OPPPS]) {
7307 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_GO) {
7313 if (params->p2p_opp_ps != 0 &&
7320 if (info->attrs[NL80211_ATTR_WIPHY_FREQ]) {
7323 if (err)
7325 } else if (wdev->valid_links) {
7329 } else if (wdev->u.ap.preset_chandef.chan) {
7331 } else if (!nl80211_get_ap_channel(rdev, params)) {
7338 if (err)
7343 if (err)
7351 if (!cfg80211_reg_check_beaconing(&rdev->wiphy, &params->chandef,
7357 if (info->attrs[NL80211_ATTR_TX_RATES]) {
7362 if (err)
7367 if (err)
7372 if (params->pbss && !rdev->wiphy.bands[NL80211_BAND_60GHZ]) {
7377 if (info->attrs[NL80211_ATTR_ACL_POLICY]) {
7379 if (IS_ERR(params->acl)) {
7389 if (info->attrs[NL80211_ATTR_HE_OBSS_PD]) {
7393 if (err)
7397 if (info->attrs[NL80211_ATTR_FILS_DISCOVERY]) {
7401 if (err)
7405 if (info->attrs[NL80211_ATTR_UNSOL_BCAST_PROBE_RESP]) {
7409 if (err)
7413 if (info->attrs[NL80211_ATTR_MBSSID_CONFIG]) {
7420 if (err)
7424 if (!params->mbssid_config.ema && params->beacon.rnr_ies) {
7429 if (info->attrs[NL80211_ATTR_S1G_SHORT_BEACON]) {
7430 if (!info->attrs[NL80211_ATTR_S1G_LONG_BEACON_PERIOD]) {
7441 if (err)
7446 if (err)
7449 if (info->attrs[NL80211_ATTR_AP_SETTINGS_FLAGS])
7452 else if (info->attrs[NL80211_ATTR_EXTERNAL_AUTH_SUPPORT])
7455 if (wdev->conn_owner_nlportid &&
7465 if (!err) {
7472 if (info->attrs[NL80211_ATTR_SOCKET_OWNER])
7480 if (params->mbssid_config.tx_wdev &&
7501 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP &&
7505 if (!rdev->ops->change_beacon)
7508 if (!wdev->links[link_id].ap.beacon_interval)
7512 if (!params)
7518 if (err)
7527 if (!cfg80211_reg_check_beaconing(&rdev->wiphy,
7535 if (attr) {
7538 if (err)
7543 if (attr) {
7546 if (err)
7551 if (attr) {
7554 if (err)
7598 if (nla) {
7605 if ((params->sta_flags_mask |
7609 if ((iftype == NL80211_IFTYPE_NAN ||
7619 if (iftype == NL80211_IFTYPE_NAN_DATA) {
7621 if (params->sta_flags_mask & BIT(NL80211_STA_FLAG_WME))
7631 /* if present, parse the old attribute */
7634 if (!nla)
7637 if (nla_parse_nested_deprecated(flags, NL80211_STA_FLAG_MAX, nla, sta_flags_policy, info->extack))
7670 if (flags[flag]) {
7674 if (flag > NL80211_STA_FLAG_MAX_OLD_API)
7690 if (!rate)
7695 /* report 16-bit bitrate only if we can */
7697 if (bitrate > 0 &&
7700 if (bitrate_compat > 0 &&
7755 if (rate_flg && nla_put_flag(msg, rate_flg))
7758 if (info->flags & RATE_INFO_FLAGS_MCS) {
7759 if (nla_put_u8(msg, NL80211_RATE_INFO_MCS, info->mcs))
7761 if (info->flags & RATE_INFO_FLAGS_SHORT_GI &&
7764 } else if (info->flags & RATE_INFO_FLAGS_VHT_MCS) {
7765 if (nla_put_u8(msg, NL80211_RATE_INFO_VHT_MCS, info->mcs))
7767 if (nla_put_u8(msg, NL80211_RATE_INFO_VHT_NSS, info->nss))
7769 if (info->flags & RATE_INFO_FLAGS_SHORT_GI &&
7772 } else if (info->flags & RATE_INFO_FLAGS_HE_MCS) {
7773 if (nla_put_u8(msg, NL80211_RATE_INFO_HE_MCS, info->mcs))
7775 if (nla_put_u8(msg, NL80211_RATE_INFO_HE_NSS, info->nss))
7777 if (nla_put_u8(msg, NL80211_RATE_INFO_HE_GI, info->he_gi))
7779 if (nla_put_u8(msg, NL80211_RATE_INFO_HE_DCM, info->he_dcm))
7781 if (info->bw == RATE_INFO_BW_HE_RU &&
7785 } else if (info->flags & RATE_INFO_FLAGS_S1G_MCS) {
7786 if (nla_put_u8(msg, NL80211_RATE_INFO_S1G_MCS, info->mcs))
7788 if (nla_put_u8(msg, NL80211_RATE_INFO_S1G_NSS, info->nss))
7790 if (info->flags & RATE_INFO_FLAGS_SHORT_GI &&
7793 } else if (info->flags & RATE_INFO_FLAGS_EHT_MCS) {
7794 if (nla_put_u8(msg, NL80211_RATE_INFO_EHT_MCS, info->mcs))
7796 if (nla_put_u8(msg, NL80211_RATE_INFO_EHT_NSS, info->nss))
7798 if (nla_put_u8(msg, NL80211_RATE_INFO_EHT_GI, info->eht_gi))
7800 if (info->bw == RATE_INFO_BW_EHT_RU &&
7804 } else if (info->flags & RATE_INFO_FLAGS_UHR_MCS) {
7805 if (nla_put_u8(msg, NL80211_RATE_INFO_UHR_MCS, info->mcs))
7807 if (nla_put_u8(msg, NL80211_RATE_INFO_EHT_NSS, info->nss))
7809 if (nla_put_u8(msg, NL80211_RATE_INFO_EHT_GI, info->eht_gi))
7811 if (info->bw == RATE_INFO_BW_EHT_RU &&
7815 if (info->flags & RATE_INFO_FLAGS_UHR_ELR_MCS &&
7818 if (info->flags & RATE_INFO_FLAGS_UHR_IM &&
7833 if (!mask)
7837 if (!attr)
7841 if (!(mask & BIT(i)))
7844 if (nla_put_u8(msg, i, signal[i]))
7861 if (link_sinfo->filled & BIT_ULL(NL80211_STA_INFO_ ## attr) && \
7867 if (link_sinfo->filled & BIT_ULL(NL80211_STA_INFO_ ## attr) && \
7874 if (!link_sinfoattr)
7879 if (link_sinfo->filled & (BIT_ULL(NL80211_STA_INFO_RX_BYTES) |
7885 if (link_sinfo->filled & (BIT_ULL(NL80211_STA_INFO_TX_BYTES) |
7896 if (wiphy_ext_feature_isset(&rdev->wiphy,
7908 if (link_sinfo->filled & BIT_ULL(NL80211_STA_INFO_CHAIN_SIGNAL)) {
7909 if (!nl80211_put_signal(msg, link_sinfo->chains,
7914 if (link_sinfo->filled & BIT_ULL(NL80211_STA_INFO_CHAIN_SIGNAL_AVG)) {
7915 if (!nl80211_put_signal(msg, link_sinfo->chains,
7920 if (link_sinfo->filled & BIT_ULL(NL80211_STA_INFO_TX_BITRATE)) {
7921 if (!nl80211_put_sta_rate(msg, &link_sinfo->txrate,
7925 if (link_sinfo->filled & BIT_ULL(NL80211_STA_INFO_RX_BITRATE)) {
7926 if (!nl80211_put_sta_rate(msg, &link_sinfo->rxrate,
7938 if (link_sinfo->filled & BIT_ULL(NL80211_STA_INFO_BSS_PARAM)) {
7941 if (!bss_param)
7944 if (((link_sinfo->bss_param.flags &
7969 if (wiphy_ext_feature_isset(&rdev->wiphy,
7978 if (link_sinfo->pertid) {
7984 if (!tidsattr)
7993 if (!tidstats->filled)
7997 if (!tidattr)
8001 if (tidstats->filled & BIT(NL80211_TID_STATS_ ## attr) && \
8013 if ((tidstats->filled &
8046 if (!hdr) {
8051 if ((wdev->netdev &&
8060 if (!sinfoattr)
8065 if (sinfo->filled & BIT_ULL(NL80211_STA_INFO_ ## attr) && \
8071 if (sinfo->filled & BIT_ULL(NL80211_STA_INFO_ ## attr) && \
8081 if (sinfo->filled & (BIT_ULL(NL80211_STA_INFO_RX_BYTES) |
8087 if (sinfo->filled & (BIT_ULL(NL80211_STA_INFO_TX_BYTES) |
8098 if (wiphy_ext_feature_isset(&rdev->wiphy,
8110 if (sinfo->filled & BIT_ULL(NL80211_STA_INFO_CHAIN_SIGNAL)) {
8111 if (!nl80211_put_signal(msg, sinfo->chains,
8116 if (sinfo->filled & BIT_ULL(NL80211_STA_INFO_CHAIN_SIGNAL_AVG)) {
8117 if (!nl80211_put_signal(msg, sinfo->chains,
8122 if (sinfo->filled & BIT_ULL(NL80211_STA_INFO_TX_BITRATE)) {
8123 if (!nl80211_put_sta_rate(msg, &sinfo->txrate,
8127 if (sinfo->filled & BIT_ULL(NL80211_STA_INFO_RX_BITRATE)) {
8128 if (!nl80211_put_sta_rate(msg, &sinfo->rxrate,
8151 if (sinfo->filled & BIT_ULL(NL80211_STA_INFO_BSS_PARAM)) {
8154 if (!bss_param)
8157 if (((sinfo->bss_param.flags & BSS_PARAM_FLAGS_CTS_PROT) &&
8171 if ((sinfo->filled & BIT_ULL(NL80211_STA_INFO_STA_FLAGS)) &&
8182 if (wiphy_ext_feature_isset(&rdev->wiphy,
8191 if (sinfo->pertid) {
8197 if (!tidsattr)
8206 if (!tidstats->filled)
8210 if (!tidattr)
8214 if (tidstats->filled & BIT(NL80211_TID_STATS_ ## attr) && \
8226 if ((tidstats->filled &
8240 if (sinfo->assoc_req_ies_len &&
8245 if (sinfo->assoc_resp_ies_len &&
8250 if (sinfo->mlo_params_valid) {
8251 if (nla_put_u8(msg, NL80211_ATTR_MLO_LINK_ID,
8255 if (!is_zero_ether_addr(sinfo->mld_addr) &&
8261 if (link_stats && sinfo->valid_links) {
8263 if (!links)
8269 if (WARN_ON_ONCE(!link_sinfo))
8272 if (!is_valid_ether_addr(link_sinfo->addr))
8276 if (!link)
8279 if (nla_put_u8(msg, NL80211_ATTR_MLO_LINK_ID,
8283 if (nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN,
8287 if (nl80211_fill_link_station(msg, rdev, link_sinfo))
8315 if (!link_sinfo)
8318 if ((link_sinfo->filled &
8324 if ((link_sinfo->filled &
8330 if (link_sinfo->filled &
8337 if (link_sinfo->filled &
8344 if (link_sinfo->filled &
8350 if (link_sinfo->filled & BIT_ULL(NL80211_STA_INFO_TX_FAILED)) {
8355 if (link_sinfo->filled &
8362 if (link_sinfo->filled &
8369 if (link_sinfo->filled &
8377 if (link_sinfo->filled & BIT_ULL(NL80211_STA_INFO_RX_MPDUS)) {
8382 if (link_sinfo->filled &
8389 if (link_sinfo->filled &
8396 if ((link_sinfo->filled & BIT_ULL(NL80211_STA_INFO_SIGNAL)) &&
8402 if ((link_sinfo->filled &
8412 if ((link_sinfo->filled &
8421 if (link_sinfo->filled & BIT_ULL(NL80211_STA_INFO_BSS_PARAM) &&
8434 if ((link_sinfo->filled &
8441 if ((link_sinfo->filled &
8449 if (link_sinfo->filled &
8457 if (link_sinfo->filled &
8468 if (sinfo->pertid) {
8505 if (err)
8510 if (!wdev->netdev && wdev->iftype != NL80211_IFTYPE_NAN) {
8515 if (!rdev->ops->dump_station) {
8526 if (!sinfo.links[i]) {
8535 if (err == -ENOENT)
8537 if (err)
8540 if (sinfo.valid_links)
8548 if (nl80211_send_station(skb, NL80211_CMD_NEW_STATION,
8562 if (sinfo_alloc)
8580 if (!wdev->netdev)
8583 if (!info->attrs[NL80211_ATTR_MAC])
8588 if (!rdev->ops->get_station)
8593 if (!sinfo.links[i]) {
8600 if (err) {
8606 if (!msg) {
8611 if (sinfo.valid_links)
8614 if (nl80211_send_station(msg, NL80211_CMD_NEW_STATION,
8628 if (params->listen_interval != -1 &&
8632 if (params->support_p2p_ps != -1 &&
8636 if (params->aid &&
8652 if (params->sta_flags_mask &
8660 if (!(params->sta_flags_set & BIT(NL80211_STA_FLAG_TDLS_PEER)))
8667 if (params->plink_action != NL80211_PLINK_ACTION_NO_ACTION)
8669 if (params->local_pm)
8671 if (params->sta_modify_mask & STATION_PARAM_APPLY_PLINK_STATE)
8675 if (statype != CFG80211_STA_TDLS_PEER_SETUP &&
8678 if (params->sta_flags_set & BIT(NL80211_STA_FLAG_TDLS_PEER))
8688 if (statype != CFG80211_STA_TDLS_PEER_SETUP &&
8691 if (params->sta_modify_mask & STATION_PARAM_APPLY_UAPSD)
8693 if (params->sta_modify_mask & STATION_PARAM_APPLY_CAPABILITY)
8695 if (params->link_sta_params.supported_rates)
8697 if (statype != CFG80211_STA_NAN_MGMT &&
8702 if (params->ext_capab || params->link_sta_params.eht_capa ||
8705 if (params->sta_flags_mask & BIT(NL80211_STA_FLAG_SPP_AMSDU))
8709 if (statype != CFG80211_STA_AP_CLIENT &&
8711 if (params->vlan)
8716 if (statype != CFG80211_STA_AP_CLIENT_UNASSOC &&
8723 if (!(params->sta_flags_mask & BIT(NL80211_STA_FLAG_AUTHORIZED)))
8729 if (params->sta_flags_mask &
8739 /* but authenticated/associated only if driver handles it */
8740 if (!(wiphy->features & NL80211_FEATURE_FULL_AP_CLIENT_STATE) &&
8749 if (params->sta_flags_mask & ~BIT(NL80211_STA_FLAG_AUTHORIZED))
8754 if (params->sta_flags_mask & ~(BIT(NL80211_STA_FLAG_AUTHORIZED) |
8758 if (params->sta_flags_set & BIT(NL80211_STA_FLAG_AUTHORIZED) &&
8766 if (params->sta_modify_mask & STATION_PARAM_APPLY_PLINK_STATE)
8770 if (params->plink_action != NL80211_PLINK_ACTION_NO_ACTION &&
8775 if (params->sta_flags_mask &
8781 if (params->sta_flags_mask &
8794 if (statype != CFG80211_STA_AP_CLIENT_UNASSOC &&
8812 if (!vlanattr)
8816 if (!v)
8819 if (!v->ieee80211_ptr || v->ieee80211_ptr->wiphy != &rdev->wiphy) {
8824 if (v->ieee80211_ptr->iftype != NL80211_IFTYPE_AP_VLAN &&
8831 if (!netif_running(v)) {
8849 /* parse WME attributes if present */
8850 if (!info->attrs[NL80211_ATTR_STA_WME])
8857 if (err)
8860 if (tb[NL80211_STA_WME_UAPSD_QUEUES])
8863 if (params->uapsd_queues & ~IEEE80211_WMM_IE_STA_QOSINFO_AC_MASK)
8866 if (tb[NL80211_STA_WME_MAX_SP])
8869 if (params->max_sp & ~IEEE80211_WMM_IE_STA_QOSINFO_SP_MASK)
8880 if (info->attrs[NL80211_ATTR_STA_SUPPORTED_CHANNELS]) {
8890 if (params->supported_channels_len % 2)
8894 if (info->attrs[NL80211_ATTR_STA_SUPPORTED_OPER_CLASSES]) {
8908 if (info->attrs[NL80211_ATTR_PEER_AID])
8910 if (info->attrs[NL80211_ATTR_HT_CAPABILITY])
8913 if (info->attrs[NL80211_ATTR_VHT_CAPABILITY])
8916 if (info->attrs[NL80211_ATTR_HE_CAPABILITY]) {
8922 if (info->attrs[NL80211_ATTR_EHT_CAPABILITY]) {
8928 if (!ieee80211_eht_capa_size_ok((const u8 *)params->link_sta_params.he_capa,
8936 if (info->attrs[NL80211_ATTR_UHR_CAPABILITY]) {
8937 if (!params->link_sta_params.eht_capa)
8946 if (info->attrs[NL80211_ATTR_S1G_CAPABILITY])
8951 if (err)
8964 if (info->attrs[NL80211_ATTR_STA_TX_POWER_SETTING]) {
8965 if (!rdev->ops->set_tx_power ||
8973 if (txpwr->type == NL80211_TX_POWER_LIMITED) {
8976 if (info->attrs[idx])
9001 if (!dev && wdev->iftype != NL80211_IFTYPE_NAN &&
9005 if (!rdev->ops->change_station)
9013 if (info->attrs[NL80211_ATTR_STA_AID])
9016 if (info->attrs[NL80211_ATTR_VLAN_ID])
9019 if (info->attrs[NL80211_ATTR_STA_LISTEN_INTERVAL])
9025 if (info->attrs[NL80211_ATTR_STA_SUPPORT_P2P_PS])
9031 if (!info->attrs[NL80211_ATTR_MAC])
9037 if (info->attrs[NL80211_ATTR_MLD_ADDR]) {
9038 /* If MLD_ADDR attribute is set then this is an MLD station
9043 if (params.link_sta_params.link_id < 0)
9050 if (!is_valid_ether_addr(params.link_sta_params.link_mac))
9057 if (info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]) {
9064 if (info->attrs[NL80211_ATTR_STA_CAPABILITY]) {
9070 if (info->attrs[NL80211_ATTR_STA_EXT_CAPABILITY]) {
9077 if (parse_station_flags(info, wdev->iftype, &params))
9080 if (info->attrs[NL80211_ATTR_STA_PLINK_ACTION])
9084 if (info->attrs[NL80211_ATTR_STA_PLINK_STATE]) {
9087 if (info->attrs[NL80211_ATTR_MESH_PEER_AID])
9093 if (info->attrs[NL80211_ATTR_LOCAL_MESH_POWER_MODE])
9097 if (info->attrs[NL80211_ATTR_OPMODE_NOTIF]) {
9103 if (info->attrs[NL80211_ATTR_HE_6GHZ_CAPABILITY])
9107 if (info->attrs[NL80211_ATTR_EML_CAPABILITY]) {
9113 if (info->attrs[NL80211_ATTR_AIRTIME_WEIGHT])
9117 if (params.airtime_weight &&
9125 if (err)
9130 if (err)
9134 if (IS_ERR(params.vlan))
9175 if (!dev && wdev->iftype != NL80211_IFTYPE_NAN)
9178 if (!rdev->ops->add_station)
9181 if (!info->attrs[NL80211_ATTR_MAC])
9184 if (wdev->iftype == NL80211_IFTYPE_NAN ||
9186 if (info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES])
9188 if (wdev->iftype == NL80211_IFTYPE_NAN_DATA) {
9189 if (!info->attrs[NL80211_ATTR_NAN_NMI_MAC])
9193 if (info->attrs[NL80211_ATTR_HT_CAPABILITY] ||
9199 if (!info->attrs[NL80211_ATTR_STA_LISTEN_INTERVAL])
9202 if (!info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES])
9205 if (!info->attrs[NL80211_ATTR_STA_AID] &&
9213 if (info->attrs[NL80211_ATTR_MLD_ADDR]) {
9218 if (!is_valid_ether_addr(params.link_sta_params.link_mac))
9224 if (info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]) {
9231 if (info->attrs[NL80211_ATTR_STA_LISTEN_INTERVAL])
9235 if (info->attrs[NL80211_ATTR_VLAN_ID])
9238 if (info->attrs[NL80211_ATTR_STA_SUPPORT_P2P_PS]) {
9243 * if not specified, assume it's supported for P2P GO interface,
9250 if (info->attrs[NL80211_ATTR_PEER_AID])
9252 else if (info->attrs[NL80211_ATTR_STA_AID])
9255 if (info->attrs[NL80211_ATTR_STA_CAPABILITY]) {
9261 if (info->attrs[NL80211_ATTR_STA_EXT_CAPABILITY]) {
9268 if (info->attrs[NL80211_ATTR_HT_CAPABILITY])
9272 if (info->attrs[NL80211_ATTR_VHT_CAPABILITY])
9276 if (info->attrs[NL80211_ATTR_HE_CAPABILITY]) {
9282 if (info->attrs[NL80211_ATTR_EHT_CAPABILITY]) {
9288 if (!ieee80211_eht_capa_size_ok((const u8 *)params.link_sta_params.he_capa,
9296 if (info->attrs[NL80211_ATTR_UHR_CAPABILITY]) {
9297 if (!params.link_sta_params.eht_capa)
9306 if (info->attrs[NL80211_ATTR_EML_CAPABILITY]) {
9312 if (info->attrs[NL80211_ATTR_HE_6GHZ_CAPABILITY])
9316 if (info->attrs[NL80211_ATTR_S1G_CAPABILITY])
9320 if (info->attrs[NL80211_ATTR_OPMODE_NOTIF]) {
9326 if (info->attrs[NL80211_ATTR_STA_PLINK_ACTION])
9330 if (info->attrs[NL80211_ATTR_AIRTIME_WEIGHT])
9334 if (params.airtime_weight &&
9342 if (err)
9346 if (err)
9350 if (err)
9353 if (parse_station_flags(info, wdev->iftype, &params))
9356 /* HT/VHT requires QoS, but if we don't have that just ignore HT/VHT
9361 if (!(params.sta_flags_set & BIT(NL80211_STA_FLAG_WME))) {
9366 if (params.link_sta_params.he_capa_len ||
9373 if (wdev->iftype == NL80211_IFTYPE_NAN ||
9375 if (params.sta_modify_mask & STATION_PARAM_APPLY_UAPSD)
9378 if (!(params.sta_flags_set & (BIT(NL80211_STA_FLAG_ASSOCIATED) |
9384 if (params.link_sta_params.he_6ghz_capa &&
9395 /* ignore WME attributes if iface/sta is not capable */
9396 if (!(rdev->wiphy.flags & WIPHY_FLAG_AP_UAPSD) ||
9401 if ((params.sta_flags_set & BIT(NL80211_STA_FLAG_TDLS_PEER)) ||
9407 /* allow authenticated/associated only if driver handles it */
9408 if (!(rdev->wiphy.features &
9413 if (!wiphy_ext_feature_isset(&rdev->wiphy,
9428 if (!(params.sta_flags_mask & auth_assoc)) {
9435 if (IS_ERR(params.vlan))
9443 if (params.sta_flags_mask & BIT(NL80211_STA_FLAG_ASSOCIATED))
9446 if ((params.sta_flags_set & BIT(NL80211_STA_FLAG_TDLS_PEER)) ||
9456 if (params.sta_flags_mask &
9461 if (!(params.sta_flags_set & BIT(NL80211_STA_FLAG_TDLS_PEER)))
9463 /* Can only add if TDLS ... */
9464 if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_TDLS))
9467 if (!(rdev->wiphy.flags & WIPHY_FLAG_TDLS_EXTERNAL_SETUP))
9486 if (wdev->valid_links) {
9487 if (params.link_sta_params.link_id < 0) {
9491 if (!(wdev->valid_links & BIT(params.link_sta_params.link_id))) {
9496 if (params.link_sta_params.link_id >= 0) {
9521 if (!dev && wdev->iftype != NL80211_IFTYPE_NAN)
9524 if (info->attrs[NL80211_ATTR_MAC])
9538 if (wiphy_ext_feature_isset(&rdev->wiphy,
9546 if (!rdev->ops->del_station)
9549 if (info->attrs[NL80211_ATTR_MGMT_SUBTYPE]) {
9552 if (params.subtype != IEEE80211_STYPE_DISASSOC >> 4 &&
9560 if (info->attrs[NL80211_ATTR_REASON_CODE]) {
9563 if (params.reason_code == 0)
9571 if (!wdev->valid_links && link_id != -1)
9574 /* If given, a valid link ID should be passed during MLO */
9575 if (wdev->valid_links && link_id >= 0 &&
9593 if (!hdr)
9596 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) ||
9603 if (!pinfoattr)
9605 if ((pinfo->filled & MPATH_INFO_FRAME_QLEN) &&
9609 if (((pinfo->filled & MPATH_INFO_SN) &&
9656 if (err)
9661 if (!rdev->ops->dump_mpath) {
9666 if (wdev->iftype != NL80211_IFTYPE_MESH_POINT) {
9674 if (err == -ENOENT)
9676 if (err)
9679 if (nl80211_send_mpath(skb, NETLINK_CB(cb->skb).portid,
9708 if (!info->attrs[NL80211_ATTR_MAC])
9713 if (!rdev->ops->get_mpath)
9716 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_MESH_POINT)
9720 if (err)
9724 if (!msg)
9727 if (nl80211_send_mpath(msg, info->snd_portid, info->snd_seq, 0,
9743 if (!info->attrs[NL80211_ATTR_MAC])
9746 if (!info->attrs[NL80211_ATTR_MPATH_NEXT_HOP])
9752 if (!rdev->ops->change_mpath)
9755 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_MESH_POINT)
9768 if (!info->attrs[NL80211_ATTR_MAC])
9771 if (!info->attrs[NL80211_ATTR_MPATH_NEXT_HOP])
9777 if (!rdev->ops->add_mpath)
9780 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_MESH_POINT)
9792 if (info->attrs[NL80211_ATTR_MAC])
9795 if (!rdev->ops->del_mpath)
9798 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_MESH_POINT)
9816 if (!info->attrs[NL80211_ATTR_MAC])
9821 if (!rdev->ops->get_mpp)
9824 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_MESH_POINT)
9828 if (err)
9832 if (!msg)
9835 if (nl80211_send_mpath(msg, info->snd_portid, info->snd_seq, 0,
9856 if (err)
9861 if (!rdev->ops->dump_mpp) {
9866 if (wdev->iftype != NL80211_IFTYPE_MESH_POINT) {
9874 if (err == -ENOENT)
9876 if (err)
9879 if (nl80211_send_mpath(skb, NETLINK_CB(cb->skb).portid,
9917 if (info->attrs[NL80211_ATTR_BSS_CTS_PROT]) {
9918 if (strict && !(bss_param_support & WIPHY_BSS_PARAM_CTS_PROT))
9924 if (info->attrs[NL80211_ATTR_BSS_SHORT_PREAMBLE]) {
9925 if (strict &&
9932 if (info->attrs[NL80211_ATTR_BSS_SHORT_SLOT_TIME]) {
9933 if (strict &&
9940 if (info->attrs[NL80211_ATTR_BSS_BASIC_RATES]) {
9941 if (strict &&
9950 if (info->attrs[NL80211_ATTR_AP_ISOLATE]) {
9951 if (strict && !(bss_param_support & WIPHY_BSS_PARAM_AP_ISOLATE))
9957 if (info->attrs[NL80211_ATTR_BSS_HT_OPMODE]) {
9958 if (strict && !(bss_param_support & WIPHY_BSS_PARAM_HT_OPMODE))
9965 if (info->attrs[NL80211_ATTR_P2P_CTWINDOW]) {
9966 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_GO)
9970 if (params.p2p_ctwindow != 0 &&
9976 if (info->attrs[NL80211_ATTR_P2P_OPPPS]) {
9979 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_GO)
9982 if (tmp && !(bss_param_support & WIPHY_BSS_PARAM_P2P_OPPPS))
9985 if (params.p2p_opp_ps &&
9990 if (!rdev->ops->change_bss)
9993 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP &&
9998 if (!changed)
10014 * window between nl80211_init() and regulatory_init(), if that is
10017 if (unlikely(!rcu_access_pointer(cfg80211_regdomain)))
10027 if (!info->attrs[NL80211_ATTR_REG_ALPHA2])
10033 if (info->attrs[NL80211_ATTR_SOCKET_OWNER]) {
10065 if (wdev->iftype != NL80211_IFTYPE_MESH_POINT)
10068 if (!rdev->ops->get_mesh_config)
10071 /* If not connected, get default parameters */
10072 if (!wdev->u.mesh.id_len)
10077 if (err)
10082 if (!msg)
10086 if (!hdr)
10089 if (!pinfoattr)
10091 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) ||
10239 if (tb[attr]) { \
10245 if (!info->attrs[NL80211_ATTR_MESH_CONFIG])
10247 if (nla_parse_nested_deprecated(tb, NL80211_MESHCONF_ATTR_MAX, info->attrs[NL80211_ATTR_MESH_CONFIG], nl80211_meshconf_params_policy, info->extack))
10285 if (mask & BIT(NL80211_MESHCONF_PATH_REFRESH_TIME) &&
10295 if (mask & BIT(NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT) &&
10332 if (tb[NL80211_MESHCONF_HT_OPMODE]) {
10335 if (ht_opmode & ~(IEEE80211_HT_OP_MODE_PROTECTION |
10350 if (mask & BIT(NL80211_MESHCONF_HWMP_PATH_TO_ROOT_TIMEOUT) &&
10369 if (mask_out)
10383 if (!info->attrs[NL80211_ATTR_MESH_SETUP])
10385 if (nla_parse_nested_deprecated(tb, NL80211_MESH_SETUP_ATTR_MAX, info->attrs[NL80211_ATTR_MESH_SETUP], nl80211_mesh_setup_params_policy, info->extack))
10388 if (tb[NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC])
10394 if (tb[NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL])
10400 if (tb[NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC])
10406 if (tb[NL80211_MESH_SETUP_IE]) {
10412 if (tb[NL80211_MESH_SETUP_USERSPACE_MPM] &&
10418 if (setup->is_secure)
10421 if (tb[NL80211_MESH_SETUP_AUTH_PROTOCOL]) {
10422 if (!setup->user_mpm)
10441 if (wdev->iftype != NL80211_IFTYPE_MESH_POINT)
10444 if (!rdev->ops->update_mesh_config)
10448 if (err)
10451 if (!wdev->u.mesh.id_len)
10454 if (!err)
10466 if (nla_put_string(msg, NL80211_ATTR_REG_ALPHA2, regdom->alpha2) ||
10472 if (!nl_reg_rules)
10487 if (!nl_reg_rule)
10491 if (!max_bandwidth_khz)
10495 if (nla_put_u32(msg, NL80211_ATTR_REG_RULE_FLAGS,
10511 if ((reg_rule->flags & NL80211_RRF_PSD) &&
10536 if (!msg)
10541 if (!hdr)
10546 if (info->attrs[NL80211_ATTR_WIPHY]) {
10550 if (IS_ERR(rdev)) {
10564 if (WARN_ON(!regdom && self_managed)) {
10569 if (regdom &&
10576 if (!wiphy && reg_last_request_cell_base() &&
10581 if (!regdom)
10584 if (nl80211_put_regdom(regdom, msg))
10609 if (!hdr)
10614 if (nl80211_put_regdom(regdom, msg))
10617 if (!wiphy && reg_last_request_cell_base() &&
10622 if (wiphy &&
10626 if (wiphy && wiphy->regulatory_flags & REGULATORY_WIPHY_SELF_MANAGED &&
10647 if (cfg80211_regdomain && start == 0) {
10651 if (err < 0)
10659 if (!regdom)
10662 if (++reg_idx <= start)
10667 if (err < 0) {
10697 if (!tb[NL80211_ATTR_REG_RULE_FLAGS])
10699 if (!tb[NL80211_ATTR_FREQ_RANGE_START])
10701 if (!tb[NL80211_ATTR_FREQ_RANGE_END])
10703 if (!tb[NL80211_ATTR_FREQ_RANGE_MAX_BW])
10705 if (!tb[NL80211_ATTR_POWER_RULE_MAX_EIRP])
10720 if (tb[NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN])
10724 if (tb[NL80211_ATTR_DFS_CAC_TIME])
10741 if (!info->attrs[NL80211_ATTR_REG_ALPHA2])
10744 if (!info->attrs[NL80211_ATTR_REG_RULES])
10749 if (info->attrs[NL80211_ATTR_DFS_REGION])
10755 if (num_rules > NL80211_MAX_SUPP_REG_RULES)
10760 if (!reg_is_valid_request(alpha2)) {
10766 if (!rd) {
10776 * Disable DFS master mode if the DFS region was
10779 if (reg_supported_dfs_region(dfs_region))
10787 if (r)
10790 if (r)
10795 if (rule_idx > NL80211_MAX_SUPP_REG_RULES) {
10818 if (nla_len(attr1) != sizeof(u32))
10833 if (attr1 != attr2 &&
10857 if (!nla_ok(nest, nla_len(nest)))
10863 if (err)
10868 if (attr[i]) {
10869 if (found)
10877 if (attr[NL80211_BSS_SELECT_ATTR_RSSI])
10880 if (attr[NL80211_BSS_SELECT_ATTR_BAND_PREF]) {
10884 if (!is_band_valid(wiphy, bss_select->param.band_pref))
10888 if (attr[NL80211_BSS_SELECT_ATTR_RSSI_ADJUST]) {
10895 if (!is_band_valid(wiphy, bss_select->param.adjust.band))
10900 if (bss_select->behaviour == __NL80211_BSS_SELECT_ATTR_INVALID)
10903 if (!(wiphy->bss_select_support & BIT(bss_select->behaviour)))
10914 if (!attrs[NL80211_ATTR_MAC] && !attrs[NL80211_ATTR_MAC_MASK]) {
10924 if (!attrs[NL80211_ATTR_MAC] || !attrs[NL80211_ATTR_MAC_MASK])
10931 if (!is_multicast_ether_addr(mac_addr_mask) ||
10955 if (!cfg80211_wdev_channel_allowed(wdev, chan))
10958 if (!cfg80211_beaconing_iface_active(wdev))
10964 * FIXME: check if we have a free radio/link for chan
10976 if (!chandef || !chandef->chan)
10979 if (!(chandef->chan->flags & IEEE80211_CHAN_RADAR))
10983 * chandef->chan is a radar channel. If the radio/link onto
10991 if (link_radio_idx == radio_idx) {
10997 if (all_ok)
11006 if (!(flags & flag))
11008 if (wiphy_ext_feature_isset(wiphy, feat))
11018 if (!attrs[NL80211_ATTR_SCAN_FLAGS])
11023 if (((*flags & NL80211_SCAN_FLAG_LOW_PRIORITY) &&
11054 if (*flags & NL80211_SCAN_FLAG_RANDOM_ADDR) {
11057 if (!(wiphy->features & randomness_flag) ||
11062 if (err)
11108 if (wdev->iftype == NL80211_IFTYPE_NAN ||
11112 if (!rdev->ops->scan)
11115 if (rdev->scan_req || rdev->scan_msg)
11118 if (info->attrs[NL80211_ATTR_SCAN_FREQ_KHZ]) {
11119 if (!wiphy_ext_feature_isset(wiphy,
11124 } else if (info->attrs[NL80211_ATTR_SCAN_FREQUENCIES])
11127 if (scan_freqs) {
11129 if (!n_channels)
11135 if (info->attrs[NL80211_ATTR_SCAN_SSIDS])
11139 if (n_ssids > wiphy->max_scan_ssids)
11142 if (info->attrs[NL80211_ATTR_IE])
11147 if (ie_len > wiphy->max_scan_ie_len)
11156 if (!request)
11159 if (n_ssids)
11162 if (ie_len)
11166 if (scan_freqs) {
11167 /* user specified, bail out if channel not found */
11172 if (!scan_freqs_khz)
11176 if (!chan) {
11182 if (chan->flags & IEEE80211_CHAN_DISABLED ||
11197 if (!wiphy->bands[band])
11204 if (chan->flags & IEEE80211_CHAN_DISABLED ||
11216 if (!i) {
11226 /* if we can go off-channel to the target channel we're good */
11227 if (cfg80211_off_channel_oper_allowed(wdev, chan))
11230 if (!cfg80211_wdev_on_sub_chan(wdev, chan, true)) {
11237 if (n_ssids) {
11239 if (nla_len(attr) > IEEE80211_MAX_SSID_LEN) {
11250 if (info->attrs[NL80211_ATTR_IE]) {
11258 if (wiphy->bands[i])
11262 if (info->attrs[NL80211_ATTR_SCAN_SUPP_RATES]) {
11268 if (band < 0 || band >= NUM_NL80211_BANDS) {
11273 if (!wiphy->bands[band])
11280 if (err)
11285 if (info->attrs[NL80211_ATTR_MEASUREMENT_DURATION]) {
11293 if (err)
11304 * NL80211_ATTR_MAC value here if it can be determined to be used for
11308 if (info->attrs[NL80211_ATTR_BSSID])
11311 else if (!(request->req.flags & NL80211_SCAN_FLAG_RANDOM_ADDR) &&
11328 if (err)
11348 if (!rdev->ops->abort_scan)
11351 if (rdev->scan_msg)
11354 if (!rdev->scan_req)
11369 if (!attrs[NL80211_ATTR_SCHED_SCAN_PLANS]) {
11373 * If scan plans are not specified,
11379 if (!interval)
11384 if (!request->scan_plans[0].interval)
11387 if (request->scan_plans[0].interval >
11398 if (WARN_ON(i >= n_plans))
11405 if (err)
11408 if (!plan[NL80211_SCHED_SCAN_PLAN_INTERVAL])
11413 if (!request->scan_plans[i].interval ||
11418 if (plan[NL80211_SCHED_SCAN_PLAN_ITERATIONS]) {
11421 if (!request->scan_plans[i].iterations ||
11425 } else if (i < n_plans - 1) {
11440 if (request->scan_plans[n_plans - 1].iterations)
11458 if (attrs[NL80211_ATTR_SCAN_FREQUENCIES]) {
11461 if (!n_channels)
11467 if (attrs[NL80211_ATTR_SCAN_SSIDS])
11472 if (n_ssids > wiphy->max_sched_scan_ssids)
11482 * global RSSI for all other matchsets - if there are other matchsets.
11484 if (attrs[NL80211_ATTR_SCHED_SCAN_MATCH]) {
11495 if (err)
11499 if (tb[NL80211_SCHED_SCAN_MATCH_ATTR_SSID] &&
11504 if (tb[NL80211_SCHED_SCAN_MATCH_ATTR_SSID] ||
11510 if (rssi)
11515 /* However, if there's no other matchset, add the RSSI one */
11516 if (!n_match_sets && default_match_rssi != NL80211_SCAN_RSSI_THOLD_OFF)
11519 if (n_match_sets > max_match_sets)
11522 if (attrs[NL80211_ATTR_IE])
11527 if (ie_len > wiphy->max_sched_scan_ie_len)
11530 if (attrs[NL80211_ATTR_SCHED_SCAN_PLANS]) {
11535 if (attrs[NL80211_ATTR_SCHED_SCAN_INTERVAL])
11544 * compatibility. If no scan plans are specified and sched scan
11548 if (!attrs[NL80211_ATTR_SCHED_SCAN_INTERVAL])
11554 if (!n_plans || n_plans > wiphy->max_sched_scan_plans)
11557 if (!wiphy_ext_feature_isset(
11571 if (!request)
11575 if (n_ssids)
11579 if (ie_len) {
11580 if (n_ssids)
11586 if (n_match_sets) {
11587 if (request->ie)
11589 else if (n_ssids)
11598 if (n_match_sets)
11601 else if (request->ie)
11603 else if (n_ssids)
11611 if (attrs[NL80211_ATTR_SCAN_FREQUENCIES]) {
11612 /* user specified, bail out if channel not found */
11620 if (!chan) {
11626 if (chan->flags & IEEE80211_CHAN_DISABLED)
11637 if (!wiphy->bands[band])
11644 if (chan->flags & IEEE80211_CHAN_DISABLED)
11653 if (!i) {
11661 if (n_ssids) {
11664 if (nla_len(attr) > IEEE80211_MAX_SSID_LEN) {
11676 if (attrs[NL80211_ATTR_SCHED_SCAN_MATCH]) {
11687 if (err)
11692 if (!ssid && !bssid) {
11697 if (WARN_ON(i >= n_match_sets)) {
11706 if (ssid) {
11712 if (bssid)
11719 if (rssi)
11726 if (i == 0 && n_match_sets)
11738 if (ie_len) {
11746 if (err)
11749 if (attrs[NL80211_ATTR_SCHED_SCAN_DELAY])
11753 if (attrs[NL80211_ATTR_SCHED_SCAN_RELATIVE_RSSI]) {
11759 if (request->relative_rssi_set &&
11767 if (!is_band_valid(wiphy, request->rssi_adjust.band)) {
11774 if (err)
11796 if (!rdev->wiphy.max_sched_scan_reqs || !rdev->ops->sched_scan_start)
11801 if (err)
11809 if (err)
11813 * or if driver does not support multi-scheduled scan
11815 if (want_multi && rdev->wiphy.max_sched_scan_reqs > 1)
11819 if (err)
11825 if (info->attrs[NL80211_ATTR_SOCKET_OWNER])
11846 if (!rdev->wiphy.max_sched_scan_reqs || !rdev->ops->sched_scan_stop)
11849 if (info->attrs[NL80211_ATTR_COOKIE]) {
11857 if (!req || req->reqid ||
11894 if (dfs_region == NL80211_DFS_UNSET)
11899 if (err)
11903 if (err < 0)
11906 if (err == 0)
11909 if (!cfg80211_chandef_dfs_usable(wiphy, &chandef))
11912 if (nla_get_flag(info->attrs[NL80211_ATTR_RADAR_BACKGROUND]))
11916 if (cfg80211_beaconing_iface_active(wdev)) {
11920 if (wdev->valid_links &&
11928 if (wdev->links[link_id].cac_started)
11932 if (wiphy_ext_feature_isset(wiphy, NL80211_EXT_FEATURE_DFS_OFFLOAD))
11935 if (!rdev->ops->start_radar_detection)
11939 if (WARN_ON(!cac_time_ms))
11944 if (err)
11981 if (dfs_region == NL80211_DFS_UNSET) {
11989 if (err) {
11995 if (err < 0) {
12000 if (err == 0) {
12006 /* Do not process this notification if radar is already detected
12009 if (chandef.chan->dfs_state == NL80211_DFS_UNAVAILABLE)
12033 if (!attr)
12036 if (!nla_len(attr) || (nla_len(attr) % sizeof(u16)))
12040 if (rdev->wiphy.max_num_csa_counters &&
12050 if (offset >= datalen)
12053 if (first_count != -1 && data[offset] != first_count)
12074 if (!rdev->ops->channel_switch ||
12091 /* useless if AP is not running */
12092 if (!wdev->links[link_id].ap.beacon_interval)
12096 if (!wdev->u.ibss.ssid_len)
12100 if (!wdev->u.mesh.id_len)
12110 if (!info->attrs[NL80211_ATTR_WIPHY_FREQ] ||
12115 if (need_new_beacon && !info->attrs[NL80211_ATTR_CSA_IES])
12122 if (cs_count > 255)
12129 if (err)
12134 if (err)
12137 if (!need_new_beacon)
12142 if (err)
12146 if (!csa_attrs) {
12154 if (err)
12160 if (err)
12163 if (!csa_attrs[NL80211_ATTR_CNTDWN_OFFS_BEACON]) {
12174 if (err)
12183 if (err)
12187 if (!cfg80211_reg_can_beacon_relax(&rdev->wiphy, &params.chandef,
12196 if (err < 0)
12199 if (err > 0) {
12201 if (need_handle_dfs_flag &&
12208 if (info->attrs[NL80211_ATTR_CH_SWITCH_BLOCK_TX])
12211 if ((wdev->iftype == NL80211_IFTYPE_AP ||
12217 if (err)
12249 if (!hdr)
12254 if (nla_put_u32(msg, NL80211_ATTR_GENERATION, rdev->bss_generation))
12256 if (wdev->netdev &&
12259 if (nla_put_u64_64bit(msg, NL80211_ATTR_WDEV, wdev_id(wdev),
12264 if (!bss)
12266 if ((!is_zero_ether_addr(res->bssid) &&
12272 if (rcu_access_pointer(res->proberesp_ies) &&
12280 if (ies) {
12281 if (nla_put_u64_64bit(msg, NL80211_BSS_TSF, ies->tsf,
12284 if (ies->len && nla_put(msg, NL80211_BSS_INFORMATION_ELEMENTS,
12291 if (ies && ies->from_beacon) {
12292 if (nla_put_u64_64bit(msg, NL80211_BSS_BEACON_TSF, ies->tsf,
12295 if (ies->len && nla_put(msg, NL80211_BSS_BEACON_IES,
12301 if (res->beacon_interval &&
12304 if (nla_put_u16(msg, NL80211_BSS_CAPABILITY, res->capability) ||
12312 if (intbss->parent_tsf &&
12319 if (res->ts_boottime &&
12324 if (!nl80211_put_signal(msg, intbss->pub.chains,
12329 if (intbss->bss_source != BSS_SOURCE_STA_PROFILE) {
12332 if (nla_put_u32(msg, NL80211_BSS_SIGNAL_MBM,
12337 if (nla_put_u8(msg, NL80211_BSS_SIGNAL_UNSPEC,
12350 if (intbss == wdev->links[link_id].client.current_bss &&
12362 if (intbss == wdev->u.ibss.current_bss &&
12371 if (nla_put_u32(msg, NL80211_BSS_USE_FOR, res->use_for))
12374 if (res->cannot_use_reasons &&
12403 if (!attrbuf)
12407 if (err) {
12426 if (start == 0)
12432 if (++idx <= start)
12434 if (!dump_include_use_data &&
12437 if (nl80211_send_bss(skb, cb,
12461 /* skip radio stats if userspace didn't request them */
12462 if (!survey->channel && !allow_radio_stats)
12467 if (!hdr)
12470 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex))
12474 if (!infoattr)
12477 if (survey->channel &&
12482 if (survey->channel && survey->channel->freq_offset &&
12487 if ((survey->filled & SURVEY_INFO_NOISE_DBM) &&
12490 if ((survey->filled & SURVEY_INFO_IN_USE) &&
12493 if ((survey->filled & SURVEY_INFO_TIME) &&
12497 if ((survey->filled & SURVEY_INFO_TIME_BUSY) &&
12501 if ((survey->filled & SURVEY_INFO_TIME_EXT_BUSY) &&
12505 if ((survey->filled & SURVEY_INFO_TIME_RX) &&
12509 if ((survey->filled & SURVEY_INFO_TIME_TX) &&
12513 if ((survey->filled & SURVEY_INFO_TIME_SCAN) &&
12517 if ((survey->filled & SURVEY_INFO_TIME_BSS_RX) &&
12543 if (!attrbuf)
12547 if (res) {
12557 if (!wdev->netdev) {
12562 if (!rdev->ops->dump_survey) {
12569 if (res == -ENOENT)
12571 if (res)
12575 if (survey.channel &&
12581 if (nl80211_send_survey(skb,
12611 if (!info->attrs[NL80211_ATTR_MAC])
12614 if (!info->attrs[NL80211_ATTR_AUTH_TYPE])
12617 if (!info->attrs[NL80211_ATTR_SSID])
12620 if (!info->attrs[NL80211_ATTR_WIPHY_FREQ])
12624 if (err)
12627 if (key.idx >= 0) {
12628 if (key.type != -1 && key.type != NL80211_KEYTYPE_GROUP)
12630 if (!key.p.key || !key.p.key_len)
12632 if ((key.p.cipher != WLAN_CIPHER_SUITE_WEP40 ||
12637 if (key.idx > 3)
12644 if (key.idx >= 0) {
12649 if (key.p.cipher == rdev->wiphy.cipher_suites[i]) {
12654 if (!ok)
12658 if (!rdev->ops->auth)
12661 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION &&
12667 if (info->attrs[NL80211_ATTR_WIPHY_FREQ_OFFSET])
12672 if (!chan)
12678 if (info->attrs[NL80211_ATTR_IE]) {
12683 if (info->attrs[NL80211_ATTR_SUPPORTED_SELECTORS]) {
12691 if (!nl80211_valid_auth_type(rdev, auth_type, NL80211_CMD_AUTHENTICATE))
12694 if ((auth_type == NL80211_AUTHTYPE_SAE ||
12703 if (info->attrs[NL80211_ATTR_AUTH_DATA]) {
12704 if (auth_type != NL80211_AUTHTYPE_SAE &&
12721 if (local_state_change)
12729 if (req.link_id >= 0) {
12730 if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_MLO))
12732 if (!info->attrs[NL80211_ATTR_MLD_ADDR])
12735 if (!is_valid_ether_addr(req.ap_mld_addr))
12742 if (!req.bss)
12755 if (!info->attrs[NL80211_ATTR_SOCKET_OWNER]) {
12760 if (!rdev->ops->tx_control_port ||
12777 if (info->attrs[NL80211_ATTR_CONTROL_PORT_ETHERTYPE]) {
12783 if (!(rdev->wiphy.flags & WIPHY_FLAG_CONTROL_PORT_PROTOCOL) &&
12786 if (info->attrs[NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT])
12791 if (info->attrs[NL80211_ATTR_CONTROL_PORT_OVER_NL80211]) {
12794 if (r < 0)
12799 if (info->attrs[NL80211_ATTR_CONTROL_PORT_NO_PREAUTH])
12803 if (info->attrs[NL80211_ATTR_CIPHER_SUITES_PAIRWISE]) {
12811 if (len % sizeof(u32))
12814 if (settings->n_ciphers_pairwise > cipher_limit)
12820 if (!cfg80211_supported_cipher_suite(
12826 if (info->attrs[NL80211_ATTR_CIPHER_SUITE_GROUP]) {
12829 if (!cfg80211_supported_cipher_suite(&rdev->wiphy,
12834 if (info->attrs[NL80211_ATTR_WPA_VERSIONS])
12838 if (info->attrs[NL80211_ATTR_AKM_SUITES]) {
12846 if (len % sizeof(u32))
12849 if (settings->n_akm_suites > rdev->wiphy.max_num_akm_suites)
12855 if (info->attrs[NL80211_ATTR_PMK]) {
12856 if (nla_len(info->attrs[NL80211_ATTR_PMK]) != WLAN_PMK_LEN)
12858 if (!wiphy_ext_feature_isset(&rdev->wiphy,
12866 if (info->attrs[NL80211_ATTR_SAE_PASSWORD]) {
12867 if (!wiphy_ext_feature_isset(&rdev->wiphy,
12895 if (!attrs[NL80211_ATTR_MAC] || !attrs[NL80211_ATTR_WIPHY_FREQ])
12901 if (attrs[NL80211_ATTR_WIPHY_FREQ_OFFSET])
12905 if (!chan)
12908 if (assoc_link_id >= 0)
12910 if (assoc_link_id == link_id)
12918 if (!bss)
12936 if (!attrs)
12944 if (!attrs[NL80211_ATTR_MLO_LINK_ID]) {
12951 if (links[link_id].bss) {
12958 if (IS_ERR(links[link_id].bss)) {
12966 if (attrs[NL80211_ATTR_IE]) {
12971 if (cfg80211_find_elem(WLAN_EID_FRAGMENT,
12980 if (cfg80211_find_ext_elem(WLAN_EID_EXT_NON_INHERITANCE,
13003 if (dev->ieee80211_ptr->conn_owner_nlportid &&
13007 if (!info->attrs[NL80211_ATTR_SSID])
13010 if (!rdev->ops->assoc)
13013 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION &&
13020 if (info->attrs[NL80211_ATTR_IE]) {
13024 if (cfg80211_find_ext_elem(WLAN_EID_EXT_NON_INHERITANCE,
13033 if (info->attrs[NL80211_ATTR_USE_MFP]) {
13036 if (mfp == NL80211_MFP_REQUIRED)
13038 else if (mfp != NL80211_MFP_NO)
13042 if (info->attrs[NL80211_ATTR_PREV_BSSID])
13045 if (info->attrs[NL80211_ATTR_SUPPORTED_SELECTORS]) {
13052 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_HT]))
13055 if (info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK])
13060 if (info->attrs[NL80211_ATTR_HT_CAPABILITY]) {
13061 if (!info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK])
13068 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_VHT]))
13071 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_HE]))
13074 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_EHT]))
13077 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_UHR]))
13080 if (info->attrs[NL80211_ATTR_VHT_CAPABILITY_MASK])
13085 if (info->attrs[NL80211_ATTR_VHT_CAPABILITY]) {
13086 if (!info->attrs[NL80211_ATTR_VHT_CAPABILITY_MASK])
13093 if (nla_get_flag(info->attrs[NL80211_ATTR_USE_RRM])) {
13094 if (!((rdev->wiphy.features &
13103 if (info->attrs[NL80211_ATTR_FILS_KEK]) {
13106 if (!info->attrs[NL80211_ATTR_FILS_NONCES])
13112 if (info->attrs[NL80211_ATTR_S1G_CAPABILITY_MASK]) {
13113 if (!info->attrs[NL80211_ATTR_S1G_CAPABILITY])
13120 if (info->attrs[NL80211_ATTR_S1G_CAPABILITY]) {
13121 if (!info->attrs[NL80211_ATTR_S1G_CAPABILITY_MASK])
13128 if (nla_get_flag(info->attrs[NL80211_ATTR_ASSOC_SPP_AMSDU])) {
13129 if (!wiphy_ext_feature_isset(&rdev->wiphy,
13139 if (info->attrs[NL80211_ATTR_MLO_LINKS]) {
13140 if (req.link_id < 0)
13143 if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_MLO))
13146 if (info->attrs[NL80211_ATTR_MAC] ||
13156 if (err)
13159 if (!req.links[req.link_id].bss) {
13164 if (req.links[req.link_id].elems_len) {
13171 if (info->attrs[NL80211_ATTR_EXT_MLD_CAPA_AND_OPS])
13175 if (req.link_id >= 0)
13180 if (IS_ERR(req.bss))
13184 if (info->attrs[NL80211_ATTR_EXT_MLD_CAPA_AND_OPS])
13189 if (!err) {
13196 if (!err && info->attrs[NL80211_ATTR_SOCKET_OWNER]) {
13204 if (info->attrs[NL80211_ATTR_MLO_LINKS]) {
13211 if (!link_id_attr)
13216 if (link_id == req.link_id)
13219 if (!req.links[link_id].error ||
13249 if (dev->ieee80211_ptr->conn_owner_nlportid &&
13253 if (!info->attrs[NL80211_ATTR_MAC])
13256 if (!info->attrs[NL80211_ATTR_REASON_CODE])
13259 if (!rdev->ops->deauth)
13262 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION &&
13269 if (reason_code == 0) {
13274 if (info->attrs[NL80211_ATTR_IE]) {
13294 if (dev->ieee80211_ptr->conn_owner_nlportid &&
13298 if (!info->attrs[NL80211_ATTR_MAC])
13301 if (!info->attrs[NL80211_ATTR_REASON_CODE])
13304 if (!rdev->ops->disassoc)
13307 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION &&
13314 if (reason_code == 0) {
13319 if (info->attrs[NL80211_ATTR_IE]) {
13343 if (!sband)
13347 if (sband->bitrates[i].bitrate == rateval) {
13369 if (!info->attrs[NL80211_ATTR_SSID] ||
13375 if (info->attrs[NL80211_ATTR_BEACON_INTERVAL])
13381 if (err)
13384 if (!rdev->ops->join_ibss)
13387 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_ADHOC)
13392 if (info->attrs[NL80211_ATTR_MAC]) {
13395 if (!is_valid_ether_addr(ibss.bssid))
13401 if (info->attrs[NL80211_ATTR_IE]) {
13408 if (err)
13411 if (!cfg80211_reg_can_beacon(&rdev->wiphy, &ibss.chandef,
13420 if (!(rdev->wiphy.features & NL80211_FEATURE_HT_IBSS))
13426 if (!(rdev->wiphy.features & NL80211_FEATURE_HT_IBSS))
13428 if (!wiphy_ext_feature_isset(&rdev->wiphy,
13441 if (info->attrs[NL80211_ATTR_BSS_BASIC_RATES]) {
13451 if (err)
13455 if (info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK])
13460 if (info->attrs[NL80211_ATTR_HT_CAPABILITY]) {
13461 if (!info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK])
13468 if (info->attrs[NL80211_ATTR_MCAST_RATE] &&
13473 if (ibss.privacy && info->attrs[NL80211_ATTR_KEYS]) {
13478 if (IS_ERR(connkeys))
13481 if ((ibss.chandef.width != NL80211_CHAN_WIDTH_20_NOHT) &&
13491 if (info->attrs[NL80211_ATTR_CONTROL_PORT_OVER_NL80211]) {
13494 if (r < 0) {
13506 if (err)
13508 else if (info->attrs[NL80211_ATTR_SOCKET_OWNER])
13519 if (!rdev->ops->leave_ibss)
13522 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_ADHOC)
13535 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_ADHOC &&
13540 if (!rdev->ops->set_mcast_rate)
13545 if (!info->attrs[NL80211_ATTR_MCAST_RATE])
13549 if (!nl80211_parse_mcast_rate(rdev, mcast_rate, nla_rate))
13568 if (!skb)
13572 if (!hdr) {
13577 if (nla_put_u32(skb, NL80211_ATTR_WIPHY, rdev->wiphy_idx))
13580 if (info) {
13581 if (nla_put_u32(skb, NL80211_ATTR_VENDOR_ID,
13584 if (nla_put_u32(skb, NL80211_ATTR_VENDOR_SUBCMD,
13589 if (wdev) {
13590 if (nla_put_u64_64bit(skb, NL80211_ATTR_WDEV,
13593 if (wdev->netdev &&
13600 if (!data)
13627 if (WARN_ON(vendor_event_idx != -1))
13632 if (WARN_ON(vendor_event_idx < 0 ||
13661 if (nlhdr->nlmsg_pid) {
13665 if (data->nla_type == NL80211_ATTR_VENDOR_DATA)
13686 if (!rdev->ops->testmode_cmd)
13689 if (IS_ERR(wdev)) {
13691 if (err != -EINVAL)
13694 } else if (wdev->wiphy != &rdev->wiphy) {
13698 if (!info->attrs[NL80211_ATTR_TESTDATA])
13722 if (cb->args[0]) {
13730 if (!rdev) {
13740 if (!net_eq(wiphy_net(&rdev->wiphy), sock_net(skb->sk))) {
13746 if (!attrbuf) {
13755 if (err)
13759 if (IS_ERR(rdev)) {
13765 if (attrbuf[NL80211_ATTR_TESTDATA])
13769 if (cb->args[1]) {
13774 if (!rdev->ops->testmode_dump) {
13785 if (!hdr)
13788 if (nla_put_u32(skb, NL80211_ATTR_WIPHY, phy_idx)) {
13794 if (!tmdata) {
13801 if (err == -ENOBUFS || err == -ENOENT) {
13804 } else if (err) {
13834 if (!info->attrs[NL80211_ATTR_SSID] ||
13838 if (info->attrs[NL80211_ATTR_AUTH_TYPE]) {
13841 if (!nl80211_valid_auth_type(rdev, connect.auth_type,
13849 if (info->attrs[NL80211_ATTR_WANT_1X_4WAY_HS] &&
13857 if (err)
13860 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION &&
13867 if (info->attrs[NL80211_ATTR_BG_SCAN_PERIOD] &&
13873 if (info->attrs[NL80211_ATTR_MAC])
13875 else if (info->attrs[NL80211_ATTR_MAC_HINT])
13881 if (info->attrs[NL80211_ATTR_IE]) {
13886 if (info->attrs[NL80211_ATTR_USE_MFP]) {
13888 if (connect.mfp == NL80211_MFP_OPTIONAL &&
13896 if (info->attrs[NL80211_ATTR_PREV_BSSID])
13900 if (info->attrs[NL80211_ATTR_WIPHY_FREQ])
13903 if (info->attrs[NL80211_ATTR_WIPHY_FREQ_OFFSET])
13907 if (freq) {
13909 if (!connect.channel)
13911 } else if (info->attrs[NL80211_ATTR_WIPHY_FREQ_HINT]) {
13915 if (!connect.channel_hint)
13919 if (info->attrs[NL80211_ATTR_WIPHY_EDMG_CHANNELS]) {
13923 if (info->attrs[NL80211_ATTR_WIPHY_EDMG_BW_CONFIG])
13928 if (connect.privacy && info->attrs[NL80211_ATTR_KEYS]) {
13931 if (IS_ERR(connkeys))
13935 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_HT]))
13938 if (info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK])
13943 if (info->attrs[NL80211_ATTR_HT_CAPABILITY]) {
13944 if (!info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK]) {
13953 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_VHT]))
13956 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_HE]))
13959 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_EHT]))
13962 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_UHR]))
13965 if (info->attrs[NL80211_ATTR_VHT_CAPABILITY_MASK])
13970 if (info->attrs[NL80211_ATTR_VHT_CAPABILITY]) {
13971 if (!info->attrs[NL80211_ATTR_VHT_CAPABILITY_MASK]) {
13980 if (nla_get_flag(info->attrs[NL80211_ATTR_USE_RRM])) {
13981 if (!((rdev->wiphy.features &
13993 if (connect.pbss && !rdev->wiphy.bands[NL80211_BAND_60GHZ]) {
13998 if (info->attrs[NL80211_ATTR_BSS_SELECT]) {
13999 /* bss selection makes no sense if bssid is set */
14000 if (connect.bssid) {
14007 if (err) {
14013 if (wiphy_ext_feature_isset(&rdev->wiphy,
14034 } else if (info->attrs[NL80211_ATTR_FILS_ERP_USERNAME] ||
14042 if (nla_get_flag(info->attrs[NL80211_ATTR_EXTERNAL_AUTH_SUPPORT])) {
14043 if (!info->attrs[NL80211_ATTR_SOCKET_OWNER]) {
14052 if (nla_get_flag(info->attrs[NL80211_ATTR_MLO_SUPPORT]))
14057 if (err)
14060 if (!err && info->attrs[NL80211_ATTR_SOCKET_OWNER]) {
14062 if (connect.bssid)
14083 if (!rdev->ops->update_connect_params)
14086 if (info->attrs[NL80211_ATTR_IE]) {
14100 if (fils_sk_offload &&
14121 } else if (info->attrs[NL80211_ATTR_FILS_ERP_USERNAME] ||
14128 if (info->attrs[NL80211_ATTR_AUTH_TYPE]) {
14130 if (!nl80211_valid_auth_type(rdev, auth_type,
14134 if (auth_type == NL80211_AUTHTYPE_FILS_SK &&
14142 if (!wdev->connected)
14154 if (dev->ieee80211_ptr->conn_owner_nlportid &&
14161 if (reason == 0)
14164 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION &&
14177 if (info->attrs[NL80211_ATTR_PID]) {
14181 } else if (info->attrs[NL80211_ATTR_NETNS_FD]) {
14189 if (IS_ERR(net))
14200 if (!ns_capable(net->user_ns, CAP_NET_ADMIN)) {
14207 /* check if anything to do */
14208 if (!net_eq(wiphy_net(&rdev->wiphy), net))
14227 if (!info->attrs[NL80211_ATTR_PMKID])
14232 if (info->attrs[NL80211_ATTR_MAC]) {
14234 } else if (info->attrs[NL80211_ATTR_SSID] &&
14244 if (info->attrs[NL80211_ATTR_PMK]) {
14249 if (info->attrs[NL80211_ATTR_PMK_LIFETIME])
14253 if (info->attrs[NL80211_ATTR_PMK_REAUTH_THRESHOLD])
14257 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION &&
14264 if (!rdev->ops->set_pmksa)
14288 if (info->attrs[NL80211_ATTR_PMKID])
14291 if (info->attrs[NL80211_ATTR_MAC]) {
14293 } else if (info->attrs[NL80211_ATTR_SSID]) {
14297 if (info->attrs[NL80211_ATTR_FILS_CACHE_ID] &&
14300 } else if (!sae_offload_support && !owe_offload_support) {
14309 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION &&
14316 if (!rdev->ops->del_pmksa)
14327 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION &&
14331 if (!rdev->ops->flush_pmksa)
14348 if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_TDLS) ||
14352 if (!info->attrs[NL80211_ATTR_TDLS_ACTION] ||
14364 if (info->attrs[NL80211_ATTR_TDLS_PEER_CAPABILITY])
14383 if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_TDLS) ||
14387 if (!info->attrs[NL80211_ATTR_TDLS_OPERATION] ||
14411 if (!info->attrs[NL80211_ATTR_WIPHY_FREQ] ||
14417 if (info->attrs[NL80211_ATTR_MAC])
14420 if (rx_addr &&
14425 if (!rdev->ops->remain_on_channel ||
14433 if (duration < NL80211_MIN_REMAIN_ON_CHANNEL_TIME ||
14439 if (err)
14442 if (!cfg80211_off_channel_oper_allowed(wdev, chandef.chan)) {
14447 if (WARN_ON(!oper_chandef)) {
14453 /* note: returns first one if identical chandefs */
14457 if (compat_chandef != &chandef)
14462 if (!msg)
14467 if (!hdr) {
14475 if (err)
14478 if (nla_put_u64_64bit(msg, NL80211_ATTR_COOKIE, cookie,
14500 if (!info->attrs[NL80211_ATTR_COOKIE])
14503 if (!rdev->ops->cancel_remain_on_channel)
14520 if (!rdev->ops->set_bitrate_mask)
14526 if (err)
14538 if (!info->attrs[NL80211_ATTR_FRAME_MATCH])
14541 if (info->attrs[NL80211_ATTR_FRAME_TYPE])
14556 if (!wiphy_ext_feature_isset(wdev->wiphy,
14563 if (!wiphy_ext_feature_isset(wdev->wiphy,
14571 /* not much point in registering if we can't reply */
14572 if (!rdev->ops->mgmt_tx)
14575 if (info->attrs[NL80211_ATTR_RECEIVE_MULTICAST] &&
14604 if (!info->attrs[NL80211_ATTR_FRAME])
14607 if (!rdev->ops->mgmt_tx)
14612 if (!info->attrs[NL80211_ATTR_WIPHY_FREQ])
14625 if (!wiphy_ext_feature_isset(wdev->wiphy,
14632 if (!wiphy_ext_feature_isset(wdev->wiphy,
14640 if (info->attrs[NL80211_ATTR_DURATION]) {
14641 if (!(rdev->wiphy.flags & WIPHY_FLAG_OFFCHAN_TX))
14649 if (params.wait < NL80211_MIN_REMAIN_ON_CHANNEL_TIME ||
14656 if (params.offchan && !(rdev->wiphy.flags & WIPHY_FLAG_OFFCHAN_TX))
14661 /* get the channel if any has been specified, otherwise pass NULL to
14665 if (info->attrs[NL80211_ATTR_WIPHY_FREQ]) {
14668 if (err)
14672 if (!chandef.chan && params.offchan)
14675 if (params.offchan &&
14685 if (params.link_id >= 0 &&
14696 if (err)
14699 if (!params.dont_wait_for_ack) {
14701 if (!msg)
14706 if (!hdr) {
14714 if (err)
14717 if (msg) {
14718 if (nla_put_u64_64bit(msg, NL80211_ATTR_COOKIE, cookie,
14741 if (!info->attrs[NL80211_ATTR_COOKIE])
14744 if (!rdev->ops->mgmt_tx_cancel_wait)
14757 if (!wiphy_ext_feature_isset(wdev->wiphy,
14762 if (!wiphy_ext_feature_isset(wdev->wiphy,
14784 if (!info->attrs[NL80211_ATTR_PS_STATE])
14791 if (!rdev->ops->set_power_mgmt)
14796 if (state == wdev->ps)
14800 if (!err)
14817 if (!rdev->ops->set_power_mgmt)
14821 if (!msg)
14826 if (!hdr) {
14831 if (wdev->ps)
14836 if (nla_put_u32(msg, NL80211_ATTR_PS_STATE, ps_state))
14867 if (rate > 100 || intvl > NL80211_CQM_TXE_MAX_INTVL)
14870 if (!rdev->ops->set_cqm_txe_config)
14873 if (wdev->iftype != NL80211_IFTYPE_STATION &&
14891 * Obtain current RSSI value if possible, if not and no RSSI threshold
14896 if (!cqm_config->last_rssi_event_value &&
14905 if (err)
14909 if (sinfo.filled & BIT_ULL(NL80211_STA_INFO_BEACON_SIGNAL_AVG))
14920 if (last < cqm_config->rssi_thresholds[i])
14925 if (low_index >= 0) {
14931 if (i < n) {
14954 if (thresholds[i] > 0 || thresholds[i] <= prev)
14960 if (wdev->iftype != NL80211_IFTYPE_STATION &&
14964 if (n_thresholds == 1 && thresholds[0] == 0) /* Disabling */
14969 /* if already disabled just succeed */
14970 if (!n_thresholds && !old)
14973 if (n_thresholds > 1) {
14974 if (!wiphy_ext_feature_isset(&rdev->wiphy,
14979 if (!rdev->ops->set_cqm_rssi_config)
14983 if (n_thresholds) {
14986 if (!cqm_config)
14999 if (cqm_config->use_range_api)
15007 /* if enabled as range also disable via range */
15008 if (old->use_range_api)
15014 if (err) {
15031 if (!cqm)
15037 if (err)
15040 if (attrs[NL80211_ATTR_CQM_RSSI_THOLD] &&
15047 if (len % 4)
15054 if (attrs[NL80211_ATTR_CQM_TXE_RATE] &&
15076 if (err)
15102 if (info->attrs[NL80211_ATTR_MESH_CONFIG]) {
15103 /* and parse parameters if given */
15105 if (err)
15109 if (!info->attrs[NL80211_ATTR_MESH_ID] ||
15116 if (info->attrs[NL80211_ATTR_MCAST_RATE] &&
15121 if (info->attrs[NL80211_ATTR_BEACON_INTERVAL]) {
15128 if (err)
15132 if (info->attrs[NL80211_ATTR_DTIM_PERIOD]) {
15135 if (setup.dtim_period < 1 || setup.dtim_period > 100)
15139 if (info->attrs[NL80211_ATTR_MESH_SETUP]) {
15140 /* parse additional setup parameters if given */
15142 if (err)
15146 if (setup.user_mpm)
15149 if (info->attrs[NL80211_ATTR_WIPHY_FREQ]) {
15152 if (err)
15159 if (info->attrs[NL80211_ATTR_BSS_BASIC_RATES]) {
15165 if (!setup.chandef.chan)
15172 if (err)
15176 if (info->attrs[NL80211_ATTR_TX_RATES]) {
15181 if (err)
15184 if (!setup.chandef.chan)
15189 if (err)
15196 if (info->attrs[NL80211_ATTR_CONTROL_PORT_OVER_NL80211]) {
15199 if (r < 0)
15206 if (!err && info->attrs[NL80211_ATTR_SOCKET_OWNER])
15228 if (!wowlan->n_patterns)
15232 if (!nl_pats)
15237 if (!nl_pat)
15240 if (nla_put(msg, NL80211_PKTPAT_MASK, DIV_ROUND_UP(pat_len, 8),
15259 if (!tcp)
15264 if (!nl_tcp)
15267 if (nla_put_in_addr(msg, NL80211_WOWLAN_TCP_SRC_IPV4, tcp->src) ||
15282 if (tcp->payload_seq.len &&
15287 if (tcp->payload_tok.len &&
15304 if (!req)
15308 if (!nd)
15311 if (req->n_scan_plans == 1 &&
15316 if (nla_put_u32(msg, NL80211_ATTR_SCHED_SCAN_DELAY, req->delay))
15319 if (req->relative_rssi_set) {
15322 if (nla_put_s8(msg, NL80211_ATTR_SCHED_SCAN_RELATIVE_RSSI,
15328 if (nla_put(msg, NL80211_ATTR_SCHED_SCAN_RSSI_ADJUST,
15334 if (!freqs)
15338 if (nla_put_u32(msg, i, req->channels[i]->center_freq))
15344 if (req->n_match_sets) {
15347 if (!matches)
15352 if (!match)
15355 if (nla_put(msg, NL80211_SCHED_SCAN_MATCH_ATTR_SSID,
15365 if (!scan_plans)
15370 if (!scan_plan)
15373 if (nla_put_u32(msg, NL80211_SCHED_SCAN_PLAN_INTERVAL,
15395 if (!rdev->wiphy.wowlan)
15398 if (rdev->wiphy.wowlan_config && rdev->wiphy.wowlan_config->tcp) {
15407 if (!msg)
15412 if (!hdr)
15415 if (rdev->wiphy.wowlan_config) {
15420 if (!nl_wowlan)
15423 if ((rdev->wiphy.wowlan_config->any &&
15439 if (nl80211_send_wowlan_patterns(msg, rdev))
15442 if (nl80211_send_wowlan_tcp(msg,
15446 if (nl80211_send_wowlan_nd(
15474 if (!rdev->wiphy.wowlan->tcp)
15479 if (err)
15482 if (!tb[NL80211_WOWLAN_TCP_SRC_IPV4] ||
15493 if (data_size > rdev->wiphy.wowlan->tcp->data_payload_max)
15496 if (nla_get_u32(tb[NL80211_WOWLAN_TCP_DATA_INTERVAL]) >
15502 if (wake_size > rdev->wiphy.wowlan->tcp->wake_payload_max)
15506 if (wake_mask_size != DIV_ROUND_UP(wake_size, 8))
15509 if (tb[NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN]) {
15515 if (!tok->len || tokens_size % tok->len)
15517 if (!rdev->wiphy.wowlan->tcp->tok)
15519 if (tok->len > rdev->wiphy.wowlan->tcp->tok->max_len)
15521 if (tok->len < rdev->wiphy.wowlan->tcp->tok->min_len)
15523 if (tokens_size > rdev->wiphy.wowlan->tcp->tok->bufsize)
15525 if (tok->offset + tok->len > data_size)
15529 if (tb[NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ]) {
15531 if (!rdev->wiphy.wowlan->tcp->seq)
15533 if (seq->len == 0 || seq->len > 4)
15535 if (seq->len + seq->offset > data_size)
15545 if (!cfg)
15556 if (err) {
15560 if (inet_csk_get_port(cfg->sock->sk, port)) {
15567 if (!port) {
15580 if (seq)
15593 if (tok) {
15614 if (!tb)
15617 if (!(wowlan->flags & WIPHY_WOWLAN_NET_DETECT)) {
15624 if (err)
15630 if (err)
15649 if (!wowlan)
15652 if (!info->attrs[NL80211_ATTR_WOWLAN_TRIGGERS]) {
15661 if (err)
15664 if (tb[NL80211_WOWLAN_TRIG_ANY]) {
15665 if (!(wowlan->flags & WIPHY_WOWLAN_ANY))
15670 if (tb[NL80211_WOWLAN_TRIG_DISCONNECT]) {
15671 if (!(wowlan->flags & WIPHY_WOWLAN_DISCONNECT))
15677 if (tb[NL80211_WOWLAN_TRIG_MAGIC_PKT]) {
15678 if (!(wowlan->flags & WIPHY_WOWLAN_MAGIC_PKT))
15684 if (tb[NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED])
15687 if (tb[NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE]) {
15688 if (!(wowlan->flags & WIPHY_WOWLAN_GTK_REKEY_FAILURE))
15694 if (tb[NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST]) {
15695 if (!(wowlan->flags & WIPHY_WOWLAN_EAP_IDENTITY_REQ))
15701 if (tb[NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE]) {
15702 if (!(wowlan->flags & WIPHY_WOWLAN_4WAY_HANDSHAKE))
15708 if (tb[NL80211_WOWLAN_TRIG_RFKILL_RELEASE]) {
15709 if (!(wowlan->flags & WIPHY_WOWLAN_RFKILL_RELEASE))
15715 if (tb[NL80211_WOWLAN_TRIG_PKT_PATTERN]) {
15726 if (n_patterns > wowlan->n_patterns)
15731 if (!new_triggers.patterns)
15746 if (err)
15750 if (!pat_tb[NL80211_PKTPAT_MASK] ||
15755 if (nla_len(pat_tb[NL80211_PKTPAT_MASK]) != mask_len)
15757 if (pat_len > wowlan->pattern_max_len ||
15764 if (pkt_offset > wowlan->max_pkt_offset)
15769 if (!mask_pat) {
15786 if (tb[NL80211_WOWLAN_TRIG_TCP_CONNECTION]) {
15791 if (err)
15795 if (tb[NL80211_WOWLAN_TRIG_NET_DETECT]) {
15800 if (err)
15810 if (new_triggers.any && regular) {
15816 if (!ntrig) {
15824 if (rdev->ops->set_wakeup &&
15833 if (new_triggers.tcp && new_triggers.tcp->sock)
15848 if (!rdev->coalesce->n_rules)
15852 if (!nl_rules)
15857 if (!nl_rule)
15861 if (nla_put_u32(msg, NL80211_ATTR_COALESCE_RULE_DELAY,
15865 if (nla_put_u32(msg, NL80211_ATTR_COALESCE_RULE_CONDITION,
15871 if (!nl_pats)
15876 if (!nl_pat)
15879 if (nla_put(msg, NL80211_PKTPAT_MASK,
15903 if (!rdev->wiphy.coalesce)
15907 if (!msg)
15912 if (!hdr)
15915 if (rdev->coalesce && nl80211_send_coalesce_rules(msg, rdev))
15931 if (!coalesce)
15955 if (err)
15958 if (tb[NL80211_ATTR_COALESCE_RULE_DELAY])
15961 if (new_rule->delay > coalesce->max_delay)
15964 if (tb[NL80211_ATTR_COALESCE_RULE_CONDITION])
15968 if (!tb[NL80211_ATTR_COALESCE_RULE_PKT_PATTERN])
15974 if (n_patterns > coalesce->n_patterns)
15978 if (!new_rule->patterns)
15992 if (err)
15995 if (!pat_tb[NL80211_PKTPAT_MASK] ||
16000 if (nla_len(pat_tb[NL80211_PKTPAT_MASK]) != mask_len)
16002 if (pat_len > coalesce->pattern_max_len ||
16008 if (pkt_offset > coalesce->max_pkt_offset)
16013 if (!mask_pat)
16039 if (!rdev->wiphy.coalesce || !rdev->ops->set_coalesce)
16042 if (!info->attrs[NL80211_ATTR_COALESCE_RULE]) {
16052 if (n_rules > coalesce->n_rules)
16056 if (!new_coalesce)
16066 if (err)
16073 if (err)
16095 if (!info->attrs[NL80211_ATTR_REKEY_DATA])
16101 if (err)
16104 if (!tb[NL80211_REKEY_DATA_REPLAY_CTR] || !tb[NL80211_REKEY_DATA_KEK] ||
16107 if (nla_len(tb[NL80211_REKEY_DATA_KEK]) != NL80211_KEK_LEN &&
16111 if (nla_len(tb[NL80211_REKEY_DATA_KCK]) != NL80211_KCK_LEN &&
16123 if (tb[NL80211_REKEY_DATA_AKM])
16126 if (!wdev->connected)
16129 if (!rdev->ops->set_rekey_data)
16141 if (wdev->iftype != NL80211_IFTYPE_AP &&
16146 if (wdev->unexpected_nlportid)
16165 if (wdev->iftype != NL80211_IFTYPE_AP &&
16169 if (!info->attrs[NL80211_ATTR_MAC])
16172 if (!rdev->ops->probe_client)
16176 if (!msg)
16181 if (!hdr) {
16189 if (err)
16192 if (nla_put_u64_64bit(msg, NL80211_ATTR_COOKIE, cookie,
16213 if (!(rdev->wiphy.flags & WIPHY_FLAG_REPORTS_OBSS))
16217 if (!nreg)
16220 /* First, check if already registered. */
16223 if (reg->nlportid == info->snd_portid) {
16247 if (!rdev->ops->start_p2p_device)
16250 if (wdev->iftype != NL80211_IFTYPE_P2P_DEVICE)
16253 if (wdev_running(wdev))
16256 if (rfkill_blocked(rdev->wiphy.rfkill))
16260 if (err)
16274 if (wdev->iftype != NL80211_IFTYPE_P2P_DEVICE)
16277 if (!rdev->ops->stop_p2p_device)
16291 /* Check if the frequency is valid for NAN */
16292 if (freq != 5220 && freq != 5745 && freq != 2437)
16296 if (!chan)
16301 /* Check if the channel is allowed */
16302 if (cfg80211_reg_can_beacon(wiphy, &def, NL80211_IFTYPE_NAN))
16313 if (BIT(band) & ~(u32)wiphy->nan_supported_bands)
16316 if (tb[NL80211_NAN_BAND_CONF_FREQ]) {
16319 if (band != NL80211_BAND_5GHZ)
16323 if (!cfg->chan)
16327 if (tb[NL80211_NAN_BAND_CONF_RSSI_CLOSE]) {
16330 if (!tb[NL80211_NAN_BAND_CONF_RSSI_MIDDLE])
16334 if (tb[NL80211_NAN_BAND_CONF_RSSI_MIDDLE]) {
16337 if (!cfg->rssi_close || cfg->rssi_middle >= cfg->rssi_close)
16341 if (tb[NL80211_NAN_BAND_CONF_WAKE_DW]) {
16345 if (band == NL80211_BAND_2GHZ && cfg->awake_dw_interval == 0)
16365 if (info->attrs[NL80211_ATTR_NAN_MASTER_PREF]) {
16372 if (info->attrs[NL80211_ATTR_BANDS]) {
16375 if (bands & ~(u32)wiphy->nan_supported_bands)
16378 if (bands && !(bands & BIT(NL80211_BAND_2GHZ)))
16386 if (conf->bands & BIT(NL80211_BAND_5GHZ) || !conf->bands)
16392 if (!conf->band_cfgs[NL80211_BAND_2GHZ].chan)
16395 if (!info->attrs[NL80211_ATTR_NAN_CONFIG])
16401 if (err)
16405 if (attrs[NL80211_NAN_CONF_CLUSTER_ID] && start) {
16408 } else if (start) {
16416 if (attrs[NL80211_NAN_CONF_EXTRA_ATTRS]) {
16423 if (attrs[NL80211_NAN_CONF_VENDOR_ELEMS]) {
16430 if (attrs[NL80211_NAN_CONF_BAND_CONFIGS]) {
16442 if (err)
16445 if (!tb[NL80211_NAN_BAND_CONF_BAND])
16449 if (conf->bands && !(conf->bands & BIT(band)))
16456 if (err)
16461 if (attrs[NL80211_NAN_CONF_SCAN_PERIOD])
16465 if (attrs[NL80211_NAN_CONF_SCAN_DWELL_TIME])
16469 if (attrs[NL80211_NAN_CONF_DISCOVERY_BEACON_INTERVAL])
16473 if (attrs[NL80211_NAN_CONF_NOTIFY_DW])
16478 if (!conf->band_cfgs[NL80211_BAND_5GHZ].chan &&
16480 /* If no 5GHz channel is specified use default, if possible */
16483 if (!conf->band_cfgs[NL80211_BAND_5GHZ].chan)
16487 /* Return error if user space asked explicitly for 5 GHz */
16488 if (!conf->band_cfgs[NL80211_BAND_5GHZ].chan &&
16497 if (changed_flags)
16510 if (wdev->iftype != NL80211_IFTYPE_NAN)
16513 if (wdev_running(wdev))
16516 if (rfkill_blocked(rdev->wiphy.rfkill))
16520 if (!info->attrs[NL80211_ATTR_NAN_MASTER_PREF])
16524 if (err)
16528 if (err)
16542 if (wdev->iftype != NL80211_IFTYPE_NAN)
16564 if (len >= U8_MAX)
16579 if (n_entries < 0)
16585 if (!filter)
16591 if (!filter[i].filter)
16597 if (tx) {
16628 if (wdev->iftype != NL80211_IFTYPE_NAN)
16631 if (!wdev_running(wdev))
16634 if (!info->attrs[NL80211_ATTR_NAN_FUNC])
16641 if (err)
16645 if (!func)
16650 if (!tb[NL80211_NAN_FUNC_TYPE]) {
16658 if (!tb[NL80211_NAN_FUNC_SERVICE_ID]) {
16669 if (tb[NL80211_NAN_FUNC_SERVICE_INFO]) {
16676 if (!func->serv_spec_info) {
16682 if (tb[NL80211_NAN_FUNC_TTL])
16687 if (!tb[NL80211_NAN_FUNC_PUBLISH_TYPE]) {
16697 if ((!(func->publish_type & NL80211_NAN_SOLICITED_PUBLISH)) &&
16708 if (!tb[NL80211_NAN_FUNC_FOLLOW_UP_ID] ||
16722 if (func->ttl) {
16732 if (tb[NL80211_NAN_FUNC_SRF]) {
16740 if (err)
16746 if (srf_tb[NL80211_NAN_SRF_BF]) {
16747 if (srf_tb[NL80211_NAN_SRF_MAC_ADDRS] ||
16758 if (!func->srf_bf) {
16770 if (!mac_attr) {
16776 if (n_entries <= 0) {
16784 if (!func->srf_macs) {
16795 if (tb[NL80211_NAN_FUNC_TX_MATCH_FILTER]) {
16798 if (err)
16802 if (tb[NL80211_NAN_FUNC_RX_MATCH_FILTER]) {
16805 if (err)
16810 if (!msg) {
16818 if (WARN_ON(!hdr)) {
16825 if (err < 0) {
16832 if (nla_put_u64_64bit(msg, NL80211_ATTR_COOKIE, func->cookie,
16837 if (!func_attr)
16840 if (nla_put_u8(msg, NL80211_NAN_FUNC_INSTANCE_ID,
16861 if (wdev->iftype != NL80211_IFTYPE_NAN)
16864 if (!wdev_running(wdev))
16867 if (!info->attrs[NL80211_ATTR_COOKIE])
16886 if (wdev->iftype != NL80211_IFTYPE_NAN)
16889 if (!wdev_running(wdev))
16893 if (err)
16896 if (!changed)
16908 if (wdev->iftype != NL80211_IFTYPE_PD)
16911 if (wdev_running(wdev))
16914 if (rfkill_blocked(rdev->wiphy.rfkill))
16917 if (!rdev->ops->start_pd)
16921 if (err)
16934 if (wdev->iftype != NL80211_IFTYPE_PD)
16951 if (WARN_ON(wiphy->nan_capa.flags & WIPHY_NAN_FLAGS_USERSPACE_DE))
16954 if (WARN_ON(!match->inst_id || !match->peer_inst_id || !match->addr))
16958 if (!msg)
16962 if (!hdr) {
16967 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
16974 if (nla_put_u64_64bit(msg, NL80211_ATTR_COOKIE, match->cookie,
16980 if (!match_attr)
16985 if (!local_func_attr)
16988 if (nla_put_u8(msg, NL80211_NAN_FUNC_INSTANCE_ID, match->inst_id))
16995 if (!peer_func_attr)
16998 if (nla_put_u8(msg, NL80211_NAN_FUNC_TYPE, match->type) ||
17002 if (match->info && match->info_len &&
17011 if (!wdev->owner_nlportid)
17036 if (WARN_ON(wiphy->nan_capa.flags & WIPHY_NAN_FLAGS_USERSPACE_DE))
17039 if (WARN_ON(!inst_id))
17043 if (!msg)
17047 if (!hdr) {
17052 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
17059 if (nla_put_u64_64bit(msg, NL80211_ATTR_COOKIE, cookie,
17064 if (!func_attr)
17067 if (nla_put_u8(msg, NL80211_NAN_FUNC_INSTANCE_ID, inst_id) ||
17074 if (!wdev->owner_nlportid)
17098 /* Can happen if we stopped NAN */
17099 if (!wdev->u.nan.sched_update_pending)
17104 if (!wdev->owner_nlportid)
17108 if (!msg)
17112 if (!hdr)
17115 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
17146 if (!channel_parsed)
17151 if (ret)
17156 if (ret)
17159 if (chandef.chan->band == NL80211_BAND_6GHZ) {
17165 if (!cfg80211_reg_can_beacon(&rdev->wiphy, &chandef,
17172 if (local) {
17174 if (cfg80211_chandef_compatible(&nan_channels[i].chandef,
17183 if (!channel_parsed[NL80211_ATTR_NAN_CHANNEL_ENTRY]) {
17192 if (!channel_parsed[NL80211_ATTR_NAN_RX_NSS]) {
17202 if ((local && nan_channels[index].rx_nss > n_rx_nss) ||
17219 if (WARN_ON(nla_len(slots_attr) != CFG80211_NAN_SCHED_NUM_TIME_SLOTS))
17225 if (schedule[slot] != NL80211_NAN_SCHED_NOT_AVAIL_SLOT &&
17246 if (ret)
17249 if (!tb[NL80211_NAN_PEER_MAP_ATTR_MAP_ID] ||
17271 if (map1->map_id == map2->map_id) {
17279 if (map1->schedule[i] == NL80211_NAN_SCHED_NOT_AVAIL_SLOT)
17286 if (ch2 == NL80211_NAN_SCHED_NOT_AVAIL_SLOT)
17289 if (cfg80211_chandef_compatible(&nan_channels[ch1].chandef,
17305 if (wiphy->n_radio > 1)
17309 if (map1->schedule[i] != NL80211_NAN_SCHED_NOT_AVAIL_SLOT &&
17331 if (wdev->iftype != NL80211_IFTYPE_NAN)
17334 if (!info->attrs[NL80211_ATTR_MAC] ||
17346 if (!((info->attrs[NL80211_ATTR_NAN_SEQ_ID] &&
17359 if (n_channels && n_channels > wdev->u.nan.n_channels * 4 * 2) {
17367 if (n_channels) {
17370 if (!nan_channels)
17381 if (ret)
17386 if (cfg80211_chandef_compatible(&nan_channels[i].chandef,
17392 if (!compatible) {
17409 if (info->attrs[NL80211_ATTR_NAN_ULW]) {
17418 if (info->attrs[NL80211_ATTR_NAN_PEER_MAPS]) {
17422 if (n_maps >= ARRAY_SIZE(sched.maps)) {
17430 if (ret)
17439 if (ret)
17453 if (sched.maps[m].schedule[s] == ch) {
17459 if (!scheduled) {
17472 if (!sched->n_channels)
17476 if (sched->schedule[i] != NL80211_NAN_SCHED_NOT_AVAIL_SLOT)
17493 if (wdev->iftype != NL80211_IFTYPE_NAN)
17496 if (!wdev_running(wdev))
17499 if (!info->attrs[NL80211_ATTR_NAN_TIME_SLOTS])
17509 if (!sched)
17519 if (ret)
17528 if (ret)
17536 if (sched_empty) {
17537 if (sched->deferred) {
17539 "Schedule cannot be deferred if all time slots are unavailable");
17543 if (info->attrs[NL80211_ATTR_NAN_AVAIL_BLOB]) {
17545 "NAN Availability blob must be empty if all time slots are unavailable");
17549 if (!info->attrs[NL80211_ATTR_NAN_AVAIL_BLOB]) {
17571 if (!msg)
17576 if (!hdr)
17579 if (nla_put_u32(msg, NL80211_ATTR_PROTOCOL_FEATURES,
17597 if (!rdev->ops->update_ft_ies)
17600 if (!info->attrs[NL80211_ATTR_MDID] ||
17621 if (!rdev->ops->crit_proto_start)
17624 if (WARN_ON(!rdev->ops->crit_proto_stop))
17627 if (rdev->crit_proto_nlportid)
17630 /* determine protocol if provided */
17631 if (info->attrs[NL80211_ATTR_CRIT_PROT_ID])
17634 if (proto >= NUM_NL80211_CRIT_PROTO)
17638 if (!info->attrs[NL80211_ATTR_MAX_CRIT_PROT_DURATION])
17645 if (!ret)
17657 if (!rdev->ops->crit_proto_stop)
17660 if (rdev->crit_proto_nlportid) {
17671 if (vcmd->policy == VENDOR_CMD_RAW_DATA) {
17672 if (attr->nla_type & NLA_F_NESTED) {
17681 if (!(attr->nla_type & NLA_F_NESTED)) {
17698 if (!rdev->wiphy.vendor_commands)
17701 if (IS_ERR(wdev)) {
17703 if (err != -EINVAL)
17706 } else if (wdev->wiphy != &rdev->wiphy) {
17710 if (!info->attrs[NL80211_ATTR_VENDOR_ID] ||
17723 if (vcmd->info.vendor_id != vid || vcmd->info.subcmd != subcmd)
17726 if (vcmd->flags & (WIPHY_VENDOR_CMD_NEED_WDEV |
17728 if (!wdev)
17730 if (vcmd->flags & WIPHY_VENDOR_CMD_NEED_NETDEV &&
17734 if (vcmd->flags & WIPHY_VENDOR_CMD_NEED_RUNNING) {
17735 if (!wdev_running(wdev))
17742 if (!vcmd->doit)
17745 if (info->attrs[NL80211_ATTR_VENDOR_DATA]) {
17752 if (err)
17778 if (cb->args[0]) {
17783 if (!wiphy)
17791 if (!net_eq(wiphy_net(wiphy), sock_net(skb->sk)))
17797 if (cb->args[1]) {
17799 if (tmp->identifier == cb->args[1] - 1) {
17811 if (!attrbuf)
17818 if (err)
17821 if (!attrbuf[NL80211_ATTR_VENDOR_ID] ||
17828 if (IS_ERR(*wdev))
17832 if (IS_ERR(*rdev)) {
17845 if (vcmd->info.vendor_id != vid || vcmd->info.subcmd != subcmd)
17848 if (!vcmd->dumpit) {
17857 if (vcmd_idx < 0) {
17862 if (attrbuf[NL80211_ATTR_VENDOR_DATA]) {
17870 if (err)
17876 /* add 1 to know if it was NULL */
17903 if (err)
17911 if (vcmd->flags & (WIPHY_VENDOR_CMD_NEED_WDEV |
17913 if (!wdev) {
17917 if (vcmd->flags & WIPHY_VENDOR_CMD_NEED_NETDEV &&
17923 if (vcmd->flags & WIPHY_VENDOR_CMD_NEED_RUNNING) {
17924 if (!wdev_running(wdev)) {
17935 if (!hdr)
17938 if (nla_put_u32(skb, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
17948 if (!vendor_data) {
17957 if (err == -ENOBUFS || err == -ENOENT) {
17960 } else if (err <= 0) {
17981 if (WARN_ON(!rdev->cur_cmd_info))
18000 if (WARN_ON(!rdev->cur_cmd_info)) {
18015 if (WARN_ON(!rdev->cur_cmd_info))
18031 if (!rdev->ops->set_qos_map)
18034 if (info->attrs[NL80211_ATTR_QOS_MAP]) {
18038 if (len % 2)
18042 if (!qos_map)
18046 if (num_des) {
18052 if (qos_map->dscp_exception[des].up > 7) {
18063 if (!ret)
18079 if (!(rdev->wiphy.features & NL80211_FEATURE_SUPPORTS_WMM_ADMISSION))
18082 if (!info->attrs[NL80211_ATTR_TSID] || !info->attrs[NL80211_ATTR_MAC] ||
18090 if (tsid >= IEEE80211_FIRST_TSPEC_TSID) {
18100 if (info->attrs[NL80211_ATTR_ADMITTED_TIME]) {
18103 if (!admitted_time)
18110 if (wdev->connected)
18127 if (!info->attrs[NL80211_ATTR_TSID] || !info->attrs[NL80211_ATTR_MAC])
18147 if (!rdev->ops->tdls_channel_switch ||
18159 if (!info->attrs[NL80211_ATTR_MAC] ||
18165 if (err)
18173 if (chandef.chan->band == NL80211_BAND_2GHZ &&
18179 if (!cfg80211_reg_can_beacon_relax(&rdev->wiphy, &chandef,
18184 if (cfg80211_chandef_dfs_required(wdev->wiphy, &chandef, wdev->iftype))
18200 if (!rdev->ops->tdls_channel_switch ||
18213 if (!info->attrs[NL80211_ATTR_MAC])
18232 if (!rdev->ops->set_multicast_to_unicast)
18235 if (wdev->iftype != NL80211_IFTYPE_AP &&
18252 if (wdev->iftype != NL80211_IFTYPE_STATION &&
18256 if (!wiphy_ext_feature_isset(&rdev->wiphy,
18260 if (!info->attrs[NL80211_ATTR_MAC] || !info->attrs[NL80211_ATTR_PMK])
18263 if (!wdev->connected)
18267 if (memcmp(pmk_conf.aa, wdev->u.client.connected_addr, ETH_ALEN))
18272 if (pmk_conf.pmk_len != WLAN_PMK_LEN &&
18276 if (info->attrs[NL80211_ATTR_PMKR0_NAME])
18290 if (wdev->iftype != NL80211_IFTYPE_STATION &&
18294 if (!wiphy_ext_feature_isset(&rdev->wiphy,
18298 if (!info->attrs[NL80211_ATTR_MAC])
18311 if (!rdev->ops->external_auth)
18314 if (!info->attrs[NL80211_ATTR_SSID] &&
18319 if (!info->attrs[NL80211_ATTR_BSSID])
18322 if (!info->attrs[NL80211_ATTR_STATUS_CODE])
18327 if (info->attrs[NL80211_ATTR_SSID]) {
18329 if (params.ssid.ssid_len == 0)
18341 if (info->attrs[NL80211_ATTR_PMKID])
18362 if (!wiphy_ext_feature_isset(&rdev->wiphy,
18366 if (!rdev->ops->tx_control_port)
18369 if (!info->attrs[NL80211_ATTR_FRAME] ||
18382 if (wdev->u.ibss.current_bss)
18387 if (wdev->connected)
18406 if (!err && !dont_wait_for_ack)
18424 if (wdev->iftype != NL80211_IFTYPE_AP ||
18429 if (err)
18432 if (!ftm_stats.filled)
18436 if (!msg)
18441 if (!hdr)
18444 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex))
18449 if (!ftm_stats_attr)
18453 do { if ((ftm_stats.filled & BIT(NL80211_FTM_STATS_ ## name)) && \
18458 do { if ((ftm_stats.filled & BIT(NL80211_FTM_STATS_ ## name)) && \
18490 if (!rdev->ops->update_owe_info)
18493 if (!info->attrs[NL80211_ATTR_STATUS_CODE] ||
18501 if (info->attrs[NL80211_ATTR_IE]) {
18520 if (!rdev->ops->probe_mesh_link || !rdev->ops->get_station)
18523 if (!info->attrs[NL80211_ATTR_MAC] ||
18529 if (wdev->iftype != NL80211_IFTYPE_MESH_POINT)
18536 if (len < sizeof(struct ethhdr))
18539 if (!ether_addr_equal(buf, dest) || is_multicast_ether_addr(buf) ||
18544 if (err)
18562 if (!attrs[NL80211_TID_CONFIG_ATTR_TIDS])
18569 if (tid_conf->config_override) {
18570 if (rdev->ops->reset_tid_config) {
18573 if (err)
18580 if (attrs[NL80211_TID_CONFIG_ATTR_NOACK]) {
18586 if (attrs[NL80211_TID_CONFIG_ATTR_RETRY_SHORT]) {
18591 if (tid_conf->retry_short > rdev->wiphy.max_data_retry_count)
18595 if (attrs[NL80211_TID_CONFIG_ATTR_RETRY_LONG]) {
18600 if (tid_conf->retry_long > rdev->wiphy.max_data_retry_count)
18604 if (attrs[NL80211_TID_CONFIG_ATTR_AMPDU_CTRL]) {
18610 if (attrs[NL80211_TID_CONFIG_ATTR_RTSCTS_CTRL]) {
18616 if (attrs[NL80211_TID_CONFIG_ATTR_AMSDU_CTRL]) {
18622 if (attrs[NL80211_TID_CONFIG_ATTR_TX_RATE_TYPE]) {
18627 if (tid_conf->txrate_type != NL80211_TX_RATE_AUTOMATIC) {
18632 if (err)
18640 if (peer)
18645 if (tid_conf->mask & ~mask) {
18666 if (!info->attrs[NL80211_ATTR_TID_CONFIG])
18669 if (!rdev->ops->set_tid_config)
18677 if (!tid_config)
18682 if (info->attrs[NL80211_ATTR_MAC])
18690 if (ret)
18696 if (ret)
18719 if (!rdev->ops->color_change)
18722 if (!wiphy_ext_feature_isset(&rdev->wiphy,
18726 if (wdev->iftype != NL80211_IFTYPE_AP)
18729 if (!info->attrs[NL80211_ATTR_COLOR_CHANGE_COUNT] ||
18738 if (!wdev->links[params.link_id].ap.beacon_interval)
18744 if (err)
18748 if (!tb)
18754 if (err)
18760 if (err)
18763 if (!tb[NL80211_ATTR_CNTDWN_OFFS_BEACON]) {
18768 if (nla_len(tb[NL80211_ATTR_CNTDWN_OFFS_BEACON]) != sizeof(u16)) {
18774 if (offset >= params.beacon_color_change.tail_len) {
18779 if (params.beacon_color_change.tail[offset] != params.count) {
18786 if (tb[NL80211_ATTR_CNTDWN_OFFS_PRESP]) {
18787 if (nla_len(tb[NL80211_ATTR_CNTDWN_OFFS_PRESP]) !=
18794 if (offset >= params.beacon_color_change.probe_resp_len) {
18799 if (params.beacon_color_change.probe_resp[offset] !=
18808 if (info->attrs[NL80211_ATTR_UNSOL_BCAST_PROBE_RESP]) {
18812 if (err)
18835 if (!info->attrs[NL80211_ATTR_MAC] ||
18858 if (!(wdev->wiphy->flags & WIPHY_FLAG_SUPPORTS_MLO))
18868 if (!info->attrs[NL80211_ATTR_MAC] ||
18877 if (ret) {
18891 /* cannot remove if there's no link */
18892 if (!info->attrs[NL80211_ATTR_MLO_LINK_ID])
18916 if ((add && !rdev->ops->add_link_station) ||
18920 if (add && !info->attrs[NL80211_ATTR_MAC])
18923 if (!info->attrs[NL80211_ATTR_MLD_ADDR])
18926 if (add && !info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES])
18931 if (info->attrs[NL80211_ATTR_MAC]) {
18933 if (!is_valid_ether_addr(params.link_mac))
18937 if (!info->attrs[NL80211_ATTR_MLO_LINK_ID])
18942 if (info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]) {
18949 if (info->attrs[NL80211_ATTR_HT_CAPABILITY])
18953 if (info->attrs[NL80211_ATTR_VHT_CAPABILITY])
18957 if (info->attrs[NL80211_ATTR_HE_CAPABILITY]) {
18963 if (info->attrs[NL80211_ATTR_EHT_CAPABILITY]) {
18969 if (!ieee80211_eht_capa_size_ok((const u8 *)params.he_capa,
18977 if (info->attrs[NL80211_ATTR_UHR_CAPABILITY]) {
18978 if (!params.eht_capa)
18987 if (info->attrs[NL80211_ATTR_HE_6GHZ_CAPABILITY])
18991 if (info->attrs[NL80211_ATTR_OPMODE_NOTIF]) {
18999 if (err)
19002 if (add)
19027 if (!rdev->ops->del_link_station)
19030 if (!info->attrs[NL80211_ATTR_MLD_ADDR] ||
19047 if (!rdev->wiphy.hw_timestamp_max_peers)
19050 if (!info->attrs[NL80211_ATTR_MAC] &&
19054 if (info->attrs[NL80211_ATTR_MAC])
19071 if (wdev->iftype != NL80211_IFTYPE_STATION &&
19075 if (!wdev->connected)
19078 if (!info->attrs[NL80211_ATTR_MLO_TTLM_DLINK] ||
19102 if (!wdev->valid_links)
19105 if (dev->ieee80211_ptr->conn_owner_nlportid &&
19109 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION &&
19114 if (info->attrs[NL80211_ATTR_MLO_LINKS]) {
19119 if (err)
19124 if (!req.add_links[link_id].bss)
19130 if (info->attrs[NL80211_ATTR_MLO_RECONF_REM_LINKS])
19137 if ((add_links & req.rem_links) || !(add_links | req.rem_links) ||
19144 if (info->attrs[NL80211_ATTR_EXT_MLD_CAPA_AND_OPS])
19165 if (wdev->iftype != NL80211_IFTYPE_STATION &&
19169 if (!wdev->connected)
19184 /* If a netdev is associated, it must be UP, P2P must be started */
19282 if (WARN_ON(ops->internal_flags >= ARRAY_SIZE(nl80211_internal_flags)))
19288 if (internal_flags & NL80211_FLAG_NEED_WIPHY) {
19290 if (IS_ERR(rdev)) {
19295 } else if (internal_flags & NL80211_FLAG_NEED_NETDEV ||
19299 if (IS_ERR(wdev)) {
19308 if (internal_flags & NL80211_FLAG_NEED_NETDEV) {
19309 if (!dev) {
19319 if (internal_flags & NL80211_FLAG_CHECK_NETDEV_UP &&
19328 if (internal_flags & NL80211_FLAG_MLO_VALID_LINK_ID) {
19331 if (!wdev) {
19337 if (wdev->valid_links &&
19345 if (!wdev->valid_links && link_id) {
19351 if (internal_flags & NL80211_FLAG_MLO_UNSUPPORTED) {
19352 if (info->attrs[NL80211_ATTR_MLO_LINK_ID] ||
19359 if (rdev && !(internal_flags & NL80211_FLAG_NO_WIPHY_MTX)) {
19364 if (!(internal_flags & NL80211_FLAG_NEED_RTNL))
19380 if (info->user_ptr[1]) {
19381 if (internal_flags & NL80211_FLAG_NEED_WDEV) {
19390 if (info->user_ptr[0] &&
19399 if (internal_flags & NL80211_FLAG_NEED_RTNL)
19402 /* If needed, clear the netlink message payload from the SKB
19407 if (internal_flags & NL80211_FLAG_CLEAR_SKB) {
19420 if (!sar_specs || !spec)
19423 if (!spec[NL80211_SAR_ATTR_SPECS_POWER] ||
19429 /* check if range_index exceeds num_freq_ranges */
19430 if (range_index >= rdev->wiphy.sar_capa->num_freq_ranges)
19433 /* check if range_index duplicates */
19435 if (sar_specs->sub_specs[i].freq_range_index == range_index)
19458 if (!rdev->wiphy.sar_capa || !rdev->ops->set_sar_specs)
19461 if (!info->attrs[NL80211_ATTR_SAR_SPEC])
19468 if (!tb[NL80211_SAR_ATTR_TYPE] || !tb[NL80211_SAR_ATTR_SPECS])
19472 if (type != rdev->wiphy.sar_capa->type)
19479 if (specs > rdev->wiphy.sar_capa->num_freq_ranges)
19483 if (!sar_spec)
19495 if (nl80211_set_sar_sub_specs(rdev, sar_spec,
19659 * whether MAC address is passed or not. If MAC address is
20452 if (!msg)
20455 if (nl80211_send_wiphy(rdev, cmd, msg, 0, 0, 0, &state) < 0) {
20471 if (!msg)
20474 if (nl80211_send_iface(msg, 0, 0, 0, rdev, wdev, cmd) < 0) {
20491 if (WARN_ON(!req))
20495 if (!nest)
20498 if (nla_put(msg, i, req->req.ssids[i].ssid_len,
20504 if (req->req.flags & NL80211_SCAN_FLAG_FREQ_KHZ) {
20506 if (!nest)
20509 if (nla_put_u32(msg, i,
20517 if (!nest)
20520 if (nla_put_u32(msg, i,
20527 if (req->req.ie &&
20531 if (req->req.flags &&
20537 if (info->scan_start_tsf &&
20558 if (!hdr)
20561 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
20586 if (!hdr)
20589 if (nla_put_u32(msg, NL80211_ATTR_WIPHY,
20610 if (!msg)
20613 if (nl80211_prep_scan_msg(msg, rdev, wdev, 0, 0, 0,
20629 if (!msg)
20632 if (nl80211_prep_scan_msg(msg, rdev, wdev, 0, 0, 0,
20646 if (!msg)
20658 if (!msg)
20661 if (nl80211_prep_sched_scan_msg(msg, req, cmd) < 0) {
20674 if (nla_put_u8(msg, NL80211_ATTR_REG_INITIATOR, request->initiator))
20677 if (request->alpha2[0] == '0' && request->alpha2[1] == '0') {
20678 if (nla_put_u8(msg, NL80211_ATTR_REG_TYPE,
20681 } else if (request->alpha2[0] == '9' && request->alpha2[1] == '9') {
20682 if (nla_put_u8(msg, NL80211_ATTR_REG_TYPE,
20685 } else if ((request->alpha2[0] == '9' && request->alpha2[1] == '8') ||
20687 if (nla_put_u8(msg, NL80211_ATTR_REG_TYPE,
20691 if (nla_put_u8(msg, NL80211_ATTR_REG_TYPE,
20698 if (request->wiphy_idx != WIPHY_IDX_INVALID) {
20701 if (wiphy &&
20705 if (wiphy &&
20728 if (!msg)
20732 if (!hdr)
20735 if (!nl80211_reg_change_event_fill(msg, request))
20768 if (!msg)
20772 if (!hdr) {
20777 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
20785 if (event->reconnect &&
20789 if (event->uapsd_queues >= 0) {
20792 if (!nla_wmm)
20795 if (nla_put_u8(msg, NL80211_STA_WME_UAPSD_QUEUES,
20885 if (WARN_ON(len < 2))
20888 if (ieee80211_is_deauth(mgmt->frame_control)) {
20890 } else if (ieee80211_is_disassoc(mgmt->frame_control)) {
20892 } else if (ieee80211_is_beacon(mgmt->frame_control)) {
20893 if (wdev->unprot_beacon_reported &&
20915 if (!msg)
20919 if (!hdr) {
20924 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
20968 if (cr->valid_links) {
20987 if (!msg)
20991 if (!hdr) {
20996 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
21027 if (cr->valid_links) {
21032 if (!nested)
21042 if (!nested_mlo_links)
21045 if (nla_put_u8(msg, NL80211_ATTR_MLO_LINK_ID, link) ||
21085 if (info->valid_links) {
21103 if (!msg)
21107 if (!hdr) {
21112 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
21133 if (info->valid_links) {
21138 if (!nested)
21148 if (!nested_mlo_links)
21151 if (nla_put_u8(msg, NL80211_ATTR_MLO_LINK_ID, link) ||
21183 if (!msg)
21187 if (!hdr) {
21192 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
21197 if (td_bitmap_len > 0 && td_bitmap &&
21219 if (!msg)
21223 if (!hdr) {
21228 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
21259 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION &&
21263 if (WARN_ON(!wdev->valid_links || !link_mask ||
21272 if (!msg)
21276 if (!hdr) {
21281 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
21286 if (!links)
21294 if (!link)
21297 if (nla_put_u8(msg, NL80211_ATTR_MLO_LINK_ID, link_id))
21342 if (!msg)
21346 if (!hdr) {
21351 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
21375 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_MESH_POINT))
21381 if (!msg)
21385 if (!hdr) {
21390 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
21419 if (!msg)
21423 if (!hdr) {
21428 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
21456 if (!msg)
21460 if (!hdr) {
21469 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, get_wiphy_idx(wiphy)))
21474 if (!nl_freq)
21477 if (nl80211_msg_put_channel(msg, wiphy, channel_before, false))
21483 if (!nl_freq)
21486 if (nl80211_msg_put_channel(msg, wiphy, channel_after, false))
21511 if (!msg)
21515 if (!hdr) {
21520 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
21532 if (cmd == NL80211_CMD_REMAIN_ON_CHANNEL &&
21558 if (!msg)
21562 if (!hdr) {
21567 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
21634 if (!msg)
21637 if (nl80211_send_station(msg, NL80211_CMD_NEW_STATION, 0, 0, 0,
21656 if (!sinfo)
21662 if (!msg) {
21667 if (nl80211_send_station(msg, NL80211_CMD_DEL_STATION, 0, 0, 0,
21688 if (!msg)
21692 if (!hdr) {
21697 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) ||
21722 if (!nlportid)
21726 if (!msg)
21730 if (!hdr) {
21735 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
21759 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_AP &&
21780 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_AP &&
21803 if (!msg)
21807 if (!hdr) {
21812 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
21855 if (command == NL80211_CMD_FRAME_TX_STATUS)
21863 if (!msg)
21867 if (!hdr) {
21872 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
21939 if (!nlportid)
21943 if (!msg)
21947 if (!hdr) {
21952 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
21965 if (!frame)
21999 if (!msg)
22005 if (!cb[0]) {
22010 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
22014 if (mac && nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, mac))
22018 if (!cb[1])
22052 if (WARN_ON(rssi_event != NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW &&
22058 if (cqm_config) {
22078 if (!cqm_config)
22081 if (cqm_config->use_range_api)
22088 if (!msg)
22091 if (nla_put_u32(msg, NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT,
22095 if (rssi_level && nla_put_s32(msg, NL80211_ATTR_CQM_RSSI_LEVEL,
22114 if (!msg)
22117 if (nla_put_u32(msg, NL80211_ATTR_CQM_TXE_PKTS, num_packets))
22120 if (nla_put_u32(msg, NL80211_ATTR_CQM_TXE_RATE, rate))
22123 if (nla_put_u32(msg, NL80211_ATTR_CQM_TXE_INTVL, intvl))
22142 if (!msg)
22145 if (nla_put_u32(msg, NL80211_ATTR_CQM_PKT_LOSS_EVENT, num_packets))
22161 if (!msg)
22164 if (nla_put_flag(msg, NL80211_ATTR_CQM_BEACON_LOSS_EVENT))
22184 if (!msg)
22188 if (!hdr) {
22193 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
22199 if (!rekey_attr)
22202 if (nla_put(msg, NL80211_REKEY_DATA_REPLAY_CTR,
22240 if (!msg)
22244 if (!hdr) {
22249 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
22254 if (!attr)
22257 if (nla_put_u32(msg, NL80211_PMKSA_CANDIDATE_INDEX, index) ||
22300 if (!msg)
22304 if (!hdr) {
22309 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex))
22312 if (wdev->valid_links &&
22316 if (nl80211_send_chandef(msg, chandef))
22319 if (notif == NL80211_CMD_CH_SWITCH_STARTED_NOTIFY) {
22320 if (nla_put_u32(msg, NL80211_ATTR_CH_SWITCH_COUNT, count))
22322 if (quiet &&
22353 if (!WARN_ON(!wdev->links[link_id].client.current_bss))
22393 if (!msg)
22397 if (!hdr)
22400 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx))
22403 if (nl80211_send_chandef(msg, chandef))
22406 if (nla_put_u32(msg, NL80211_ATTR_INCUMBENT_SIGNAL_INTERFERENCE_BITMAP,
22457 if (!msg)
22461 if (!hdr)
22464 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex))
22467 if (wdev->valid_links &&
22471 if (cmd == NL80211_CMD_COLOR_CHANGE_STARTED &&
22475 if (cmd == NL80211_CMD_OBSS_COLOR_COLLISION &&
22501 if (!msg)
22505 if (!hdr) {
22510 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx))
22514 if (netdev) {
22517 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) ||
22523 if (rdev->background_radar_wdev &&
22526 if (nla_put_flag(msg, NL80211_ATTR_RADAR_BACKGROUND))
22530 if (nla_put_u32(msg, NL80211_ATTR_RADAR_EVENT, event))
22533 if (nl80211_send_chandef(msg, chandef))
22555 if (WARN_ON(!mac))
22559 if (!msg)
22563 if (!hdr) {
22568 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx))
22571 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex))
22574 if (nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, mac))
22577 if ((sta_opmode->changed & STA_OPMODE_SMPS_MODE_CHANGED) &&
22581 if ((sta_opmode->changed & STA_OPMODE_MAX_BW_CHANGED) &&
22585 if ((sta_opmode->changed & STA_OPMODE_N_SS_CHANGED) &&
22614 if (!msg)
22618 if (!hdr) {
22623 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
22657 if (!msg) {
22663 if (!hdr)
22666 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
22700 if (!nl_results)
22707 if (!nl_match)
22712 * cfg80211 structure. If a driver can't pass the
22717 if (nla_put(msg, NL80211_ATTR_SSID, match->ssid.ssid_len,
22723 if (match->n_channels) {
22726 if (!nl_freqs) {
22732 if (nla_put_u32(msg, j, match->channels[j])) {
22761 if (wakeup)
22765 if (!msg)
22769 if (!hdr)
22772 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
22777 if (wdev->netdev && nla_put_u32(msg, NL80211_ATTR_IFINDEX,
22781 if (wakeup) {
22786 if (!reasons)
22789 if (wakeup->disconnect &&
22792 if (wakeup->magic_pkt &&
22795 if (wakeup->gtk_rekey_failure &&
22798 if (wakeup->eap_identity_req &&
22801 if (wakeup->four_way_handshake &&
22804 if (wakeup->rfkill_release &&
22808 if (wakeup->pattern_idx >= 0 &&
22813 if (wakeup->tcp_match &&
22817 if (wakeup->tcp_connlost &&
22821 if (wakeup->tcp_nomoretokens &&
22826 if (wakeup->unprot_deauth_disassoc &&
22831 if (wakeup->packet) {
22835 if (!wakeup->packet_80211) {
22842 if (wakeup->packet_len &&
22846 if (nla_put(msg, pkt_attr, wakeup->packet_present_len,
22851 if (wakeup->net_detect &&
22883 if (!msg)
22887 if (!hdr) {
22892 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
22920 if (state != NETLINK_URELEASE || notify->protocol != NETLINK_GENERIC)
22931 if (sched_scan_req->owner_nlportid == notify->portid) {
22941 if (wdev->owner_nlportid == notify->portid) {
22944 } else if (wdev->conn_owner_nlportid == notify->portid) {
22954 if (reg->nlportid == notify->portid) {
22987 if (!ft_event->target_ap)
22992 if (!msg)
22996 if (!hdr)
22999 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
23004 if (ft_event->ies &&
23007 if (ft_event->ric_ies &&
23030 if (!rdev->crit_proto_nlportid)
23037 if (!msg)
23041 if (!hdr)
23044 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
23067 if (!msg)
23071 if (!hdr)
23074 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
23100 if (!wdev->conn_owner_nlportid)
23104 if (!msg)
23108 if (!hdr)
23119 if (params->key_mgmt_suite == WLAN_AKM_SUITE_SAE) {
23120 if (nla_put_be32(msg, NL80211_ATTR_AKM_SUITES,
23124 if (nla_put_u32(msg, NL80211_ATTR_AKM_SUITES,
23129 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
23163 if (!msg)
23167 if (!hdr)
23170 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
23175 if (!owe_info->ie_len ||
23179 if (owe_info->assoc_link_id != -1) {
23180 if (nla_put_u8(msg, NL80211_ATTR_MLO_LINK_ID,
23184 if (!is_zero_ether_addr(owe_info->peer_mld_addr) &&
23206 /* Schedule channels check if NO_IR or DFS relaxations are supported */
23207 if (wdev->iftype == NL80211_IFTYPE_STATION &&
23227 if (!msg)
23231 if (!hdr) {
23236 if (enabled && nla_put_flag(msg, NL80211_ATTR_EPCS))
23259 if (!wdev->owner_nlportid)
23263 if (!msg)
23268 if (!hdr)
23271 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
23302 if (!msg)
23306 if (!hdr)
23309 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
23318 if (!wdev->owner_nlportid)
23341 if (!wdev->owner_nlportid)
23349 if (!msg)
23353 if (!hdr)
23356 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
23386 if (!wdev->owner_nlportid)
23390 if (!msg)
23394 if (!hdr)
23397 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
23403 if (!chan_attr)
23406 if (nl80211_send_chandef(msg, chandef))
23429 if (err)
23433 if (err)