Lines Matching refs:msg
581 static int nl80211_msg_put_channel(struct sk_buff *msg, in nl80211_msg_put_channel() argument
592 if (nla_put_u32(msg, NL80211_FREQUENCY_ATTR_FREQ, in nl80211_msg_put_channel()
597 nla_put_flag(msg, NL80211_FREQUENCY_ATTR_DISABLED)) in nl80211_msg_put_channel()
600 if (nla_put_flag(msg, NL80211_FREQUENCY_ATTR_NO_IR)) in nl80211_msg_put_channel()
602 if (nla_put_flag(msg, __NL80211_FREQUENCY_ATTR_NO_IBSS)) in nl80211_msg_put_channel()
606 if (nla_put_flag(msg, NL80211_FREQUENCY_ATTR_RADAR)) in nl80211_msg_put_channel()
613 if (nla_put_u32(msg, NL80211_FREQUENCY_ATTR_DFS_STATE, in nl80211_msg_put_channel()
616 if (nla_put_u32(msg, NL80211_FREQUENCY_ATTR_DFS_TIME, in nl80211_msg_put_channel()
619 if (nla_put_u32(msg, in nl80211_msg_put_channel()
628 nla_put_flag(msg, NL80211_FREQUENCY_ATTR_NO_HT40_MINUS)) in nl80211_msg_put_channel()
631 nla_put_flag(msg, NL80211_FREQUENCY_ATTR_NO_HT40_PLUS)) in nl80211_msg_put_channel()
634 nla_put_flag(msg, NL80211_FREQUENCY_ATTR_NO_80MHZ)) in nl80211_msg_put_channel()
637 nla_put_flag(msg, NL80211_FREQUENCY_ATTR_NO_160MHZ)) in nl80211_msg_put_channel()
640 nla_put_flag(msg, NL80211_FREQUENCY_ATTR_INDOOR_ONLY)) in nl80211_msg_put_channel()
643 nla_put_flag(msg, NL80211_FREQUENCY_ATTR_GO_CONCURRENT)) in nl80211_msg_put_channel()
646 nla_put_flag(msg, NL80211_FREQUENCY_ATTR_NO_20MHZ)) in nl80211_msg_put_channel()
649 nla_put_flag(msg, NL80211_FREQUENCY_ATTR_NO_10MHZ)) in nl80211_msg_put_channel()
653 if (nla_put_u32(msg, NL80211_FREQUENCY_ATTR_MAX_TX_POWER, in nl80211_msg_put_channel()
918 static int nl80211_put_iftypes(struct sk_buff *msg, u32 attr, u16 ifmodes) in nl80211_put_iftypes() argument
920 struct nlattr *nl_modes = nla_nest_start(msg, attr); in nl80211_put_iftypes()
928 if ((ifmodes & 1) && nla_put_flag(msg, i)) in nl80211_put_iftypes()
934 nla_nest_end(msg, nl_modes); in nl80211_put_iftypes()
942 struct sk_buff *msg, in nl80211_put_iface_combinations() argument
948 nl_combis = nla_nest_start(msg, in nl80211_put_iface_combinations()
959 nl_combi = nla_nest_start(msg, i + 1); in nl80211_put_iface_combinations()
963 nl_limits = nla_nest_start(msg, NL80211_IFACE_COMB_LIMITS); in nl80211_put_iface_combinations()
970 nl_limit = nla_nest_start(msg, j + 1); in nl80211_put_iface_combinations()
973 if (nla_put_u32(msg, NL80211_IFACE_LIMIT_MAX, in nl80211_put_iface_combinations()
976 if (nl80211_put_iftypes(msg, NL80211_IFACE_LIMIT_TYPES, in nl80211_put_iface_combinations()
979 nla_nest_end(msg, nl_limit); in nl80211_put_iface_combinations()
982 nla_nest_end(msg, nl_limits); in nl80211_put_iface_combinations()
985 nla_put_flag(msg, NL80211_IFACE_COMB_STA_AP_BI_MATCH)) in nl80211_put_iface_combinations()
987 if (nla_put_u32(msg, NL80211_IFACE_COMB_NUM_CHANNELS, in nl80211_put_iface_combinations()
989 nla_put_u32(msg, NL80211_IFACE_COMB_MAXNUM, in nl80211_put_iface_combinations()
993 (nla_put_u32(msg, NL80211_IFACE_COMB_RADAR_DETECT_WIDTHS, in nl80211_put_iface_combinations()
995 nla_put_u32(msg, NL80211_IFACE_COMB_RADAR_DETECT_REGIONS, in nl80211_put_iface_combinations()
999 nla_nest_end(msg, nl_combi); in nl80211_put_iface_combinations()
1002 nla_nest_end(msg, nl_combis); in nl80211_put_iface_combinations()
1011 struct sk_buff *msg) in nl80211_send_wowlan_tcp_caps() argument
1019 nl_tcp = nla_nest_start(msg, NL80211_WOWLAN_TRIG_TCP_CONNECTION); in nl80211_send_wowlan_tcp_caps()
1023 if (nla_put_u32(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD, in nl80211_send_wowlan_tcp_caps()
1027 if (nla_put_u32(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD, in nl80211_send_wowlan_tcp_caps()
1031 if (tcp->seq && nla_put_flag(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ)) in nl80211_send_wowlan_tcp_caps()
1034 if (tcp->tok && nla_put(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN, in nl80211_send_wowlan_tcp_caps()
1038 if (nla_put_u32(msg, NL80211_WOWLAN_TCP_DATA_INTERVAL, in nl80211_send_wowlan_tcp_caps()
1042 if (nla_put_u32(msg, NL80211_WOWLAN_TCP_WAKE_PAYLOAD, in nl80211_send_wowlan_tcp_caps()
1046 nla_nest_end(msg, nl_tcp); in nl80211_send_wowlan_tcp_caps()
1050 static int nl80211_send_wowlan(struct sk_buff *msg, in nl80211_send_wowlan() argument
1059 nl_wowlan = nla_nest_start(msg, NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED); in nl80211_send_wowlan()
1064 nla_put_flag(msg, NL80211_WOWLAN_TRIG_ANY)) || in nl80211_send_wowlan()
1066 nla_put_flag(msg, NL80211_WOWLAN_TRIG_DISCONNECT)) || in nl80211_send_wowlan()
1068 nla_put_flag(msg, NL80211_WOWLAN_TRIG_MAGIC_PKT)) || in nl80211_send_wowlan()
1070 nla_put_flag(msg, NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED)) || in nl80211_send_wowlan()
1072 nla_put_flag(msg, NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE)) || in nl80211_send_wowlan()
1074 nla_put_flag(msg, NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST)) || in nl80211_send_wowlan()
1076 nla_put_flag(msg, NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE)) || in nl80211_send_wowlan()
1078 nla_put_flag(msg, NL80211_WOWLAN_TRIG_RFKILL_RELEASE))) in nl80211_send_wowlan()
1089 if (nla_put(msg, NL80211_WOWLAN_TRIG_PKT_PATTERN, in nl80211_send_wowlan()
1095 nla_put_u32(msg, NL80211_WOWLAN_TRIG_NET_DETECT, in nl80211_send_wowlan()
1099 if (large && nl80211_send_wowlan_tcp_caps(rdev, msg)) in nl80211_send_wowlan()
1102 nla_nest_end(msg, nl_wowlan); in nl80211_send_wowlan()
1108 static int nl80211_send_coalesce(struct sk_buff *msg, in nl80211_send_coalesce() argument
1123 if (nla_put(msg, NL80211_ATTR_COALESCE_RULE, sizeof(rule), &rule)) in nl80211_send_coalesce()
1129 static int nl80211_send_band_rateinfo(struct sk_buff *msg, in nl80211_send_band_rateinfo() argument
1138 (nla_put(msg, NL80211_BAND_ATTR_HT_MCS_SET, in nl80211_send_band_rateinfo()
1141 nla_put_u16(msg, NL80211_BAND_ATTR_HT_CAPA, in nl80211_send_band_rateinfo()
1143 nla_put_u8(msg, NL80211_BAND_ATTR_HT_AMPDU_FACTOR, in nl80211_send_band_rateinfo()
1145 nla_put_u8(msg, NL80211_BAND_ATTR_HT_AMPDU_DENSITY, in nl80211_send_band_rateinfo()
1151 (nla_put(msg, NL80211_BAND_ATTR_VHT_MCS_SET, in nl80211_send_band_rateinfo()
1154 nla_put_u32(msg, NL80211_BAND_ATTR_VHT_CAPA, in nl80211_send_band_rateinfo()
1159 nl_rates = nla_nest_start(msg, NL80211_BAND_ATTR_RATES); in nl80211_send_band_rateinfo()
1164 nl_rate = nla_nest_start(msg, i); in nl80211_send_band_rateinfo()
1169 if (nla_put_u32(msg, NL80211_BITRATE_ATTR_RATE, in nl80211_send_band_rateinfo()
1173 nla_put_flag(msg, in nl80211_send_band_rateinfo()
1177 nla_nest_end(msg, nl_rate); in nl80211_send_band_rateinfo()
1180 nla_nest_end(msg, nl_rates); in nl80211_send_band_rateinfo()
1186 nl80211_send_mgmt_stypes(struct sk_buff *msg, in nl80211_send_mgmt_stypes() argument
1197 nl_ifs = nla_nest_start(msg, NL80211_ATTR_TX_FRAME_TYPES); in nl80211_send_mgmt_stypes()
1202 nl_ftypes = nla_nest_start(msg, ift); in nl80211_send_mgmt_stypes()
1209 nla_put_u16(msg, NL80211_ATTR_FRAME_TYPE, in nl80211_send_mgmt_stypes()
1215 nla_nest_end(msg, nl_ftypes); in nl80211_send_mgmt_stypes()
1218 nla_nest_end(msg, nl_ifs); in nl80211_send_mgmt_stypes()
1220 nl_ifs = nla_nest_start(msg, NL80211_ATTR_RX_FRAME_TYPES); in nl80211_send_mgmt_stypes()
1225 nl_ftypes = nla_nest_start(msg, ift); in nl80211_send_mgmt_stypes()
1232 nla_put_u16(msg, NL80211_ATTR_FRAME_TYPE, in nl80211_send_mgmt_stypes()
1238 nla_nest_end(msg, nl_ftypes); in nl80211_send_mgmt_stypes()
1240 nla_nest_end(msg, nl_ifs); in nl80211_send_mgmt_stypes()
1254 struct sk_buff *msg, u32 portid, u32 seq, in nl80211_send_wiphy() argument
1268 hdr = nl80211hdr_put(msg, portid, seq, flags, cmd); in nl80211_send_wiphy()
1275 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_wiphy()
1276 nla_put_string(msg, NL80211_ATTR_WIPHY_NAME, in nl80211_send_wiphy()
1278 nla_put_u32(msg, NL80211_ATTR_GENERATION, in nl80211_send_wiphy()
1287 if (nla_put_u8(msg, NL80211_ATTR_WIPHY_RETRY_SHORT, in nl80211_send_wiphy()
1289 nla_put_u8(msg, NL80211_ATTR_WIPHY_RETRY_LONG, in nl80211_send_wiphy()
1291 nla_put_u32(msg, NL80211_ATTR_WIPHY_FRAG_THRESHOLD, in nl80211_send_wiphy()
1293 nla_put_u32(msg, NL80211_ATTR_WIPHY_RTS_THRESHOLD, in nl80211_send_wiphy()
1295 nla_put_u8(msg, NL80211_ATTR_WIPHY_COVERAGE_CLASS, in nl80211_send_wiphy()
1297 nla_put_u8(msg, NL80211_ATTR_MAX_NUM_SCAN_SSIDS, in nl80211_send_wiphy()
1299 nla_put_u8(msg, NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS, in nl80211_send_wiphy()
1301 nla_put_u16(msg, NL80211_ATTR_MAX_SCAN_IE_LEN, in nl80211_send_wiphy()
1303 nla_put_u16(msg, NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN, in nl80211_send_wiphy()
1305 nla_put_u8(msg, NL80211_ATTR_MAX_MATCH_SETS, in nl80211_send_wiphy()
1310 nla_put_flag(msg, NL80211_ATTR_SUPPORT_IBSS_RSN)) in nl80211_send_wiphy()
1313 nla_put_flag(msg, NL80211_ATTR_SUPPORT_MESH_AUTH)) in nl80211_send_wiphy()
1316 nla_put_flag(msg, NL80211_ATTR_SUPPORT_AP_UAPSD)) in nl80211_send_wiphy()
1319 nla_put_flag(msg, NL80211_ATTR_ROAM_SUPPORT)) in nl80211_send_wiphy()
1322 nla_put_flag(msg, NL80211_ATTR_TDLS_SUPPORT)) in nl80211_send_wiphy()
1325 nla_put_flag(msg, NL80211_ATTR_TDLS_EXTERNAL_SETUP)) in nl80211_send_wiphy()
1331 if (nla_put(msg, NL80211_ATTR_CIPHER_SUITES, in nl80211_send_wiphy()
1336 if (nla_put_u8(msg, NL80211_ATTR_MAX_NUM_PMKIDS, in nl80211_send_wiphy()
1341 nla_put_flag(msg, NL80211_ATTR_CONTROL_PORT_ETHERTYPE)) in nl80211_send_wiphy()
1344 if (nla_put_u32(msg, NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX, in nl80211_send_wiphy()
1346 nla_put_u32(msg, NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX, in nl80211_send_wiphy()
1351 nla_put_u32(msg, NL80211_ATTR_PROBE_RESP_OFFLOAD, in nl80211_send_wiphy()
1362 if (nla_put_u32(msg, in nl80211_send_wiphy()
1365 nla_put_u32(msg, in nl80211_send_wiphy()
1376 if (nl80211_put_iftypes(msg, NL80211_ATTR_SUPPORTED_IFTYPES, in nl80211_send_wiphy()
1383 nl_bands = nla_nest_start(msg, NL80211_ATTR_WIPHY_BANDS); in nl80211_send_wiphy()
1396 nl_band = nla_nest_start(msg, band); in nl80211_send_wiphy()
1402 if (nl80211_send_band_rateinfo(msg, sband)) in nl80211_send_wiphy()
1410 msg, NL80211_BAND_ATTR_FREQS); in nl80211_send_wiphy()
1417 nl_freq = nla_nest_start(msg, i); in nl80211_send_wiphy()
1424 msg, chan, in nl80211_send_wiphy()
1428 nla_nest_end(msg, nl_freq); in nl80211_send_wiphy()
1436 nla_nest_end(msg, nl_freqs); in nl80211_send_wiphy()
1439 nla_nest_end(msg, nl_band); in nl80211_send_wiphy()
1448 nla_nest_end(msg, nl_bands); in nl80211_send_wiphy()
1461 nl_cmds = nla_nest_start(msg, NL80211_ATTR_SUPPORTED_COMMANDS); in nl80211_send_wiphy()
1470 if (nla_put_u32(msg, i, NL80211_CMD_ ## n)) \ in nl80211_send_wiphy()
1499 if (nla_put_u32(msg, i, NL80211_CMD_SET_WIPHY_NETNS)) in nl80211_send_wiphy()
1505 if (nla_put_u32(msg, i, NL80211_CMD_SET_CHANNEL)) in nl80211_send_wiphy()
1519 if (nla_put_u32(msg, i, NL80211_CMD_REGISTER_BEACONS)) in nl80211_send_wiphy()
1542 if (nla_put_u32(msg, i, NL80211_CMD_CONNECT)) in nl80211_send_wiphy()
1548 if (nla_put_u32(msg, i, NL80211_CMD_DISCONNECT)) in nl80211_send_wiphy()
1552 nla_nest_end(msg, nl_cmds); in nl80211_send_wiphy()
1559 nla_put_u32(msg, in nl80211_send_wiphy()
1565 nla_put_flag(msg, NL80211_ATTR_OFFCHANNEL_TX_OK)) in nl80211_send_wiphy()
1568 if (nl80211_send_mgmt_stypes(msg, mgmt_stypes)) in nl80211_send_wiphy()
1575 if (nl80211_send_wowlan(msg, rdev, state->split)) in nl80211_send_wiphy()
1584 if (nl80211_put_iftypes(msg, NL80211_ATTR_SOFTWARE_IFTYPES, in nl80211_send_wiphy()
1588 if (nl80211_put_iface_combinations(&rdev->wiphy, msg, in nl80211_send_wiphy()
1597 nla_put_u32(msg, NL80211_ATTR_DEVICE_AP_SME, in nl80211_send_wiphy()
1609 if (nla_put_u32(msg, NL80211_ATTR_FEATURE_FLAGS, features)) in nl80211_send_wiphy()
1613 nla_put(msg, NL80211_ATTR_HT_CAPABILITY_MASK, in nl80211_send_wiphy()
1620 nla_put_u32(msg, NL80211_ATTR_MAC_ACL_MAX, in nl80211_send_wiphy()
1638 (nla_put(msg, NL80211_ATTR_EXT_CAPA, in nl80211_send_wiphy()
1641 nla_put(msg, NL80211_ATTR_EXT_CAPA_MASK, in nl80211_send_wiphy()
1647 nla_put(msg, NL80211_ATTR_VHT_CAPABILITY_MASK, in nl80211_send_wiphy()
1655 if (nl80211_send_coalesce(msg, rdev)) in nl80211_send_wiphy()
1659 (nla_put_flag(msg, NL80211_ATTR_SUPPORT_5_MHZ) || in nl80211_send_wiphy()
1660 nla_put_flag(msg, NL80211_ATTR_SUPPORT_10_MHZ))) in nl80211_send_wiphy()
1664 nla_put_u32(msg, NL80211_ATTR_MAX_AP_ASSOC_STA, in nl80211_send_wiphy()
1675 nested = nla_nest_start(msg, NL80211_ATTR_VENDOR_DATA); in nl80211_send_wiphy()
1681 if (nla_put(msg, i + 1, sizeof(*info), info)) in nl80211_send_wiphy()
1684 nla_nest_end(msg, nested); in nl80211_send_wiphy()
1691 nested = nla_nest_start(msg, in nl80211_send_wiphy()
1698 if (nla_put(msg, i + 1, sizeof(*info), info)) in nl80211_send_wiphy()
1701 nla_nest_end(msg, nested); in nl80211_send_wiphy()
1707 nla_put_u8(msg, NL80211_ATTR_MAX_CSA_COUNTERS, in nl80211_send_wiphy()
1712 nla_put_flag(msg, NL80211_ATTR_WIPHY_SELF_MANAGED_REG)) in nl80211_send_wiphy()
1715 if (nla_put(msg, NL80211_ATTR_EXT_FEATURES, in nl80211_send_wiphy()
1725 genlmsg_end(msg, hdr); in nl80211_send_wiphy()
1729 genlmsg_cancel(msg, hdr); in nl80211_send_wiphy()
1848 struct sk_buff *msg; in nl80211_get_wiphy() local
1852 msg = nlmsg_new(4096, GFP_KERNEL); in nl80211_get_wiphy()
1853 if (!msg) in nl80211_get_wiphy()
1856 if (nl80211_send_wiphy(rdev, NL80211_CMD_NEW_WIPHY, msg, in nl80211_get_wiphy()
1859 nlmsg_free(msg); in nl80211_get_wiphy()
1863 return genlmsg_reply(msg, info); in nl80211_get_wiphy()
2334 static int nl80211_send_chandef(struct sk_buff *msg, in nl80211_send_chandef() argument
2340 if (nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ, in nl80211_send_chandef()
2347 if (nla_put_u32(msg, NL80211_ATTR_WIPHY_CHANNEL_TYPE, in nl80211_send_chandef()
2354 if (nla_put_u32(msg, NL80211_ATTR_CHANNEL_WIDTH, chandef->width)) in nl80211_send_chandef()
2356 if (nla_put_u32(msg, NL80211_ATTR_CENTER_FREQ1, chandef->center_freq1)) in nl80211_send_chandef()
2359 nla_put_u32(msg, NL80211_ATTR_CENTER_FREQ2, chandef->center_freq2)) in nl80211_send_chandef()
2364 static int nl80211_send_iface(struct sk_buff *msg, u32 portid, u32 seq, int flags, in nl80211_send_iface() argument
2375 hdr = nl80211hdr_put(msg, portid, seq, flags, cmd); in nl80211_send_iface()
2380 (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) || in nl80211_send_iface()
2381 nla_put_string(msg, NL80211_ATTR_IFNAME, dev->name))) in nl80211_send_iface()
2384 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_iface()
2385 nla_put_u32(msg, NL80211_ATTR_IFTYPE, wdev->iftype) || in nl80211_send_iface()
2386 nla_put_u64(msg, NL80211_ATTR_WDEV, wdev_id(wdev)) || in nl80211_send_iface()
2387 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, wdev_address(wdev)) || in nl80211_send_iface()
2388 nla_put_u32(msg, NL80211_ATTR_GENERATION, in nl80211_send_iface()
2399 if (nl80211_send_chandef(msg, &chandef)) in nl80211_send_iface()
2405 if (nla_put(msg, NL80211_ATTR_SSID, wdev->ssid_len, wdev->ssid)) in nl80211_send_iface()
2409 genlmsg_end(msg, hdr); in nl80211_send_iface()
2413 genlmsg_cancel(msg, hdr); in nl80211_send_iface()
2462 struct sk_buff *msg; in nl80211_get_interface() local
2466 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_get_interface()
2467 if (!msg) in nl80211_get_interface()
2470 if (nl80211_send_iface(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_interface()
2472 nlmsg_free(msg); in nl80211_get_interface()
2476 return genlmsg_reply(msg, info); in nl80211_get_interface()
2617 struct sk_buff *msg, *event; in nl80211_new_interface() local
2664 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_new_interface()
2665 if (!msg) in nl80211_new_interface()
2673 nlmsg_free(msg); in nl80211_new_interface()
2676 nlmsg_free(msg); in nl80211_new_interface()
2715 if (nl80211_send_iface(msg, info->snd_portid, info->snd_seq, 0, in nl80211_new_interface()
2717 nlmsg_free(msg); in nl80211_new_interface()
2735 return genlmsg_reply(msg, info); in nl80211_new_interface()
2742 struct sk_buff *msg; in nl80211_del_interface() local
2748 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_del_interface()
2749 if (msg && nl80211_send_iface(msg, 0, 0, 0, rdev, wdev, true) < 0) { in nl80211_del_interface()
2750 nlmsg_free(msg); in nl80211_del_interface()
2751 msg = NULL; in nl80211_del_interface()
2765 if (status >= 0 && msg) in nl80211_del_interface()
2767 msg, 0, NL80211_MCGRP_CONFIG, in nl80211_del_interface()
2770 nlmsg_free(msg); in nl80211_del_interface()
2793 struct sk_buff *msg; member
2804 nla_put(cookie->msg, NL80211_ATTR_KEY_DATA, in get_key_callback()
2807 nla_put(cookie->msg, NL80211_ATTR_KEY_SEQ, in get_key_callback()
2810 nla_put_u32(cookie->msg, NL80211_ATTR_KEY_CIPHER, in get_key_callback()
2814 key = nla_nest_start(cookie->msg, NL80211_ATTR_KEY); in get_key_callback()
2819 nla_put(cookie->msg, NL80211_KEY_DATA, in get_key_callback()
2822 nla_put(cookie->msg, NL80211_KEY_SEQ, in get_key_callback()
2825 nla_put_u32(cookie->msg, NL80211_KEY_CIPHER, in get_key_callback()
2829 if (nla_put_u8(cookie->msg, NL80211_ATTR_KEY_IDX, cookie->idx)) in get_key_callback()
2832 nla_nest_end(cookie->msg, key); in get_key_callback()
2851 struct sk_buff *msg; in nl80211_get_key() local
2879 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_get_key()
2880 if (!msg) in nl80211_get_key()
2883 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_key()
2888 cookie.msg = msg; in nl80211_get_key()
2891 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) || in nl80211_get_key()
2892 nla_put_u8(msg, NL80211_ATTR_KEY_IDX, key_idx)) in nl80211_get_key()
2895 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, mac_addr)) in nl80211_get_key()
2907 genlmsg_end(msg, hdr); in nl80211_get_key()
2908 return genlmsg_reply(msg, info); in nl80211_get_key()
2913 nlmsg_free(msg); in nl80211_get_key()
3578 static bool nl80211_put_sta_rate(struct sk_buff *msg, struct rate_info *info, in nl80211_put_sta_rate() argument
3586 rate = nla_nest_start(msg, attr); in nl80211_put_sta_rate()
3595 nla_put_u32(msg, NL80211_RATE_INFO_BITRATE32, bitrate)) in nl80211_put_sta_rate()
3598 nla_put_u16(msg, NL80211_RATE_INFO_BITRATE, bitrate_compat)) in nl80211_put_sta_rate()
3625 if (rate_flg && nla_put_flag(msg, rate_flg)) in nl80211_put_sta_rate()
3629 if (nla_put_u8(msg, NL80211_RATE_INFO_MCS, info->mcs)) in nl80211_put_sta_rate()
3632 nla_put_flag(msg, NL80211_RATE_INFO_SHORT_GI)) in nl80211_put_sta_rate()
3635 if (nla_put_u8(msg, NL80211_RATE_INFO_VHT_MCS, info->mcs)) in nl80211_put_sta_rate()
3637 if (nla_put_u8(msg, NL80211_RATE_INFO_VHT_NSS, info->nss)) in nl80211_put_sta_rate()
3640 nla_put_flag(msg, NL80211_RATE_INFO_SHORT_GI)) in nl80211_put_sta_rate()
3644 nla_nest_end(msg, rate); in nl80211_put_sta_rate()
3648 static bool nl80211_put_signal(struct sk_buff *msg, u8 mask, s8 *signal, in nl80211_put_signal() argument
3657 attr = nla_nest_start(msg, id); in nl80211_put_signal()
3665 if (nla_put_u8(msg, i, signal[i])) in nl80211_put_signal()
3669 nla_nest_end(msg, attr); in nl80211_put_signal()
3674 static int nl80211_send_station(struct sk_buff *msg, u32 cmd, u32 portid, in nl80211_send_station() argument
3683 hdr = nl80211hdr_put(msg, portid, seq, flags, cmd); in nl80211_send_station()
3687 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) || in nl80211_send_station()
3688 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, mac_addr) || in nl80211_send_station()
3689 nla_put_u32(msg, NL80211_ATTR_GENERATION, sinfo->generation)) in nl80211_send_station()
3692 sinfoattr = nla_nest_start(msg, NL80211_ATTR_STA_INFO); in nl80211_send_station()
3698 nla_put_ ## type(msg, NL80211_STA_INFO_ ## attr, \ in nl80211_send_station()
3708 nla_put_u32(msg, NL80211_STA_INFO_RX_BYTES, in nl80211_send_station()
3714 nla_put_u32(msg, NL80211_STA_INFO_TX_BYTES, in nl80211_send_station()
3733 if (!nl80211_put_signal(msg, sinfo->chains, in nl80211_send_station()
3739 if (!nl80211_put_signal(msg, sinfo->chains, in nl80211_send_station()
3745 if (!nl80211_put_sta_rate(msg, &sinfo->txrate, in nl80211_send_station()
3750 if (!nl80211_put_sta_rate(msg, &sinfo->rxrate, in nl80211_send_station()
3766 bss_param = nla_nest_start(msg, NL80211_STA_INFO_BSS_PARAM); in nl80211_send_station()
3771 nla_put_flag(msg, NL80211_STA_BSS_PARAM_CTS_PROT)) || in nl80211_send_station()
3773 nla_put_flag(msg, NL80211_STA_BSS_PARAM_SHORT_PREAMBLE)) || in nl80211_send_station()
3775 nla_put_flag(msg, NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME)) || in nl80211_send_station()
3776 nla_put_u8(msg, NL80211_STA_BSS_PARAM_DTIM_PERIOD, in nl80211_send_station()
3778 nla_put_u16(msg, NL80211_STA_BSS_PARAM_BEACON_INTERVAL, in nl80211_send_station()
3782 nla_nest_end(msg, bss_param); in nl80211_send_station()
3785 nla_put(msg, NL80211_STA_INFO_STA_FLAGS, in nl80211_send_station()
3801 tidsattr = nla_nest_start(msg, NL80211_STA_INFO_TID_STATS); in nl80211_send_station()
3814 tidattr = nla_nest_start(msg, tid + 1); in nl80211_send_station()
3820 nla_put_ ## type(msg, NL80211_TID_STATS_ ## attr, \ in nl80211_send_station()
3831 nla_nest_end(msg, tidattr); in nl80211_send_station()
3834 nla_nest_end(msg, tidsattr); in nl80211_send_station()
3837 nla_nest_end(msg, sinfoattr); in nl80211_send_station()
3840 nla_put(msg, NL80211_ATTR_IE, sinfo->assoc_req_ies_len, in nl80211_send_station()
3844 genlmsg_end(msg, hdr); in nl80211_send_station()
3848 genlmsg_cancel(msg, hdr); in nl80211_send_station()
3910 struct sk_buff *msg; in nl80211_get_station() local
3928 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_get_station()
3929 if (!msg) in nl80211_get_station()
3932 if (nl80211_send_station(msg, NL80211_CMD_NEW_STATION, in nl80211_get_station()
3935 nlmsg_free(msg); in nl80211_get_station()
3939 return genlmsg_reply(msg, info); in nl80211_get_station()
4539 static int nl80211_send_mpath(struct sk_buff *msg, u32 portid, u32 seq, in nl80211_send_mpath() argument
4547 hdr = nl80211hdr_put(msg, portid, seq, flags, NL80211_CMD_NEW_MPATH); in nl80211_send_mpath()
4551 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) || in nl80211_send_mpath()
4552 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, dst) || in nl80211_send_mpath()
4553 nla_put(msg, NL80211_ATTR_MPATH_NEXT_HOP, ETH_ALEN, next_hop) || in nl80211_send_mpath()
4554 nla_put_u32(msg, NL80211_ATTR_GENERATION, pinfo->generation)) in nl80211_send_mpath()
4557 pinfoattr = nla_nest_start(msg, NL80211_ATTR_MPATH_INFO); in nl80211_send_mpath()
4561 nla_put_u32(msg, NL80211_MPATH_INFO_FRAME_QLEN, in nl80211_send_mpath()
4565 nla_put_u32(msg, NL80211_MPATH_INFO_SN, pinfo->sn)) || in nl80211_send_mpath()
4567 nla_put_u32(msg, NL80211_MPATH_INFO_METRIC, in nl80211_send_mpath()
4570 nla_put_u32(msg, NL80211_MPATH_INFO_EXPTIME, in nl80211_send_mpath()
4573 nla_put_u8(msg, NL80211_MPATH_INFO_FLAGS, in nl80211_send_mpath()
4576 nla_put_u32(msg, NL80211_MPATH_INFO_DISCOVERY_TIMEOUT, in nl80211_send_mpath()
4579 nla_put_u8(msg, NL80211_MPATH_INFO_DISCOVERY_RETRIES, in nl80211_send_mpath()
4583 nla_nest_end(msg, pinfoattr); in nl80211_send_mpath()
4585 genlmsg_end(msg, hdr); in nl80211_send_mpath()
4589 genlmsg_cancel(msg, hdr); in nl80211_send_mpath()
4650 struct sk_buff *msg; in nl80211_get_mpath() local
4671 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_get_mpath()
4672 if (!msg) in nl80211_get_mpath()
4675 if (nl80211_send_mpath(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_mpath()
4677 nlmsg_free(msg); in nl80211_get_mpath()
4681 return genlmsg_reply(msg, info); in nl80211_get_mpath()
4755 struct sk_buff *msg; in nl80211_get_mpp() local
4776 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_get_mpp()
4777 if (!msg) in nl80211_get_mpp()
4780 if (nl80211_send_mpath(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_mpp()
4782 nlmsg_free(msg); in nl80211_get_mpp()
4786 return genlmsg_reply(msg, info); in nl80211_get_mpp()
5024 struct sk_buff *msg; in nl80211_get_mesh_config() local
5044 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_get_mesh_config()
5045 if (!msg) in nl80211_get_mesh_config()
5047 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_mesh_config()
5051 pinfoattr = nla_nest_start(msg, NL80211_ATTR_MESH_CONFIG); in nl80211_get_mesh_config()
5054 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) || in nl80211_get_mesh_config()
5055 nla_put_u16(msg, NL80211_MESHCONF_RETRY_TIMEOUT, in nl80211_get_mesh_config()
5057 nla_put_u16(msg, NL80211_MESHCONF_CONFIRM_TIMEOUT, in nl80211_get_mesh_config()
5059 nla_put_u16(msg, NL80211_MESHCONF_HOLDING_TIMEOUT, in nl80211_get_mesh_config()
5061 nla_put_u16(msg, NL80211_MESHCONF_MAX_PEER_LINKS, in nl80211_get_mesh_config()
5063 nla_put_u8(msg, NL80211_MESHCONF_MAX_RETRIES, in nl80211_get_mesh_config()
5065 nla_put_u8(msg, NL80211_MESHCONF_TTL, in nl80211_get_mesh_config()
5067 nla_put_u8(msg, NL80211_MESHCONF_ELEMENT_TTL, in nl80211_get_mesh_config()
5069 nla_put_u8(msg, NL80211_MESHCONF_AUTO_OPEN_PLINKS, in nl80211_get_mesh_config()
5071 nla_put_u32(msg, NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR, in nl80211_get_mesh_config()
5073 nla_put_u8(msg, NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES, in nl80211_get_mesh_config()
5075 nla_put_u32(msg, NL80211_MESHCONF_PATH_REFRESH_TIME, in nl80211_get_mesh_config()
5077 nla_put_u16(msg, NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT, in nl80211_get_mesh_config()
5079 nla_put_u32(msg, NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT, in nl80211_get_mesh_config()
5081 nla_put_u16(msg, NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL, in nl80211_get_mesh_config()
5083 nla_put_u16(msg, NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL, in nl80211_get_mesh_config()
5085 nla_put_u16(msg, NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME, in nl80211_get_mesh_config()
5087 nla_put_u8(msg, NL80211_MESHCONF_HWMP_ROOTMODE, in nl80211_get_mesh_config()
5089 nla_put_u16(msg, NL80211_MESHCONF_HWMP_RANN_INTERVAL, in nl80211_get_mesh_config()
5091 nla_put_u8(msg, NL80211_MESHCONF_GATE_ANNOUNCEMENTS, in nl80211_get_mesh_config()
5093 nla_put_u8(msg, NL80211_MESHCONF_FORWARDING, in nl80211_get_mesh_config()
5095 nla_put_u32(msg, NL80211_MESHCONF_RSSI_THRESHOLD, in nl80211_get_mesh_config()
5097 nla_put_u32(msg, NL80211_MESHCONF_HT_OPMODE, in nl80211_get_mesh_config()
5099 nla_put_u32(msg, NL80211_MESHCONF_HWMP_PATH_TO_ROOT_TIMEOUT, in nl80211_get_mesh_config()
5101 nla_put_u16(msg, NL80211_MESHCONF_HWMP_ROOT_INTERVAL, in nl80211_get_mesh_config()
5103 nla_put_u16(msg, NL80211_MESHCONF_HWMP_CONFIRMATION_INTERVAL, in nl80211_get_mesh_config()
5105 nla_put_u32(msg, NL80211_MESHCONF_POWER_MODE, in nl80211_get_mesh_config()
5107 nla_put_u16(msg, NL80211_MESHCONF_AWAKE_WINDOW, in nl80211_get_mesh_config()
5109 nla_put_u32(msg, NL80211_MESHCONF_PLINK_TIMEOUT, in nl80211_get_mesh_config()
5112 nla_nest_end(msg, pinfoattr); in nl80211_get_mesh_config()
5113 genlmsg_end(msg, hdr); in nl80211_get_mesh_config()
5114 return genlmsg_reply(msg, info); in nl80211_get_mesh_config()
5117 genlmsg_cancel(msg, hdr); in nl80211_get_mesh_config()
5119 nlmsg_free(msg); in nl80211_get_mesh_config()
5392 struct sk_buff *msg) in nl80211_put_regdom() argument
5397 if (nla_put_string(msg, NL80211_ATTR_REG_ALPHA2, regdom->alpha2) || in nl80211_put_regdom()
5399 nla_put_u8(msg, NL80211_ATTR_DFS_REGION, regdom->dfs_region))) in nl80211_put_regdom()
5402 nl_reg_rules = nla_nest_start(msg, NL80211_ATTR_REG_RULES); in nl80211_put_regdom()
5417 nl_reg_rule = nla_nest_start(msg, i); in nl80211_put_regdom()
5426 if (nla_put_u32(msg, NL80211_ATTR_REG_RULE_FLAGS, in nl80211_put_regdom()
5428 nla_put_u32(msg, NL80211_ATTR_FREQ_RANGE_START, in nl80211_put_regdom()
5430 nla_put_u32(msg, NL80211_ATTR_FREQ_RANGE_END, in nl80211_put_regdom()
5432 nla_put_u32(msg, NL80211_ATTR_FREQ_RANGE_MAX_BW, in nl80211_put_regdom()
5434 nla_put_u32(msg, NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN, in nl80211_put_regdom()
5436 nla_put_u32(msg, NL80211_ATTR_POWER_RULE_MAX_EIRP, in nl80211_put_regdom()
5438 nla_put_u32(msg, NL80211_ATTR_DFS_CAC_TIME, in nl80211_put_regdom()
5442 nla_nest_end(msg, nl_reg_rule); in nl80211_put_regdom()
5445 nla_nest_end(msg, nl_reg_rules); in nl80211_put_regdom()
5457 struct sk_buff *msg; in nl80211_get_reg_do() local
5460 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_get_reg_do()
5461 if (!msg) in nl80211_get_reg_do()
5464 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_reg_do()
5474 nlmsg_free(msg); in nl80211_get_reg_do()
5485 nlmsg_free(msg); in nl80211_get_reg_do()
5490 nla_put_u32(msg, NL80211_ATTR_WIPHY, get_wiphy_idx(wiphy))) in nl80211_get_reg_do()
5495 nla_put_u32(msg, NL80211_ATTR_USER_REG_HINT_TYPE, in nl80211_get_reg_do()
5504 if (nl80211_put_regdom(regdom, msg)) in nl80211_get_reg_do()
5509 genlmsg_end(msg, hdr); in nl80211_get_reg_do()
5510 return genlmsg_reply(msg, info); in nl80211_get_reg_do()
5515 genlmsg_cancel(msg, hdr); in nl80211_get_reg_do()
5517 nlmsg_free(msg); in nl80211_get_reg_do()
5521 static int nl80211_send_regdom(struct sk_buff *msg, struct netlink_callback *cb, in nl80211_send_regdom() argument
5525 void *hdr = nl80211hdr_put(msg, NETLINK_CB(cb->skb).portid, seq, flags, in nl80211_send_regdom()
5533 if (nl80211_put_regdom(regdom, msg)) in nl80211_send_regdom()
5537 nla_put_u32(msg, NL80211_ATTR_USER_REG_HINT_TYPE, in nl80211_send_regdom()
5542 nla_put_u32(msg, NL80211_ATTR_WIPHY, get_wiphy_idx(wiphy))) in nl80211_send_regdom()
5546 nla_put_flag(msg, NL80211_ATTR_WIPHY_SELF_MANAGED_REG)) in nl80211_send_regdom()
5549 genlmsg_end(msg, hdr); in nl80211_send_regdom()
5553 genlmsg_cancel(msg, hdr); in nl80211_send_regdom()
6517 static int nl80211_send_bss(struct sk_buff *msg, struct netlink_callback *cb, in nl80211_send_bss() argument
6530 hdr = nl80211hdr_put(msg, NETLINK_CB(cb->skb).portid, seq, flags, in nl80211_send_bss()
6537 if (nla_put_u32(msg, NL80211_ATTR_GENERATION, rdev->bss_generation)) in nl80211_send_bss()
6540 nla_put_u32(msg, NL80211_ATTR_IFINDEX, wdev->netdev->ifindex)) in nl80211_send_bss()
6542 if (nla_put_u64(msg, NL80211_ATTR_WDEV, wdev_id(wdev))) in nl80211_send_bss()
6545 bss = nla_nest_start(msg, NL80211_ATTR_BSS); in nl80211_send_bss()
6549 nla_put(msg, NL80211_BSS_BSSID, ETH_ALEN, res->bssid))) in nl80211_send_bss()
6555 nla_put_flag(msg, NL80211_BSS_PRESP_DATA)) in nl80211_send_bss()
6563 if (nla_put_u64(msg, NL80211_BSS_TSF, ies->tsf)) in nl80211_send_bss()
6565 if (ies->len && nla_put(msg, NL80211_BSS_INFORMATION_ELEMENTS, in nl80211_send_bss()
6573 if (nla_put_u64(msg, NL80211_BSS_BEACON_TSF, ies->tsf)) in nl80211_send_bss()
6575 if (ies->len && nla_put(msg, NL80211_BSS_BEACON_IES, in nl80211_send_bss()
6582 nla_put_u16(msg, NL80211_BSS_BEACON_INTERVAL, res->beacon_interval)) in nl80211_send_bss()
6584 if (nla_put_u16(msg, NL80211_BSS_CAPABILITY, res->capability) || in nl80211_send_bss()
6585 nla_put_u32(msg, NL80211_BSS_FREQUENCY, res->channel->center_freq) || in nl80211_send_bss()
6586 nla_put_u32(msg, NL80211_BSS_CHAN_WIDTH, res->scan_width) || in nl80211_send_bss()
6587 nla_put_u32(msg, NL80211_BSS_SEEN_MS_AGO, in nl80211_send_bss()
6593 if (nla_put_u32(msg, NL80211_BSS_SIGNAL_MBM, res->signal)) in nl80211_send_bss()
6597 if (nla_put_u8(msg, NL80211_BSS_SIGNAL_UNSPEC, res->signal)) in nl80211_send_bss()
6608 nla_put_u32(msg, NL80211_BSS_STATUS, in nl80211_send_bss()
6614 nla_put_u32(msg, NL80211_BSS_STATUS, in nl80211_send_bss()
6622 nla_nest_end(msg, bss); in nl80211_send_bss()
6624 genlmsg_end(msg, hdr); in nl80211_send_bss()
6630 genlmsg_cancel(msg, hdr); in nl80211_send_bss()
6672 static int nl80211_send_survey(struct sk_buff *msg, u32 portid, u32 seq, in nl80211_send_survey() argument
6684 hdr = nl80211hdr_put(msg, portid, seq, flags, in nl80211_send_survey()
6689 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex)) in nl80211_send_survey()
6692 infoattr = nla_nest_start(msg, NL80211_ATTR_SURVEY_INFO); in nl80211_send_survey()
6697 nla_put_u32(msg, NL80211_SURVEY_INFO_FREQUENCY, in nl80211_send_survey()
6702 nla_put_u8(msg, NL80211_SURVEY_INFO_NOISE, survey->noise)) in nl80211_send_survey()
6705 nla_put_flag(msg, NL80211_SURVEY_INFO_IN_USE)) in nl80211_send_survey()
6708 nla_put_u64(msg, NL80211_SURVEY_INFO_TIME, in nl80211_send_survey()
6712 nla_put_u64(msg, NL80211_SURVEY_INFO_TIME_BUSY, in nl80211_send_survey()
6716 nla_put_u64(msg, NL80211_SURVEY_INFO_TIME_EXT_BUSY, in nl80211_send_survey()
6720 nla_put_u64(msg, NL80211_SURVEY_INFO_TIME_RX, in nl80211_send_survey()
6724 nla_put_u64(msg, NL80211_SURVEY_INFO_TIME_TX, in nl80211_send_survey()
6728 nla_put_u64(msg, NL80211_SURVEY_INFO_TIME_SCAN, in nl80211_send_survey()
6732 nla_nest_end(msg, infoattr); in nl80211_send_survey()
6734 genlmsg_end(msg, hdr); in nl80211_send_survey()
6738 genlmsg_cancel(msg, hdr); in nl80211_send_survey()
7965 struct sk_buff *msg; in nl80211_remain_on_channel() local
7993 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_remain_on_channel()
7994 if (!msg) in nl80211_remain_on_channel()
7997 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_remain_on_channel()
8010 if (nla_put_u64(msg, NL80211_ATTR_COOKIE, cookie)) in nl80211_remain_on_channel()
8013 genlmsg_end(msg, hdr); in nl80211_remain_on_channel()
8015 return genlmsg_reply(msg, info); in nl80211_remain_on_channel()
8020 nlmsg_free(msg); in nl80211_remain_on_channel()
8319 struct sk_buff *msg = NULL; in nl80211_tx_mgmt() local
8404 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_tx_mgmt()
8405 if (!msg) in nl80211_tx_mgmt()
8408 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_tx_mgmt()
8421 if (msg) { in nl80211_tx_mgmt()
8422 if (nla_put_u64(msg, NL80211_ATTR_COOKIE, cookie)) in nl80211_tx_mgmt()
8425 genlmsg_end(msg, hdr); in nl80211_tx_mgmt()
8426 return genlmsg_reply(msg, info); in nl80211_tx_mgmt()
8434 nlmsg_free(msg); in nl80211_tx_mgmt()
8507 struct sk_buff *msg; in nl80211_get_power_save() local
8516 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_get_power_save()
8517 if (!msg) in nl80211_get_power_save()
8520 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_power_save()
8532 if (nla_put_u32(msg, NL80211_ATTR_PS_STATE, ps_state)) in nl80211_get_power_save()
8535 genlmsg_end(msg, hdr); in nl80211_get_power_save()
8536 return genlmsg_reply(msg, info); in nl80211_get_power_save()
8541 nlmsg_free(msg); in nl80211_get_power_save()
8751 static int nl80211_send_wowlan_patterns(struct sk_buff *msg, in nl80211_send_wowlan_patterns() argument
8761 nl_pats = nla_nest_start(msg, NL80211_WOWLAN_TRIG_PKT_PATTERN); in nl80211_send_wowlan_patterns()
8766 nl_pat = nla_nest_start(msg, i + 1); in nl80211_send_wowlan_patterns()
8770 if (nla_put(msg, NL80211_PKTPAT_MASK, DIV_ROUND_UP(pat_len, 8), in nl80211_send_wowlan_patterns()
8772 nla_put(msg, NL80211_PKTPAT_PATTERN, pat_len, in nl80211_send_wowlan_patterns()
8774 nla_put_u32(msg, NL80211_PKTPAT_OFFSET, in nl80211_send_wowlan_patterns()
8777 nla_nest_end(msg, nl_pat); in nl80211_send_wowlan_patterns()
8779 nla_nest_end(msg, nl_pats); in nl80211_send_wowlan_patterns()
8784 static int nl80211_send_wowlan_tcp(struct sk_buff *msg, in nl80211_send_wowlan_tcp() argument
8792 nl_tcp = nla_nest_start(msg, NL80211_WOWLAN_TRIG_TCP_CONNECTION); in nl80211_send_wowlan_tcp()
8796 if (nla_put_in_addr(msg, NL80211_WOWLAN_TCP_SRC_IPV4, tcp->src) || in nl80211_send_wowlan_tcp()
8797 nla_put_in_addr(msg, NL80211_WOWLAN_TCP_DST_IPV4, tcp->dst) || in nl80211_send_wowlan_tcp()
8798 nla_put(msg, NL80211_WOWLAN_TCP_DST_MAC, ETH_ALEN, tcp->dst_mac) || in nl80211_send_wowlan_tcp()
8799 nla_put_u16(msg, NL80211_WOWLAN_TCP_SRC_PORT, tcp->src_port) || in nl80211_send_wowlan_tcp()
8800 nla_put_u16(msg, NL80211_WOWLAN_TCP_DST_PORT, tcp->dst_port) || in nl80211_send_wowlan_tcp()
8801 nla_put(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD, in nl80211_send_wowlan_tcp()
8803 nla_put_u32(msg, NL80211_WOWLAN_TCP_DATA_INTERVAL, in nl80211_send_wowlan_tcp()
8805 nla_put(msg, NL80211_WOWLAN_TCP_WAKE_PAYLOAD, in nl80211_send_wowlan_tcp()
8807 nla_put(msg, NL80211_WOWLAN_TCP_WAKE_MASK, in nl80211_send_wowlan_tcp()
8812 nla_put(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ, in nl80211_send_wowlan_tcp()
8817 nla_put(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN, in nl80211_send_wowlan_tcp()
8822 nla_nest_end(msg, nl_tcp); in nl80211_send_wowlan_tcp()
8827 static int nl80211_send_wowlan_nd(struct sk_buff *msg, in nl80211_send_wowlan_nd() argument
8836 nd = nla_nest_start(msg, NL80211_WOWLAN_TRIG_NET_DETECT); in nl80211_send_wowlan_nd()
8840 if (nla_put_u32(msg, NL80211_ATTR_SCHED_SCAN_INTERVAL, req->interval)) in nl80211_send_wowlan_nd()
8843 if (nla_put_u32(msg, NL80211_ATTR_SCHED_SCAN_DELAY, req->delay)) in nl80211_send_wowlan_nd()
8846 freqs = nla_nest_start(msg, NL80211_ATTR_SCAN_FREQUENCIES); in nl80211_send_wowlan_nd()
8851 nla_put_u32(msg, i, req->channels[i]->center_freq); in nl80211_send_wowlan_nd()
8853 nla_nest_end(msg, freqs); in nl80211_send_wowlan_nd()
8856 matches = nla_nest_start(msg, NL80211_ATTR_SCHED_SCAN_MATCH); in nl80211_send_wowlan_nd()
8858 match = nla_nest_start(msg, i); in nl80211_send_wowlan_nd()
8859 nla_put(msg, NL80211_SCHED_SCAN_MATCH_ATTR_SSID, in nl80211_send_wowlan_nd()
8862 nla_nest_end(msg, match); in nl80211_send_wowlan_nd()
8864 nla_nest_end(msg, matches); in nl80211_send_wowlan_nd()
8867 nla_nest_end(msg, nd); in nl80211_send_wowlan_nd()
8875 struct sk_buff *msg; in nl80211_get_wowlan() local
8890 msg = nlmsg_new(size, GFP_KERNEL); in nl80211_get_wowlan()
8891 if (!msg) in nl80211_get_wowlan()
8894 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_wowlan()
8902 nl_wowlan = nla_nest_start(msg, NL80211_ATTR_WOWLAN_TRIGGERS); in nl80211_get_wowlan()
8907 nla_put_flag(msg, NL80211_WOWLAN_TRIG_ANY)) || in nl80211_get_wowlan()
8909 nla_put_flag(msg, NL80211_WOWLAN_TRIG_DISCONNECT)) || in nl80211_get_wowlan()
8911 nla_put_flag(msg, NL80211_WOWLAN_TRIG_MAGIC_PKT)) || in nl80211_get_wowlan()
8913 nla_put_flag(msg, NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE)) || in nl80211_get_wowlan()
8915 nla_put_flag(msg, NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST)) || in nl80211_get_wowlan()
8917 nla_put_flag(msg, NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE)) || in nl80211_get_wowlan()
8919 nla_put_flag(msg, NL80211_WOWLAN_TRIG_RFKILL_RELEASE))) in nl80211_get_wowlan()
8922 if (nl80211_send_wowlan_patterns(msg, rdev)) in nl80211_get_wowlan()
8925 if (nl80211_send_wowlan_tcp(msg, in nl80211_get_wowlan()
8930 msg, in nl80211_get_wowlan()
8934 nla_nest_end(msg, nl_wowlan); in nl80211_get_wowlan()
8937 genlmsg_end(msg, hdr); in nl80211_get_wowlan()
8938 return genlmsg_reply(msg, info); in nl80211_get_wowlan()
8941 nlmsg_free(msg); in nl80211_get_wowlan()
9323 static int nl80211_send_coalesce_rules(struct sk_buff *msg, in nl80211_send_coalesce_rules() argument
9333 nl_rules = nla_nest_start(msg, NL80211_ATTR_COALESCE_RULE); in nl80211_send_coalesce_rules()
9338 nl_rule = nla_nest_start(msg, i + 1); in nl80211_send_coalesce_rules()
9343 if (nla_put_u32(msg, NL80211_ATTR_COALESCE_RULE_DELAY, in nl80211_send_coalesce_rules()
9347 if (nla_put_u32(msg, NL80211_ATTR_COALESCE_RULE_CONDITION, in nl80211_send_coalesce_rules()
9351 nl_pats = nla_nest_start(msg, in nl80211_send_coalesce_rules()
9357 nl_pat = nla_nest_start(msg, j + 1); in nl80211_send_coalesce_rules()
9361 if (nla_put(msg, NL80211_PKTPAT_MASK, in nl80211_send_coalesce_rules()
9364 nla_put(msg, NL80211_PKTPAT_PATTERN, pat_len, in nl80211_send_coalesce_rules()
9366 nla_put_u32(msg, NL80211_PKTPAT_OFFSET, in nl80211_send_coalesce_rules()
9369 nla_nest_end(msg, nl_pat); in nl80211_send_coalesce_rules()
9371 nla_nest_end(msg, nl_pats); in nl80211_send_coalesce_rules()
9372 nla_nest_end(msg, nl_rule); in nl80211_send_coalesce_rules()
9374 nla_nest_end(msg, nl_rules); in nl80211_send_coalesce_rules()
9382 struct sk_buff *msg; in nl80211_get_coalesce() local
9388 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_get_coalesce()
9389 if (!msg) in nl80211_get_coalesce()
9392 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_coalesce()
9397 if (rdev->coalesce && nl80211_send_coalesce_rules(msg, rdev)) in nl80211_get_coalesce()
9400 genlmsg_end(msg, hdr); in nl80211_get_coalesce()
9401 return genlmsg_reply(msg, info); in nl80211_get_coalesce()
9404 nlmsg_free(msg); in nl80211_get_coalesce()
9655 struct sk_buff *msg; in nl80211_probe_client() local
9671 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_probe_client()
9672 if (!msg) in nl80211_probe_client()
9675 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_probe_client()
9688 if (nla_put_u64(msg, NL80211_ATTR_COOKIE, cookie)) in nl80211_probe_client()
9691 genlmsg_end(msg, hdr); in nl80211_probe_client()
9693 return genlmsg_reply(msg, info); in nl80211_probe_client()
9698 nlmsg_free(msg); in nl80211_probe_client()
9784 struct sk_buff *msg; in nl80211_get_protocol_features() local
9786 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_get_protocol_features()
9787 if (!msg) in nl80211_get_protocol_features()
9790 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_protocol_features()
9795 if (nla_put_u32(msg, NL80211_ATTR_PROTOCOL_FEATURES, in nl80211_get_protocol_features()
9799 genlmsg_end(msg, hdr); in nl80211_get_protocol_features()
9800 return genlmsg_reply(msg, info); in nl80211_get_protocol_features()
9803 kfree_skb(msg); in nl80211_get_protocol_features()
11044 struct sk_buff *msg; in nl80211_notify_wiphy() local
11050 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_notify_wiphy()
11051 if (!msg) in nl80211_notify_wiphy()
11054 if (nl80211_send_wiphy(rdev, cmd, msg, 0, 0, 0, &state) < 0) { in nl80211_notify_wiphy()
11055 nlmsg_free(msg); in nl80211_notify_wiphy()
11059 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_notify_wiphy()
11063 static int nl80211_add_scan_req(struct sk_buff *msg, in nl80211_add_scan_req() argument
11073 nest = nla_nest_start(msg, NL80211_ATTR_SCAN_SSIDS); in nl80211_add_scan_req()
11077 if (nla_put(msg, i, req->ssids[i].ssid_len, req->ssids[i].ssid)) in nl80211_add_scan_req()
11080 nla_nest_end(msg, nest); in nl80211_add_scan_req()
11082 nest = nla_nest_start(msg, NL80211_ATTR_SCAN_FREQUENCIES); in nl80211_add_scan_req()
11086 if (nla_put_u32(msg, i, req->channels[i]->center_freq)) in nl80211_add_scan_req()
11089 nla_nest_end(msg, nest); in nl80211_add_scan_req()
11092 nla_put(msg, NL80211_ATTR_IE, req->ie_len, req->ie)) in nl80211_add_scan_req()
11096 nla_put_u32(msg, NL80211_ATTR_SCAN_FLAGS, req->flags)) in nl80211_add_scan_req()
11104 static int nl80211_send_scan_msg(struct sk_buff *msg, in nl80211_send_scan_msg() argument
11112 hdr = nl80211hdr_put(msg, portid, seq, flags, cmd); in nl80211_send_scan_msg()
11116 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_scan_msg()
11117 (wdev->netdev && nla_put_u32(msg, NL80211_ATTR_IFINDEX, in nl80211_send_scan_msg()
11119 nla_put_u64(msg, NL80211_ATTR_WDEV, wdev_id(wdev))) in nl80211_send_scan_msg()
11123 nl80211_add_scan_req(msg, rdev); in nl80211_send_scan_msg()
11125 genlmsg_end(msg, hdr); in nl80211_send_scan_msg()
11129 genlmsg_cancel(msg, hdr); in nl80211_send_scan_msg()
11134 nl80211_send_sched_scan_msg(struct sk_buff *msg, in nl80211_send_sched_scan_msg() argument
11141 hdr = nl80211hdr_put(msg, portid, seq, flags, cmd); in nl80211_send_sched_scan_msg()
11145 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_sched_scan_msg()
11146 nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex)) in nl80211_send_sched_scan_msg()
11149 genlmsg_end(msg, hdr); in nl80211_send_sched_scan_msg()
11153 genlmsg_cancel(msg, hdr); in nl80211_send_sched_scan_msg()
11160 struct sk_buff *msg; in nl80211_send_scan_start() local
11162 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_send_scan_start()
11163 if (!msg) in nl80211_send_scan_start()
11166 if (nl80211_send_scan_msg(msg, rdev, wdev, 0, 0, 0, in nl80211_send_scan_start()
11168 nlmsg_free(msg); in nl80211_send_scan_start()
11172 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_scan_start()
11179 struct sk_buff *msg; in nl80211_build_scan_msg() local
11181 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_build_scan_msg()
11182 if (!msg) in nl80211_build_scan_msg()
11185 if (nl80211_send_scan_msg(msg, rdev, wdev, 0, 0, 0, in nl80211_build_scan_msg()
11188 nlmsg_free(msg); in nl80211_build_scan_msg()
11192 return msg; in nl80211_build_scan_msg()
11196 struct sk_buff *msg) in nl80211_send_scan_result() argument
11198 if (!msg) in nl80211_send_scan_result()
11201 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_scan_result()
11208 struct sk_buff *msg; in nl80211_send_sched_scan_results() local
11210 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_send_sched_scan_results()
11211 if (!msg) in nl80211_send_sched_scan_results()
11214 if (nl80211_send_sched_scan_msg(msg, rdev, netdev, 0, 0, 0, in nl80211_send_sched_scan_results()
11216 nlmsg_free(msg); in nl80211_send_sched_scan_results()
11220 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_sched_scan_results()
11227 struct sk_buff *msg; in nl80211_send_sched_scan() local
11229 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_send_sched_scan()
11230 if (!msg) in nl80211_send_sched_scan()
11233 if (nl80211_send_sched_scan_msg(msg, rdev, netdev, 0, 0, 0, cmd) < 0) { in nl80211_send_sched_scan()
11234 nlmsg_free(msg); in nl80211_send_sched_scan()
11238 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_sched_scan()
11242 static bool nl80211_reg_change_event_fill(struct sk_buff *msg, in nl80211_reg_change_event_fill() argument
11246 if (nla_put_u8(msg, NL80211_ATTR_REG_INITIATOR, request->initiator)) in nl80211_reg_change_event_fill()
11250 if (nla_put_u8(msg, NL80211_ATTR_REG_TYPE, in nl80211_reg_change_event_fill()
11254 if (nla_put_u8(msg, NL80211_ATTR_REG_TYPE, in nl80211_reg_change_event_fill()
11259 if (nla_put_u8(msg, NL80211_ATTR_REG_TYPE, in nl80211_reg_change_event_fill()
11263 if (nla_put_u8(msg, NL80211_ATTR_REG_TYPE, in nl80211_reg_change_event_fill()
11265 nla_put_string(msg, NL80211_ATTR_REG_ALPHA2, in nl80211_reg_change_event_fill()
11274 nla_put_u32(msg, NL80211_ATTR_WIPHY, request->wiphy_idx)) in nl80211_reg_change_event_fill()
11279 nla_put_flag(msg, NL80211_ATTR_WIPHY_SELF_MANAGED_REG)) in nl80211_reg_change_event_fill()
11296 struct sk_buff *msg; in nl80211_common_reg_change_event() local
11299 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_common_reg_change_event()
11300 if (!msg) in nl80211_common_reg_change_event()
11303 hdr = nl80211hdr_put(msg, 0, 0, 0, cmd_id); in nl80211_common_reg_change_event()
11305 nlmsg_free(msg); in nl80211_common_reg_change_event()
11309 if (nl80211_reg_change_event_fill(msg, request) == false) in nl80211_common_reg_change_event()
11312 genlmsg_end(msg, hdr); in nl80211_common_reg_change_event()
11315 genlmsg_multicast_allns(&nl80211_fam, msg, 0, in nl80211_common_reg_change_event()
11322 genlmsg_cancel(msg, hdr); in nl80211_common_reg_change_event()
11323 nlmsg_free(msg); in nl80211_common_reg_change_event()
11332 struct sk_buff *msg; in nl80211_send_mlme_event() local
11335 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in nl80211_send_mlme_event()
11336 if (!msg) in nl80211_send_mlme_event()
11339 hdr = nl80211hdr_put(msg, 0, 0, 0, cmd); in nl80211_send_mlme_event()
11341 nlmsg_free(msg); in nl80211_send_mlme_event()
11345 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_mlme_event()
11346 nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) || in nl80211_send_mlme_event()
11347 nla_put(msg, NL80211_ATTR_FRAME, len, buf)) in nl80211_send_mlme_event()
11352 nla_nest_start(msg, NL80211_ATTR_STA_WME); in nl80211_send_mlme_event()
11356 if (nla_put_u8(msg, NL80211_STA_WME_UAPSD_QUEUES, in nl80211_send_mlme_event()
11360 nla_nest_end(msg, nla_wmm); in nl80211_send_mlme_event()
11363 genlmsg_end(msg, hdr); in nl80211_send_mlme_event()
11365 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_mlme_event()
11370 genlmsg_cancel(msg, hdr); in nl80211_send_mlme_event()
11371 nlmsg_free(msg); in nl80211_send_mlme_event()
11432 struct sk_buff *msg; in nl80211_send_mlme_timeout() local
11435 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in nl80211_send_mlme_timeout()
11436 if (!msg) in nl80211_send_mlme_timeout()
11439 hdr = nl80211hdr_put(msg, 0, 0, 0, cmd); in nl80211_send_mlme_timeout()
11441 nlmsg_free(msg); in nl80211_send_mlme_timeout()
11445 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_mlme_timeout()
11446 nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) || in nl80211_send_mlme_timeout()
11447 nla_put_flag(msg, NL80211_ATTR_TIMED_OUT) || in nl80211_send_mlme_timeout()
11448 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, addr)) in nl80211_send_mlme_timeout()
11451 genlmsg_end(msg, hdr); in nl80211_send_mlme_timeout()
11453 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_mlme_timeout()
11458 genlmsg_cancel(msg, hdr); in nl80211_send_mlme_timeout()
11459 nlmsg_free(msg); in nl80211_send_mlme_timeout()
11484 struct sk_buff *msg; in nl80211_send_connect_result() local
11487 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in nl80211_send_connect_result()
11488 if (!msg) in nl80211_send_connect_result()
11491 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_CONNECT); in nl80211_send_connect_result()
11493 nlmsg_free(msg); in nl80211_send_connect_result()
11497 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_connect_result()
11498 nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) || in nl80211_send_connect_result()
11499 (bssid && nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, bssid)) || in nl80211_send_connect_result()
11500 nla_put_u16(msg, NL80211_ATTR_STATUS_CODE, status) || in nl80211_send_connect_result()
11502 nla_put(msg, NL80211_ATTR_REQ_IE, req_ie_len, req_ie)) || in nl80211_send_connect_result()
11504 nla_put(msg, NL80211_ATTR_RESP_IE, resp_ie_len, resp_ie))) in nl80211_send_connect_result()
11507 genlmsg_end(msg, hdr); in nl80211_send_connect_result()
11509 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_connect_result()
11514 genlmsg_cancel(msg, hdr); in nl80211_send_connect_result()
11515 nlmsg_free(msg); in nl80211_send_connect_result()
11524 struct sk_buff *msg; in nl80211_send_roamed() local
11527 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in nl80211_send_roamed()
11528 if (!msg) in nl80211_send_roamed()
11531 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_ROAM); in nl80211_send_roamed()
11533 nlmsg_free(msg); in nl80211_send_roamed()
11537 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_roamed()
11538 nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) || in nl80211_send_roamed()
11539 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, bssid) || in nl80211_send_roamed()
11541 nla_put(msg, NL80211_ATTR_REQ_IE, req_ie_len, req_ie)) || in nl80211_send_roamed()
11543 nla_put(msg, NL80211_ATTR_RESP_IE, resp_ie_len, resp_ie))) in nl80211_send_roamed()
11546 genlmsg_end(msg, hdr); in nl80211_send_roamed()
11548 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_roamed()
11553 genlmsg_cancel(msg, hdr); in nl80211_send_roamed()
11554 nlmsg_free(msg); in nl80211_send_roamed()
11562 struct sk_buff *msg; in nl80211_send_disconnected() local
11565 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_send_disconnected()
11566 if (!msg) in nl80211_send_disconnected()
11569 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_DISCONNECT); in nl80211_send_disconnected()
11571 nlmsg_free(msg); in nl80211_send_disconnected()
11575 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_disconnected()
11576 nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) || in nl80211_send_disconnected()
11578 nla_put_u16(msg, NL80211_ATTR_REASON_CODE, reason)) || in nl80211_send_disconnected()
11580 nla_put_flag(msg, NL80211_ATTR_DISCONNECTED_BY_AP)) || in nl80211_send_disconnected()
11581 (ie && nla_put(msg, NL80211_ATTR_IE, ie_len, ie))) in nl80211_send_disconnected()
11584 genlmsg_end(msg, hdr); in nl80211_send_disconnected()
11586 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_disconnected()
11591 genlmsg_cancel(msg, hdr); in nl80211_send_disconnected()
11592 nlmsg_free(msg); in nl80211_send_disconnected()
11600 struct sk_buff *msg; in nl80211_send_ibss_bssid() local
11603 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in nl80211_send_ibss_bssid()
11604 if (!msg) in nl80211_send_ibss_bssid()
11607 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_JOIN_IBSS); in nl80211_send_ibss_bssid()
11609 nlmsg_free(msg); in nl80211_send_ibss_bssid()
11613 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_ibss_bssid()
11614 nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) || in nl80211_send_ibss_bssid()
11615 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, bssid)) in nl80211_send_ibss_bssid()
11618 genlmsg_end(msg, hdr); in nl80211_send_ibss_bssid()
11620 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_ibss_bssid()
11625 genlmsg_cancel(msg, hdr); in nl80211_send_ibss_bssid()
11626 nlmsg_free(msg); in nl80211_send_ibss_bssid()
11634 struct sk_buff *msg; in cfg80211_notify_new_peer_candidate() local
11642 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in cfg80211_notify_new_peer_candidate()
11643 if (!msg) in cfg80211_notify_new_peer_candidate()
11646 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_NEW_PEER_CANDIDATE); in cfg80211_notify_new_peer_candidate()
11648 nlmsg_free(msg); in cfg80211_notify_new_peer_candidate()
11652 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_notify_new_peer_candidate()
11653 nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) || in cfg80211_notify_new_peer_candidate()
11654 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, addr) || in cfg80211_notify_new_peer_candidate()
11656 nla_put(msg, NL80211_ATTR_IE, ie_len , ie))) in cfg80211_notify_new_peer_candidate()
11659 genlmsg_end(msg, hdr); in cfg80211_notify_new_peer_candidate()
11661 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_notify_new_peer_candidate()
11666 genlmsg_cancel(msg, hdr); in cfg80211_notify_new_peer_candidate()
11667 nlmsg_free(msg); in cfg80211_notify_new_peer_candidate()
11676 struct sk_buff *msg; in nl80211_michael_mic_failure() local
11679 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in nl80211_michael_mic_failure()
11680 if (!msg) in nl80211_michael_mic_failure()
11683 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_MICHAEL_MIC_FAILURE); in nl80211_michael_mic_failure()
11685 nlmsg_free(msg); in nl80211_michael_mic_failure()
11689 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_michael_mic_failure()
11690 nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) || in nl80211_michael_mic_failure()
11691 (addr && nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, addr)) || in nl80211_michael_mic_failure()
11692 nla_put_u32(msg, NL80211_ATTR_KEY_TYPE, key_type) || in nl80211_michael_mic_failure()
11694 nla_put_u8(msg, NL80211_ATTR_KEY_IDX, key_id)) || in nl80211_michael_mic_failure()
11695 (tsc && nla_put(msg, NL80211_ATTR_KEY_SEQ, 6, tsc))) in nl80211_michael_mic_failure()
11698 genlmsg_end(msg, hdr); in nl80211_michael_mic_failure()
11700 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_michael_mic_failure()
11705 genlmsg_cancel(msg, hdr); in nl80211_michael_mic_failure()
11706 nlmsg_free(msg); in nl80211_michael_mic_failure()
11713 struct sk_buff *msg; in nl80211_send_beacon_hint_event() local
11717 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC); in nl80211_send_beacon_hint_event()
11718 if (!msg) in nl80211_send_beacon_hint_event()
11721 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_REG_BEACON_HINT); in nl80211_send_beacon_hint_event()
11723 nlmsg_free(msg); in nl80211_send_beacon_hint_event()
11731 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, get_wiphy_idx(wiphy))) in nl80211_send_beacon_hint_event()
11735 nl_freq = nla_nest_start(msg, NL80211_ATTR_FREQ_BEFORE); in nl80211_send_beacon_hint_event()
11738 if (nl80211_msg_put_channel(msg, channel_before, false)) in nl80211_send_beacon_hint_event()
11740 nla_nest_end(msg, nl_freq); in nl80211_send_beacon_hint_event()
11743 nl_freq = nla_nest_start(msg, NL80211_ATTR_FREQ_AFTER); in nl80211_send_beacon_hint_event()
11746 if (nl80211_msg_put_channel(msg, channel_after, false)) in nl80211_send_beacon_hint_event()
11748 nla_nest_end(msg, nl_freq); in nl80211_send_beacon_hint_event()
11750 genlmsg_end(msg, hdr); in nl80211_send_beacon_hint_event()
11753 genlmsg_multicast_allns(&nl80211_fam, msg, 0, in nl80211_send_beacon_hint_event()
11760 genlmsg_cancel(msg, hdr); in nl80211_send_beacon_hint_event()
11761 nlmsg_free(msg); in nl80211_send_beacon_hint_event()
11770 struct sk_buff *msg; in nl80211_send_remain_on_chan_event() local
11773 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in nl80211_send_remain_on_chan_event()
11774 if (!msg) in nl80211_send_remain_on_chan_event()
11777 hdr = nl80211hdr_put(msg, 0, 0, 0, cmd); in nl80211_send_remain_on_chan_event()
11779 nlmsg_free(msg); in nl80211_send_remain_on_chan_event()
11783 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_remain_on_chan_event()
11784 (wdev->netdev && nla_put_u32(msg, NL80211_ATTR_IFINDEX, in nl80211_send_remain_on_chan_event()
11786 nla_put_u64(msg, NL80211_ATTR_WDEV, wdev_id(wdev)) || in nl80211_send_remain_on_chan_event()
11787 nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ, chan->center_freq) || in nl80211_send_remain_on_chan_event()
11788 nla_put_u32(msg, NL80211_ATTR_WIPHY_CHANNEL_TYPE, in nl80211_send_remain_on_chan_event()
11790 nla_put_u64(msg, NL80211_ATTR_COOKIE, cookie)) in nl80211_send_remain_on_chan_event()
11794 nla_put_u32(msg, NL80211_ATTR_DURATION, duration)) in nl80211_send_remain_on_chan_event()
11797 genlmsg_end(msg, hdr); in nl80211_send_remain_on_chan_event()
11799 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_remain_on_chan_event()
11804 genlmsg_cancel(msg, hdr); in nl80211_send_remain_on_chan_event()
11805 nlmsg_free(msg); in nl80211_send_remain_on_chan_event()
11840 struct sk_buff *msg; in cfg80211_new_sta() local
11844 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in cfg80211_new_sta()
11845 if (!msg) in cfg80211_new_sta()
11848 if (nl80211_send_station(msg, NL80211_CMD_NEW_STATION, 0, 0, 0, in cfg80211_new_sta()
11850 nlmsg_free(msg); in cfg80211_new_sta()
11854 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_new_sta()
11864 struct sk_buff *msg; in cfg80211_del_sta_sinfo() local
11872 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in cfg80211_del_sta_sinfo()
11873 if (!msg) in cfg80211_del_sta_sinfo()
11876 if (nl80211_send_station(msg, NL80211_CMD_DEL_STATION, 0, 0, 0, in cfg80211_del_sta_sinfo()
11878 nlmsg_free(msg); in cfg80211_del_sta_sinfo()
11882 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_del_sta_sinfo()
11893 struct sk_buff *msg; in cfg80211_conn_failed() local
11896 msg = nlmsg_new(NLMSG_GOODSIZE, gfp); in cfg80211_conn_failed()
11897 if (!msg) in cfg80211_conn_failed()
11900 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_CONN_FAILED); in cfg80211_conn_failed()
11902 nlmsg_free(msg); in cfg80211_conn_failed()
11906 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) || in cfg80211_conn_failed()
11907 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, mac_addr) || in cfg80211_conn_failed()
11908 nla_put_u32(msg, NL80211_ATTR_CONN_FAILED_REASON, reason)) in cfg80211_conn_failed()
11911 genlmsg_end(msg, hdr); in cfg80211_conn_failed()
11913 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_conn_failed()
11918 genlmsg_cancel(msg, hdr); in cfg80211_conn_failed()
11919 nlmsg_free(msg); in cfg80211_conn_failed()
11928 struct sk_buff *msg; in __nl80211_unexpected_frame() local
11935 msg = nlmsg_new(100, gfp); in __nl80211_unexpected_frame()
11936 if (!msg) in __nl80211_unexpected_frame()
11939 hdr = nl80211hdr_put(msg, 0, 0, 0, cmd); in __nl80211_unexpected_frame()
11941 nlmsg_free(msg); in __nl80211_unexpected_frame()
11945 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in __nl80211_unexpected_frame()
11946 nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) || in __nl80211_unexpected_frame()
11947 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, addr)) in __nl80211_unexpected_frame()
11950 genlmsg_end(msg, hdr); in __nl80211_unexpected_frame()
11951 genlmsg_unicast(wiphy_net(&rdev->wiphy), msg, nlportid); in __nl80211_unexpected_frame()
11955 genlmsg_cancel(msg, hdr); in __nl80211_unexpected_frame()
11956 nlmsg_free(msg); in __nl80211_unexpected_frame()
12008 struct sk_buff *msg; in nl80211_send_mgmt() local
12011 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in nl80211_send_mgmt()
12012 if (!msg) in nl80211_send_mgmt()
12015 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_FRAME); in nl80211_send_mgmt()
12017 nlmsg_free(msg); in nl80211_send_mgmt()
12021 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_mgmt()
12022 (netdev && nla_put_u32(msg, NL80211_ATTR_IFINDEX, in nl80211_send_mgmt()
12024 nla_put_u64(msg, NL80211_ATTR_WDEV, wdev_id(wdev)) || in nl80211_send_mgmt()
12025 nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ, freq) || in nl80211_send_mgmt()
12027 nla_put_u32(msg, NL80211_ATTR_RX_SIGNAL_DBM, sig_dbm)) || in nl80211_send_mgmt()
12028 nla_put(msg, NL80211_ATTR_FRAME, len, buf) || in nl80211_send_mgmt()
12030 nla_put_u32(msg, NL80211_ATTR_RXMGMT_FLAGS, flags))) in nl80211_send_mgmt()
12033 genlmsg_end(msg, hdr); in nl80211_send_mgmt()
12035 return genlmsg_unicast(wiphy_net(&rdev->wiphy), msg, nlportid); in nl80211_send_mgmt()
12038 genlmsg_cancel(msg, hdr); in nl80211_send_mgmt()
12039 nlmsg_free(msg); in nl80211_send_mgmt()
12049 struct sk_buff *msg; in cfg80211_mgmt_tx_status() local
12054 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in cfg80211_mgmt_tx_status()
12055 if (!msg) in cfg80211_mgmt_tx_status()
12058 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_FRAME_TX_STATUS); in cfg80211_mgmt_tx_status()
12060 nlmsg_free(msg); in cfg80211_mgmt_tx_status()
12064 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_mgmt_tx_status()
12065 (netdev && nla_put_u32(msg, NL80211_ATTR_IFINDEX, in cfg80211_mgmt_tx_status()
12067 nla_put_u64(msg, NL80211_ATTR_WDEV, wdev_id(wdev)) || in cfg80211_mgmt_tx_status()
12068 nla_put(msg, NL80211_ATTR_FRAME, len, buf) || in cfg80211_mgmt_tx_status()
12069 nla_put_u64(msg, NL80211_ATTR_COOKIE, cookie) || in cfg80211_mgmt_tx_status()
12070 (ack && nla_put_flag(msg, NL80211_ATTR_ACK))) in cfg80211_mgmt_tx_status()
12073 genlmsg_end(msg, hdr); in cfg80211_mgmt_tx_status()
12075 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_mgmt_tx_status()
12080 genlmsg_cancel(msg, hdr); in cfg80211_mgmt_tx_status()
12081 nlmsg_free(msg); in cfg80211_mgmt_tx_status()
12090 struct sk_buff *msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in cfg80211_prepare_cqm() local
12093 if (!msg) in cfg80211_prepare_cqm()
12096 cb = (void **)msg->cb; in cfg80211_prepare_cqm()
12098 cb[0] = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_NOTIFY_CQM); in cfg80211_prepare_cqm()
12100 nlmsg_free(msg); in cfg80211_prepare_cqm()
12104 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_prepare_cqm()
12105 nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex)) in cfg80211_prepare_cqm()
12108 if (mac && nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, mac)) in cfg80211_prepare_cqm()
12111 cb[1] = nla_nest_start(msg, NL80211_ATTR_CQM); in cfg80211_prepare_cqm()
12117 return msg; in cfg80211_prepare_cqm()
12119 nlmsg_free(msg); in cfg80211_prepare_cqm()
12123 static void cfg80211_send_cqm(struct sk_buff *msg, gfp_t gfp) in cfg80211_send_cqm() argument
12125 void **cb = (void **)msg->cb; in cfg80211_send_cqm()
12128 nla_nest_end(msg, cb[1]); in cfg80211_send_cqm()
12129 genlmsg_end(msg, cb[0]); in cfg80211_send_cqm()
12131 memset(msg->cb, 0, sizeof(msg->cb)); in cfg80211_send_cqm()
12133 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_send_cqm()
12141 struct sk_buff *msg; in cfg80211_cqm_rssi_notify() local
12149 msg = cfg80211_prepare_cqm(dev, NULL, gfp); in cfg80211_cqm_rssi_notify()
12150 if (!msg) in cfg80211_cqm_rssi_notify()
12153 if (nla_put_u32(msg, NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT, in cfg80211_cqm_rssi_notify()
12157 cfg80211_send_cqm(msg, gfp); in cfg80211_cqm_rssi_notify()
12162 nlmsg_free(msg); in cfg80211_cqm_rssi_notify()
12170 struct sk_buff *msg; in cfg80211_cqm_txe_notify() local
12172 msg = cfg80211_prepare_cqm(dev, peer, gfp); in cfg80211_cqm_txe_notify()
12173 if (!msg) in cfg80211_cqm_txe_notify()
12176 if (nla_put_u32(msg, NL80211_ATTR_CQM_TXE_PKTS, num_packets)) in cfg80211_cqm_txe_notify()
12179 if (nla_put_u32(msg, NL80211_ATTR_CQM_TXE_RATE, rate)) in cfg80211_cqm_txe_notify()
12182 if (nla_put_u32(msg, NL80211_ATTR_CQM_TXE_INTVL, intvl)) in cfg80211_cqm_txe_notify()
12185 cfg80211_send_cqm(msg, gfp); in cfg80211_cqm_txe_notify()
12189 nlmsg_free(msg); in cfg80211_cqm_txe_notify()
12196 struct sk_buff *msg; in cfg80211_cqm_pktloss_notify() local
12200 msg = cfg80211_prepare_cqm(dev, peer, gfp); in cfg80211_cqm_pktloss_notify()
12201 if (!msg) in cfg80211_cqm_pktloss_notify()
12204 if (nla_put_u32(msg, NL80211_ATTR_CQM_PKT_LOSS_EVENT, num_packets)) in cfg80211_cqm_pktloss_notify()
12207 cfg80211_send_cqm(msg, gfp); in cfg80211_cqm_pktloss_notify()
12211 nlmsg_free(msg); in cfg80211_cqm_pktloss_notify()
12217 struct sk_buff *msg; in cfg80211_cqm_beacon_loss_notify() local
12219 msg = cfg80211_prepare_cqm(dev, NULL, gfp); in cfg80211_cqm_beacon_loss_notify()
12220 if (!msg) in cfg80211_cqm_beacon_loss_notify()
12223 if (nla_put_flag(msg, NL80211_ATTR_CQM_BEACON_LOSS_EVENT)) in cfg80211_cqm_beacon_loss_notify()
12226 cfg80211_send_cqm(msg, gfp); in cfg80211_cqm_beacon_loss_notify()
12230 nlmsg_free(msg); in cfg80211_cqm_beacon_loss_notify()
12238 struct sk_buff *msg; in nl80211_gtk_rekey_notify() local
12242 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in nl80211_gtk_rekey_notify()
12243 if (!msg) in nl80211_gtk_rekey_notify()
12246 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_SET_REKEY_OFFLOAD); in nl80211_gtk_rekey_notify()
12248 nlmsg_free(msg); in nl80211_gtk_rekey_notify()
12252 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_gtk_rekey_notify()
12253 nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) || in nl80211_gtk_rekey_notify()
12254 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, bssid)) in nl80211_gtk_rekey_notify()
12257 rekey_attr = nla_nest_start(msg, NL80211_ATTR_REKEY_DATA); in nl80211_gtk_rekey_notify()
12261 if (nla_put(msg, NL80211_REKEY_DATA_REPLAY_CTR, in nl80211_gtk_rekey_notify()
12265 nla_nest_end(msg, rekey_attr); in nl80211_gtk_rekey_notify()
12267 genlmsg_end(msg, hdr); in nl80211_gtk_rekey_notify()
12269 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_gtk_rekey_notify()
12274 genlmsg_cancel(msg, hdr); in nl80211_gtk_rekey_notify()
12275 nlmsg_free(msg); in nl80211_gtk_rekey_notify()
12295 struct sk_buff *msg; in nl80211_pmksa_candidate_notify() local
12299 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in nl80211_pmksa_candidate_notify()
12300 if (!msg) in nl80211_pmksa_candidate_notify()
12303 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_PMKSA_CANDIDATE); in nl80211_pmksa_candidate_notify()
12305 nlmsg_free(msg); in nl80211_pmksa_candidate_notify()
12309 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_pmksa_candidate_notify()
12310 nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex)) in nl80211_pmksa_candidate_notify()
12313 attr = nla_nest_start(msg, NL80211_ATTR_PMKSA_CANDIDATE); in nl80211_pmksa_candidate_notify()
12317 if (nla_put_u32(msg, NL80211_PMKSA_CANDIDATE_INDEX, index) || in nl80211_pmksa_candidate_notify()
12318 nla_put(msg, NL80211_PMKSA_CANDIDATE_BSSID, ETH_ALEN, bssid) || in nl80211_pmksa_candidate_notify()
12320 nla_put_flag(msg, NL80211_PMKSA_CANDIDATE_PREAUTH))) in nl80211_pmksa_candidate_notify()
12323 nla_nest_end(msg, attr); in nl80211_pmksa_candidate_notify()
12325 genlmsg_end(msg, hdr); in nl80211_pmksa_candidate_notify()
12327 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_pmksa_candidate_notify()
12332 genlmsg_cancel(msg, hdr); in nl80211_pmksa_candidate_notify()
12333 nlmsg_free(msg); in nl80211_pmksa_candidate_notify()
12355 struct sk_buff *msg; in nl80211_ch_switch_notify() local
12358 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in nl80211_ch_switch_notify()
12359 if (!msg) in nl80211_ch_switch_notify()
12362 hdr = nl80211hdr_put(msg, 0, 0, 0, notif); in nl80211_ch_switch_notify()
12364 nlmsg_free(msg); in nl80211_ch_switch_notify()
12368 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex)) in nl80211_ch_switch_notify()
12371 if (nl80211_send_chandef(msg, chandef)) in nl80211_ch_switch_notify()
12375 (nla_put_u32(msg, NL80211_ATTR_CH_SWITCH_COUNT, count))) in nl80211_ch_switch_notify()
12378 genlmsg_end(msg, hdr); in nl80211_ch_switch_notify()
12380 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_ch_switch_notify()
12385 genlmsg_cancel(msg, hdr); in nl80211_ch_switch_notify()
12386 nlmsg_free(msg); in nl80211_ch_switch_notify()
12428 struct sk_buff *msg; in nl80211_radar_notify() local
12431 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in nl80211_radar_notify()
12432 if (!msg) in nl80211_radar_notify()
12435 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_RADAR_DETECT); in nl80211_radar_notify()
12437 nlmsg_free(msg); in nl80211_radar_notify()
12441 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx)) in nl80211_radar_notify()
12448 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) || in nl80211_radar_notify()
12449 nla_put_u64(msg, NL80211_ATTR_WDEV, wdev_id(wdev))) in nl80211_radar_notify()
12453 if (nla_put_u32(msg, NL80211_ATTR_RADAR_EVENT, event)) in nl80211_radar_notify()
12456 if (nl80211_send_chandef(msg, chandef)) in nl80211_radar_notify()
12459 genlmsg_end(msg, hdr); in nl80211_radar_notify()
12461 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_radar_notify()
12466 genlmsg_cancel(msg, hdr); in nl80211_radar_notify()
12467 nlmsg_free(msg); in nl80211_radar_notify()
12475 struct sk_buff *msg; in cfg80211_probe_status() local
12480 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in cfg80211_probe_status()
12482 if (!msg) in cfg80211_probe_status()
12485 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_PROBE_CLIENT); in cfg80211_probe_status()
12487 nlmsg_free(msg); in cfg80211_probe_status()
12491 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_probe_status()
12492 nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) || in cfg80211_probe_status()
12493 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, addr) || in cfg80211_probe_status()
12494 nla_put_u64(msg, NL80211_ATTR_COOKIE, cookie) || in cfg80211_probe_status()
12495 (acked && nla_put_flag(msg, NL80211_ATTR_ACK))) in cfg80211_probe_status()
12498 genlmsg_end(msg, hdr); in cfg80211_probe_status()
12500 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_probe_status()
12505 genlmsg_cancel(msg, hdr); in cfg80211_probe_status()
12506 nlmsg_free(msg); in cfg80211_probe_status()
12515 struct sk_buff *msg; in cfg80211_report_obss_beacon() local
12523 msg = nlmsg_new(len + 100, GFP_ATOMIC); in cfg80211_report_obss_beacon()
12524 if (!msg) { in cfg80211_report_obss_beacon()
12529 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_FRAME); in cfg80211_report_obss_beacon()
12533 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_report_obss_beacon()
12535 nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ, freq)) || in cfg80211_report_obss_beacon()
12537 nla_put_u32(msg, NL80211_ATTR_RX_SIGNAL_DBM, sig_dbm)) || in cfg80211_report_obss_beacon()
12538 nla_put(msg, NL80211_ATTR_FRAME, len, frame)) in cfg80211_report_obss_beacon()
12541 genlmsg_end(msg, hdr); in cfg80211_report_obss_beacon()
12543 genlmsg_unicast(wiphy_net(&rdev->wiphy), msg, reg->nlportid); in cfg80211_report_obss_beacon()
12551 genlmsg_cancel(msg, hdr); in cfg80211_report_obss_beacon()
12552 nlmsg_free(msg); in cfg80211_report_obss_beacon()
12557 static int cfg80211_net_detect_results(struct sk_buff *msg, in cfg80211_net_detect_results() argument
12565 msg, NL80211_WOWLAN_TRIG_NET_DETECT_RESULTS); in cfg80211_net_detect_results()
12572 nl_match = nla_nest_start(msg, i); in cfg80211_net_detect_results()
12583 if (nla_put(msg, NL80211_ATTR_SSID, match->ssid.ssid_len, in cfg80211_net_detect_results()
12585 nla_nest_cancel(msg, nl_match); in cfg80211_net_detect_results()
12591 msg, NL80211_ATTR_SCAN_FREQUENCIES); in cfg80211_net_detect_results()
12593 nla_nest_cancel(msg, nl_match); in cfg80211_net_detect_results()
12598 if (nla_put_u32(msg, j, match->channels[j])) { in cfg80211_net_detect_results()
12599 nla_nest_cancel(msg, nl_freqs); in cfg80211_net_detect_results()
12600 nla_nest_cancel(msg, nl_match); in cfg80211_net_detect_results()
12605 nla_nest_end(msg, nl_freqs); in cfg80211_net_detect_results()
12608 nla_nest_end(msg, nl_match); in cfg80211_net_detect_results()
12612 nla_nest_end(msg, nl_results); in cfg80211_net_detect_results()
12621 struct sk_buff *msg; in cfg80211_report_wowlan_wakeup() local
12630 msg = nlmsg_new(size, gfp); in cfg80211_report_wowlan_wakeup()
12631 if (!msg) in cfg80211_report_wowlan_wakeup()
12634 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_SET_WOWLAN); in cfg80211_report_wowlan_wakeup()
12638 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_report_wowlan_wakeup()
12639 nla_put_u64(msg, NL80211_ATTR_WDEV, wdev_id(wdev))) in cfg80211_report_wowlan_wakeup()
12642 if (wdev->netdev && nla_put_u32(msg, NL80211_ATTR_IFINDEX, in cfg80211_report_wowlan_wakeup()
12649 reasons = nla_nest_start(msg, NL80211_ATTR_WOWLAN_TRIGGERS); in cfg80211_report_wowlan_wakeup()
12654 nla_put_flag(msg, NL80211_WOWLAN_TRIG_DISCONNECT)) in cfg80211_report_wowlan_wakeup()
12657 nla_put_flag(msg, NL80211_WOWLAN_TRIG_MAGIC_PKT)) in cfg80211_report_wowlan_wakeup()
12660 nla_put_flag(msg, NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE)) in cfg80211_report_wowlan_wakeup()
12663 nla_put_flag(msg, NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST)) in cfg80211_report_wowlan_wakeup()
12666 nla_put_flag(msg, NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE)) in cfg80211_report_wowlan_wakeup()
12669 nla_put_flag(msg, NL80211_WOWLAN_TRIG_RFKILL_RELEASE)) in cfg80211_report_wowlan_wakeup()
12673 nla_put_u32(msg, NL80211_WOWLAN_TRIG_PKT_PATTERN, in cfg80211_report_wowlan_wakeup()
12678 nla_put_flag(msg, NL80211_WOWLAN_TRIG_WAKEUP_TCP_MATCH)) in cfg80211_report_wowlan_wakeup()
12682 nla_put_flag(msg, NL80211_WOWLAN_TRIG_WAKEUP_TCP_CONNLOST)) in cfg80211_report_wowlan_wakeup()
12686 nla_put_flag(msg, in cfg80211_report_wowlan_wakeup()
12702 nla_put_u32(msg, len_attr, wakeup->packet_len)) in cfg80211_report_wowlan_wakeup()
12705 if (nla_put(msg, pkt_attr, wakeup->packet_present_len, in cfg80211_report_wowlan_wakeup()
12711 cfg80211_net_detect_results(msg, wakeup)) in cfg80211_report_wowlan_wakeup()
12714 nla_nest_end(msg, reasons); in cfg80211_report_wowlan_wakeup()
12717 genlmsg_end(msg, hdr); in cfg80211_report_wowlan_wakeup()
12719 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_report_wowlan_wakeup()
12724 nlmsg_free(msg); in cfg80211_report_wowlan_wakeup()
12735 struct sk_buff *msg; in cfg80211_tdls_oper_request() local
12741 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in cfg80211_tdls_oper_request()
12742 if (!msg) in cfg80211_tdls_oper_request()
12745 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_TDLS_OPER); in cfg80211_tdls_oper_request()
12747 nlmsg_free(msg); in cfg80211_tdls_oper_request()
12751 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_tdls_oper_request()
12752 nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) || in cfg80211_tdls_oper_request()
12753 nla_put_u8(msg, NL80211_ATTR_TDLS_OPERATION, oper) || in cfg80211_tdls_oper_request()
12754 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, peer) || in cfg80211_tdls_oper_request()
12756 nla_put_u16(msg, NL80211_ATTR_REASON_CODE, reason_code))) in cfg80211_tdls_oper_request()
12759 genlmsg_end(msg, hdr); in cfg80211_tdls_oper_request()
12761 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_tdls_oper_request()
12766 genlmsg_cancel(msg, hdr); in cfg80211_tdls_oper_request()
12767 nlmsg_free(msg); in cfg80211_tdls_oper_request()
12852 struct sk_buff *msg; in cfg80211_ft_event() local
12860 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in cfg80211_ft_event()
12861 if (!msg) in cfg80211_ft_event()
12864 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_FT_EVENT); in cfg80211_ft_event()
12868 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_ft_event()
12869 nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) || in cfg80211_ft_event()
12870 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, ft_event->target_ap)) in cfg80211_ft_event()
12874 nla_put(msg, NL80211_ATTR_IE, ft_event->ies_len, ft_event->ies)) in cfg80211_ft_event()
12877 nla_put(msg, NL80211_ATTR_IE_RIC, ft_event->ric_ies_len, in cfg80211_ft_event()
12881 genlmsg_end(msg, hdr); in cfg80211_ft_event()
12883 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_ft_event()
12887 nlmsg_free(msg); in cfg80211_ft_event()
12894 struct sk_buff *msg; in cfg80211_crit_proto_stopped() local
12905 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in cfg80211_crit_proto_stopped()
12906 if (!msg) in cfg80211_crit_proto_stopped()
12909 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_CRIT_PROTOCOL_STOP); in cfg80211_crit_proto_stopped()
12913 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_crit_proto_stopped()
12914 nla_put_u64(msg, NL80211_ATTR_WDEV, wdev_id(wdev))) in cfg80211_crit_proto_stopped()
12917 genlmsg_end(msg, hdr); in cfg80211_crit_proto_stopped()
12919 genlmsg_unicast(wiphy_net(&rdev->wiphy), msg, nlportid); in cfg80211_crit_proto_stopped()
12924 genlmsg_cancel(msg, hdr); in cfg80211_crit_proto_stopped()
12925 nlmsg_free(msg); in cfg80211_crit_proto_stopped()
12934 struct sk_buff *msg; in nl80211_send_ap_stopped() local
12937 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_send_ap_stopped()
12938 if (!msg) in nl80211_send_ap_stopped()
12941 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_STOP_AP); in nl80211_send_ap_stopped()
12945 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_ap_stopped()
12946 nla_put_u32(msg, NL80211_ATTR_IFINDEX, wdev->netdev->ifindex) || in nl80211_send_ap_stopped()
12947 nla_put_u64(msg, NL80211_ATTR_WDEV, wdev_id(wdev))) in nl80211_send_ap_stopped()
12950 genlmsg_end(msg, hdr); in nl80211_send_ap_stopped()
12952 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(wiphy), msg, 0, in nl80211_send_ap_stopped()
12956 nlmsg_free(msg); in nl80211_send_ap_stopped()