Lines Matching refs:attrs
68 struct net *netns, struct nlattr **attrs)
71 bool have_ifidx = attrs[NL80211_ATTR_IFINDEX];
72 bool have_wdev_id = attrs[NL80211_ATTR_WDEV];
81 ifidx = nla_get_u32(attrs[NL80211_ATTR_IFINDEX]);
83 wdev_id = nla_get_u64(attrs[NL80211_ATTR_WDEV]);
140 __cfg80211_rdev_from_attrs(struct net *netns, struct nlattr **attrs)
147 if (!attrs[NL80211_ATTR_WIPHY] &&
148 !attrs[NL80211_ATTR_IFINDEX] &&
149 !attrs[NL80211_ATTR_WDEV])
152 if (attrs[NL80211_ATTR_WIPHY])
154 nla_get_u32(attrs[NL80211_ATTR_WIPHY]));
156 if (attrs[NL80211_ATTR_WDEV]) {
157 u64 wdev_id = nla_get_u64(attrs[NL80211_ATTR_WDEV]);
180 if (attrs[NL80211_ATTR_IFINDEX]) {
181 int ifindex = nla_get_u32(attrs[NL80211_ATTR_IFINDEX]);
222 return __cfg80211_rdev_from_attrs(netns, info->attrs);
1256 * @attrs: attributes to look at
1265 static unsigned int nl80211_link_id(struct nlattr **attrs)
1267 struct nlattr *linkid = attrs[NL80211_ATTR_MLO_LINK_ID];
1275 static int nl80211_link_id_or_invalid(struct nlattr **attrs)
1277 struct nlattr *linkid = attrs[NL80211_ATTR_MLO_LINK_ID];
1356 if (info->attrs[NL80211_ATTR_KEY_DATA]) {
1357 k->p.key = nla_data(info->attrs[NL80211_ATTR_KEY_DATA]);
1358 k->p.key_len = nla_len(info->attrs[NL80211_ATTR_KEY_DATA]);
1361 if (info->attrs[NL80211_ATTR_KEY_SEQ]) {
1362 k->p.seq = nla_data(info->attrs[NL80211_ATTR_KEY_SEQ]);
1363 k->p.seq_len = nla_len(info->attrs[NL80211_ATTR_KEY_SEQ]);
1366 if (info->attrs[NL80211_ATTR_KEY_IDX])
1367 k->idx = nla_get_u8(info->attrs[NL80211_ATTR_KEY_IDX]);
1369 if (info->attrs[NL80211_ATTR_KEY_CIPHER])
1370 k->p.cipher = nla_get_u32(info->attrs[NL80211_ATTR_KEY_CIPHER]);
1372 k->def = !!info->attrs[NL80211_ATTR_KEY_DEFAULT];
1373 k->defmgmt = !!info->attrs[NL80211_ATTR_KEY_DEFAULT_MGMT];
1382 if (info->attrs[NL80211_ATTR_KEY_TYPE])
1383 k->type = nla_get_u32(info->attrs[NL80211_ATTR_KEY_TYPE]);
1385 if (info->attrs[NL80211_ATTR_KEY_DEFAULT_TYPES]) {
1389 info->attrs[NL80211_ATTR_KEY_DEFAULT_TYPES],
1410 if (info->attrs[NL80211_ATTR_KEY])
1411 err = nl80211_parse_key_new(info, info->attrs[NL80211_ATTR_KEY], k);
1466 struct nlattr *keys = info->attrs[NL80211_ATTR_KEYS];
3219 *punct_bitmap = nla_get_u32(info->attrs[NL80211_ATTR_PUNCT_BITMAP]);
3231 struct nlattr **attrs = info->attrs;
3234 if (!attrs[NL80211_ATTR_WIPHY_FREQ]) {
3235 NL_SET_ERR_MSG_ATTR(extack, attrs[NL80211_ATTR_WIPHY_FREQ],
3241 nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ]));
3242 if (info->attrs[NL80211_ATTR_WIPHY_FREQ_OFFSET])
3244 nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ_OFFSET]);
3255 NL_SET_ERR_MSG_ATTR(extack, attrs[NL80211_ATTR_WIPHY_FREQ],
3260 if (attrs[NL80211_ATTR_WIPHY_CHANNEL_TYPE]) {
3263 chantype = nla_get_u32(attrs[NL80211_ATTR_WIPHY_CHANNEL_TYPE]);
3273 if (attrs[NL80211_ATTR_CENTER_FREQ1] &&
3274 chandef->center_freq1 != nla_get_u32(attrs[NL80211_ATTR_CENTER_FREQ1])) {
3276 attrs[NL80211_ATTR_CENTER_FREQ1],
3281 if (attrs[NL80211_ATTR_CENTER_FREQ2] &&
3282 nla_get_u32(attrs[NL80211_ATTR_CENTER_FREQ2])) {
3284 attrs[NL80211_ATTR_CENTER_FREQ2],
3291 attrs[NL80211_ATTR_WIPHY_CHANNEL_TYPE],
3295 } else if (attrs[NL80211_ATTR_CHANNEL_WIDTH]) {
3297 nla_get_u32(attrs[NL80211_ATTR_CHANNEL_WIDTH]);
3302 attrs[NL80211_ATTR_CHANNEL_WIDTH],
3307 if (attrs[NL80211_ATTR_CENTER_FREQ1]) {
3309 nla_get_u32(attrs[NL80211_ATTR_CENTER_FREQ1]);
3310 if (attrs[NL80211_ATTR_CENTER_FREQ1_OFFSET])
3312 attrs[NL80211_ATTR_CENTER_FREQ1_OFFSET]);
3316 if (attrs[NL80211_ATTR_CENTER_FREQ2])
3318 nla_get_u32(attrs[NL80211_ATTR_CENTER_FREQ2]);
3321 if (info->attrs[NL80211_ATTR_WIPHY_EDMG_CHANNELS]) {
3323 nla_get_u8(info->attrs[NL80211_ATTR_WIPHY_EDMG_CHANNELS]);
3325 if (info->attrs[NL80211_ATTR_WIPHY_EDMG_BW_CONFIG])
3327 nla_get_u8(info->attrs[NL80211_ATTR_WIPHY_EDMG_BW_CONFIG]);
3424 int link_id = nl80211_link_id_or_invalid(info->attrs);
3459 if (info->attrs[NL80211_ATTR_IFINDEX]) {
3460 int ifindex = nla_get_u32(info->attrs[NL80211_ATTR_IFINDEX]);
3471 info->attrs);
3489 if (info->attrs[NL80211_ATTR_WIPHY_NAME])
3491 rdev, nla_data(info->attrs[NL80211_ATTR_WIPHY_NAME]));
3497 if (info->attrs[NL80211_ATTR_WIPHY_TXQ_PARAMS]) {
3523 info->attrs[NL80211_ATTR_WIPHY_TXQ_PARAMS],
3537 nl80211_link_id_or_invalid(info->attrs);
3556 if (info->attrs[NL80211_ATTR_WIPHY_FREQ]) {
3557 int link_id = nl80211_link_id_or_invalid(info->attrs);
3574 if (info->attrs[NL80211_ATTR_WIPHY_TX_POWER_SETTING]) {
3588 type = nla_get_u32(info->attrs[idx]);
3590 if (!info->attrs[NL80211_ATTR_WIPHY_TX_POWER_LEVEL] &&
3598 mbm = nla_get_u32(info->attrs[idx]);
3606 if (info->attrs[NL80211_ATTR_WIPHY_ANTENNA_TX] &&
3607 info->attrs[NL80211_ATTR_WIPHY_ANTENNA_RX]) {
3617 tx_ant = nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_ANTENNA_TX]);
3618 rx_ant = nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_ANTENNA_RX]);
3638 if (info->attrs[NL80211_ATTR_WIPHY_RETRY_SHORT]) {
3640 info->attrs[NL80211_ATTR_WIPHY_RETRY_SHORT]);
3645 if (info->attrs[NL80211_ATTR_WIPHY_RETRY_LONG]) {
3647 info->attrs[NL80211_ATTR_WIPHY_RETRY_LONG]);
3652 if (info->attrs[NL80211_ATTR_WIPHY_FRAG_THRESHOLD]) {
3654 info->attrs[NL80211_ATTR_WIPHY_FRAG_THRESHOLD]);
3672 if (info->attrs[NL80211_ATTR_WIPHY_RTS_THRESHOLD]) {
3674 info->attrs[NL80211_ATTR_WIPHY_RTS_THRESHOLD]);
3678 if (info->attrs[NL80211_ATTR_WIPHY_COVERAGE_CLASS]) {
3679 if (info->attrs[NL80211_ATTR_WIPHY_DYN_ACK]) {
3685 info->attrs[NL80211_ATTR_WIPHY_COVERAGE_CLASS]);
3689 if (info->attrs[NL80211_ATTR_WIPHY_DYN_ACK]) {
3698 if (info->attrs[NL80211_ATTR_TXQ_LIMIT]) {
3705 info->attrs[NL80211_ATTR_TXQ_LIMIT]);
3709 if (info->attrs[NL80211_ATTR_TXQ_MEMORY_LIMIT]) {
3716 info->attrs[NL80211_ATTR_TXQ_MEMORY_LIMIT]);
3720 if (info->attrs[NL80211_ATTR_TXQ_QUANTUM]) {
3727 info->attrs[NL80211_ATTR_TXQ_QUANTUM]);
4087 if (info->attrs[NL80211_ATTR_MNTR_FLAGS]) {
4091 err = parse_monitor_flags(info->attrs[NL80211_ATTR_MNTR_FLAGS],
4103 if (info->attrs[NL80211_ATTR_MU_MIMO_GROUP_DATA]) {
4114 nla_data(info->attrs[NL80211_ATTR_MU_MIMO_GROUP_DATA]);
4125 if (info->attrs[NL80211_ATTR_MU_MIMO_FOLLOW_MAC_ADDR]) {
4135 nla_data(info->attrs[NL80211_ATTR_MU_MIMO_FOLLOW_MAC_ADDR]);
4181 if (info->attrs[NL80211_ATTR_IFTYPE]) {
4182 ntype = nla_get_u32(info->attrs[NL80211_ATTR_IFTYPE]);
4187 if (info->attrs[NL80211_ATTR_MESH_ID]) {
4201 nla_len(info->attrs[NL80211_ATTR_MESH_ID]);
4203 nla_data(info->attrs[NL80211_ATTR_MESH_ID]),
4208 if (info->attrs[NL80211_ATTR_4ADDR]) {
4209 params.use_4addr = !!nla_get_u8(info->attrs[NL80211_ATTR_4ADDR]);
4252 if (!info->attrs[NL80211_ATTR_IFNAME])
4255 if (info->attrs[NL80211_ATTR_IFTYPE])
4256 type = nla_get_u32(info->attrs[NL80211_ATTR_IFTYPE]);
4263 info->attrs[NL80211_ATTR_MAC]) {
4264 nla_memcpy(params.macaddr, info->attrs[NL80211_ATTR_MAC],
4270 if (info->attrs[NL80211_ATTR_4ADDR]) {
4271 params.use_4addr = !!nla_get_u8(info->attrs[NL80211_ATTR_4ADDR]);
4289 nla_data(info->attrs[NL80211_ATTR_IFNAME]),
4299 if (info->attrs[NL80211_ATTR_SOCKET_OWNER])
4304 if (!info->attrs[NL80211_ATTR_MESH_ID])
4310 nla_len(info->attrs[NL80211_ATTR_MESH_ID]);
4312 nla_data(info->attrs[NL80211_ATTR_MESH_ID]),
4395 if (!info->attrs[NL80211_ATTR_NOACK_MAP])
4401 noack_map = nla_get_u16(info->attrs[NL80211_ATTR_NOACK_MAP]);
4499 int link_id = nl80211_link_id_or_invalid(info->attrs);
4512 if (info->attrs[NL80211_ATTR_KEY_IDX]) {
4513 key_idx = nla_get_u8(info->attrs[NL80211_ATTR_KEY_IDX]);
4521 if (info->attrs[NL80211_ATTR_MAC])
4522 mac_addr = nla_data(info->attrs[NL80211_ATTR_MAC]);
4525 if (info->attrs[NL80211_ATTR_KEY_TYPE]) {
4526 u32 kt = nla_get_u32(info->attrs[NL80211_ATTR_KEY_TYPE]);
4588 int link_id = nl80211_link_id_or_invalid(info->attrs);
4683 if (info->attrs[NL80211_ATTR_MAC])
4684 mac_addr = nla_data(info->attrs[NL80211_ATTR_MAC]);
4714 int link_id = nl80211_link_id_or_invalid(info->attrs);
4726 if (info->attrs[NL80211_ATTR_MAC])
4727 mac_addr = nla_data(info->attrs[NL80211_ATTR_MAC]);
4744 info->attrs[NL80211_ATTR_VLAN_ID])
4745 key.p.vlan_id = nla_get_u16(info->attrs[NL80211_ATTR_VLAN_ID]);
4785 int link_id = nl80211_link_id_or_invalid(info->attrs);
4792 if (info->attrs[NL80211_ATTR_MAC])
4793 mac_addr = nla_data(info->attrs[NL80211_ATTR_MAC]);
4875 if (!info->attrs[NL80211_ATTR_ACL_POLICY])
4878 acl_policy = nla_get_u32(info->attrs[NL80211_ATTR_ACL_POLICY]);
4883 if (!info->attrs[NL80211_ATTR_MAC_ADDRS])
4886 n_entries = validate_acl_mac_addrs(info->attrs[NL80211_ATTR_MAC_ADDRS]);
4898 nla_for_each_nested(attr, info->attrs[NL80211_ATTR_MAC_ADDRS], tmp) {
5140 struct nlattr *attrs[],
5190 if (!attrs[attr])
5197 nla_for_each_nested(tx_rates, attrs[attr], rem) {
5364 struct nlattr *attrs,
5373 if (nla_parse_nested(tb, NL80211_MBSSID_CONFIG_ATTR_MAX, attrs, NULL,
5426 nl80211_parse_mbssid_elems(struct wiphy *wiphy, struct nlattr *attrs)
5436 nla_for_each_nested(nl_elems, attrs, rem_elems) {
5447 nla_for_each_nested(nl_elems, attrs, rem_elems) {
5456 nl80211_parse_rnr_elems(struct wiphy *wiphy, struct nlattr *attrs,
5464 nla_for_each_nested(nl_elems, attrs, rem_elems) {
5479 nla_for_each_nested(nl_elems, attrs, rem_elems) {
5487 static int nl80211_parse_he_bss_color(struct nlattr *attrs,
5493 err = nla_parse_nested(tb, NL80211_HE_BSS_COLOR_ATTR_MAX, attrs,
5512 struct nlattr *attrs[],
5521 bcn->link_id = nl80211_link_id(attrs);
5523 if (attrs[NL80211_ATTR_BEACON_HEAD]) {
5524 bcn->head = nla_data(attrs[NL80211_ATTR_BEACON_HEAD]);
5525 bcn->head_len = nla_len(attrs[NL80211_ATTR_BEACON_HEAD]);
5531 if (attrs[NL80211_ATTR_BEACON_TAIL]) {
5532 bcn->tail = nla_data(attrs[NL80211_ATTR_BEACON_TAIL]);
5533 bcn->tail_len = nla_len(attrs[NL80211_ATTR_BEACON_TAIL]);
5540 if (attrs[NL80211_ATTR_IE]) {
5541 bcn->beacon_ies = nla_data(attrs[NL80211_ATTR_IE]);
5542 bcn->beacon_ies_len = nla_len(attrs[NL80211_ATTR_IE]);
5545 if (attrs[NL80211_ATTR_IE_PROBE_RESP]) {
5547 nla_data(attrs[NL80211_ATTR_IE_PROBE_RESP]);
5549 nla_len(attrs[NL80211_ATTR_IE_PROBE_RESP]);
5552 if (attrs[NL80211_ATTR_IE_ASSOC_RESP]) {
5554 nla_data(attrs[NL80211_ATTR_IE_ASSOC_RESP]);
5556 nla_len(attrs[NL80211_ATTR_IE_ASSOC_RESP]);
5559 if (attrs[NL80211_ATTR_PROBE_RESP]) {
5560 bcn->probe_resp = nla_data(attrs[NL80211_ATTR_PROBE_RESP]);
5561 bcn->probe_resp_len = nla_len(attrs[NL80211_ATTR_PROBE_RESP]);
5564 if (attrs[NL80211_ATTR_FTM_RESPONDER]) {
5569 attrs[NL80211_ATTR_FTM_RESPONDER],
5594 if (attrs[NL80211_ATTR_HE_BSS_COLOR]) {
5595 err = nl80211_parse_he_bss_color(attrs[NL80211_ATTR_HE_BSS_COLOR],
5602 if (attrs[NL80211_ATTR_MBSSID_ELEMS]) {
5605 attrs[NL80211_ATTR_MBSSID_ELEMS]);
5612 if (bcn->mbssid_ies && attrs[NL80211_ATTR_EMA_RNR_ELEMS]) {
5615 attrs[NL80211_ATTR_EMA_RNR_ELEMS],
5631 static int nl80211_parse_he_obss_pd(struct nlattr *attrs,
5637 err = nla_parse_nested(tb, NL80211_HE_OBSS_PD_ATTR_MAX, attrs,
5676 struct nlattr *attrs,
5687 ret = nla_parse_nested(tb, NL80211_FILS_DISCOVERY_ATTR_MAX, attrs,
5707 struct nlattr *attrs,
5720 attrs, NULL, NULL);
5933 unsigned int link_id = nl80211_link_id(info->attrs);
5950 if (!info->attrs[NL80211_ATTR_BEACON_INTERVAL] ||
5951 !info->attrs[NL80211_ATTR_DTIM_PERIOD] ||
5952 !info->attrs[NL80211_ATTR_BEACON_HEAD])
5959 err = nl80211_parse_beacon(rdev, info->attrs, ¶ms->beacon,
5965 nla_get_u32(info->attrs[NL80211_ATTR_BEACON_INTERVAL]);
5967 nla_get_u32(info->attrs[NL80211_ATTR_DTIM_PERIOD]);
5981 if (info->attrs[NL80211_ATTR_SSID]) {
5982 params->ssid = nla_data(info->attrs[NL80211_ATTR_SSID]);
5984 nla_len(info->attrs[NL80211_ATTR_SSID]);
6003 if (info->attrs[NL80211_ATTR_HIDDEN_SSID])
6005 info->attrs[NL80211_ATTR_HIDDEN_SSID]);
6007 params->privacy = !!info->attrs[NL80211_ATTR_PRIVACY];
6009 if (info->attrs[NL80211_ATTR_AUTH_TYPE]) {
6011 info->attrs[NL80211_ATTR_AUTH_TYPE]);
6025 if (info->attrs[NL80211_ATTR_INACTIVITY_TIMEOUT]) {
6031 info->attrs[NL80211_ATTR_INACTIVITY_TIMEOUT]);
6034 if (info->attrs[NL80211_ATTR_P2P_CTWINDOW]) {
6040 nla_get_u8(info->attrs[NL80211_ATTR_P2P_CTWINDOW]);
6048 if (info->attrs[NL80211_ATTR_P2P_OPPPS]) {
6055 tmp = nla_get_u8(info->attrs[NL80211_ATTR_P2P_OPPPS]);
6064 if (info->attrs[NL80211_ATTR_WIPHY_FREQ]) {
6079 if (info->attrs[NL80211_ATTR_PUNCT_BITMAP]) {
6095 if (info->attrs[NL80211_ATTR_TX_RATES]) {
6096 err = nl80211_parse_tx_bitrate_mask(info, info->attrs,
6109 if (info->attrs[NL80211_ATTR_SMPS_MODE]) {
6111 nla_get_u8(info->attrs[NL80211_ATTR_SMPS_MODE]);
6137 params->pbss = nla_get_flag(info->attrs[NL80211_ATTR_PBSS]);
6143 if (info->attrs[NL80211_ATTR_ACL_POLICY]) {
6153 nla_get_flag(info->attrs[NL80211_ATTR_TWT_RESPONDER]);
6155 if (info->attrs[NL80211_ATTR_HE_OBSS_PD]) {
6157 info->attrs[NL80211_ATTR_HE_OBSS_PD],
6163 if (info->attrs[NL80211_ATTR_FILS_DISCOVERY]) {
6165 info->attrs[NL80211_ATTR_FILS_DISCOVERY],
6171 if (info->attrs[NL80211_ATTR_UNSOL_BCAST_PROBE_RESP]) {
6173 rdev, info->attrs[NL80211_ATTR_UNSOL_BCAST_PROBE_RESP],
6179 if (info->attrs[NL80211_ATTR_MBSSID_CONFIG]) {
6181 info->attrs[NL80211_ATTR_MBSSID_CONFIG],
6203 if (info->attrs[NL80211_ATTR_AP_SETTINGS_FLAGS])
6205 info->attrs[NL80211_ATTR_AP_SETTINGS_FLAGS]);
6206 else if (info->attrs[NL80211_ATTR_EXTERNAL_AUTH_SUPPORT])
6210 info->attrs[NL80211_ATTR_SOCKET_OWNER] &&
6226 if (info->attrs[NL80211_ATTR_SOCKET_OWNER])
6249 unsigned int link_id = nl80211_link_id(info->attrs);
6265 err = nl80211_parse_beacon(rdev, info->attrs, ¶ms, info->extack);
6282 unsigned int link_id = nl80211_link_id(info->attrs);
6309 nla = info->attrs[NL80211_ATTR_STA_FLAGS2];
6325 nla = info->attrs[NL80211_ATTR_STA_FLAGS];
6823 if (!info->attrs[NL80211_ATTR_MAC])
6826 mac_addr = nla_data(info->attrs[NL80211_ATTR_MAC]);
7011 struct nlattr *vlanattr = info->attrs[NL80211_ATTR_STA_VLAN];
7053 if (!info->attrs[NL80211_ATTR_STA_WME])
7056 nla = info->attrs[NL80211_ATTR_STA_WME];
7083 if (info->attrs[NL80211_ATTR_STA_SUPPORTED_CHANNELS]) {
7085 nla_data(info->attrs[NL80211_ATTR_STA_SUPPORTED_CHANNELS]);
7087 nla_len(info->attrs[NL80211_ATTR_STA_SUPPORTED_CHANNELS]);
7097 if (info->attrs[NL80211_ATTR_STA_SUPPORTED_OPER_CLASSES]) {
7099 nla_data(info->attrs[NL80211_ATTR_STA_SUPPORTED_OPER_CLASSES]);
7101 nla_len(info->attrs[NL80211_ATTR_STA_SUPPORTED_OPER_CLASSES]);
7111 if (info->attrs[NL80211_ATTR_PEER_AID])
7112 params->aid = nla_get_u16(info->attrs[NL80211_ATTR_PEER_AID]);
7113 if (info->attrs[NL80211_ATTR_HT_CAPABILITY])
7115 nla_data(info->attrs[NL80211_ATTR_HT_CAPABILITY]);
7116 if (info->attrs[NL80211_ATTR_VHT_CAPABILITY])
7118 nla_data(info->attrs[NL80211_ATTR_VHT_CAPABILITY]);
7119 if (info->attrs[NL80211_ATTR_HE_CAPABILITY]) {
7121 nla_data(info->attrs[NL80211_ATTR_HE_CAPABILITY]);
7123 nla_len(info->attrs[NL80211_ATTR_HE_CAPABILITY]);
7125 if (info->attrs[NL80211_ATTR_EHT_CAPABILITY]) {
7127 nla_data(info->attrs[NL80211_ATTR_EHT_CAPABILITY]);
7129 nla_len(info->attrs[NL80211_ATTR_EHT_CAPABILITY]);
7153 if (info->attrs[NL80211_ATTR_STA_TX_POWER_SETTING]) {
7160 txpwr->type = nla_get_u8(info->attrs[idx]);
7165 if (info->attrs[idx])
7166 txpwr->power = nla_get_s16(info->attrs[idx]);
7197 if (info->attrs[NL80211_ATTR_STA_AID])
7198 params.aid = nla_get_u16(info->attrs[NL80211_ATTR_STA_AID]);
7200 if (info->attrs[NL80211_ATTR_VLAN_ID])
7201 params.vlan_id = nla_get_u16(info->attrs[NL80211_ATTR_VLAN_ID]);
7203 if (info->attrs[NL80211_ATTR_STA_LISTEN_INTERVAL])
7205 nla_get_u16(info->attrs[NL80211_ATTR_STA_LISTEN_INTERVAL]);
7209 if (info->attrs[NL80211_ATTR_STA_SUPPORT_P2P_PS])
7211 nla_get_u8(info->attrs[NL80211_ATTR_STA_SUPPORT_P2P_PS]);
7215 if (!info->attrs[NL80211_ATTR_MAC])
7219 nl80211_link_id_or_invalid(info->attrs);
7221 if (info->attrs[NL80211_ATTR_MLD_ADDR]) {
7230 mac_addr = nla_data(info->attrs[NL80211_ATTR_MLD_ADDR]);
7233 nla_data(info->attrs[NL80211_ATTR_MAC]);
7237 mac_addr = nla_data(info->attrs[NL80211_ATTR_MAC]);
7241 if (info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]) {
7243 nla_data(info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]);
7245 nla_len(info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]);
7248 if (info->attrs[NL80211_ATTR_STA_CAPABILITY]) {
7250 nla_get_u16(info->attrs[NL80211_ATTR_STA_CAPABILITY]);
7254 if (info->attrs[NL80211_ATTR_STA_EXT_CAPABILITY]) {
7256 nla_data(info->attrs[NL80211_ATTR_STA_EXT_CAPABILITY]);
7258 nla_len(info->attrs[NL80211_ATTR_STA_EXT_CAPABILITY]);
7264 if (info->attrs[NL80211_ATTR_STA_PLINK_ACTION])
7266 nla_get_u8(info->attrs[NL80211_ATTR_STA_PLINK_ACTION]);
7268 if (info->attrs[NL80211_ATTR_STA_PLINK_STATE]) {
7270 nla_get_u8(info->attrs[NL80211_ATTR_STA_PLINK_STATE]);
7271 if (info->attrs[NL80211_ATTR_MESH_PEER_AID])
7273 info->attrs[NL80211_ATTR_MESH_PEER_AID]);
7277 if (info->attrs[NL80211_ATTR_LOCAL_MESH_POWER_MODE])
7279 info->attrs[NL80211_ATTR_LOCAL_MESH_POWER_MODE]);
7281 if (info->attrs[NL80211_ATTR_OPMODE_NOTIF]) {
7284 nla_get_u8(info->attrs[NL80211_ATTR_OPMODE_NOTIF]);
7287 if (info->attrs[NL80211_ATTR_HE_6GHZ_CAPABILITY])
7289 nla_data(info->attrs[NL80211_ATTR_HE_6GHZ_CAPABILITY]);
7291 if (info->attrs[NL80211_ATTR_AIRTIME_WEIGHT])
7293 nla_get_u16(info->attrs[NL80211_ATTR_AIRTIME_WEIGHT]);
7356 if (!info->attrs[NL80211_ATTR_MAC])
7359 if (!info->attrs[NL80211_ATTR_STA_LISTEN_INTERVAL])
7362 if (!info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES])
7365 if (!info->attrs[NL80211_ATTR_STA_AID] &&
7366 !info->attrs[NL80211_ATTR_PEER_AID])
7370 nl80211_link_id_or_invalid(info->attrs);
7372 if (info->attrs[NL80211_ATTR_MLD_ADDR]) {
7373 mac_addr = nla_data(info->attrs[NL80211_ATTR_MLD_ADDR]);
7376 nla_data(info->attrs[NL80211_ATTR_MAC]);
7380 mac_addr = nla_data(info->attrs[NL80211_ATTR_MAC]);
7384 nla_data(info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]);
7386 nla_len(info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]);
7388 nla_get_u16(info->attrs[NL80211_ATTR_STA_LISTEN_INTERVAL]);
7390 if (info->attrs[NL80211_ATTR_VLAN_ID])
7391 params.vlan_id = nla_get_u16(info->attrs[NL80211_ATTR_VLAN_ID]);
7393 if (info->attrs[NL80211_ATTR_STA_SUPPORT_P2P_PS]) {
7395 nla_get_u8(info->attrs[NL80211_ATTR_STA_SUPPORT_P2P_PS]);
7405 if (info->attrs[NL80211_ATTR_PEER_AID])
7406 params.aid = nla_get_u16(info->attrs[NL80211_ATTR_PEER_AID]);
7408 params.aid = nla_get_u16(info->attrs[NL80211_ATTR_STA_AID]);
7410 if (info->attrs[NL80211_ATTR_STA_CAPABILITY]) {
7412 nla_get_u16(info->attrs[NL80211_ATTR_STA_CAPABILITY]);
7416 if (info->attrs[NL80211_ATTR_STA_EXT_CAPABILITY]) {
7418 nla_data(info->attrs[NL80211_ATTR_STA_EXT_CAPABILITY]);
7420 nla_len(info->attrs[NL80211_ATTR_STA_EXT_CAPABILITY]);
7423 if (info->attrs[NL80211_ATTR_HT_CAPABILITY])
7425 nla_data(info->attrs[NL80211_ATTR_HT_CAPABILITY]);
7427 if (info->attrs[NL80211_ATTR_VHT_CAPABILITY])
7429 nla_data(info->attrs[NL80211_ATTR_VHT_CAPABILITY]);
7431 if (info->attrs[NL80211_ATTR_HE_CAPABILITY]) {
7433 nla_data(info->attrs[NL80211_ATTR_HE_CAPABILITY]);
7435 nla_len(info->attrs[NL80211_ATTR_HE_CAPABILITY]);
7437 if (info->attrs[NL80211_ATTR_EHT_CAPABILITY]) {
7439 nla_data(info->attrs[NL80211_ATTR_EHT_CAPABILITY]);
7441 nla_len(info->attrs[NL80211_ATTR_EHT_CAPABILITY]);
7451 if (info->attrs[NL80211_ATTR_HE_6GHZ_CAPABILITY])
7453 nla_data(info->attrs[NL80211_ATTR_HE_6GHZ_CAPABILITY]);
7455 if (info->attrs[NL80211_ATTR_OPMODE_NOTIF]) {
7458 nla_get_u8(info->attrs[NL80211_ATTR_OPMODE_NOTIF]);
7461 if (info->attrs[NL80211_ATTR_STA_PLINK_ACTION])
7463 nla_get_u8(info->attrs[NL80211_ATTR_STA_PLINK_ACTION]);
7465 if (info->attrs[NL80211_ATTR_AIRTIME_WEIGHT])
7467 nla_get_u16(info->attrs[NL80211_ATTR_AIRTIME_WEIGHT]);
7526 info->attrs[NL80211_ATTR_PEER_AID])
7566 info->attrs[NL80211_ATTR_PEER_AID])
7632 if (info->attrs[NL80211_ATTR_MAC])
7633 params.mac = nla_data(info->attrs[NL80211_ATTR_MAC]);
7655 if (info->attrs[NL80211_ATTR_MGMT_SUBTYPE]) {
7657 nla_get_u8(info->attrs[NL80211_ATTR_MGMT_SUBTYPE]);
7666 if (info->attrs[NL80211_ATTR_REASON_CODE]) {
7668 nla_get_u16(info->attrs[NL80211_ATTR_REASON_CODE]);
7807 if (!info->attrs[NL80211_ATTR_MAC])
7810 dst = nla_data(info->attrs[NL80211_ATTR_MAC]);
7842 if (!info->attrs[NL80211_ATTR_MAC])
7845 if (!info->attrs[NL80211_ATTR_MPATH_NEXT_HOP])
7848 dst = nla_data(info->attrs[NL80211_ATTR_MAC]);
7849 next_hop = nla_data(info->attrs[NL80211_ATTR_MPATH_NEXT_HOP]);
7867 if (!info->attrs[NL80211_ATTR_MAC])
7870 if (!info->attrs[NL80211_ATTR_MPATH_NEXT_HOP])
7873 dst = nla_data(info->attrs[NL80211_ATTR_MAC]);
7874 next_hop = nla_data(info->attrs[NL80211_ATTR_MPATH_NEXT_HOP]);
7891 if (info->attrs[NL80211_ATTR_MAC])
7892 dst = nla_data(info->attrs[NL80211_ATTR_MAC]);
7915 if (!info->attrs[NL80211_ATTR_MAC])
7918 dst = nla_data(info->attrs[NL80211_ATTR_MAC]);
8004 params.link_id = nl80211_link_id_or_invalid(info->attrs);
8014 if (info->attrs[NL80211_ATTR_BSS_CTS_PROT])
8016 nla_get_u8(info->attrs[NL80211_ATTR_BSS_CTS_PROT]);
8017 if (info->attrs[NL80211_ATTR_BSS_SHORT_PREAMBLE])
8019 nla_get_u8(info->attrs[NL80211_ATTR_BSS_SHORT_PREAMBLE]);
8020 if (info->attrs[NL80211_ATTR_BSS_SHORT_SLOT_TIME])
8022 nla_get_u8(info->attrs[NL80211_ATTR_BSS_SHORT_SLOT_TIME]);
8023 if (info->attrs[NL80211_ATTR_BSS_BASIC_RATES]) {
8025 nla_data(info->attrs[NL80211_ATTR_BSS_BASIC_RATES]);
8027 nla_len(info->attrs[NL80211_ATTR_BSS_BASIC_RATES]);
8029 if (info->attrs[NL80211_ATTR_AP_ISOLATE])
8030 params.ap_isolate = !!nla_get_u8(info->attrs[NL80211_ATTR_AP_ISOLATE]);
8031 if (info->attrs[NL80211_ATTR_BSS_HT_OPMODE])
8033 nla_get_u16(info->attrs[NL80211_ATTR_BSS_HT_OPMODE]);
8035 if (info->attrs[NL80211_ATTR_P2P_CTWINDOW]) {
8039 nla_get_u8(info->attrs[NL80211_ATTR_P2P_CTWINDOW]);
8045 if (info->attrs[NL80211_ATTR_P2P_OPPPS]) {
8050 tmp = nla_get_u8(info->attrs[NL80211_ATTR_P2P_OPPPS]);
8087 if (info->attrs[NL80211_ATTR_USER_REG_HINT_TYPE])
8089 nla_get_u32(info->attrs[NL80211_ATTR_USER_REG_HINT_TYPE]);
8096 if (!info->attrs[NL80211_ATTR_REG_ALPHA2])
8099 data = nla_data(info->attrs[NL80211_ATTR_REG_ALPHA2]);
8102 if (info->attrs[NL80211_ATTR_SOCKET_OWNER]) {
8104 is_indoor = !!info->attrs[NL80211_ATTR_REG_INDOOR];
8315 if (!info->attrs[NL80211_ATTR_MESH_CONFIG])
8317 if (nla_parse_nested_deprecated(tb, NL80211_MESHCONF_ATTR_MAX, info->attrs[NL80211_ATTR_MESH_CONFIG], nl80211_meshconf_params_policy, info->extack))
8453 if (!info->attrs[NL80211_ATTR_MESH_SETUP])
8455 if (nla_parse_nested_deprecated(tb, NL80211_MESH_SETUP_ATTR_MAX, info->attrs[NL80211_ATTR_MESH_SETUP], nl80211_mesh_setup_params_policy, info->extack))
8614 if (info->attrs[NL80211_ATTR_WIPHY]) {
8809 if (!info->attrs[NL80211_ATTR_REG_ALPHA2])
8812 if (!info->attrs[NL80211_ATTR_REG_RULES])
8815 alpha2 = nla_data(info->attrs[NL80211_ATTR_REG_ALPHA2]);
8817 if (info->attrs[NL80211_ATTR_DFS_REGION])
8818 dfs_region = nla_get_u8(info->attrs[NL80211_ATTR_DFS_REGION]);
8820 nla_for_each_nested(nl_reg_rule, info->attrs[NL80211_ATTR_REG_RULES],
8850 nla_for_each_nested(nl_reg_rule, info->attrs[NL80211_ATTR_REG_RULES],
8977 int nl80211_parse_random_mac(struct nlattr **attrs,
8982 if (!attrs[NL80211_ATTR_MAC] && !attrs[NL80211_ATTR_MAC_MASK]) {
8992 if (!attrs[NL80211_ATTR_MAC] || !attrs[NL80211_ATTR_MAC_MASK])
8995 memcpy(mac_addr, nla_data(attrs[NL80211_ATTR_MAC]), ETH_ALEN);
8996 memcpy(mac_addr_mask, nla_data(attrs[NL80211_ATTR_MAC_MASK]), ETH_ALEN);
9069 void *request, struct nlattr **attrs,
9076 if (!attrs[NL80211_ATTR_SCAN_FLAGS])
9097 *flags = nla_get_u32(attrs[NL80211_ATTR_SCAN_FLAGS]);
9137 err = nl80211_parse_random_mac(attrs, mac_addr, mac_addr_mask);
9168 if (info->attrs[NL80211_ATTR_SCAN_FREQ_KHZ]) {
9172 scan_freqs = info->attrs[NL80211_ATTR_SCAN_FREQ_KHZ];
9174 } else if (info->attrs[NL80211_ATTR_SCAN_FREQUENCIES])
9175 scan_freqs = info->attrs[NL80211_ATTR_SCAN_FREQUENCIES];
9185 if (info->attrs[NL80211_ATTR_SCAN_SSIDS])
9186 nla_for_each_nested(attr, info->attrs[NL80211_ATTR_SCAN_SSIDS], tmp)
9192 if (info->attrs[NL80211_ATTR_IE])
9193 ie_len = nla_len(info->attrs[NL80211_ATTR_IE]);
9288 nla_for_each_nested(attr, info->attrs[NL80211_ATTR_SCAN_SSIDS], tmp) {
9299 if (info->attrs[NL80211_ATTR_IE]) {
9300 request->ie_len = nla_len(info->attrs[NL80211_ATTR_IE]);
9302 nla_data(info->attrs[NL80211_ATTR_IE]),
9311 if (info->attrs[NL80211_ATTR_SCAN_SUPP_RATES]) {
9313 info->attrs[NL80211_ATTR_SCAN_SUPP_RATES],
9334 if (info->attrs[NL80211_ATTR_MEASUREMENT_DURATION]) {
9336 nla_get_u16(info->attrs[NL80211_ATTR_MEASUREMENT_DURATION]);
9338 nla_get_flag(info->attrs[NL80211_ATTR_MEASUREMENT_DURATION_MANDATORY]);
9341 err = nl80211_check_scan_flags(wiphy, wdev, request, info->attrs,
9347 nla_get_flag(info->attrs[NL80211_ATTR_TX_NO_CCK_RATE]);
9358 if (info->attrs[NL80211_ATTR_BSSID])
9360 nla_data(info->attrs[NL80211_ATTR_BSSID]), ETH_ALEN);
9362 info->attrs[NL80211_ATTR_MAC])
9363 memcpy(request->bssid, nla_data(info->attrs[NL80211_ATTR_MAC]),
9411 struct nlattr **attrs)
9416 if (!attrs[NL80211_ATTR_SCHED_SCAN_PLANS]) {
9425 interval = nla_get_u32(attrs[NL80211_ATTR_SCHED_SCAN_INTERVAL]);
9442 nla_for_each_nested(attr, attrs[NL80211_ATTR_SCHED_SCAN_PLANS], tmp) {
9530 struct nlattr **attrs, int max_match_sets)
9540 if (attrs[NL80211_ATTR_SCAN_FREQUENCIES]) {
9542 attrs[NL80211_ATTR_SCAN_FREQUENCIES]);
9549 if (attrs[NL80211_ATTR_SCAN_SSIDS])
9550 nla_for_each_nested(attr, attrs[NL80211_ATTR_SCAN_SSIDS],
9566 if (attrs[NL80211_ATTR_SCHED_SCAN_MATCH]) {
9568 attrs[NL80211_ATTR_SCHED_SCAN_MATCH],
9604 if (attrs[NL80211_ATTR_IE])
9605 ie_len = nla_len(attrs[NL80211_ATTR_IE]);
9612 if (attrs[NL80211_ATTR_SCHED_SCAN_PLANS]) {
9617 if (attrs[NL80211_ATTR_SCHED_SCAN_INTERVAL])
9621 attrs[NL80211_ATTR_SCHED_SCAN_PLANS], tmp)
9630 if (!attrs[NL80211_ATTR_SCHED_SCAN_INTERVAL])
9641 (attrs[NL80211_ATTR_SCHED_SCAN_RELATIVE_RSSI] ||
9642 attrs[NL80211_ATTR_SCHED_SCAN_RSSI_ADJUST]))
9691 if (attrs[NL80211_ATTR_SCAN_FREQUENCIES]) {
9694 attrs[NL80211_ATTR_SCAN_FREQUENCIES],
9742 nla_for_each_nested(attr, attrs[NL80211_ATTR_SCAN_SSIDS],
9756 if (attrs[NL80211_ATTR_SCHED_SCAN_MATCH]) {
9758 attrs[NL80211_ATTR_SCHED_SCAN_MATCH],
9830 nla_data(attrs[NL80211_ATTR_IE]),
9834 err = nl80211_check_scan_flags(wiphy, wdev, request, attrs, true);
9838 if (attrs[NL80211_ATTR_SCHED_SCAN_DELAY])
9840 nla_get_u32(attrs[NL80211_ATTR_SCHED_SCAN_DELAY]);
9842 if (attrs[NL80211_ATTR_SCHED_SCAN_RELATIVE_RSSI]) {
9844 attrs[NL80211_ATTR_SCHED_SCAN_RELATIVE_RSSI]);
9849 attrs[NL80211_ATTR_SCHED_SCAN_RSSI_ADJUST]) {
9853 attrs[NL80211_ATTR_SCHED_SCAN_RSSI_ADJUST]);
9862 err = nl80211_parse_sched_scan_plans(wiphy, n_plans, request, attrs);
9888 want_multi = info->attrs[NL80211_ATTR_SCHED_SCAN_MULTI];
9894 info->attrs,
9914 if (info->attrs[NL80211_ATTR_SOCKET_OWNER])
9938 if (info->attrs[NL80211_ATTR_COOKIE]) {
9939 cookie = nla_get_u64(info->attrs[NL80211_ATTR_COOKIE]);
9992 if (nla_get_flag(info->attrs[NL80211_ATTR_RADAR_BACKGROUND])) {
10093 unsigned int link_id = nl80211_link_id(info->attrs);
10138 if (!info->attrs[NL80211_ATTR_WIPHY_FREQ] ||
10139 !info->attrs[NL80211_ATTR_CH_SWITCH_COUNT])
10143 if (need_new_beacon && !info->attrs[NL80211_ATTR_CSA_IES])
10149 cs_count = nla_get_u32(info->attrs[NL80211_ATTR_CH_SWITCH_COUNT]);
10158 err = nl80211_parse_beacon(rdev, info->attrs, ¶ms.beacon_after,
10171 info->attrs[NL80211_ATTR_CSA_IES],
10273 !nla_get_flag(info->attrs[NL80211_ATTR_HANDLE_DFS])) {
10279 if (info->attrs[NL80211_ATTR_CH_SWITCH_BLOCK_TX])
10282 if (info->attrs[NL80211_ATTR_PUNCT_BITMAP]) {
10665 if (!info->attrs[NL80211_ATTR_MAC])
10668 if (!info->attrs[NL80211_ATTR_AUTH_TYPE])
10671 if (!info->attrs[NL80211_ATTR_SSID])
10674 if (!info->attrs[NL80211_ATTR_WIPHY_FREQ])
10719 bssid = nla_data(info->attrs[NL80211_ATTR_MAC]);
10720 freq = MHZ_TO_KHZ(nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ]));
10721 if (info->attrs[NL80211_ATTR_WIPHY_FREQ_OFFSET])
10723 nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ_OFFSET]);
10729 ssid = nla_data(info->attrs[NL80211_ATTR_SSID]);
10730 ssid_len = nla_len(info->attrs[NL80211_ATTR_SSID]);
10732 if (info->attrs[NL80211_ATTR_IE]) {
10733 req.ie = nla_data(info->attrs[NL80211_ATTR_IE]);
10734 req.ie_len = nla_len(info->attrs[NL80211_ATTR_IE]);
10737 auth_type = nla_get_u32(info->attrs[NL80211_ATTR_AUTH_TYPE]);
10745 !info->attrs[NL80211_ATTR_AUTH_DATA])
10748 if (info->attrs[NL80211_ATTR_AUTH_DATA]) {
10754 req.auth_data = nla_data(info->attrs[NL80211_ATTR_AUTH_DATA]);
10755 req.auth_data_len = nla_len(info->attrs[NL80211_ATTR_AUTH_DATA]);
10758 local_state_change = !!info->attrs[NL80211_ATTR_LOCAL_STATE_CHANGE];
10771 req.link_id = nl80211_link_id_or_invalid(info->attrs);
10775 if (!info->attrs[NL80211_ATTR_MLD_ADDR])
10777 req.ap_mld_addr = nla_data(info->attrs[NL80211_ATTR_MLD_ADDR]);
10800 if (!info->attrs[NL80211_ATTR_SOCKET_OWNER]) {
10820 settings->control_port = info->attrs[NL80211_ATTR_CONTROL_PORT];
10822 if (info->attrs[NL80211_ATTR_CONTROL_PORT_ETHERTYPE]) {
10826 info->attrs[NL80211_ATTR_CONTROL_PORT_ETHERTYPE]);
10831 if (info->attrs[NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT])
10836 if (info->attrs[NL80211_ATTR_CONTROL_PORT_OVER_NL80211]) {
10844 if (info->attrs[NL80211_ATTR_CONTROL_PORT_NO_PREAUTH])
10848 if (info->attrs[NL80211_ATTR_CIPHER_SUITES_PAIRWISE]) {
10852 data = nla_data(info->attrs[NL80211_ATTR_CIPHER_SUITES_PAIRWISE]);
10853 len = nla_len(info->attrs[NL80211_ATTR_CIPHER_SUITES_PAIRWISE]);
10871 if (info->attrs[NL80211_ATTR_CIPHER_SUITE_GROUP]) {
10873 nla_get_u32(info->attrs[NL80211_ATTR_CIPHER_SUITE_GROUP]);
10879 if (info->attrs[NL80211_ATTR_WPA_VERSIONS]) {
10881 nla_get_u32(info->attrs[NL80211_ATTR_WPA_VERSIONS]);
10886 if (info->attrs[NL80211_ATTR_AKM_SUITES]) {
10890 data = nla_data(info->attrs[NL80211_ATTR_AKM_SUITES]);
10891 len = nla_len(info->attrs[NL80211_ATTR_AKM_SUITES]);
10903 if (info->attrs[NL80211_ATTR_PMK]) {
10904 if (nla_len(info->attrs[NL80211_ATTR_PMK]) != WLAN_PMK_LEN)
10911 settings->psk = nla_data(info->attrs[NL80211_ATTR_PMK]);
10914 if (info->attrs[NL80211_ATTR_SAE_PASSWORD]) {
10921 nla_data(info->attrs[NL80211_ATTR_SAE_PASSWORD]);
10923 nla_len(info->attrs[NL80211_ATTR_SAE_PASSWORD]);
10926 if (info->attrs[NL80211_ATTR_SAE_PWE])
10928 nla_get_u8(info->attrs[NL80211_ATTR_SAE_PWE]);
10937 struct nlattr **attrs)
10944 if (!attrs[NL80211_ATTR_MAC] || !attrs[NL80211_ATTR_WIPHY_FREQ])
10947 bssid = nla_data(attrs[NL80211_ATTR_MAC]);
10949 freq = MHZ_TO_KHZ(nla_get_u32(attrs[NL80211_ATTR_WIPHY_FREQ]));
10950 if (attrs[NL80211_ATTR_WIPHY_FREQ_OFFSET])
10951 freq += nla_get_u32(attrs[NL80211_ATTR_WIPHY_FREQ_OFFSET]);
10972 struct nlattr **attrs = NULL;
10981 if (!info->attrs[NL80211_ATTR_SSID])
10991 ssid = nla_data(info->attrs[NL80211_ATTR_SSID]);
10992 ssid_len = nla_len(info->attrs[NL80211_ATTR_SSID]);
10994 if (info->attrs[NL80211_ATTR_IE]) {
10995 req.ie = nla_data(info->attrs[NL80211_ATTR_IE]);
10996 req.ie_len = nla_len(info->attrs[NL80211_ATTR_IE]);
11006 if (info->attrs[NL80211_ATTR_USE_MFP]) {
11008 nla_get_u32(info->attrs[NL80211_ATTR_USE_MFP]);
11015 if (info->attrs[NL80211_ATTR_PREV_BSSID])
11016 req.prev_bssid = nla_data(info->attrs[NL80211_ATTR_PREV_BSSID]);
11018 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_HT]))
11021 if (info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK])
11023 nla_data(info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK]),
11026 if (info->attrs[NL80211_ATTR_HT_CAPABILITY]) {
11027 if (!info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK])
11030 nla_data(info->attrs[NL80211_ATTR_HT_CAPABILITY]),
11034 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_VHT]))
11037 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_HE]))
11040 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_EHT]))
11043 if (info->attrs[NL80211_ATTR_VHT_CAPABILITY_MASK])
11045 nla_data(info->attrs[NL80211_ATTR_VHT_CAPABILITY_MASK]),
11048 if (info->attrs[NL80211_ATTR_VHT_CAPABILITY]) {
11049 if (!info->attrs[NL80211_ATTR_VHT_CAPABILITY_MASK])
11052 nla_data(info->attrs[NL80211_ATTR_VHT_CAPABILITY]),
11056 if (nla_get_flag(info->attrs[NL80211_ATTR_USE_RRM])) {
11066 if (info->attrs[NL80211_ATTR_FILS_KEK]) {
11067 req.fils_kek = nla_data(info->attrs[NL80211_ATTR_FILS_KEK]);
11068 req.fils_kek_len = nla_len(info->attrs[NL80211_ATTR_FILS_KEK]);
11069 if (!info->attrs[NL80211_ATTR_FILS_NONCES])
11072 nla_data(info->attrs[NL80211_ATTR_FILS_NONCES]);
11075 if (info->attrs[NL80211_ATTR_S1G_CAPABILITY_MASK]) {
11076 if (!info->attrs[NL80211_ATTR_S1G_CAPABILITY])
11079 nla_data(info->attrs[NL80211_ATTR_S1G_CAPABILITY_MASK]),
11083 if (info->attrs[NL80211_ATTR_S1G_CAPABILITY]) {
11084 if (!info->attrs[NL80211_ATTR_S1G_CAPABILITY_MASK])
11087 nla_data(info->attrs[NL80211_ATTR_S1G_CAPABILITY]),
11091 req.link_id = nl80211_link_id_or_invalid(info->attrs);
11093 if (info->attrs[NL80211_ATTR_MLO_LINKS]) {
11094 unsigned int attrsize = NUM_NL80211_ATTR * sizeof(*attrs);
11104 if (info->attrs[NL80211_ATTR_MAC] ||
11105 info->attrs[NL80211_ATTR_WIPHY_FREQ] ||
11106 !info->attrs[NL80211_ATTR_MLD_ADDR])
11109 req.ap_mld_addr = nla_data(info->attrs[NL80211_ATTR_MLD_ADDR]);
11112 attrs = kzalloc(attrsize, GFP_KERNEL);
11113 if (!attrs)
11117 info->attrs[NL80211_ATTR_MLO_LINKS],
11119 memset(attrs, 0, attrsize);
11121 nla_parse_nested(attrs, NL80211_ATTR_MAX,
11124 if (!attrs[NL80211_ATTR_MLO_LINK_ID]) {
11129 link_id = nla_get_u8(attrs[NL80211_ATTR_MLO_LINK_ID]);
11136 nl80211_assoc_bss(rdev, ssid, ssid_len, attrs);
11143 if (attrs[NL80211_ATTR_IE]) {
11145 nla_data(attrs[NL80211_ATTR_IE]);
11147 nla_len(attrs[NL80211_ATTR_IE]);
11169 nla_get_flag(attrs[NL80211_ATTR_MLO_LINK_DISABLED]);
11191 kfree(attrs);
11192 attrs = NULL;
11197 req.bss = nl80211_assoc_bss(rdev, ssid, ssid_len, info->attrs);
11209 if (!err && info->attrs[NL80211_ATTR_SOCKET_OWNER]) {
11223 kfree(attrs);
11241 if (!info->attrs[NL80211_ATTR_MAC])
11244 if (!info->attrs[NL80211_ATTR_REASON_CODE])
11254 bssid = nla_data(info->attrs[NL80211_ATTR_MAC]);
11256 reason_code = nla_get_u16(info->attrs[NL80211_ATTR_REASON_CODE]);
11262 if (info->attrs[NL80211_ATTR_IE]) {
11263 ie = nla_data(info->attrs[NL80211_ATTR_IE]);
11264 ie_len = nla_len(info->attrs[NL80211_ATTR_IE]);
11267 local_state_change = !!info->attrs[NL80211_ATTR_LOCAL_STATE_CHANGE];
11289 if (!info->attrs[NL80211_ATTR_MAC])
11292 if (!info->attrs[NL80211_ATTR_REASON_CODE])
11302 bssid = nla_data(info->attrs[NL80211_ATTR_MAC]);
11304 reason_code = nla_get_u16(info->attrs[NL80211_ATTR_REASON_CODE]);
11310 if (info->attrs[NL80211_ATTR_IE]) {
11311 ie = nla_data(info->attrs[NL80211_ATTR_IE]);
11312 ie_len = nla_len(info->attrs[NL80211_ATTR_IE]);
11315 local_state_change = !!info->attrs[NL80211_ATTR_LOCAL_STATE_CHANGE];
11363 if (!info->attrs[NL80211_ATTR_SSID] ||
11364 !nla_len(info->attrs[NL80211_ATTR_SSID]))
11369 if (info->attrs[NL80211_ATTR_BEACON_INTERVAL])
11371 nla_get_u32(info->attrs[NL80211_ATTR_BEACON_INTERVAL]);
11386 if (info->attrs[NL80211_ATTR_MAC]) {
11387 ibss.bssid = nla_data(info->attrs[NL80211_ATTR_MAC]);
11392 ibss.ssid = nla_data(info->attrs[NL80211_ATTR_SSID]);
11393 ibss.ssid_len = nla_len(info->attrs[NL80211_ATTR_SSID]);
11395 if (info->attrs[NL80211_ATTR_IE]) {
11396 ibss.ie = nla_data(info->attrs[NL80211_ATTR_IE]);
11397 ibss.ie_len = nla_len(info->attrs[NL80211_ATTR_IE]);
11433 ibss.channel_fixed = !!info->attrs[NL80211_ATTR_FREQ_FIXED];
11434 ibss.privacy = !!info->attrs[NL80211_ATTR_PRIVACY];
11436 if (info->attrs[NL80211_ATTR_BSS_BASIC_RATES]) {
11438 nla_data(info->attrs[NL80211_ATTR_BSS_BASIC_RATES]);
11440 nla_len(info->attrs[NL80211_ATTR_BSS_BASIC_RATES]);
11450 if (info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK])
11452 nla_data(info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK]),
11455 if (info->attrs[NL80211_ATTR_HT_CAPABILITY]) {
11456 if (!info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK])
11459 nla_data(info->attrs[NL80211_ATTR_HT_CAPABILITY]),
11463 if (info->attrs[NL80211_ATTR_MCAST_RATE] &&
11465 nla_get_u32(info->attrs[NL80211_ATTR_MCAST_RATE])))
11468 if (ibss.privacy && info->attrs[NL80211_ATTR_KEYS]) {
11483 nla_get_flag(info->attrs[NL80211_ATTR_CONTROL_PORT]);
11485 if (info->attrs[NL80211_ATTR_CONTROL_PORT_OVER_NL80211]) {
11497 nla_get_flag(info->attrs[NL80211_ATTR_HANDLE_DFS]);
11503 else if (info->attrs[NL80211_ATTR_SOCKET_OWNER])
11541 if (!info->attrs[NL80211_ATTR_MCAST_RATE])
11544 nla_rate = nla_get_u32(info->attrs[NL80211_ATTR_MCAST_RATE]);
11680 info->attrs);
11694 if (!info->attrs[NL80211_ATTR_TESTDATA])
11699 nla_data(info->attrs[NL80211_ATTR_TESTDATA]),
11700 nla_len(info->attrs[NL80211_ATTR_TESTDATA]));
11821 if (!info->attrs[NL80211_ATTR_SSID] ||
11822 !nla_len(info->attrs[NL80211_ATTR_SSID]))
11825 if (info->attrs[NL80211_ATTR_AUTH_TYPE]) {
11827 nla_get_u32(info->attrs[NL80211_ATTR_AUTH_TYPE]);
11834 connect.privacy = info->attrs[NL80211_ATTR_PRIVACY];
11836 if (info->attrs[NL80211_ATTR_WANT_1X_4WAY_HS] &&
11840 connect.want_1x = info->attrs[NL80211_ATTR_WANT_1X_4WAY_HS];
11854 if (info->attrs[NL80211_ATTR_BG_SCAN_PERIOD] &&
11857 nla_get_u16(info->attrs[NL80211_ATTR_BG_SCAN_PERIOD]);
11860 if (info->attrs[NL80211_ATTR_MAC])
11861 connect.bssid = nla_data(info->attrs[NL80211_ATTR_MAC]);
11862 else if (info->attrs[NL80211_ATTR_MAC_HINT])
11864 nla_data(info->attrs[NL80211_ATTR_MAC_HINT]);
11865 connect.ssid = nla_data(info->attrs[NL80211_ATTR_SSID]);
11866 connect.ssid_len = nla_len(info->attrs[NL80211_ATTR_SSID]);
11868 if (info->attrs[NL80211_ATTR_IE]) {
11869 connect.ie = nla_data(info->attrs[NL80211_ATTR_IE]);
11870 connect.ie_len = nla_len(info->attrs[NL80211_ATTR_IE]);
11873 if (info->attrs[NL80211_ATTR_USE_MFP]) {
11874 connect.mfp = nla_get_u32(info->attrs[NL80211_ATTR_USE_MFP]);
11883 if (info->attrs[NL80211_ATTR_PREV_BSSID])
11885 nla_data(info->attrs[NL80211_ATTR_PREV_BSSID]);
11887 if (info->attrs[NL80211_ATTR_WIPHY_FREQ])
11889 info->attrs[NL80211_ATTR_WIPHY_FREQ]));
11890 if (info->attrs[NL80211_ATTR_WIPHY_FREQ_OFFSET])
11892 nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ_OFFSET]);
11898 } else if (info->attrs[NL80211_ATTR_WIPHY_FREQ_HINT]) {
11899 freq = nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ_HINT]);
11906 if (info->attrs[NL80211_ATTR_WIPHY_EDMG_CHANNELS]) {
11908 nla_get_u8(info->attrs[NL80211_ATTR_WIPHY_EDMG_CHANNELS]);
11910 if (info->attrs[NL80211_ATTR_WIPHY_EDMG_BW_CONFIG])
11912 nla_get_u8(info->attrs[NL80211_ATTR_WIPHY_EDMG_BW_CONFIG]);
11915 if (connect.privacy && info->attrs[NL80211_ATTR_KEYS]) {
11921 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_HT]))
11924 if (info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK])
11926 nla_data(info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK]),
11929 if (info->attrs[NL80211_ATTR_HT_CAPABILITY]) {
11930 if (!info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK]) {
11935 nla_data(info->attrs[NL80211_ATTR_HT_CAPABILITY]),
11939 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_VHT]))
11942 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_HE]))
11945 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_EHT]))
11948 if (info->attrs[NL80211_ATTR_VHT_CAPABILITY_MASK])
11950 nla_data(info->attrs[NL80211_ATTR_VHT_CAPABILITY_MASK]),
11953 if (info->attrs[NL80211_ATTR_VHT_CAPABILITY]) {
11954 if (!info->attrs[NL80211_ATTR_VHT_CAPABILITY_MASK]) {
11959 nla_data(info->attrs[NL80211_ATTR_VHT_CAPABILITY]),
11963 if (nla_get_flag(info->attrs[NL80211_ATTR_USE_RRM])) {
11975 connect.pbss = nla_get_flag(info->attrs[NL80211_ATTR_PBSS]);
11981 if (info->attrs[NL80211_ATTR_BSS_SELECT]) {
11988 err = parse_bss_select(info->attrs[NL80211_ATTR_BSS_SELECT],
11998 info->attrs[NL80211_ATTR_FILS_ERP_USERNAME] &&
11999 info->attrs[NL80211_ATTR_FILS_ERP_REALM] &&
12000 info->attrs[NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM] &&
12001 info->attrs[NL80211_ATTR_FILS_ERP_RRK]) {
12003 nla_data(info->attrs[NL80211_ATTR_FILS_ERP_USERNAME]);
12005 nla_len(info->attrs[NL80211_ATTR_FILS_ERP_USERNAME]);
12007 nla_data(info->attrs[NL80211_ATTR_FILS_ERP_REALM]);
12009 nla_len(info->attrs[NL80211_ATTR_FILS_ERP_REALM]);
12012 info->attrs[NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM]);
12014 nla_data(info->attrs[NL80211_ATTR_FILS_ERP_RRK]);
12016 nla_len(info->attrs[NL80211_ATTR_FILS_ERP_RRK]);
12017 } else if (info->attrs[NL80211_ATTR_FILS_ERP_USERNAME] ||
12018 info->attrs[NL80211_ATTR_FILS_ERP_REALM] ||
12019 info->attrs[NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM] ||
12020 info->attrs[NL80211_ATTR_FILS_ERP_RRK]) {
12025 if (nla_get_flag(info->attrs[NL80211_ATTR_EXTERNAL_AUTH_SUPPORT])) {
12026 if (!info->attrs[NL80211_ATTR_SOCKET_OWNER]) {
12035 if (nla_get_flag(info->attrs[NL80211_ATTR_MLO_SUPPORT]))
12045 if (!err && info->attrs[NL80211_ATTR_SOCKET_OWNER]) {
12074 if (info->attrs[NL80211_ATTR_IE]) {
12075 connect.ie = nla_data(info->attrs[NL80211_ATTR_IE]);
12076 connect.ie_len = nla_len(info->attrs[NL80211_ATTR_IE]);
12089 info->attrs[NL80211_ATTR_FILS_ERP_USERNAME] &&
12090 info->attrs[NL80211_ATTR_FILS_ERP_REALM] &&
12091 info->attrs[NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM] &&
12092 info->attrs[NL80211_ATTR_FILS_ERP_RRK]) {
12094 nla_data(info->attrs[NL80211_ATTR_FILS_ERP_USERNAME]);
12096 nla_len(info->attrs[NL80211_ATTR_FILS_ERP_USERNAME]);
12098 nla_data(info->attrs[NL80211_ATTR_FILS_ERP_REALM]);
12100 nla_len(info->attrs[NL80211_ATTR_FILS_ERP_REALM]);
12103 info->attrs[NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM]);
12105 nla_data(info->attrs[NL80211_ATTR_FILS_ERP_RRK]);
12107 nla_len(info->attrs[NL80211_ATTR_FILS_ERP_RRK]);
12109 } else if (info->attrs[NL80211_ATTR_FILS_ERP_USERNAME] ||
12110 info->attrs[NL80211_ATTR_FILS_ERP_REALM] ||
12111 info->attrs[NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM] ||
12112 info->attrs[NL80211_ATTR_FILS_ERP_RRK]) {
12116 if (info->attrs[NL80211_ATTR_AUTH_TYPE]) {
12117 auth_type = nla_get_u32(info->attrs[NL80211_ATTR_AUTH_TYPE]);
12151 if (!info->attrs[NL80211_ATTR_REASON_CODE])
12154 reason = nla_get_u16(info->attrs[NL80211_ATTR_REASON_CODE]);
12175 if (info->attrs[NL80211_ATTR_PID]) {
12176 u32 pid = nla_get_u32(info->attrs[NL80211_ATTR_PID]);
12179 } else if (info->attrs[NL80211_ATTR_NETNS_FD]) {
12180 u32 fd = nla_get_u32(info->attrs[NL80211_ATTR_NETNS_FD]);
12210 if (!info->attrs[NL80211_ATTR_PMKID])
12213 pmksa.pmkid = nla_data(info->attrs[NL80211_ATTR_PMKID]);
12215 if (info->attrs[NL80211_ATTR_MAC]) {
12216 pmksa.bssid = nla_data(info->attrs[NL80211_ATTR_MAC]);
12217 } else if (info->attrs[NL80211_ATTR_SSID] &&
12218 info->attrs[NL80211_ATTR_FILS_CACHE_ID] &&
12220 info->attrs[NL80211_ATTR_PMK])) {
12221 pmksa.ssid = nla_data(info->attrs[NL80211_ATTR_SSID]);
12222 pmksa.ssid_len = nla_len(info->attrs[NL80211_ATTR_SSID]);
12224 nla_data(info->attrs[NL80211_ATTR_FILS_CACHE_ID]);
12228 if (info->attrs[NL80211_ATTR_PMK]) {
12229 pmksa.pmk = nla_data(info->attrs[NL80211_ATTR_PMK]);
12230 pmksa.pmk_len = nla_len(info->attrs[NL80211_ATTR_PMK]);
12233 if (info->attrs[NL80211_ATTR_PMK_LIFETIME])
12235 nla_get_u32(info->attrs[NL80211_ATTR_PMK_LIFETIME]);
12237 if (info->attrs[NL80211_ATTR_PMK_REAUTH_THRESHOLD])
12240 info->attrs[NL80211_ATTR_PMK_REAUTH_THRESHOLD]);
12297 if (!info->attrs[NL80211_ATTR_TDLS_ACTION] ||
12298 !info->attrs[NL80211_ATTR_STATUS_CODE] ||
12299 !info->attrs[NL80211_ATTR_TDLS_DIALOG_TOKEN] ||
12300 !info->attrs[NL80211_ATTR_IE] ||
12301 !info->attrs[NL80211_ATTR_MAC])
12304 peer = nla_data(info->attrs[NL80211_ATTR_MAC]);
12305 action_code = nla_get_u8(info->attrs[NL80211_ATTR_TDLS_ACTION]);
12306 status_code = nla_get_u16(info->attrs[NL80211_ATTR_STATUS_CODE]);
12307 dialog_token = nla_get_u8(info->attrs[NL80211_ATTR_TDLS_DIALOG_TOKEN]);
12308 initiator = nla_get_flag(info->attrs[NL80211_ATTR_TDLS_INITIATOR]);
12309 if (info->attrs[NL80211_ATTR_TDLS_PEER_CAPABILITY])
12311 nla_get_u32(info->attrs[NL80211_ATTR_TDLS_PEER_CAPABILITY]);
12312 link_id = nl80211_link_id_or_invalid(info->attrs);
12317 nla_data(info->attrs[NL80211_ATTR_IE]),
12318 nla_len(info->attrs[NL80211_ATTR_IE]));
12332 if (!info->attrs[NL80211_ATTR_TDLS_OPERATION] ||
12333 !info->attrs[NL80211_ATTR_MAC])
12336 operation = nla_get_u8(info->attrs[NL80211_ATTR_TDLS_OPERATION]);
12337 peer = nla_data(info->attrs[NL80211_ATTR_MAC]);
12346 unsigned int link_id = nl80211_link_id(info->attrs);
12355 if (!info->attrs[NL80211_ATTR_WIPHY_FREQ] ||
12356 !info->attrs[NL80211_ATTR_DURATION])
12359 duration = nla_get_u32(info->attrs[NL80211_ATTR_DURATION]);
12440 if (!info->attrs[NL80211_ATTR_COOKIE])
12446 cookie = nla_get_u64(info->attrs[NL80211_ATTR_COOKIE]);
12455 unsigned int link_id = nl80211_link_id(info->attrs);
12465 err = nl80211_parse_tx_bitrate_mask(info, info->attrs,
12483 if (!info->attrs[NL80211_ATTR_FRAME_MATCH])
12486 if (info->attrs[NL80211_ATTR_FRAME_TYPE])
12487 frame_type = nla_get_u16(info->attrs[NL80211_ATTR_FRAME_TYPE]);
12512 if (info->attrs[NL80211_ATTR_RECEIVE_MULTICAST] &&
12521 nla_data(info->attrs[NL80211_ATTR_FRAME_MATCH]),
12522 nla_len(info->attrs[NL80211_ATTR_FRAME_MATCH]),
12523 info->attrs[NL80211_ATTR_RECEIVE_MULTICAST],
12538 info->attrs[NL80211_ATTR_DONT_WAIT_FOR_ACK],
12541 if (!info->attrs[NL80211_ATTR_FRAME])
12549 if (!info->attrs[NL80211_ATTR_WIPHY_FREQ])
12569 if (info->attrs[NL80211_ATTR_DURATION]) {
12572 params.wait = nla_get_u32(info->attrs[NL80211_ATTR_DURATION]);
12583 params.offchan = info->attrs[NL80211_ATTR_OFFCHANNEL_TX_OK];
12588 params.no_cck = nla_get_flag(info->attrs[NL80211_ATTR_TX_NO_CCK_RATE]);
12594 if (info->attrs[NL80211_ATTR_WIPHY_FREQ]) {
12610 params.link_id = nl80211_link_id_or_invalid(info->attrs);
12623 params.buf = nla_data(info->attrs[NL80211_ATTR_FRAME]);
12624 params.len = nla_len(info->attrs[NL80211_ATTR_FRAME]);
12626 if (info->attrs[NL80211_ATTR_CSA_C_OFFSETS_TX]) {
12627 int len = nla_len(info->attrs[NL80211_ATTR_CSA_C_OFFSETS_TX]);
12635 nla_data(info->attrs[NL80211_ATTR_CSA_C_OFFSETS_TX]);
12686 if (!info->attrs[NL80211_ATTR_COOKIE])
12710 cookie = nla_get_u64(info->attrs[NL80211_ATTR_COOKIE]);
12724 if (!info->attrs[NL80211_ATTR_PS_STATE])
12727 ps_state = nla_get_u32(info->attrs[NL80211_ATTR_PS_STATE]);
12979 struct nlattr *attrs[NL80211_ATTR_CQM_MAX + 1];
12983 cqm = info->attrs[NL80211_ATTR_CQM];
12987 err = nla_parse_nested_deprecated(attrs, NL80211_ATTR_CQM_MAX, cqm,
12993 if (attrs[NL80211_ATTR_CQM_RSSI_THOLD] &&
12994 attrs[NL80211_ATTR_CQM_RSSI_HYST]) {
12996 nla_data(attrs[NL80211_ATTR_CQM_RSSI_THOLD]);
12997 int len = nla_len(attrs[NL80211_ATTR_CQM_RSSI_THOLD]);
12998 u32 hysteresis = nla_get_u32(attrs[NL80211_ATTR_CQM_RSSI_HYST]);
13007 if (attrs[NL80211_ATTR_CQM_TXE_RATE] &&
13008 attrs[NL80211_ATTR_CQM_TXE_PKTS] &&
13009 attrs[NL80211_ATTR_CQM_TXE_INTVL]) {
13010 u32 rate = nla_get_u32(attrs[NL80211_ATTR_CQM_TXE_RATE]);
13011 u32 pkts = nla_get_u32(attrs[NL80211_ATTR_CQM_TXE_PKTS]);
13012 u32 intvl = nla_get_u32(attrs[NL80211_ATTR_CQM_TXE_INTVL]);
13054 if (info->attrs[NL80211_ATTR_MESH_CONFIG]) {
13061 if (!info->attrs[NL80211_ATTR_MESH_ID] ||
13062 !nla_len(info->attrs[NL80211_ATTR_MESH_ID]))
13065 setup.mesh_id = nla_data(info->attrs[NL80211_ATTR_MESH_ID]);
13066 setup.mesh_id_len = nla_len(info->attrs[NL80211_ATTR_MESH_ID]);
13068 if (info->attrs[NL80211_ATTR_MCAST_RATE] &&
13070 nla_get_u32(info->attrs[NL80211_ATTR_MCAST_RATE])))
13073 if (info->attrs[NL80211_ATTR_BEACON_INTERVAL]) {
13075 nla_get_u32(info->attrs[NL80211_ATTR_BEACON_INTERVAL]);
13084 if (info->attrs[NL80211_ATTR_DTIM_PERIOD]) {
13086 nla_get_u32(info->attrs[NL80211_ATTR_DTIM_PERIOD]);
13091 if (info->attrs[NL80211_ATTR_MESH_SETUP]) {
13101 if (info->attrs[NL80211_ATTR_WIPHY_FREQ]) {
13110 if (info->attrs[NL80211_ATTR_BSS_BASIC_RATES]) {
13111 u8 *rates = nla_data(info->attrs[NL80211_ATTR_BSS_BASIC_RATES]);
13113 nla_len(info->attrs[NL80211_ATTR_BSS_BASIC_RATES]);
13127 if (info->attrs[NL80211_ATTR_TX_RATES]) {
13128 err = nl80211_parse_tx_bitrate_mask(info, info->attrs,
13145 nla_get_flag(info->attrs[NL80211_ATTR_HANDLE_DFS]);
13147 if (info->attrs[NL80211_ATTR_CONTROL_PORT_OVER_NL80211]) {
13158 if (!err && info->attrs[NL80211_ATTR_SOCKET_OWNER])
13608 if (!info->attrs[NL80211_ATTR_WOWLAN_TRIGGERS]) {
13615 info->attrs[NL80211_ATTR_WOWLAN_TRIGGERS],
14009 if (!info->attrs[NL80211_ATTR_COALESCE_RULE]) {
14015 nla_for_each_nested(rule, info->attrs[NL80211_ATTR_COALESCE_RULE],
14029 nla_for_each_nested(rule, info->attrs[NL80211_ATTR_COALESCE_RULE],
14073 if (!info->attrs[NL80211_ATTR_REKEY_DATA])
14077 info->attrs[NL80211_ATTR_REKEY_DATA],
14154 if (!info->attrs[NL80211_ATTR_MAC])
14171 addr = nla_data(info->attrs[NL80211_ATTR_MAC]);
14286 if (!info->attrs[NL80211_ATTR_NAN_MASTER_PREF])
14290 nla_get_u8(info->attrs[NL80211_ATTR_NAN_MASTER_PREF]);
14292 if (info->attrs[NL80211_ATTR_BANDS]) {
14293 u32 bands = nla_get_u32(info->attrs[NL80211_ATTR_BANDS]);
14407 if (!info->attrs[NL80211_ATTR_NAN_FUNC])
14411 info->attrs[NL80211_ATTR_NAN_FUNC],
14641 if (!info->attrs[NL80211_ATTR_COOKIE])
14644 cookie = nla_get_u64(info->attrs[NL80211_ATTR_COOKIE]);
14665 if (info->attrs[NL80211_ATTR_NAN_MASTER_PREF]) {
14667 nla_get_u8(info->attrs[NL80211_ATTR_NAN_MASTER_PREF]);
14674 if (info->attrs[NL80211_ATTR_BANDS]) {
14675 u32 bands = nla_get_u32(info->attrs[NL80211_ATTR_BANDS]);
14869 if (!info->attrs[NL80211_ATTR_MDID] ||
14870 !info->attrs[NL80211_ATTR_IE])
14874 ft_params.md = nla_get_u16(info->attrs[NL80211_ATTR_MDID]);
14875 ft_params.ie = nla_data(info->attrs[NL80211_ATTR_IE]);
14876 ft_params.ie_len = nla_len(info->attrs[NL80211_ATTR_IE]);
14900 if (info->attrs[NL80211_ATTR_CRIT_PROT_ID])
14901 proto = nla_get_u16(info->attrs[NL80211_ATTR_CRIT_PROT_ID]);
14907 if (!info->attrs[NL80211_ATTR_MAX_CRIT_PROT_DURATION])
14911 nla_get_u16(info->attrs[NL80211_ATTR_MAX_CRIT_PROT_DURATION]);
14963 info->attrs);
14979 if (!info->attrs[NL80211_ATTR_VENDOR_ID] ||
14980 !info->attrs[NL80211_ATTR_VENDOR_SUBCMD])
14983 vid = nla_get_u32(info->attrs[NL80211_ATTR_VENDOR_ID]);
14984 subcmd = nla_get_u32(info->attrs[NL80211_ATTR_VENDOR_SUBCMD]);
15014 if (info->attrs[NL80211_ATTR_VENDOR_DATA]) {
15015 data = nla_data(info->attrs[NL80211_ATTR_VENDOR_DATA]);
15016 len = nla_len(info->attrs[NL80211_ATTR_VENDOR_DATA]);
15019 info->attrs[NL80211_ATTR_VENDOR_DATA],
15294 if (info->attrs[NL80211_ATTR_QOS_MAP]) {
15295 pos = nla_data(info->attrs[NL80211_ATTR_QOS_MAP]);
15296 len = nla_len(info->attrs[NL80211_ATTR_QOS_MAP]);
15345 if (!info->attrs[NL80211_ATTR_TSID] || !info->attrs[NL80211_ATTR_MAC] ||
15346 !info->attrs[NL80211_ATTR_USER_PRIO])
15349 tsid = nla_get_u8(info->attrs[NL80211_ATTR_TSID]);
15350 up = nla_get_u8(info->attrs[NL80211_ATTR_USER_PRIO]);
15361 peer = nla_data(info->attrs[NL80211_ATTR_MAC]);
15363 if (info->attrs[NL80211_ATTR_ADMITTED_TIME]) {
15365 nla_get_u16(info->attrs[NL80211_ATTR_ADMITTED_TIME]);
15399 if (!info->attrs[NL80211_ATTR_TSID] || !info->attrs[NL80211_ATTR_MAC])
15402 tsid = nla_get_u8(info->attrs[NL80211_ATTR_TSID]);
15403 peer = nla_data(info->attrs[NL80211_ATTR_MAC]);
15435 if (!info->attrs[NL80211_ATTR_MAC] ||
15436 !info->attrs[NL80211_ATTR_OPER_CLASS])
15462 addr = nla_data(info->attrs[NL80211_ATTR_MAC]);
15463 oper_class = nla_get_u8(info->attrs[NL80211_ATTR_OPER_CLASS]);
15493 if (!info->attrs[NL80211_ATTR_MAC])
15496 addr = nla_data(info->attrs[NL80211_ATTR_MAC]);
15521 nla = info->attrs[NL80211_ATTR_MULTICAST_TO_UNICAST_ENABLED];
15543 if (!info->attrs[NL80211_ATTR_MAC] || !info->attrs[NL80211_ATTR_PMK])
15552 pmk_conf.aa = nla_data(info->attrs[NL80211_ATTR_MAC]);
15558 pmk_conf.pmk = nla_data(info->attrs[NL80211_ATTR_PMK]);
15559 pmk_conf.pmk_len = nla_len(info->attrs[NL80211_ATTR_PMK]);
15566 if (info->attrs[NL80211_ATTR_PMKR0_NAME])
15568 nla_data(info->attrs[NL80211_ATTR_PMKR0_NAME]);
15592 if (!info->attrs[NL80211_ATTR_MAC])
15596 aa = nla_data(info->attrs[NL80211_ATTR_MAC]);
15612 if (!info->attrs[NL80211_ATTR_SSID] &&
15617 if (!info->attrs[NL80211_ATTR_BSSID])
15620 if (!info->attrs[NL80211_ATTR_STATUS_CODE])
15625 if (info->attrs[NL80211_ATTR_SSID]) {
15626 params.ssid.ssid_len = nla_len(info->attrs[NL80211_ATTR_SSID]);
15630 nla_data(info->attrs[NL80211_ATTR_SSID]),
15634 memcpy(params.bssid, nla_data(info->attrs[NL80211_ATTR_BSSID]),
15637 params.status = nla_get_u16(info->attrs[NL80211_ATTR_STATUS_CODE]);
15639 if (info->attrs[NL80211_ATTR_PMKID])
15640 params.pmkid = nla_data(info->attrs[NL80211_ATTR_PMKID]);
15647 bool dont_wait_for_ack = info->attrs[NL80211_ATTR_DONT_WAIT_FOR_ACK];
15667 if (!info->attrs[NL80211_ATTR_FRAME] ||
15668 !info->attrs[NL80211_ATTR_MAC] ||
15669 !info->attrs[NL80211_ATTR_CONTROL_PORT_ETHERTYPE]) {
15699 buf = nla_data(info->attrs[NL80211_ATTR_FRAME]);
15700 len = nla_len(info->attrs[NL80211_ATTR_FRAME]);
15701 dest = nla_data(info->attrs[NL80211_ATTR_MAC]);
15702 proto = nla_get_u16(info->attrs[NL80211_ATTR_CONTROL_PORT_ETHERTYPE]);
15704 nla_get_flag(info->attrs[NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT]);
15706 link_id = nl80211_link_id_or_invalid(info->attrs);
15726 unsigned int link_id = nl80211_link_id(info->attrs);
15801 if (!info->attrs[NL80211_ATTR_STATUS_CODE] ||
15802 !info->attrs[NL80211_ATTR_MAC])
15806 owe_info.status = nla_get_u16(info->attrs[NL80211_ATTR_STATUS_CODE]);
15807 nla_memcpy(owe_info.peer, info->attrs[NL80211_ATTR_MAC], ETH_ALEN);
15809 if (info->attrs[NL80211_ATTR_IE]) {
15810 owe_info.ie = nla_data(info->attrs[NL80211_ATTR_IE]);
15811 owe_info.ie_len = nla_len(info->attrs[NL80211_ATTR_IE]);
15831 if (!info->attrs[NL80211_ATTR_MAC] ||
15832 !info->attrs[NL80211_ATTR_FRAME]) {
15840 dest = nla_data(info->attrs[NL80211_ATTR_MAC]);
15841 buf = nla_data(info->attrs[NL80211_ATTR_FRAME]);
15842 len = nla_len(info->attrs[NL80211_ATTR_FRAME]);
15861 struct nlattr *attrs[], struct net_device *dev,
15870 if (!attrs[NL80211_TID_CONFIG_ATTR_TIDS])
15874 nla_get_flag(attrs[NL80211_TID_CONFIG_ATTR_OVERRIDE]);
15875 tid_conf->tids = nla_get_u16(attrs[NL80211_TID_CONFIG_ATTR_TIDS]);
15888 if (attrs[NL80211_TID_CONFIG_ATTR_NOACK]) {
15891 nla_get_u8(attrs[NL80211_TID_CONFIG_ATTR_NOACK]);
15894 if (attrs[NL80211_TID_CONFIG_ATTR_RETRY_SHORT]) {
15897 nla_get_u8(attrs[NL80211_TID_CONFIG_ATTR_RETRY_SHORT]);
15903 if (attrs[NL80211_TID_CONFIG_ATTR_RETRY_LONG]) {
15906 nla_get_u8(attrs[NL80211_TID_CONFIG_ATTR_RETRY_LONG]);
15912 if (attrs[NL80211_TID_CONFIG_ATTR_AMPDU_CTRL]) {
15915 nla_get_u8(attrs[NL80211_TID_CONFIG_ATTR_AMPDU_CTRL]);
15918 if (attrs[NL80211_TID_CONFIG_ATTR_RTSCTS_CTRL]) {
15921 nla_get_u8(attrs[NL80211_TID_CONFIG_ATTR_RTSCTS_CTRL]);
15924 if (attrs[NL80211_TID_CONFIG_ATTR_AMSDU_CTRL]) {
15927 nla_get_u8(attrs[NL80211_TID_CONFIG_ATTR_AMSDU_CTRL]);
15930 if (attrs[NL80211_TID_CONFIG_ATTR_TX_RATE_TYPE]) {
15933 tid_conf->txrate_type = nla_get_u8(attrs[idx]);
15937 err = nl80211_parse_tx_bitrate_mask(info, attrs, attr,
15965 struct nlattr *attrs[NL80211_TID_CONFIG_ATTR_MAX + 1];
15966 unsigned int link_id = nl80211_link_id(info->attrs);
15974 if (!info->attrs[NL80211_ATTR_TID_CONFIG])
15980 nla_for_each_nested(tid, info->attrs[NL80211_ATTR_TID_CONFIG],
15991 if (info->attrs[NL80211_ATTR_MAC])
15992 tid_config->peer = nla_data(info->attrs[NL80211_ATTR_MAC]);
15996 nla_for_each_nested(tid, info->attrs[NL80211_ATTR_TID_CONFIG],
15998 ret = nla_parse_nested(attrs, NL80211_TID_CONFIG_ATTR_MAX,
16004 ret = parse_tid_conf(rdev, attrs, dev,
16041 if (!info->attrs[NL80211_ATTR_COLOR_CHANGE_COUNT] ||
16042 !info->attrs[NL80211_ATTR_COLOR_CHANGE_COLOR] ||
16043 !info->attrs[NL80211_ATTR_COLOR_CHANGE_ELEMS])
16046 params.count = nla_get_u8(info->attrs[NL80211_ATTR_COLOR_CHANGE_COUNT]);
16047 params.color = nla_get_u8(info->attrs[NL80211_ATTR_COLOR_CHANGE_COLOR]);
16049 err = nl80211_parse_beacon(rdev, info->attrs, ¶ms.beacon_next,
16059 info->attrs[NL80211_ATTR_COLOR_CHANGE_ELEMS],
16135 if (!info->attrs[NL80211_ATTR_MAC] ||
16136 !info->attrs[NL80211_ATTR_FILS_KEK] ||
16137 !info->attrs[NL80211_ATTR_FILS_NONCES])
16140 fils_aad.macaddr = nla_data(info->attrs[NL80211_ATTR_MAC]);
16141 fils_aad.kek_len = nla_len(info->attrs[NL80211_ATTR_FILS_KEK]);
16142 fils_aad.kek = nla_data(info->attrs[NL80211_ATTR_FILS_KEK]);
16143 nonces = nla_data(info->attrs[NL80211_ATTR_FILS_NONCES]);
16153 unsigned int link_id = nl80211_link_id(info->attrs);
16168 if (!info->attrs[NL80211_ATTR_MAC] ||
16169 !is_valid_ether_addr(nla_data(info->attrs[NL80211_ATTR_MAC])))
16175 nla_data(info->attrs[NL80211_ATTR_MAC]));
16189 unsigned int link_id = nl80211_link_id(info->attrs);
16194 if (!info->attrs[NL80211_ATTR_MLO_LINK_ID])
16224 if (add && !info->attrs[NL80211_ATTR_MAC])
16227 if (!info->attrs[NL80211_ATTR_MLD_ADDR])
16230 if (add && !info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES])
16233 params.mld_mac = nla_data(info->attrs[NL80211_ATTR_MLD_ADDR]);
16235 if (info->attrs[NL80211_ATTR_MAC]) {
16236 params.link_mac = nla_data(info->attrs[NL80211_ATTR_MAC]);
16241 if (!info->attrs[NL80211_ATTR_MLO_LINK_ID])
16244 params.link_id = nla_get_u8(info->attrs[NL80211_ATTR_MLO_LINK_ID]);
16246 if (info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]) {
16248 nla_data(info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]);
16250 nla_len(info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]);
16253 if (info->attrs[NL80211_ATTR_HT_CAPABILITY])
16255 nla_data(info->attrs[NL80211_ATTR_HT_CAPABILITY]);
16257 if (info->attrs[NL80211_ATTR_VHT_CAPABILITY])
16259 nla_data(info->attrs[NL80211_ATTR_VHT_CAPABILITY]);
16261 if (info->attrs[NL80211_ATTR_HE_CAPABILITY]) {
16263 nla_data(info->attrs[NL80211_ATTR_HE_CAPABILITY]);
16265 nla_len(info->attrs[NL80211_ATTR_HE_CAPABILITY]);
16267 if (info->attrs[NL80211_ATTR_EHT_CAPABILITY]) {
16269 nla_data(info->attrs[NL80211_ATTR_EHT_CAPABILITY]);
16271 nla_len(info->attrs[NL80211_ATTR_EHT_CAPABILITY]);
16281 if (info->attrs[NL80211_ATTR_HE_6GHZ_CAPABILITY])
16283 nla_data(info->attrs[NL80211_ATTR_HE_6GHZ_CAPABILITY]);
16285 if (info->attrs[NL80211_ATTR_OPMODE_NOTIF]) {
16288 nla_get_u8(info->attrs[NL80211_ATTR_OPMODE_NOTIF]);
16329 if (!info->attrs[NL80211_ATTR_MLD_ADDR] ||
16330 !info->attrs[NL80211_ATTR_MLO_LINK_ID])
16333 params.mld_mac = nla_data(info->attrs[NL80211_ATTR_MLD_ADDR]);
16334 params.link_id = nla_get_u8(info->attrs[NL80211_ATTR_MLO_LINK_ID]);
16353 if (!info->attrs[NL80211_ATTR_MAC] &&
16357 if (info->attrs[NL80211_ATTR_MAC])
16358 hwts.macaddr = nla_data(info->attrs[NL80211_ATTR_MAC]);
16361 nla_get_flag(info->attrs[NL80211_ATTR_HW_TIMESTAMP_ENABLED]);
16480 info->attrs);
16511 struct nlattr *link_id = info->attrs[NL80211_ATTR_MLO_LINK_ID];
16534 if (info->attrs[NL80211_ATTR_MLO_LINK_ID] ||
16643 if (!info->attrs[NL80211_ATTR_SAR_SPEC])
16647 info->attrs[NL80211_ATTR_SAR_SPEC],