Lines Matching refs:msg

588 static int nl80211_msg_put_channel(struct sk_buff *msg,  in nl80211_msg_put_channel()  argument
599 if (nla_put_u32(msg, NL80211_FREQUENCY_ATTR_FREQ, in nl80211_msg_put_channel()
604 nla_put_flag(msg, NL80211_FREQUENCY_ATTR_DISABLED)) in nl80211_msg_put_channel()
607 if (nla_put_flag(msg, NL80211_FREQUENCY_ATTR_NO_IR)) in nl80211_msg_put_channel()
609 if (nla_put_flag(msg, __NL80211_FREQUENCY_ATTR_NO_IBSS)) in nl80211_msg_put_channel()
613 if (nla_put_flag(msg, NL80211_FREQUENCY_ATTR_RADAR)) in nl80211_msg_put_channel()
620 if (nla_put_u32(msg, NL80211_FREQUENCY_ATTR_DFS_STATE, in nl80211_msg_put_channel()
623 if (nla_put_u32(msg, NL80211_FREQUENCY_ATTR_DFS_TIME, in nl80211_msg_put_channel()
626 if (nla_put_u32(msg, in nl80211_msg_put_channel()
635 nla_put_flag(msg, NL80211_FREQUENCY_ATTR_NO_HT40_MINUS)) in nl80211_msg_put_channel()
638 nla_put_flag(msg, NL80211_FREQUENCY_ATTR_NO_HT40_PLUS)) in nl80211_msg_put_channel()
641 nla_put_flag(msg, NL80211_FREQUENCY_ATTR_NO_80MHZ)) in nl80211_msg_put_channel()
644 nla_put_flag(msg, NL80211_FREQUENCY_ATTR_NO_160MHZ)) in nl80211_msg_put_channel()
647 nla_put_flag(msg, NL80211_FREQUENCY_ATTR_INDOOR_ONLY)) in nl80211_msg_put_channel()
650 nla_put_flag(msg, NL80211_FREQUENCY_ATTR_IR_CONCURRENT)) in nl80211_msg_put_channel()
653 nla_put_flag(msg, NL80211_FREQUENCY_ATTR_NO_20MHZ)) in nl80211_msg_put_channel()
656 nla_put_flag(msg, NL80211_FREQUENCY_ATTR_NO_10MHZ)) in nl80211_msg_put_channel()
660 if (nla_put_u32(msg, NL80211_FREQUENCY_ATTR_MAX_TX_POWER, in nl80211_msg_put_channel()
925 static int nl80211_put_iftypes(struct sk_buff *msg, u32 attr, u16 ifmodes) in nl80211_put_iftypes() argument
927 struct nlattr *nl_modes = nla_nest_start(msg, attr); in nl80211_put_iftypes()
935 if ((ifmodes & 1) && nla_put_flag(msg, i)) in nl80211_put_iftypes()
941 nla_nest_end(msg, nl_modes); in nl80211_put_iftypes()
949 struct sk_buff *msg, in nl80211_put_iface_combinations() argument
955 nl_combis = nla_nest_start(msg, in nl80211_put_iface_combinations()
966 nl_combi = nla_nest_start(msg, i + 1); in nl80211_put_iface_combinations()
970 nl_limits = nla_nest_start(msg, NL80211_IFACE_COMB_LIMITS); in nl80211_put_iface_combinations()
977 nl_limit = nla_nest_start(msg, j + 1); in nl80211_put_iface_combinations()
980 if (nla_put_u32(msg, NL80211_IFACE_LIMIT_MAX, in nl80211_put_iface_combinations()
983 if (nl80211_put_iftypes(msg, NL80211_IFACE_LIMIT_TYPES, in nl80211_put_iface_combinations()
986 nla_nest_end(msg, nl_limit); in nl80211_put_iface_combinations()
989 nla_nest_end(msg, nl_limits); in nl80211_put_iface_combinations()
992 nla_put_flag(msg, NL80211_IFACE_COMB_STA_AP_BI_MATCH)) in nl80211_put_iface_combinations()
994 if (nla_put_u32(msg, NL80211_IFACE_COMB_NUM_CHANNELS, in nl80211_put_iface_combinations()
996 nla_put_u32(msg, NL80211_IFACE_COMB_MAXNUM, in nl80211_put_iface_combinations()
1000 (nla_put_u32(msg, NL80211_IFACE_COMB_RADAR_DETECT_WIDTHS, in nl80211_put_iface_combinations()
1002 nla_put_u32(msg, NL80211_IFACE_COMB_RADAR_DETECT_REGIONS, in nl80211_put_iface_combinations()
1006 nla_nest_end(msg, nl_combi); in nl80211_put_iface_combinations()
1009 nla_nest_end(msg, nl_combis); in nl80211_put_iface_combinations()
1018 struct sk_buff *msg) in nl80211_send_wowlan_tcp_caps() argument
1026 nl_tcp = nla_nest_start(msg, NL80211_WOWLAN_TRIG_TCP_CONNECTION); in nl80211_send_wowlan_tcp_caps()
1030 if (nla_put_u32(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD, in nl80211_send_wowlan_tcp_caps()
1034 if (nla_put_u32(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD, in nl80211_send_wowlan_tcp_caps()
1038 if (tcp->seq && nla_put_flag(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ)) in nl80211_send_wowlan_tcp_caps()
1041 if (tcp->tok && nla_put(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN, in nl80211_send_wowlan_tcp_caps()
1045 if (nla_put_u32(msg, NL80211_WOWLAN_TCP_DATA_INTERVAL, in nl80211_send_wowlan_tcp_caps()
1049 if (nla_put_u32(msg, NL80211_WOWLAN_TCP_WAKE_PAYLOAD, in nl80211_send_wowlan_tcp_caps()
1053 nla_nest_end(msg, nl_tcp); in nl80211_send_wowlan_tcp_caps()
1057 static int nl80211_send_wowlan(struct sk_buff *msg, in nl80211_send_wowlan() argument
1066 nl_wowlan = nla_nest_start(msg, NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED); in nl80211_send_wowlan()
1071 nla_put_flag(msg, NL80211_WOWLAN_TRIG_ANY)) || in nl80211_send_wowlan()
1073 nla_put_flag(msg, NL80211_WOWLAN_TRIG_DISCONNECT)) || in nl80211_send_wowlan()
1075 nla_put_flag(msg, NL80211_WOWLAN_TRIG_MAGIC_PKT)) || in nl80211_send_wowlan()
1077 nla_put_flag(msg, NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED)) || in nl80211_send_wowlan()
1079 nla_put_flag(msg, NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE)) || in nl80211_send_wowlan()
1081 nla_put_flag(msg, NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST)) || in nl80211_send_wowlan()
1083 nla_put_flag(msg, NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE)) || in nl80211_send_wowlan()
1085 nla_put_flag(msg, NL80211_WOWLAN_TRIG_RFKILL_RELEASE))) in nl80211_send_wowlan()
1096 if (nla_put(msg, NL80211_WOWLAN_TRIG_PKT_PATTERN, in nl80211_send_wowlan()
1102 nla_put_u32(msg, NL80211_WOWLAN_TRIG_NET_DETECT, in nl80211_send_wowlan()
1106 if (large && nl80211_send_wowlan_tcp_caps(rdev, msg)) in nl80211_send_wowlan()
1109 nla_nest_end(msg, nl_wowlan); in nl80211_send_wowlan()
1115 static int nl80211_send_coalesce(struct sk_buff *msg, in nl80211_send_coalesce() argument
1130 if (nla_put(msg, NL80211_ATTR_COALESCE_RULE, sizeof(rule), &rule)) in nl80211_send_coalesce()
1136 static int nl80211_send_band_rateinfo(struct sk_buff *msg, in nl80211_send_band_rateinfo() argument
1145 (nla_put(msg, NL80211_BAND_ATTR_HT_MCS_SET, in nl80211_send_band_rateinfo()
1148 nla_put_u16(msg, NL80211_BAND_ATTR_HT_CAPA, in nl80211_send_band_rateinfo()
1150 nla_put_u8(msg, NL80211_BAND_ATTR_HT_AMPDU_FACTOR, in nl80211_send_band_rateinfo()
1152 nla_put_u8(msg, NL80211_BAND_ATTR_HT_AMPDU_DENSITY, in nl80211_send_band_rateinfo()
1158 (nla_put(msg, NL80211_BAND_ATTR_VHT_MCS_SET, in nl80211_send_band_rateinfo()
1161 nla_put_u32(msg, NL80211_BAND_ATTR_VHT_CAPA, in nl80211_send_band_rateinfo()
1166 nl_rates = nla_nest_start(msg, NL80211_BAND_ATTR_RATES); in nl80211_send_band_rateinfo()
1171 nl_rate = nla_nest_start(msg, i); in nl80211_send_band_rateinfo()
1176 if (nla_put_u32(msg, NL80211_BITRATE_ATTR_RATE, in nl80211_send_band_rateinfo()
1180 nla_put_flag(msg, in nl80211_send_band_rateinfo()
1184 nla_nest_end(msg, nl_rate); in nl80211_send_band_rateinfo()
1187 nla_nest_end(msg, nl_rates); in nl80211_send_band_rateinfo()
1193 nl80211_send_mgmt_stypes(struct sk_buff *msg, in nl80211_send_mgmt_stypes() argument
1204 nl_ifs = nla_nest_start(msg, NL80211_ATTR_TX_FRAME_TYPES); in nl80211_send_mgmt_stypes()
1209 nl_ftypes = nla_nest_start(msg, ift); in nl80211_send_mgmt_stypes()
1216 nla_put_u16(msg, NL80211_ATTR_FRAME_TYPE, in nl80211_send_mgmt_stypes()
1222 nla_nest_end(msg, nl_ftypes); in nl80211_send_mgmt_stypes()
1225 nla_nest_end(msg, nl_ifs); in nl80211_send_mgmt_stypes()
1227 nl_ifs = nla_nest_start(msg, NL80211_ATTR_RX_FRAME_TYPES); in nl80211_send_mgmt_stypes()
1232 nl_ftypes = nla_nest_start(msg, ift); in nl80211_send_mgmt_stypes()
1239 nla_put_u16(msg, NL80211_ATTR_FRAME_TYPE, in nl80211_send_mgmt_stypes()
1245 nla_nest_end(msg, nl_ftypes); in nl80211_send_mgmt_stypes()
1247 nla_nest_end(msg, nl_ifs); in nl80211_send_mgmt_stypes()
1261 struct sk_buff *msg, u32 portid, u32 seq, in nl80211_send_wiphy() argument
1275 hdr = nl80211hdr_put(msg, portid, seq, flags, cmd); in nl80211_send_wiphy()
1282 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_wiphy()
1283 nla_put_string(msg, NL80211_ATTR_WIPHY_NAME, in nl80211_send_wiphy()
1285 nla_put_u32(msg, NL80211_ATTR_GENERATION, in nl80211_send_wiphy()
1294 if (nla_put_u8(msg, NL80211_ATTR_WIPHY_RETRY_SHORT, in nl80211_send_wiphy()
1296 nla_put_u8(msg, NL80211_ATTR_WIPHY_RETRY_LONG, in nl80211_send_wiphy()
1298 nla_put_u32(msg, NL80211_ATTR_WIPHY_FRAG_THRESHOLD, in nl80211_send_wiphy()
1300 nla_put_u32(msg, NL80211_ATTR_WIPHY_RTS_THRESHOLD, in nl80211_send_wiphy()
1302 nla_put_u8(msg, NL80211_ATTR_WIPHY_COVERAGE_CLASS, in nl80211_send_wiphy()
1304 nla_put_u8(msg, NL80211_ATTR_MAX_NUM_SCAN_SSIDS, in nl80211_send_wiphy()
1306 nla_put_u8(msg, NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS, in nl80211_send_wiphy()
1308 nla_put_u16(msg, NL80211_ATTR_MAX_SCAN_IE_LEN, in nl80211_send_wiphy()
1310 nla_put_u16(msg, NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN, in nl80211_send_wiphy()
1312 nla_put_u8(msg, NL80211_ATTR_MAX_MATCH_SETS, in nl80211_send_wiphy()
1314 nla_put_u32(msg, NL80211_ATTR_MAX_NUM_SCHED_SCAN_PLANS, in nl80211_send_wiphy()
1316 nla_put_u32(msg, NL80211_ATTR_MAX_SCAN_PLAN_INTERVAL, in nl80211_send_wiphy()
1318 nla_put_u32(msg, NL80211_ATTR_MAX_SCAN_PLAN_ITERATIONS, in nl80211_send_wiphy()
1323 nla_put_flag(msg, NL80211_ATTR_SUPPORT_IBSS_RSN)) in nl80211_send_wiphy()
1326 nla_put_flag(msg, NL80211_ATTR_SUPPORT_MESH_AUTH)) in nl80211_send_wiphy()
1329 nla_put_flag(msg, NL80211_ATTR_SUPPORT_AP_UAPSD)) in nl80211_send_wiphy()
1332 nla_put_flag(msg, NL80211_ATTR_ROAM_SUPPORT)) in nl80211_send_wiphy()
1335 nla_put_flag(msg, NL80211_ATTR_TDLS_SUPPORT)) in nl80211_send_wiphy()
1338 nla_put_flag(msg, NL80211_ATTR_TDLS_EXTERNAL_SETUP)) in nl80211_send_wiphy()
1344 if (nla_put(msg, NL80211_ATTR_CIPHER_SUITES, in nl80211_send_wiphy()
1349 if (nla_put_u8(msg, NL80211_ATTR_MAX_NUM_PMKIDS, in nl80211_send_wiphy()
1354 nla_put_flag(msg, NL80211_ATTR_CONTROL_PORT_ETHERTYPE)) in nl80211_send_wiphy()
1357 if (nla_put_u32(msg, NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX, in nl80211_send_wiphy()
1359 nla_put_u32(msg, NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX, in nl80211_send_wiphy()
1364 nla_put_u32(msg, NL80211_ATTR_PROBE_RESP_OFFLOAD, in nl80211_send_wiphy()
1375 if (nla_put_u32(msg, in nl80211_send_wiphy()
1378 nla_put_u32(msg, in nl80211_send_wiphy()
1389 if (nl80211_put_iftypes(msg, NL80211_ATTR_SUPPORTED_IFTYPES, in nl80211_send_wiphy()
1396 nl_bands = nla_nest_start(msg, NL80211_ATTR_WIPHY_BANDS); in nl80211_send_wiphy()
1409 nl_band = nla_nest_start(msg, band); in nl80211_send_wiphy()
1415 if (nl80211_send_band_rateinfo(msg, sband)) in nl80211_send_wiphy()
1423 msg, NL80211_BAND_ATTR_FREQS); in nl80211_send_wiphy()
1430 nl_freq = nla_nest_start(msg, i); in nl80211_send_wiphy()
1437 msg, chan, in nl80211_send_wiphy()
1441 nla_nest_end(msg, nl_freq); in nl80211_send_wiphy()
1449 nla_nest_end(msg, nl_freqs); in nl80211_send_wiphy()
1452 nla_nest_end(msg, nl_band); in nl80211_send_wiphy()
1461 nla_nest_end(msg, nl_bands); in nl80211_send_wiphy()
1474 nl_cmds = nla_nest_start(msg, NL80211_ATTR_SUPPORTED_COMMANDS); in nl80211_send_wiphy()
1483 if (nla_put_u32(msg, i, NL80211_CMD_ ## n)) \ in nl80211_send_wiphy()
1512 if (nla_put_u32(msg, i, NL80211_CMD_SET_WIPHY_NETNS)) in nl80211_send_wiphy()
1518 if (nla_put_u32(msg, i, NL80211_CMD_SET_CHANNEL)) in nl80211_send_wiphy()
1532 if (nla_put_u32(msg, i, NL80211_CMD_REGISTER_BEACONS)) in nl80211_send_wiphy()
1555 if (nla_put_u32(msg, i, NL80211_CMD_CONNECT)) in nl80211_send_wiphy()
1561 if (nla_put_u32(msg, i, NL80211_CMD_DISCONNECT)) in nl80211_send_wiphy()
1565 nla_nest_end(msg, nl_cmds); in nl80211_send_wiphy()
1572 nla_put_u32(msg, in nl80211_send_wiphy()
1578 nla_put_flag(msg, NL80211_ATTR_OFFCHANNEL_TX_OK)) in nl80211_send_wiphy()
1581 if (nl80211_send_mgmt_stypes(msg, mgmt_stypes)) in nl80211_send_wiphy()
1588 if (nl80211_send_wowlan(msg, rdev, state->split)) in nl80211_send_wiphy()
1597 if (nl80211_put_iftypes(msg, NL80211_ATTR_SOFTWARE_IFTYPES, in nl80211_send_wiphy()
1601 if (nl80211_put_iface_combinations(&rdev->wiphy, msg, in nl80211_send_wiphy()
1610 nla_put_u32(msg, NL80211_ATTR_DEVICE_AP_SME, in nl80211_send_wiphy()
1622 if (nla_put_u32(msg, NL80211_ATTR_FEATURE_FLAGS, features)) in nl80211_send_wiphy()
1626 nla_put(msg, NL80211_ATTR_HT_CAPABILITY_MASK, in nl80211_send_wiphy()
1633 nla_put_u32(msg, NL80211_ATTR_MAC_ACL_MAX, in nl80211_send_wiphy()
1651 (nla_put(msg, NL80211_ATTR_EXT_CAPA, in nl80211_send_wiphy()
1654 nla_put(msg, NL80211_ATTR_EXT_CAPA_MASK, in nl80211_send_wiphy()
1660 nla_put(msg, NL80211_ATTR_VHT_CAPABILITY_MASK, in nl80211_send_wiphy()
1668 if (nl80211_send_coalesce(msg, rdev)) in nl80211_send_wiphy()
1672 (nla_put_flag(msg, NL80211_ATTR_SUPPORT_5_MHZ) || in nl80211_send_wiphy()
1673 nla_put_flag(msg, NL80211_ATTR_SUPPORT_10_MHZ))) in nl80211_send_wiphy()
1677 nla_put_u32(msg, NL80211_ATTR_MAX_AP_ASSOC_STA, in nl80211_send_wiphy()
1688 nested = nla_nest_start(msg, NL80211_ATTR_VENDOR_DATA); in nl80211_send_wiphy()
1694 if (nla_put(msg, i + 1, sizeof(*info), info)) in nl80211_send_wiphy()
1697 nla_nest_end(msg, nested); in nl80211_send_wiphy()
1704 nested = nla_nest_start(msg, in nl80211_send_wiphy()
1711 if (nla_put(msg, i + 1, sizeof(*info), info)) in nl80211_send_wiphy()
1714 nla_nest_end(msg, nested); in nl80211_send_wiphy()
1720 nla_put_u8(msg, NL80211_ATTR_MAX_CSA_COUNTERS, in nl80211_send_wiphy()
1725 nla_put_flag(msg, NL80211_ATTR_WIPHY_SELF_MANAGED_REG)) in nl80211_send_wiphy()
1728 if (nla_put(msg, NL80211_ATTR_EXT_FEATURES, in nl80211_send_wiphy()
1738 genlmsg_end(msg, hdr); in nl80211_send_wiphy()
1742 genlmsg_cancel(msg, hdr); in nl80211_send_wiphy()
1861 struct sk_buff *msg; in nl80211_get_wiphy() local
1865 msg = nlmsg_new(4096, GFP_KERNEL); in nl80211_get_wiphy()
1866 if (!msg) in nl80211_get_wiphy()
1869 if (nl80211_send_wiphy(rdev, NL80211_CMD_NEW_WIPHY, msg, in nl80211_get_wiphy()
1872 nlmsg_free(msg); in nl80211_get_wiphy()
1876 return genlmsg_reply(msg, info); in nl80211_get_wiphy()
2349 static int nl80211_send_chandef(struct sk_buff *msg, in nl80211_send_chandef() argument
2355 if (nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ, in nl80211_send_chandef()
2362 if (nla_put_u32(msg, NL80211_ATTR_WIPHY_CHANNEL_TYPE, in nl80211_send_chandef()
2369 if (nla_put_u32(msg, NL80211_ATTR_CHANNEL_WIDTH, chandef->width)) in nl80211_send_chandef()
2371 if (nla_put_u32(msg, NL80211_ATTR_CENTER_FREQ1, chandef->center_freq1)) in nl80211_send_chandef()
2374 nla_put_u32(msg, NL80211_ATTR_CENTER_FREQ2, chandef->center_freq2)) in nl80211_send_chandef()
2379 static int nl80211_send_iface(struct sk_buff *msg, u32 portid, u32 seq, int flags, in nl80211_send_iface() argument
2390 hdr = nl80211hdr_put(msg, portid, seq, flags, cmd); in nl80211_send_iface()
2395 (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) || in nl80211_send_iface()
2396 nla_put_string(msg, NL80211_ATTR_IFNAME, dev->name))) in nl80211_send_iface()
2399 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_iface()
2400 nla_put_u32(msg, NL80211_ATTR_IFTYPE, wdev->iftype) || in nl80211_send_iface()
2401 nla_put_u64(msg, NL80211_ATTR_WDEV, wdev_id(wdev)) || in nl80211_send_iface()
2402 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, wdev_address(wdev)) || in nl80211_send_iface()
2403 nla_put_u32(msg, NL80211_ATTR_GENERATION, in nl80211_send_iface()
2414 if (nl80211_send_chandef(msg, &chandef)) in nl80211_send_iface()
2424 nla_put_u32(msg, NL80211_ATTR_WIPHY_TX_POWER_LEVEL, in nl80211_send_iface()
2430 if (nla_put(msg, NL80211_ATTR_SSID, wdev->ssid_len, wdev->ssid)) in nl80211_send_iface()
2434 genlmsg_end(msg, hdr); in nl80211_send_iface()
2438 genlmsg_cancel(msg, hdr); in nl80211_send_iface()
2487 struct sk_buff *msg; in nl80211_get_interface() local
2491 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_get_interface()
2492 if (!msg) in nl80211_get_interface()
2495 if (nl80211_send_iface(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_interface()
2497 nlmsg_free(msg); in nl80211_get_interface()
2501 return genlmsg_reply(msg, info); in nl80211_get_interface()
2642 struct sk_buff *msg, *event; in nl80211_new_interface() local
2689 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_new_interface()
2690 if (!msg) in nl80211_new_interface()
2698 nlmsg_free(msg); in nl80211_new_interface()
2701 nlmsg_free(msg); in nl80211_new_interface()
2740 if (nl80211_send_iface(msg, info->snd_portid, info->snd_seq, 0, in nl80211_new_interface()
2742 nlmsg_free(msg); in nl80211_new_interface()
2760 return genlmsg_reply(msg, info); in nl80211_new_interface()
2767 struct sk_buff *msg; in nl80211_del_interface() local
2773 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_del_interface()
2774 if (msg && nl80211_send_iface(msg, 0, 0, 0, rdev, wdev, true) < 0) { in nl80211_del_interface()
2775 nlmsg_free(msg); in nl80211_del_interface()
2776 msg = NULL; in nl80211_del_interface()
2790 if (status >= 0 && msg) in nl80211_del_interface()
2792 msg, 0, NL80211_MCGRP_CONFIG, in nl80211_del_interface()
2795 nlmsg_free(msg); in nl80211_del_interface()
2818 struct sk_buff *msg; member
2829 nla_put(cookie->msg, NL80211_ATTR_KEY_DATA, in get_key_callback()
2832 nla_put(cookie->msg, NL80211_ATTR_KEY_SEQ, in get_key_callback()
2835 nla_put_u32(cookie->msg, NL80211_ATTR_KEY_CIPHER, in get_key_callback()
2839 key = nla_nest_start(cookie->msg, NL80211_ATTR_KEY); in get_key_callback()
2844 nla_put(cookie->msg, NL80211_KEY_DATA, in get_key_callback()
2847 nla_put(cookie->msg, NL80211_KEY_SEQ, in get_key_callback()
2850 nla_put_u32(cookie->msg, NL80211_KEY_CIPHER, in get_key_callback()
2854 if (nla_put_u8(cookie->msg, NL80211_ATTR_KEY_IDX, cookie->idx)) in get_key_callback()
2857 nla_nest_end(cookie->msg, key); in get_key_callback()
2876 struct sk_buff *msg; in nl80211_get_key() local
2904 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_get_key()
2905 if (!msg) in nl80211_get_key()
2908 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_key()
2913 cookie.msg = msg; in nl80211_get_key()
2916 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) || in nl80211_get_key()
2917 nla_put_u8(msg, NL80211_ATTR_KEY_IDX, key_idx)) in nl80211_get_key()
2920 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, mac_addr)) in nl80211_get_key()
2932 genlmsg_end(msg, hdr); in nl80211_get_key()
2933 return genlmsg_reply(msg, info); in nl80211_get_key()
2938 nlmsg_free(msg); in nl80211_get_key()
3603 static bool nl80211_put_sta_rate(struct sk_buff *msg, struct rate_info *info, in nl80211_put_sta_rate() argument
3611 rate = nla_nest_start(msg, attr); in nl80211_put_sta_rate()
3620 nla_put_u32(msg, NL80211_RATE_INFO_BITRATE32, bitrate)) in nl80211_put_sta_rate()
3623 nla_put_u16(msg, NL80211_RATE_INFO_BITRATE, bitrate_compat)) in nl80211_put_sta_rate()
3650 if (rate_flg && nla_put_flag(msg, rate_flg)) in nl80211_put_sta_rate()
3654 if (nla_put_u8(msg, NL80211_RATE_INFO_MCS, info->mcs)) in nl80211_put_sta_rate()
3657 nla_put_flag(msg, NL80211_RATE_INFO_SHORT_GI)) in nl80211_put_sta_rate()
3660 if (nla_put_u8(msg, NL80211_RATE_INFO_VHT_MCS, info->mcs)) in nl80211_put_sta_rate()
3662 if (nla_put_u8(msg, NL80211_RATE_INFO_VHT_NSS, info->nss)) in nl80211_put_sta_rate()
3665 nla_put_flag(msg, NL80211_RATE_INFO_SHORT_GI)) in nl80211_put_sta_rate()
3669 nla_nest_end(msg, rate); in nl80211_put_sta_rate()
3673 static bool nl80211_put_signal(struct sk_buff *msg, u8 mask, s8 *signal, in nl80211_put_signal() argument
3682 attr = nla_nest_start(msg, id); in nl80211_put_signal()
3690 if (nla_put_u8(msg, i, signal[i])) in nl80211_put_signal()
3694 nla_nest_end(msg, attr); in nl80211_put_signal()
3699 static int nl80211_send_station(struct sk_buff *msg, u32 cmd, u32 portid, in nl80211_send_station() argument
3708 hdr = nl80211hdr_put(msg, portid, seq, flags, cmd); in nl80211_send_station()
3712 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) || in nl80211_send_station()
3713 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, mac_addr) || in nl80211_send_station()
3714 nla_put_u32(msg, NL80211_ATTR_GENERATION, sinfo->generation)) in nl80211_send_station()
3717 sinfoattr = nla_nest_start(msg, NL80211_ATTR_STA_INFO); in nl80211_send_station()
3723 nla_put_ ## type(msg, NL80211_STA_INFO_ ## attr, \ in nl80211_send_station()
3733 nla_put_u32(msg, NL80211_STA_INFO_RX_BYTES, in nl80211_send_station()
3739 nla_put_u32(msg, NL80211_STA_INFO_TX_BYTES, in nl80211_send_station()
3758 if (!nl80211_put_signal(msg, sinfo->chains, in nl80211_send_station()
3764 if (!nl80211_put_signal(msg, sinfo->chains, in nl80211_send_station()
3770 if (!nl80211_put_sta_rate(msg, &sinfo->txrate, in nl80211_send_station()
3775 if (!nl80211_put_sta_rate(msg, &sinfo->rxrate, in nl80211_send_station()
3791 bss_param = nla_nest_start(msg, NL80211_STA_INFO_BSS_PARAM); in nl80211_send_station()
3796 nla_put_flag(msg, NL80211_STA_BSS_PARAM_CTS_PROT)) || in nl80211_send_station()
3798 nla_put_flag(msg, NL80211_STA_BSS_PARAM_SHORT_PREAMBLE)) || in nl80211_send_station()
3800 nla_put_flag(msg, NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME)) || in nl80211_send_station()
3801 nla_put_u8(msg, NL80211_STA_BSS_PARAM_DTIM_PERIOD, in nl80211_send_station()
3803 nla_put_u16(msg, NL80211_STA_BSS_PARAM_BEACON_INTERVAL, in nl80211_send_station()
3807 nla_nest_end(msg, bss_param); in nl80211_send_station()
3810 nla_put(msg, NL80211_STA_INFO_STA_FLAGS, in nl80211_send_station()
3826 tidsattr = nla_nest_start(msg, NL80211_STA_INFO_TID_STATS); in nl80211_send_station()
3839 tidattr = nla_nest_start(msg, tid + 1); in nl80211_send_station()
3845 nla_put_ ## type(msg, NL80211_TID_STATS_ ## attr, \ in nl80211_send_station()
3856 nla_nest_end(msg, tidattr); in nl80211_send_station()
3859 nla_nest_end(msg, tidsattr); in nl80211_send_station()
3862 nla_nest_end(msg, sinfoattr); in nl80211_send_station()
3865 nla_put(msg, NL80211_ATTR_IE, sinfo->assoc_req_ies_len, in nl80211_send_station()
3869 genlmsg_end(msg, hdr); in nl80211_send_station()
3873 genlmsg_cancel(msg, hdr); in nl80211_send_station()
3935 struct sk_buff *msg; in nl80211_get_station() local
3953 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_get_station()
3954 if (!msg) in nl80211_get_station()
3957 if (nl80211_send_station(msg, NL80211_CMD_NEW_STATION, in nl80211_get_station()
3960 nlmsg_free(msg); in nl80211_get_station()
3964 return genlmsg_reply(msg, info); in nl80211_get_station()
4577 static int nl80211_send_mpath(struct sk_buff *msg, u32 portid, u32 seq, in nl80211_send_mpath() argument
4585 hdr = nl80211hdr_put(msg, portid, seq, flags, NL80211_CMD_NEW_MPATH); in nl80211_send_mpath()
4589 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) || in nl80211_send_mpath()
4590 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, dst) || in nl80211_send_mpath()
4591 nla_put(msg, NL80211_ATTR_MPATH_NEXT_HOP, ETH_ALEN, next_hop) || in nl80211_send_mpath()
4592 nla_put_u32(msg, NL80211_ATTR_GENERATION, pinfo->generation)) in nl80211_send_mpath()
4595 pinfoattr = nla_nest_start(msg, NL80211_ATTR_MPATH_INFO); in nl80211_send_mpath()
4599 nla_put_u32(msg, NL80211_MPATH_INFO_FRAME_QLEN, in nl80211_send_mpath()
4603 nla_put_u32(msg, NL80211_MPATH_INFO_SN, pinfo->sn)) || in nl80211_send_mpath()
4605 nla_put_u32(msg, NL80211_MPATH_INFO_METRIC, in nl80211_send_mpath()
4608 nla_put_u32(msg, NL80211_MPATH_INFO_EXPTIME, in nl80211_send_mpath()
4611 nla_put_u8(msg, NL80211_MPATH_INFO_FLAGS, in nl80211_send_mpath()
4614 nla_put_u32(msg, NL80211_MPATH_INFO_DISCOVERY_TIMEOUT, in nl80211_send_mpath()
4617 nla_put_u8(msg, NL80211_MPATH_INFO_DISCOVERY_RETRIES, in nl80211_send_mpath()
4621 nla_nest_end(msg, pinfoattr); in nl80211_send_mpath()
4623 genlmsg_end(msg, hdr); in nl80211_send_mpath()
4627 genlmsg_cancel(msg, hdr); in nl80211_send_mpath()
4688 struct sk_buff *msg; in nl80211_get_mpath() local
4709 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_get_mpath()
4710 if (!msg) in nl80211_get_mpath()
4713 if (nl80211_send_mpath(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_mpath()
4715 nlmsg_free(msg); in nl80211_get_mpath()
4719 return genlmsg_reply(msg, info); in nl80211_get_mpath()
4793 struct sk_buff *msg; in nl80211_get_mpp() local
4814 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_get_mpp()
4815 if (!msg) in nl80211_get_mpp()
4818 if (nl80211_send_mpath(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_mpp()
4820 nlmsg_free(msg); in nl80211_get_mpp()
4824 return genlmsg_reply(msg, info); in nl80211_get_mpp()
5012 struct sk_buff *msg; in nl80211_get_mesh_config() local
5032 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_get_mesh_config()
5033 if (!msg) in nl80211_get_mesh_config()
5035 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_mesh_config()
5039 pinfoattr = nla_nest_start(msg, NL80211_ATTR_MESH_CONFIG); in nl80211_get_mesh_config()
5042 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) || in nl80211_get_mesh_config()
5043 nla_put_u16(msg, NL80211_MESHCONF_RETRY_TIMEOUT, in nl80211_get_mesh_config()
5045 nla_put_u16(msg, NL80211_MESHCONF_CONFIRM_TIMEOUT, in nl80211_get_mesh_config()
5047 nla_put_u16(msg, NL80211_MESHCONF_HOLDING_TIMEOUT, in nl80211_get_mesh_config()
5049 nla_put_u16(msg, NL80211_MESHCONF_MAX_PEER_LINKS, in nl80211_get_mesh_config()
5051 nla_put_u8(msg, NL80211_MESHCONF_MAX_RETRIES, in nl80211_get_mesh_config()
5053 nla_put_u8(msg, NL80211_MESHCONF_TTL, in nl80211_get_mesh_config()
5055 nla_put_u8(msg, NL80211_MESHCONF_ELEMENT_TTL, in nl80211_get_mesh_config()
5057 nla_put_u8(msg, NL80211_MESHCONF_AUTO_OPEN_PLINKS, in nl80211_get_mesh_config()
5059 nla_put_u32(msg, NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR, in nl80211_get_mesh_config()
5061 nla_put_u8(msg, NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES, in nl80211_get_mesh_config()
5063 nla_put_u32(msg, NL80211_MESHCONF_PATH_REFRESH_TIME, in nl80211_get_mesh_config()
5065 nla_put_u16(msg, NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT, in nl80211_get_mesh_config()
5067 nla_put_u32(msg, NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT, in nl80211_get_mesh_config()
5069 nla_put_u16(msg, NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL, in nl80211_get_mesh_config()
5071 nla_put_u16(msg, NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL, in nl80211_get_mesh_config()
5073 nla_put_u16(msg, NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME, in nl80211_get_mesh_config()
5075 nla_put_u8(msg, NL80211_MESHCONF_HWMP_ROOTMODE, in nl80211_get_mesh_config()
5077 nla_put_u16(msg, NL80211_MESHCONF_HWMP_RANN_INTERVAL, in nl80211_get_mesh_config()
5079 nla_put_u8(msg, NL80211_MESHCONF_GATE_ANNOUNCEMENTS, in nl80211_get_mesh_config()
5081 nla_put_u8(msg, NL80211_MESHCONF_FORWARDING, in nl80211_get_mesh_config()
5083 nla_put_u32(msg, NL80211_MESHCONF_RSSI_THRESHOLD, in nl80211_get_mesh_config()
5085 nla_put_u32(msg, NL80211_MESHCONF_HT_OPMODE, in nl80211_get_mesh_config()
5087 nla_put_u32(msg, NL80211_MESHCONF_HWMP_PATH_TO_ROOT_TIMEOUT, in nl80211_get_mesh_config()
5089 nla_put_u16(msg, NL80211_MESHCONF_HWMP_ROOT_INTERVAL, in nl80211_get_mesh_config()
5091 nla_put_u16(msg, NL80211_MESHCONF_HWMP_CONFIRMATION_INTERVAL, in nl80211_get_mesh_config()
5093 nla_put_u32(msg, NL80211_MESHCONF_POWER_MODE, in nl80211_get_mesh_config()
5095 nla_put_u16(msg, NL80211_MESHCONF_AWAKE_WINDOW, in nl80211_get_mesh_config()
5097 nla_put_u32(msg, NL80211_MESHCONF_PLINK_TIMEOUT, in nl80211_get_mesh_config()
5100 nla_nest_end(msg, pinfoattr); in nl80211_get_mesh_config()
5101 genlmsg_end(msg, hdr); in nl80211_get_mesh_config()
5102 return genlmsg_reply(msg, info); in nl80211_get_mesh_config()
5105 genlmsg_cancel(msg, hdr); in nl80211_get_mesh_config()
5107 nlmsg_free(msg); in nl80211_get_mesh_config()
5380 struct sk_buff *msg) in nl80211_put_regdom() argument
5385 if (nla_put_string(msg, NL80211_ATTR_REG_ALPHA2, regdom->alpha2) || in nl80211_put_regdom()
5387 nla_put_u8(msg, NL80211_ATTR_DFS_REGION, regdom->dfs_region))) in nl80211_put_regdom()
5390 nl_reg_rules = nla_nest_start(msg, NL80211_ATTR_REG_RULES); in nl80211_put_regdom()
5405 nl_reg_rule = nla_nest_start(msg, i); in nl80211_put_regdom()
5414 if (nla_put_u32(msg, NL80211_ATTR_REG_RULE_FLAGS, in nl80211_put_regdom()
5416 nla_put_u32(msg, NL80211_ATTR_FREQ_RANGE_START, in nl80211_put_regdom()
5418 nla_put_u32(msg, NL80211_ATTR_FREQ_RANGE_END, in nl80211_put_regdom()
5420 nla_put_u32(msg, NL80211_ATTR_FREQ_RANGE_MAX_BW, in nl80211_put_regdom()
5422 nla_put_u32(msg, NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN, in nl80211_put_regdom()
5424 nla_put_u32(msg, NL80211_ATTR_POWER_RULE_MAX_EIRP, in nl80211_put_regdom()
5426 nla_put_u32(msg, NL80211_ATTR_DFS_CAC_TIME, in nl80211_put_regdom()
5430 nla_nest_end(msg, nl_reg_rule); in nl80211_put_regdom()
5433 nla_nest_end(msg, nl_reg_rules); in nl80211_put_regdom()
5445 struct sk_buff *msg; in nl80211_get_reg_do() local
5448 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_get_reg_do()
5449 if (!msg) in nl80211_get_reg_do()
5452 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_reg_do()
5462 nlmsg_free(msg); in nl80211_get_reg_do()
5473 nlmsg_free(msg); in nl80211_get_reg_do()
5478 nla_put_u32(msg, NL80211_ATTR_WIPHY, get_wiphy_idx(wiphy))) in nl80211_get_reg_do()
5483 nla_put_u32(msg, NL80211_ATTR_USER_REG_HINT_TYPE, in nl80211_get_reg_do()
5492 if (nl80211_put_regdom(regdom, msg)) in nl80211_get_reg_do()
5497 genlmsg_end(msg, hdr); in nl80211_get_reg_do()
5498 return genlmsg_reply(msg, info); in nl80211_get_reg_do()
5503 genlmsg_cancel(msg, hdr); in nl80211_get_reg_do()
5505 nlmsg_free(msg); in nl80211_get_reg_do()
5509 static int nl80211_send_regdom(struct sk_buff *msg, struct netlink_callback *cb, in nl80211_send_regdom() argument
5513 void *hdr = nl80211hdr_put(msg, NETLINK_CB(cb->skb).portid, seq, flags, in nl80211_send_regdom()
5521 if (nl80211_put_regdom(regdom, msg)) in nl80211_send_regdom()
5525 nla_put_u32(msg, NL80211_ATTR_USER_REG_HINT_TYPE, in nl80211_send_regdom()
5530 nla_put_u32(msg, NL80211_ATTR_WIPHY, get_wiphy_idx(wiphy))) in nl80211_send_regdom()
5534 nla_put_flag(msg, NL80211_ATTR_WIPHY_SELF_MANAGED_REG)) in nl80211_send_regdom()
5537 genlmsg_end(msg, hdr); in nl80211_send_regdom()
5541 genlmsg_cancel(msg, hdr); in nl80211_send_regdom()
6679 static int nl80211_send_bss(struct sk_buff *msg, struct netlink_callback *cb, in nl80211_send_bss() argument
6692 hdr = nl80211hdr_put(msg, NETLINK_CB(cb->skb).portid, seq, flags, in nl80211_send_bss()
6699 if (nla_put_u32(msg, NL80211_ATTR_GENERATION, rdev->bss_generation)) in nl80211_send_bss()
6702 nla_put_u32(msg, NL80211_ATTR_IFINDEX, wdev->netdev->ifindex)) in nl80211_send_bss()
6704 if (nla_put_u64(msg, NL80211_ATTR_WDEV, wdev_id(wdev))) in nl80211_send_bss()
6707 bss = nla_nest_start(msg, NL80211_ATTR_BSS); in nl80211_send_bss()
6711 nla_put(msg, NL80211_BSS_BSSID, ETH_ALEN, res->bssid))) in nl80211_send_bss()
6717 nla_put_flag(msg, NL80211_BSS_PRESP_DATA)) in nl80211_send_bss()
6725 if (nla_put_u64(msg, NL80211_BSS_TSF, ies->tsf)) in nl80211_send_bss()
6727 if (ies->len && nla_put(msg, NL80211_BSS_INFORMATION_ELEMENTS, in nl80211_send_bss()
6735 if (nla_put_u64(msg, NL80211_BSS_BEACON_TSF, ies->tsf)) in nl80211_send_bss()
6737 if (ies->len && nla_put(msg, NL80211_BSS_BEACON_IES, in nl80211_send_bss()
6744 nla_put_u16(msg, NL80211_BSS_BEACON_INTERVAL, res->beacon_interval)) in nl80211_send_bss()
6746 if (nla_put_u16(msg, NL80211_BSS_CAPABILITY, res->capability) || in nl80211_send_bss()
6747 nla_put_u32(msg, NL80211_BSS_FREQUENCY, res->channel->center_freq) || in nl80211_send_bss()
6748 nla_put_u32(msg, NL80211_BSS_CHAN_WIDTH, res->scan_width) || in nl80211_send_bss()
6749 nla_put_u32(msg, NL80211_BSS_SEEN_MS_AGO, in nl80211_send_bss()
6754 nla_put_u64(msg, NL80211_BSS_LAST_SEEN_BOOTTIME, in nl80211_send_bss()
6760 if (nla_put_u32(msg, NL80211_BSS_SIGNAL_MBM, res->signal)) in nl80211_send_bss()
6764 if (nla_put_u8(msg, NL80211_BSS_SIGNAL_UNSPEC, res->signal)) in nl80211_send_bss()
6775 nla_put_u32(msg, NL80211_BSS_STATUS, in nl80211_send_bss()
6781 nla_put_u32(msg, NL80211_BSS_STATUS, in nl80211_send_bss()
6789 nla_nest_end(msg, bss); in nl80211_send_bss()
6791 genlmsg_end(msg, hdr); in nl80211_send_bss()
6797 genlmsg_cancel(msg, hdr); in nl80211_send_bss()
6839 static int nl80211_send_survey(struct sk_buff *msg, u32 portid, u32 seq, in nl80211_send_survey() argument
6851 hdr = nl80211hdr_put(msg, portid, seq, flags, in nl80211_send_survey()
6856 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex)) in nl80211_send_survey()
6859 infoattr = nla_nest_start(msg, NL80211_ATTR_SURVEY_INFO); in nl80211_send_survey()
6864 nla_put_u32(msg, NL80211_SURVEY_INFO_FREQUENCY, in nl80211_send_survey()
6869 nla_put_u8(msg, NL80211_SURVEY_INFO_NOISE, survey->noise)) in nl80211_send_survey()
6872 nla_put_flag(msg, NL80211_SURVEY_INFO_IN_USE)) in nl80211_send_survey()
6875 nla_put_u64(msg, NL80211_SURVEY_INFO_TIME, in nl80211_send_survey()
6879 nla_put_u64(msg, NL80211_SURVEY_INFO_TIME_BUSY, in nl80211_send_survey()
6883 nla_put_u64(msg, NL80211_SURVEY_INFO_TIME_EXT_BUSY, in nl80211_send_survey()
6887 nla_put_u64(msg, NL80211_SURVEY_INFO_TIME_RX, in nl80211_send_survey()
6891 nla_put_u64(msg, NL80211_SURVEY_INFO_TIME_TX, in nl80211_send_survey()
6895 nla_put_u64(msg, NL80211_SURVEY_INFO_TIME_SCAN, in nl80211_send_survey()
6899 nla_nest_end(msg, infoattr); in nl80211_send_survey()
6901 genlmsg_end(msg, hdr); in nl80211_send_survey()
6905 genlmsg_cancel(msg, hdr); in nl80211_send_survey()
8135 struct sk_buff *msg; in nl80211_remain_on_channel() local
8163 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_remain_on_channel()
8164 if (!msg) in nl80211_remain_on_channel()
8167 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_remain_on_channel()
8180 if (nla_put_u64(msg, NL80211_ATTR_COOKIE, cookie)) in nl80211_remain_on_channel()
8183 genlmsg_end(msg, hdr); in nl80211_remain_on_channel()
8185 return genlmsg_reply(msg, info); in nl80211_remain_on_channel()
8190 nlmsg_free(msg); in nl80211_remain_on_channel()
8489 struct sk_buff *msg = NULL; in nl80211_tx_mgmt() local
8574 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_tx_mgmt()
8575 if (!msg) in nl80211_tx_mgmt()
8578 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_tx_mgmt()
8591 if (msg) { in nl80211_tx_mgmt()
8592 if (nla_put_u64(msg, NL80211_ATTR_COOKIE, cookie)) in nl80211_tx_mgmt()
8595 genlmsg_end(msg, hdr); in nl80211_tx_mgmt()
8596 return genlmsg_reply(msg, info); in nl80211_tx_mgmt()
8604 nlmsg_free(msg); in nl80211_tx_mgmt()
8677 struct sk_buff *msg; in nl80211_get_power_save() local
8686 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_get_power_save()
8687 if (!msg) in nl80211_get_power_save()
8690 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_power_save()
8702 if (nla_put_u32(msg, NL80211_ATTR_PS_STATE, ps_state)) in nl80211_get_power_save()
8705 genlmsg_end(msg, hdr); in nl80211_get_power_save()
8706 return genlmsg_reply(msg, info); in nl80211_get_power_save()
8711 nlmsg_free(msg); in nl80211_get_power_save()
8921 static int nl80211_send_wowlan_patterns(struct sk_buff *msg, in nl80211_send_wowlan_patterns() argument
8931 nl_pats = nla_nest_start(msg, NL80211_WOWLAN_TRIG_PKT_PATTERN); in nl80211_send_wowlan_patterns()
8936 nl_pat = nla_nest_start(msg, i + 1); in nl80211_send_wowlan_patterns()
8940 if (nla_put(msg, NL80211_PKTPAT_MASK, DIV_ROUND_UP(pat_len, 8), in nl80211_send_wowlan_patterns()
8942 nla_put(msg, NL80211_PKTPAT_PATTERN, pat_len, in nl80211_send_wowlan_patterns()
8944 nla_put_u32(msg, NL80211_PKTPAT_OFFSET, in nl80211_send_wowlan_patterns()
8947 nla_nest_end(msg, nl_pat); in nl80211_send_wowlan_patterns()
8949 nla_nest_end(msg, nl_pats); in nl80211_send_wowlan_patterns()
8954 static int nl80211_send_wowlan_tcp(struct sk_buff *msg, in nl80211_send_wowlan_tcp() argument
8962 nl_tcp = nla_nest_start(msg, NL80211_WOWLAN_TRIG_TCP_CONNECTION); in nl80211_send_wowlan_tcp()
8966 if (nla_put_in_addr(msg, NL80211_WOWLAN_TCP_SRC_IPV4, tcp->src) || in nl80211_send_wowlan_tcp()
8967 nla_put_in_addr(msg, NL80211_WOWLAN_TCP_DST_IPV4, tcp->dst) || in nl80211_send_wowlan_tcp()
8968 nla_put(msg, NL80211_WOWLAN_TCP_DST_MAC, ETH_ALEN, tcp->dst_mac) || in nl80211_send_wowlan_tcp()
8969 nla_put_u16(msg, NL80211_WOWLAN_TCP_SRC_PORT, tcp->src_port) || in nl80211_send_wowlan_tcp()
8970 nla_put_u16(msg, NL80211_WOWLAN_TCP_DST_PORT, tcp->dst_port) || in nl80211_send_wowlan_tcp()
8971 nla_put(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD, in nl80211_send_wowlan_tcp()
8973 nla_put_u32(msg, NL80211_WOWLAN_TCP_DATA_INTERVAL, in nl80211_send_wowlan_tcp()
8975 nla_put(msg, NL80211_WOWLAN_TCP_WAKE_PAYLOAD, in nl80211_send_wowlan_tcp()
8977 nla_put(msg, NL80211_WOWLAN_TCP_WAKE_MASK, in nl80211_send_wowlan_tcp()
8982 nla_put(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ, in nl80211_send_wowlan_tcp()
8987 nla_put(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN, in nl80211_send_wowlan_tcp()
8992 nla_nest_end(msg, nl_tcp); in nl80211_send_wowlan_tcp()
8997 static int nl80211_send_wowlan_nd(struct sk_buff *msg, in nl80211_send_wowlan_nd() argument
9006 nd = nla_nest_start(msg, NL80211_WOWLAN_TRIG_NET_DETECT); in nl80211_send_wowlan_nd()
9011 nla_put_u32(msg, NL80211_ATTR_SCHED_SCAN_INTERVAL, in nl80211_send_wowlan_nd()
9015 if (nla_put_u32(msg, NL80211_ATTR_SCHED_SCAN_DELAY, req->delay)) in nl80211_send_wowlan_nd()
9018 freqs = nla_nest_start(msg, NL80211_ATTR_SCAN_FREQUENCIES); in nl80211_send_wowlan_nd()
9023 nla_put_u32(msg, i, req->channels[i]->center_freq); in nl80211_send_wowlan_nd()
9025 nla_nest_end(msg, freqs); in nl80211_send_wowlan_nd()
9028 matches = nla_nest_start(msg, NL80211_ATTR_SCHED_SCAN_MATCH); in nl80211_send_wowlan_nd()
9030 match = nla_nest_start(msg, i); in nl80211_send_wowlan_nd()
9031 nla_put(msg, NL80211_SCHED_SCAN_MATCH_ATTR_SSID, in nl80211_send_wowlan_nd()
9034 nla_nest_end(msg, match); in nl80211_send_wowlan_nd()
9036 nla_nest_end(msg, matches); in nl80211_send_wowlan_nd()
9039 scan_plans = nla_nest_start(msg, NL80211_ATTR_SCHED_SCAN_PLANS); in nl80211_send_wowlan_nd()
9044 scan_plan = nla_nest_start(msg, i + 1); in nl80211_send_wowlan_nd()
9046 nla_put_u32(msg, NL80211_SCHED_SCAN_PLAN_INTERVAL, in nl80211_send_wowlan_nd()
9049 nla_put_u32(msg, NL80211_SCHED_SCAN_PLAN_ITERATIONS, in nl80211_send_wowlan_nd()
9052 nla_nest_end(msg, scan_plan); in nl80211_send_wowlan_nd()
9054 nla_nest_end(msg, scan_plans); in nl80211_send_wowlan_nd()
9056 nla_nest_end(msg, nd); in nl80211_send_wowlan_nd()
9064 struct sk_buff *msg; in nl80211_get_wowlan() local
9079 msg = nlmsg_new(size, GFP_KERNEL); in nl80211_get_wowlan()
9080 if (!msg) in nl80211_get_wowlan()
9083 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_wowlan()
9091 nl_wowlan = nla_nest_start(msg, NL80211_ATTR_WOWLAN_TRIGGERS); in nl80211_get_wowlan()
9096 nla_put_flag(msg, NL80211_WOWLAN_TRIG_ANY)) || in nl80211_get_wowlan()
9098 nla_put_flag(msg, NL80211_WOWLAN_TRIG_DISCONNECT)) || in nl80211_get_wowlan()
9100 nla_put_flag(msg, NL80211_WOWLAN_TRIG_MAGIC_PKT)) || in nl80211_get_wowlan()
9102 nla_put_flag(msg, NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE)) || in nl80211_get_wowlan()
9104 nla_put_flag(msg, NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST)) || in nl80211_get_wowlan()
9106 nla_put_flag(msg, NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE)) || in nl80211_get_wowlan()
9108 nla_put_flag(msg, NL80211_WOWLAN_TRIG_RFKILL_RELEASE))) in nl80211_get_wowlan()
9111 if (nl80211_send_wowlan_patterns(msg, rdev)) in nl80211_get_wowlan()
9114 if (nl80211_send_wowlan_tcp(msg, in nl80211_get_wowlan()
9119 msg, in nl80211_get_wowlan()
9123 nla_nest_end(msg, nl_wowlan); in nl80211_get_wowlan()
9126 genlmsg_end(msg, hdr); in nl80211_get_wowlan()
9127 return genlmsg_reply(msg, info); in nl80211_get_wowlan()
9130 nlmsg_free(msg); in nl80211_get_wowlan()
9513 static int nl80211_send_coalesce_rules(struct sk_buff *msg, in nl80211_send_coalesce_rules() argument
9523 nl_rules = nla_nest_start(msg, NL80211_ATTR_COALESCE_RULE); in nl80211_send_coalesce_rules()
9528 nl_rule = nla_nest_start(msg, i + 1); in nl80211_send_coalesce_rules()
9533 if (nla_put_u32(msg, NL80211_ATTR_COALESCE_RULE_DELAY, in nl80211_send_coalesce_rules()
9537 if (nla_put_u32(msg, NL80211_ATTR_COALESCE_RULE_CONDITION, in nl80211_send_coalesce_rules()
9541 nl_pats = nla_nest_start(msg, in nl80211_send_coalesce_rules()
9547 nl_pat = nla_nest_start(msg, j + 1); in nl80211_send_coalesce_rules()
9551 if (nla_put(msg, NL80211_PKTPAT_MASK, in nl80211_send_coalesce_rules()
9554 nla_put(msg, NL80211_PKTPAT_PATTERN, pat_len, in nl80211_send_coalesce_rules()
9556 nla_put_u32(msg, NL80211_PKTPAT_OFFSET, in nl80211_send_coalesce_rules()
9559 nla_nest_end(msg, nl_pat); in nl80211_send_coalesce_rules()
9561 nla_nest_end(msg, nl_pats); in nl80211_send_coalesce_rules()
9562 nla_nest_end(msg, nl_rule); in nl80211_send_coalesce_rules()
9564 nla_nest_end(msg, nl_rules); in nl80211_send_coalesce_rules()
9572 struct sk_buff *msg; in nl80211_get_coalesce() local
9578 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_get_coalesce()
9579 if (!msg) in nl80211_get_coalesce()
9582 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_coalesce()
9587 if (rdev->coalesce && nl80211_send_coalesce_rules(msg, rdev)) in nl80211_get_coalesce()
9590 genlmsg_end(msg, hdr); in nl80211_get_coalesce()
9591 return genlmsg_reply(msg, info); in nl80211_get_coalesce()
9594 nlmsg_free(msg); in nl80211_get_coalesce()
9845 struct sk_buff *msg; in nl80211_probe_client() local
9861 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_probe_client()
9862 if (!msg) in nl80211_probe_client()
9865 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_probe_client()
9878 if (nla_put_u64(msg, NL80211_ATTR_COOKIE, cookie)) in nl80211_probe_client()
9881 genlmsg_end(msg, hdr); in nl80211_probe_client()
9883 return genlmsg_reply(msg, info); in nl80211_probe_client()
9888 nlmsg_free(msg); in nl80211_probe_client()
9974 struct sk_buff *msg; in nl80211_get_protocol_features() local
9976 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_get_protocol_features()
9977 if (!msg) in nl80211_get_protocol_features()
9980 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_protocol_features()
9985 if (nla_put_u32(msg, NL80211_ATTR_PROTOCOL_FEATURES, in nl80211_get_protocol_features()
9989 genlmsg_end(msg, hdr); in nl80211_get_protocol_features()
9990 return genlmsg_reply(msg, info); in nl80211_get_protocol_features()
9993 kfree_skb(msg); in nl80211_get_protocol_features()
11428 struct sk_buff *msg; in nl80211_notify_wiphy() local
11434 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_notify_wiphy()
11435 if (!msg) in nl80211_notify_wiphy()
11438 if (nl80211_send_wiphy(rdev, cmd, msg, 0, 0, 0, &state) < 0) { in nl80211_notify_wiphy()
11439 nlmsg_free(msg); in nl80211_notify_wiphy()
11443 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_notify_wiphy()
11447 static int nl80211_add_scan_req(struct sk_buff *msg, in nl80211_add_scan_req() argument
11457 nest = nla_nest_start(msg, NL80211_ATTR_SCAN_SSIDS); in nl80211_add_scan_req()
11461 if (nla_put(msg, i, req->ssids[i].ssid_len, req->ssids[i].ssid)) in nl80211_add_scan_req()
11464 nla_nest_end(msg, nest); in nl80211_add_scan_req()
11466 nest = nla_nest_start(msg, NL80211_ATTR_SCAN_FREQUENCIES); in nl80211_add_scan_req()
11470 if (nla_put_u32(msg, i, req->channels[i]->center_freq)) in nl80211_add_scan_req()
11473 nla_nest_end(msg, nest); in nl80211_add_scan_req()
11476 nla_put(msg, NL80211_ATTR_IE, req->ie_len, req->ie)) in nl80211_add_scan_req()
11480 nla_put_u32(msg, NL80211_ATTR_SCAN_FLAGS, req->flags)) in nl80211_add_scan_req()
11488 static int nl80211_send_scan_msg(struct sk_buff *msg, in nl80211_send_scan_msg() argument
11496 hdr = nl80211hdr_put(msg, portid, seq, flags, cmd); in nl80211_send_scan_msg()
11500 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_scan_msg()
11501 (wdev->netdev && nla_put_u32(msg, NL80211_ATTR_IFINDEX, in nl80211_send_scan_msg()
11503 nla_put_u64(msg, NL80211_ATTR_WDEV, wdev_id(wdev))) in nl80211_send_scan_msg()
11507 nl80211_add_scan_req(msg, rdev); in nl80211_send_scan_msg()
11509 genlmsg_end(msg, hdr); in nl80211_send_scan_msg()
11513 genlmsg_cancel(msg, hdr); in nl80211_send_scan_msg()
11518 nl80211_send_sched_scan_msg(struct sk_buff *msg, in nl80211_send_sched_scan_msg() argument
11525 hdr = nl80211hdr_put(msg, portid, seq, flags, cmd); in nl80211_send_sched_scan_msg()
11529 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_sched_scan_msg()
11530 nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex)) in nl80211_send_sched_scan_msg()
11533 genlmsg_end(msg, hdr); in nl80211_send_sched_scan_msg()
11537 genlmsg_cancel(msg, hdr); in nl80211_send_sched_scan_msg()
11544 struct sk_buff *msg; in nl80211_send_scan_start() local
11546 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_send_scan_start()
11547 if (!msg) in nl80211_send_scan_start()
11550 if (nl80211_send_scan_msg(msg, rdev, wdev, 0, 0, 0, in nl80211_send_scan_start()
11552 nlmsg_free(msg); in nl80211_send_scan_start()
11556 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_scan_start()
11563 struct sk_buff *msg; in nl80211_build_scan_msg() local
11565 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_build_scan_msg()
11566 if (!msg) in nl80211_build_scan_msg()
11569 if (nl80211_send_scan_msg(msg, rdev, wdev, 0, 0, 0, in nl80211_build_scan_msg()
11572 nlmsg_free(msg); in nl80211_build_scan_msg()
11576 return msg; in nl80211_build_scan_msg()
11580 struct sk_buff *msg) in nl80211_send_scan_result() argument
11582 if (!msg) in nl80211_send_scan_result()
11585 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_scan_result()
11592 struct sk_buff *msg; in nl80211_send_sched_scan_results() local
11594 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_send_sched_scan_results()
11595 if (!msg) in nl80211_send_sched_scan_results()
11598 if (nl80211_send_sched_scan_msg(msg, rdev, netdev, 0, 0, 0, in nl80211_send_sched_scan_results()
11600 nlmsg_free(msg); in nl80211_send_sched_scan_results()
11604 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_sched_scan_results()
11611 struct sk_buff *msg; in nl80211_send_sched_scan() local
11613 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_send_sched_scan()
11614 if (!msg) in nl80211_send_sched_scan()
11617 if (nl80211_send_sched_scan_msg(msg, rdev, netdev, 0, 0, 0, cmd) < 0) { in nl80211_send_sched_scan()
11618 nlmsg_free(msg); in nl80211_send_sched_scan()
11622 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_sched_scan()
11626 static bool nl80211_reg_change_event_fill(struct sk_buff *msg, in nl80211_reg_change_event_fill() argument
11630 if (nla_put_u8(msg, NL80211_ATTR_REG_INITIATOR, request->initiator)) in nl80211_reg_change_event_fill()
11634 if (nla_put_u8(msg, NL80211_ATTR_REG_TYPE, in nl80211_reg_change_event_fill()
11638 if (nla_put_u8(msg, NL80211_ATTR_REG_TYPE, in nl80211_reg_change_event_fill()
11643 if (nla_put_u8(msg, NL80211_ATTR_REG_TYPE, in nl80211_reg_change_event_fill()
11647 if (nla_put_u8(msg, NL80211_ATTR_REG_TYPE, in nl80211_reg_change_event_fill()
11649 nla_put_string(msg, NL80211_ATTR_REG_ALPHA2, in nl80211_reg_change_event_fill()
11658 nla_put_u32(msg, NL80211_ATTR_WIPHY, request->wiphy_idx)) in nl80211_reg_change_event_fill()
11663 nla_put_flag(msg, NL80211_ATTR_WIPHY_SELF_MANAGED_REG)) in nl80211_reg_change_event_fill()
11680 struct sk_buff *msg; in nl80211_common_reg_change_event() local
11683 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_common_reg_change_event()
11684 if (!msg) in nl80211_common_reg_change_event()
11687 hdr = nl80211hdr_put(msg, 0, 0, 0, cmd_id); in nl80211_common_reg_change_event()
11689 nlmsg_free(msg); in nl80211_common_reg_change_event()
11693 if (nl80211_reg_change_event_fill(msg, request) == false) in nl80211_common_reg_change_event()
11696 genlmsg_end(msg, hdr); in nl80211_common_reg_change_event()
11699 genlmsg_multicast_allns(&nl80211_fam, msg, 0, in nl80211_common_reg_change_event()
11706 genlmsg_cancel(msg, hdr); in nl80211_common_reg_change_event()
11707 nlmsg_free(msg); in nl80211_common_reg_change_event()
11716 struct sk_buff *msg; in nl80211_send_mlme_event() local
11719 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in nl80211_send_mlme_event()
11720 if (!msg) in nl80211_send_mlme_event()
11723 hdr = nl80211hdr_put(msg, 0, 0, 0, cmd); in nl80211_send_mlme_event()
11725 nlmsg_free(msg); in nl80211_send_mlme_event()
11729 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_mlme_event()
11730 nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) || in nl80211_send_mlme_event()
11731 nla_put(msg, NL80211_ATTR_FRAME, len, buf)) in nl80211_send_mlme_event()
11736 nla_nest_start(msg, NL80211_ATTR_STA_WME); in nl80211_send_mlme_event()
11740 if (nla_put_u8(msg, NL80211_STA_WME_UAPSD_QUEUES, in nl80211_send_mlme_event()
11744 nla_nest_end(msg, nla_wmm); in nl80211_send_mlme_event()
11747 genlmsg_end(msg, hdr); in nl80211_send_mlme_event()
11749 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_mlme_event()
11754 genlmsg_cancel(msg, hdr); in nl80211_send_mlme_event()
11755 nlmsg_free(msg); in nl80211_send_mlme_event()
11816 struct sk_buff *msg; in nl80211_send_mlme_timeout() local
11819 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in nl80211_send_mlme_timeout()
11820 if (!msg) in nl80211_send_mlme_timeout()
11823 hdr = nl80211hdr_put(msg, 0, 0, 0, cmd); in nl80211_send_mlme_timeout()
11825 nlmsg_free(msg); in nl80211_send_mlme_timeout()
11829 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_mlme_timeout()
11830 nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) || in nl80211_send_mlme_timeout()
11831 nla_put_flag(msg, NL80211_ATTR_TIMED_OUT) || in nl80211_send_mlme_timeout()
11832 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, addr)) in nl80211_send_mlme_timeout()
11835 genlmsg_end(msg, hdr); in nl80211_send_mlme_timeout()
11837 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_mlme_timeout()
11842 genlmsg_cancel(msg, hdr); in nl80211_send_mlme_timeout()
11843 nlmsg_free(msg); in nl80211_send_mlme_timeout()
11868 struct sk_buff *msg; in nl80211_send_connect_result() local
11871 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in nl80211_send_connect_result()
11872 if (!msg) in nl80211_send_connect_result()
11875 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_CONNECT); in nl80211_send_connect_result()
11877 nlmsg_free(msg); in nl80211_send_connect_result()
11881 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_connect_result()
11882 nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) || in nl80211_send_connect_result()
11883 (bssid && nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, bssid)) || in nl80211_send_connect_result()
11884 nla_put_u16(msg, NL80211_ATTR_STATUS_CODE, status) || in nl80211_send_connect_result()
11886 nla_put(msg, NL80211_ATTR_REQ_IE, req_ie_len, req_ie)) || in nl80211_send_connect_result()
11888 nla_put(msg, NL80211_ATTR_RESP_IE, resp_ie_len, resp_ie))) in nl80211_send_connect_result()
11891 genlmsg_end(msg, hdr); in nl80211_send_connect_result()
11893 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_connect_result()
11898 genlmsg_cancel(msg, hdr); in nl80211_send_connect_result()
11899 nlmsg_free(msg); in nl80211_send_connect_result()
11908 struct sk_buff *msg; in nl80211_send_roamed() local
11911 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in nl80211_send_roamed()
11912 if (!msg) in nl80211_send_roamed()
11915 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_ROAM); in nl80211_send_roamed()
11917 nlmsg_free(msg); in nl80211_send_roamed()
11921 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_roamed()
11922 nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) || in nl80211_send_roamed()
11923 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, bssid) || in nl80211_send_roamed()
11925 nla_put(msg, NL80211_ATTR_REQ_IE, req_ie_len, req_ie)) || in nl80211_send_roamed()
11927 nla_put(msg, NL80211_ATTR_RESP_IE, resp_ie_len, resp_ie))) in nl80211_send_roamed()
11930 genlmsg_end(msg, hdr); in nl80211_send_roamed()
11932 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_roamed()
11937 genlmsg_cancel(msg, hdr); in nl80211_send_roamed()
11938 nlmsg_free(msg); in nl80211_send_roamed()
11946 struct sk_buff *msg; in nl80211_send_disconnected() local
11949 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_send_disconnected()
11950 if (!msg) in nl80211_send_disconnected()
11953 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_DISCONNECT); in nl80211_send_disconnected()
11955 nlmsg_free(msg); in nl80211_send_disconnected()
11959 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_disconnected()
11960 nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) || in nl80211_send_disconnected()
11962 nla_put_u16(msg, NL80211_ATTR_REASON_CODE, reason)) || in nl80211_send_disconnected()
11964 nla_put_flag(msg, NL80211_ATTR_DISCONNECTED_BY_AP)) || in nl80211_send_disconnected()
11965 (ie && nla_put(msg, NL80211_ATTR_IE, ie_len, ie))) in nl80211_send_disconnected()
11968 genlmsg_end(msg, hdr); in nl80211_send_disconnected()
11970 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_disconnected()
11975 genlmsg_cancel(msg, hdr); in nl80211_send_disconnected()
11976 nlmsg_free(msg); in nl80211_send_disconnected()
11984 struct sk_buff *msg; in nl80211_send_ibss_bssid() local
11987 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in nl80211_send_ibss_bssid()
11988 if (!msg) in nl80211_send_ibss_bssid()
11991 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_JOIN_IBSS); in nl80211_send_ibss_bssid()
11993 nlmsg_free(msg); in nl80211_send_ibss_bssid()
11997 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_ibss_bssid()
11998 nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) || in nl80211_send_ibss_bssid()
11999 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, bssid)) in nl80211_send_ibss_bssid()
12002 genlmsg_end(msg, hdr); in nl80211_send_ibss_bssid()
12004 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_ibss_bssid()
12009 genlmsg_cancel(msg, hdr); in nl80211_send_ibss_bssid()
12010 nlmsg_free(msg); in nl80211_send_ibss_bssid()
12018 struct sk_buff *msg; in cfg80211_notify_new_peer_candidate() local
12026 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in cfg80211_notify_new_peer_candidate()
12027 if (!msg) in cfg80211_notify_new_peer_candidate()
12030 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_NEW_PEER_CANDIDATE); in cfg80211_notify_new_peer_candidate()
12032 nlmsg_free(msg); in cfg80211_notify_new_peer_candidate()
12036 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_notify_new_peer_candidate()
12037 nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) || in cfg80211_notify_new_peer_candidate()
12038 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, addr) || in cfg80211_notify_new_peer_candidate()
12040 nla_put(msg, NL80211_ATTR_IE, ie_len , ie))) in cfg80211_notify_new_peer_candidate()
12043 genlmsg_end(msg, hdr); in cfg80211_notify_new_peer_candidate()
12045 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_notify_new_peer_candidate()
12050 genlmsg_cancel(msg, hdr); in cfg80211_notify_new_peer_candidate()
12051 nlmsg_free(msg); in cfg80211_notify_new_peer_candidate()
12060 struct sk_buff *msg; in nl80211_michael_mic_failure() local
12063 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in nl80211_michael_mic_failure()
12064 if (!msg) in nl80211_michael_mic_failure()
12067 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_MICHAEL_MIC_FAILURE); in nl80211_michael_mic_failure()
12069 nlmsg_free(msg); in nl80211_michael_mic_failure()
12073 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_michael_mic_failure()
12074 nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) || in nl80211_michael_mic_failure()
12075 (addr && nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, addr)) || in nl80211_michael_mic_failure()
12076 nla_put_u32(msg, NL80211_ATTR_KEY_TYPE, key_type) || in nl80211_michael_mic_failure()
12078 nla_put_u8(msg, NL80211_ATTR_KEY_IDX, key_id)) || in nl80211_michael_mic_failure()
12079 (tsc && nla_put(msg, NL80211_ATTR_KEY_SEQ, 6, tsc))) in nl80211_michael_mic_failure()
12082 genlmsg_end(msg, hdr); in nl80211_michael_mic_failure()
12084 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_michael_mic_failure()
12089 genlmsg_cancel(msg, hdr); in nl80211_michael_mic_failure()
12090 nlmsg_free(msg); in nl80211_michael_mic_failure()
12097 struct sk_buff *msg; in nl80211_send_beacon_hint_event() local
12101 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC); in nl80211_send_beacon_hint_event()
12102 if (!msg) in nl80211_send_beacon_hint_event()
12105 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_REG_BEACON_HINT); in nl80211_send_beacon_hint_event()
12107 nlmsg_free(msg); in nl80211_send_beacon_hint_event()
12115 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, get_wiphy_idx(wiphy))) in nl80211_send_beacon_hint_event()
12119 nl_freq = nla_nest_start(msg, NL80211_ATTR_FREQ_BEFORE); in nl80211_send_beacon_hint_event()
12122 if (nl80211_msg_put_channel(msg, channel_before, false)) in nl80211_send_beacon_hint_event()
12124 nla_nest_end(msg, nl_freq); in nl80211_send_beacon_hint_event()
12127 nl_freq = nla_nest_start(msg, NL80211_ATTR_FREQ_AFTER); in nl80211_send_beacon_hint_event()
12130 if (nl80211_msg_put_channel(msg, channel_after, false)) in nl80211_send_beacon_hint_event()
12132 nla_nest_end(msg, nl_freq); in nl80211_send_beacon_hint_event()
12134 genlmsg_end(msg, hdr); in nl80211_send_beacon_hint_event()
12137 genlmsg_multicast_allns(&nl80211_fam, msg, 0, in nl80211_send_beacon_hint_event()
12144 genlmsg_cancel(msg, hdr); in nl80211_send_beacon_hint_event()
12145 nlmsg_free(msg); in nl80211_send_beacon_hint_event()
12154 struct sk_buff *msg; in nl80211_send_remain_on_chan_event() local
12157 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in nl80211_send_remain_on_chan_event()
12158 if (!msg) in nl80211_send_remain_on_chan_event()
12161 hdr = nl80211hdr_put(msg, 0, 0, 0, cmd); in nl80211_send_remain_on_chan_event()
12163 nlmsg_free(msg); in nl80211_send_remain_on_chan_event()
12167 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_remain_on_chan_event()
12168 (wdev->netdev && nla_put_u32(msg, NL80211_ATTR_IFINDEX, in nl80211_send_remain_on_chan_event()
12170 nla_put_u64(msg, NL80211_ATTR_WDEV, wdev_id(wdev)) || in nl80211_send_remain_on_chan_event()
12171 nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ, chan->center_freq) || in nl80211_send_remain_on_chan_event()
12172 nla_put_u32(msg, NL80211_ATTR_WIPHY_CHANNEL_TYPE, in nl80211_send_remain_on_chan_event()
12174 nla_put_u64(msg, NL80211_ATTR_COOKIE, cookie)) in nl80211_send_remain_on_chan_event()
12178 nla_put_u32(msg, NL80211_ATTR_DURATION, duration)) in nl80211_send_remain_on_chan_event()
12181 genlmsg_end(msg, hdr); in nl80211_send_remain_on_chan_event()
12183 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_remain_on_chan_event()
12188 genlmsg_cancel(msg, hdr); in nl80211_send_remain_on_chan_event()
12189 nlmsg_free(msg); in nl80211_send_remain_on_chan_event()
12224 struct sk_buff *msg; in cfg80211_new_sta() local
12228 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in cfg80211_new_sta()
12229 if (!msg) in cfg80211_new_sta()
12232 if (nl80211_send_station(msg, NL80211_CMD_NEW_STATION, 0, 0, 0, in cfg80211_new_sta()
12234 nlmsg_free(msg); in cfg80211_new_sta()
12238 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_new_sta()
12248 struct sk_buff *msg; in cfg80211_del_sta_sinfo() local
12256 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in cfg80211_del_sta_sinfo()
12257 if (!msg) in cfg80211_del_sta_sinfo()
12260 if (nl80211_send_station(msg, NL80211_CMD_DEL_STATION, 0, 0, 0, in cfg80211_del_sta_sinfo()
12262 nlmsg_free(msg); in cfg80211_del_sta_sinfo()
12266 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_del_sta_sinfo()
12277 struct sk_buff *msg; in cfg80211_conn_failed() local
12280 msg = nlmsg_new(NLMSG_GOODSIZE, gfp); in cfg80211_conn_failed()
12281 if (!msg) in cfg80211_conn_failed()
12284 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_CONN_FAILED); in cfg80211_conn_failed()
12286 nlmsg_free(msg); in cfg80211_conn_failed()
12290 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) || in cfg80211_conn_failed()
12291 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, mac_addr) || in cfg80211_conn_failed()
12292 nla_put_u32(msg, NL80211_ATTR_CONN_FAILED_REASON, reason)) in cfg80211_conn_failed()
12295 genlmsg_end(msg, hdr); in cfg80211_conn_failed()
12297 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_conn_failed()
12302 genlmsg_cancel(msg, hdr); in cfg80211_conn_failed()
12303 nlmsg_free(msg); in cfg80211_conn_failed()
12312 struct sk_buff *msg; in __nl80211_unexpected_frame() local
12319 msg = nlmsg_new(100, gfp); in __nl80211_unexpected_frame()
12320 if (!msg) in __nl80211_unexpected_frame()
12323 hdr = nl80211hdr_put(msg, 0, 0, 0, cmd); in __nl80211_unexpected_frame()
12325 nlmsg_free(msg); in __nl80211_unexpected_frame()
12329 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in __nl80211_unexpected_frame()
12330 nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) || in __nl80211_unexpected_frame()
12331 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, addr)) in __nl80211_unexpected_frame()
12334 genlmsg_end(msg, hdr); in __nl80211_unexpected_frame()
12335 genlmsg_unicast(wiphy_net(&rdev->wiphy), msg, nlportid); in __nl80211_unexpected_frame()
12339 genlmsg_cancel(msg, hdr); in __nl80211_unexpected_frame()
12340 nlmsg_free(msg); in __nl80211_unexpected_frame()
12392 struct sk_buff *msg; in nl80211_send_mgmt() local
12395 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in nl80211_send_mgmt()
12396 if (!msg) in nl80211_send_mgmt()
12399 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_FRAME); in nl80211_send_mgmt()
12401 nlmsg_free(msg); in nl80211_send_mgmt()
12405 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_mgmt()
12406 (netdev && nla_put_u32(msg, NL80211_ATTR_IFINDEX, in nl80211_send_mgmt()
12408 nla_put_u64(msg, NL80211_ATTR_WDEV, wdev_id(wdev)) || in nl80211_send_mgmt()
12409 nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ, freq) || in nl80211_send_mgmt()
12411 nla_put_u32(msg, NL80211_ATTR_RX_SIGNAL_DBM, sig_dbm)) || in nl80211_send_mgmt()
12412 nla_put(msg, NL80211_ATTR_FRAME, len, buf) || in nl80211_send_mgmt()
12414 nla_put_u32(msg, NL80211_ATTR_RXMGMT_FLAGS, flags))) in nl80211_send_mgmt()
12417 genlmsg_end(msg, hdr); in nl80211_send_mgmt()
12419 return genlmsg_unicast(wiphy_net(&rdev->wiphy), msg, nlportid); in nl80211_send_mgmt()
12422 genlmsg_cancel(msg, hdr); in nl80211_send_mgmt()
12423 nlmsg_free(msg); in nl80211_send_mgmt()
12433 struct sk_buff *msg; in cfg80211_mgmt_tx_status() local
12438 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in cfg80211_mgmt_tx_status()
12439 if (!msg) in cfg80211_mgmt_tx_status()
12442 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_FRAME_TX_STATUS); in cfg80211_mgmt_tx_status()
12444 nlmsg_free(msg); in cfg80211_mgmt_tx_status()
12448 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_mgmt_tx_status()
12449 (netdev && nla_put_u32(msg, NL80211_ATTR_IFINDEX, in cfg80211_mgmt_tx_status()
12451 nla_put_u64(msg, NL80211_ATTR_WDEV, wdev_id(wdev)) || in cfg80211_mgmt_tx_status()
12452 nla_put(msg, NL80211_ATTR_FRAME, len, buf) || in cfg80211_mgmt_tx_status()
12453 nla_put_u64(msg, NL80211_ATTR_COOKIE, cookie) || in cfg80211_mgmt_tx_status()
12454 (ack && nla_put_flag(msg, NL80211_ATTR_ACK))) in cfg80211_mgmt_tx_status()
12457 genlmsg_end(msg, hdr); in cfg80211_mgmt_tx_status()
12459 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_mgmt_tx_status()
12464 genlmsg_cancel(msg, hdr); in cfg80211_mgmt_tx_status()
12465 nlmsg_free(msg); in cfg80211_mgmt_tx_status()
12474 struct sk_buff *msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in cfg80211_prepare_cqm() local
12477 if (!msg) in cfg80211_prepare_cqm()
12480 cb = (void **)msg->cb; in cfg80211_prepare_cqm()
12482 cb[0] = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_NOTIFY_CQM); in cfg80211_prepare_cqm()
12484 nlmsg_free(msg); in cfg80211_prepare_cqm()
12488 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_prepare_cqm()
12489 nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex)) in cfg80211_prepare_cqm()
12492 if (mac && nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, mac)) in cfg80211_prepare_cqm()
12495 cb[1] = nla_nest_start(msg, NL80211_ATTR_CQM); in cfg80211_prepare_cqm()
12501 return msg; in cfg80211_prepare_cqm()
12503 nlmsg_free(msg); in cfg80211_prepare_cqm()
12507 static void cfg80211_send_cqm(struct sk_buff *msg, gfp_t gfp) in cfg80211_send_cqm() argument
12509 void **cb = (void **)msg->cb; in cfg80211_send_cqm()
12512 nla_nest_end(msg, cb[1]); in cfg80211_send_cqm()
12513 genlmsg_end(msg, cb[0]); in cfg80211_send_cqm()
12515 memset(msg->cb, 0, sizeof(msg->cb)); in cfg80211_send_cqm()
12517 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_send_cqm()
12525 struct sk_buff *msg; in cfg80211_cqm_rssi_notify() local
12533 msg = cfg80211_prepare_cqm(dev, NULL, gfp); in cfg80211_cqm_rssi_notify()
12534 if (!msg) in cfg80211_cqm_rssi_notify()
12537 if (nla_put_u32(msg, NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT, in cfg80211_cqm_rssi_notify()
12541 cfg80211_send_cqm(msg, gfp); in cfg80211_cqm_rssi_notify()
12546 nlmsg_free(msg); in cfg80211_cqm_rssi_notify()
12554 struct sk_buff *msg; in cfg80211_cqm_txe_notify() local
12556 msg = cfg80211_prepare_cqm(dev, peer, gfp); in cfg80211_cqm_txe_notify()
12557 if (!msg) in cfg80211_cqm_txe_notify()
12560 if (nla_put_u32(msg, NL80211_ATTR_CQM_TXE_PKTS, num_packets)) in cfg80211_cqm_txe_notify()
12563 if (nla_put_u32(msg, NL80211_ATTR_CQM_TXE_RATE, rate)) in cfg80211_cqm_txe_notify()
12566 if (nla_put_u32(msg, NL80211_ATTR_CQM_TXE_INTVL, intvl)) in cfg80211_cqm_txe_notify()
12569 cfg80211_send_cqm(msg, gfp); in cfg80211_cqm_txe_notify()
12573 nlmsg_free(msg); in cfg80211_cqm_txe_notify()
12580 struct sk_buff *msg; in cfg80211_cqm_pktloss_notify() local
12584 msg = cfg80211_prepare_cqm(dev, peer, gfp); in cfg80211_cqm_pktloss_notify()
12585 if (!msg) in cfg80211_cqm_pktloss_notify()
12588 if (nla_put_u32(msg, NL80211_ATTR_CQM_PKT_LOSS_EVENT, num_packets)) in cfg80211_cqm_pktloss_notify()
12591 cfg80211_send_cqm(msg, gfp); in cfg80211_cqm_pktloss_notify()
12595 nlmsg_free(msg); in cfg80211_cqm_pktloss_notify()
12601 struct sk_buff *msg; in cfg80211_cqm_beacon_loss_notify() local
12603 msg = cfg80211_prepare_cqm(dev, NULL, gfp); in cfg80211_cqm_beacon_loss_notify()
12604 if (!msg) in cfg80211_cqm_beacon_loss_notify()
12607 if (nla_put_flag(msg, NL80211_ATTR_CQM_BEACON_LOSS_EVENT)) in cfg80211_cqm_beacon_loss_notify()
12610 cfg80211_send_cqm(msg, gfp); in cfg80211_cqm_beacon_loss_notify()
12614 nlmsg_free(msg); in cfg80211_cqm_beacon_loss_notify()
12622 struct sk_buff *msg; in nl80211_gtk_rekey_notify() local
12626 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in nl80211_gtk_rekey_notify()
12627 if (!msg) in nl80211_gtk_rekey_notify()
12630 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_SET_REKEY_OFFLOAD); in nl80211_gtk_rekey_notify()
12632 nlmsg_free(msg); in nl80211_gtk_rekey_notify()
12636 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_gtk_rekey_notify()
12637 nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) || in nl80211_gtk_rekey_notify()
12638 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, bssid)) in nl80211_gtk_rekey_notify()
12641 rekey_attr = nla_nest_start(msg, NL80211_ATTR_REKEY_DATA); in nl80211_gtk_rekey_notify()
12645 if (nla_put(msg, NL80211_REKEY_DATA_REPLAY_CTR, in nl80211_gtk_rekey_notify()
12649 nla_nest_end(msg, rekey_attr); in nl80211_gtk_rekey_notify()
12651 genlmsg_end(msg, hdr); in nl80211_gtk_rekey_notify()
12653 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_gtk_rekey_notify()
12658 genlmsg_cancel(msg, hdr); in nl80211_gtk_rekey_notify()
12659 nlmsg_free(msg); in nl80211_gtk_rekey_notify()
12679 struct sk_buff *msg; in nl80211_pmksa_candidate_notify() local
12683 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in nl80211_pmksa_candidate_notify()
12684 if (!msg) in nl80211_pmksa_candidate_notify()
12687 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_PMKSA_CANDIDATE); in nl80211_pmksa_candidate_notify()
12689 nlmsg_free(msg); in nl80211_pmksa_candidate_notify()
12693 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_pmksa_candidate_notify()
12694 nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex)) in nl80211_pmksa_candidate_notify()
12697 attr = nla_nest_start(msg, NL80211_ATTR_PMKSA_CANDIDATE); in nl80211_pmksa_candidate_notify()
12701 if (nla_put_u32(msg, NL80211_PMKSA_CANDIDATE_INDEX, index) || in nl80211_pmksa_candidate_notify()
12702 nla_put(msg, NL80211_PMKSA_CANDIDATE_BSSID, ETH_ALEN, bssid) || in nl80211_pmksa_candidate_notify()
12704 nla_put_flag(msg, NL80211_PMKSA_CANDIDATE_PREAUTH))) in nl80211_pmksa_candidate_notify()
12707 nla_nest_end(msg, attr); in nl80211_pmksa_candidate_notify()
12709 genlmsg_end(msg, hdr); in nl80211_pmksa_candidate_notify()
12711 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_pmksa_candidate_notify()
12716 genlmsg_cancel(msg, hdr); in nl80211_pmksa_candidate_notify()
12717 nlmsg_free(msg); in nl80211_pmksa_candidate_notify()
12739 struct sk_buff *msg; in nl80211_ch_switch_notify() local
12742 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in nl80211_ch_switch_notify()
12743 if (!msg) in nl80211_ch_switch_notify()
12746 hdr = nl80211hdr_put(msg, 0, 0, 0, notif); in nl80211_ch_switch_notify()
12748 nlmsg_free(msg); in nl80211_ch_switch_notify()
12752 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex)) in nl80211_ch_switch_notify()
12755 if (nl80211_send_chandef(msg, chandef)) in nl80211_ch_switch_notify()
12759 (nla_put_u32(msg, NL80211_ATTR_CH_SWITCH_COUNT, count))) in nl80211_ch_switch_notify()
12762 genlmsg_end(msg, hdr); in nl80211_ch_switch_notify()
12764 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_ch_switch_notify()
12769 genlmsg_cancel(msg, hdr); in nl80211_ch_switch_notify()
12770 nlmsg_free(msg); in nl80211_ch_switch_notify()
12812 struct sk_buff *msg; in nl80211_radar_notify() local
12815 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in nl80211_radar_notify()
12816 if (!msg) in nl80211_radar_notify()
12819 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_RADAR_DETECT); in nl80211_radar_notify()
12821 nlmsg_free(msg); in nl80211_radar_notify()
12825 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx)) in nl80211_radar_notify()
12832 if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) || in nl80211_radar_notify()
12833 nla_put_u64(msg, NL80211_ATTR_WDEV, wdev_id(wdev))) in nl80211_radar_notify()
12837 if (nla_put_u32(msg, NL80211_ATTR_RADAR_EVENT, event)) in nl80211_radar_notify()
12840 if (nl80211_send_chandef(msg, chandef)) in nl80211_radar_notify()
12843 genlmsg_end(msg, hdr); in nl80211_radar_notify()
12845 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_radar_notify()
12850 genlmsg_cancel(msg, hdr); in nl80211_radar_notify()
12851 nlmsg_free(msg); in nl80211_radar_notify()
12859 struct sk_buff *msg; in cfg80211_probe_status() local
12864 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in cfg80211_probe_status()
12866 if (!msg) in cfg80211_probe_status()
12869 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_PROBE_CLIENT); in cfg80211_probe_status()
12871 nlmsg_free(msg); in cfg80211_probe_status()
12875 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_probe_status()
12876 nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) || in cfg80211_probe_status()
12877 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, addr) || in cfg80211_probe_status()
12878 nla_put_u64(msg, NL80211_ATTR_COOKIE, cookie) || in cfg80211_probe_status()
12879 (acked && nla_put_flag(msg, NL80211_ATTR_ACK))) in cfg80211_probe_status()
12882 genlmsg_end(msg, hdr); in cfg80211_probe_status()
12884 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_probe_status()
12889 genlmsg_cancel(msg, hdr); in cfg80211_probe_status()
12890 nlmsg_free(msg); in cfg80211_probe_status()
12899 struct sk_buff *msg; in cfg80211_report_obss_beacon() local
12907 msg = nlmsg_new(len + 100, GFP_ATOMIC); in cfg80211_report_obss_beacon()
12908 if (!msg) { in cfg80211_report_obss_beacon()
12913 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_FRAME); in cfg80211_report_obss_beacon()
12917 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_report_obss_beacon()
12919 nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ, freq)) || in cfg80211_report_obss_beacon()
12921 nla_put_u32(msg, NL80211_ATTR_RX_SIGNAL_DBM, sig_dbm)) || in cfg80211_report_obss_beacon()
12922 nla_put(msg, NL80211_ATTR_FRAME, len, frame)) in cfg80211_report_obss_beacon()
12925 genlmsg_end(msg, hdr); in cfg80211_report_obss_beacon()
12927 genlmsg_unicast(wiphy_net(&rdev->wiphy), msg, reg->nlportid); in cfg80211_report_obss_beacon()
12935 genlmsg_cancel(msg, hdr); in cfg80211_report_obss_beacon()
12936 nlmsg_free(msg); in cfg80211_report_obss_beacon()
12941 static int cfg80211_net_detect_results(struct sk_buff *msg, in cfg80211_net_detect_results() argument
12949 msg, NL80211_WOWLAN_TRIG_NET_DETECT_RESULTS); in cfg80211_net_detect_results()
12956 nl_match = nla_nest_start(msg, i); in cfg80211_net_detect_results()
12967 if (nla_put(msg, NL80211_ATTR_SSID, match->ssid.ssid_len, in cfg80211_net_detect_results()
12969 nla_nest_cancel(msg, nl_match); in cfg80211_net_detect_results()
12975 msg, NL80211_ATTR_SCAN_FREQUENCIES); in cfg80211_net_detect_results()
12977 nla_nest_cancel(msg, nl_match); in cfg80211_net_detect_results()
12982 if (nla_put_u32(msg, j, match->channels[j])) { in cfg80211_net_detect_results()
12983 nla_nest_cancel(msg, nl_freqs); in cfg80211_net_detect_results()
12984 nla_nest_cancel(msg, nl_match); in cfg80211_net_detect_results()
12989 nla_nest_end(msg, nl_freqs); in cfg80211_net_detect_results()
12992 nla_nest_end(msg, nl_match); in cfg80211_net_detect_results()
12996 nla_nest_end(msg, nl_results); in cfg80211_net_detect_results()
13005 struct sk_buff *msg; in cfg80211_report_wowlan_wakeup() local
13014 msg = nlmsg_new(size, gfp); in cfg80211_report_wowlan_wakeup()
13015 if (!msg) in cfg80211_report_wowlan_wakeup()
13018 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_SET_WOWLAN); in cfg80211_report_wowlan_wakeup()
13022 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_report_wowlan_wakeup()
13023 nla_put_u64(msg, NL80211_ATTR_WDEV, wdev_id(wdev))) in cfg80211_report_wowlan_wakeup()
13026 if (wdev->netdev && nla_put_u32(msg, NL80211_ATTR_IFINDEX, in cfg80211_report_wowlan_wakeup()
13033 reasons = nla_nest_start(msg, NL80211_ATTR_WOWLAN_TRIGGERS); in cfg80211_report_wowlan_wakeup()
13038 nla_put_flag(msg, NL80211_WOWLAN_TRIG_DISCONNECT)) in cfg80211_report_wowlan_wakeup()
13041 nla_put_flag(msg, NL80211_WOWLAN_TRIG_MAGIC_PKT)) in cfg80211_report_wowlan_wakeup()
13044 nla_put_flag(msg, NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE)) in cfg80211_report_wowlan_wakeup()
13047 nla_put_flag(msg, NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST)) in cfg80211_report_wowlan_wakeup()
13050 nla_put_flag(msg, NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE)) in cfg80211_report_wowlan_wakeup()
13053 nla_put_flag(msg, NL80211_WOWLAN_TRIG_RFKILL_RELEASE)) in cfg80211_report_wowlan_wakeup()
13057 nla_put_u32(msg, NL80211_WOWLAN_TRIG_PKT_PATTERN, in cfg80211_report_wowlan_wakeup()
13062 nla_put_flag(msg, NL80211_WOWLAN_TRIG_WAKEUP_TCP_MATCH)) in cfg80211_report_wowlan_wakeup()
13066 nla_put_flag(msg, NL80211_WOWLAN_TRIG_WAKEUP_TCP_CONNLOST)) in cfg80211_report_wowlan_wakeup()
13070 nla_put_flag(msg, in cfg80211_report_wowlan_wakeup()
13086 nla_put_u32(msg, len_attr, wakeup->packet_len)) in cfg80211_report_wowlan_wakeup()
13089 if (nla_put(msg, pkt_attr, wakeup->packet_present_len, in cfg80211_report_wowlan_wakeup()
13095 cfg80211_net_detect_results(msg, wakeup)) in cfg80211_report_wowlan_wakeup()
13098 nla_nest_end(msg, reasons); in cfg80211_report_wowlan_wakeup()
13101 genlmsg_end(msg, hdr); in cfg80211_report_wowlan_wakeup()
13103 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_report_wowlan_wakeup()
13108 nlmsg_free(msg); in cfg80211_report_wowlan_wakeup()
13119 struct sk_buff *msg; in cfg80211_tdls_oper_request() local
13125 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in cfg80211_tdls_oper_request()
13126 if (!msg) in cfg80211_tdls_oper_request()
13129 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_TDLS_OPER); in cfg80211_tdls_oper_request()
13131 nlmsg_free(msg); in cfg80211_tdls_oper_request()
13135 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_tdls_oper_request()
13136 nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex) || in cfg80211_tdls_oper_request()
13137 nla_put_u8(msg, NL80211_ATTR_TDLS_OPERATION, oper) || in cfg80211_tdls_oper_request()
13138 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, peer) || in cfg80211_tdls_oper_request()
13140 nla_put_u16(msg, NL80211_ATTR_REASON_CODE, reason_code))) in cfg80211_tdls_oper_request()
13143 genlmsg_end(msg, hdr); in cfg80211_tdls_oper_request()
13145 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_tdls_oper_request()
13150 genlmsg_cancel(msg, hdr); in cfg80211_tdls_oper_request()
13151 nlmsg_free(msg); in cfg80211_tdls_oper_request()
13236 struct sk_buff *msg; in cfg80211_ft_event() local
13244 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in cfg80211_ft_event()
13245 if (!msg) in cfg80211_ft_event()
13248 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_FT_EVENT); in cfg80211_ft_event()
13252 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_ft_event()
13253 nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) || in cfg80211_ft_event()
13254 nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, ft_event->target_ap)) in cfg80211_ft_event()
13258 nla_put(msg, NL80211_ATTR_IE, ft_event->ies_len, ft_event->ies)) in cfg80211_ft_event()
13261 nla_put(msg, NL80211_ATTR_IE_RIC, ft_event->ric_ies_len, in cfg80211_ft_event()
13265 genlmsg_end(msg, hdr); in cfg80211_ft_event()
13267 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_ft_event()
13271 nlmsg_free(msg); in cfg80211_ft_event()
13278 struct sk_buff *msg; in cfg80211_crit_proto_stopped() local
13289 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp); in cfg80211_crit_proto_stopped()
13290 if (!msg) in cfg80211_crit_proto_stopped()
13293 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_CRIT_PROTOCOL_STOP); in cfg80211_crit_proto_stopped()
13297 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_crit_proto_stopped()
13298 nla_put_u64(msg, NL80211_ATTR_WDEV, wdev_id(wdev))) in cfg80211_crit_proto_stopped()
13301 genlmsg_end(msg, hdr); in cfg80211_crit_proto_stopped()
13303 genlmsg_unicast(wiphy_net(&rdev->wiphy), msg, nlportid); in cfg80211_crit_proto_stopped()
13308 genlmsg_cancel(msg, hdr); in cfg80211_crit_proto_stopped()
13309 nlmsg_free(msg); in cfg80211_crit_proto_stopped()
13318 struct sk_buff *msg; in nl80211_send_ap_stopped() local
13321 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); in nl80211_send_ap_stopped()
13322 if (!msg) in nl80211_send_ap_stopped()
13325 hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_STOP_AP); in nl80211_send_ap_stopped()
13329 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_ap_stopped()
13330 nla_put_u32(msg, NL80211_ATTR_IFINDEX, wdev->netdev->ifindex) || in nl80211_send_ap_stopped()
13331 nla_put_u64(msg, NL80211_ATTR_WDEV, wdev_id(wdev))) in nl80211_send_ap_stopped()
13334 genlmsg_end(msg, hdr); in nl80211_send_ap_stopped()
13336 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(wiphy), msg, 0, in nl80211_send_ap_stopped()
13340 nlmsg_free(msg); in nl80211_send_ap_stopped()