Lines Matching refs:info
29 struct genl_info *info,
34 struct genl_info *info);
36 struct genl_info *info);
203 cfg80211_get_dev_from_info(struct net *netns, struct genl_info *info) in cfg80211_get_dev_from_info() argument
208 rdev = __cfg80211_rdev_from_attrs(netns, info->attrs); in cfg80211_get_dev_from_info()
689 static int nl80211_parse_key_old(struct genl_info *info, struct key_parse *k) in nl80211_parse_key_old() argument
691 if (info->attrs[NL80211_ATTR_KEY_DATA]) { in nl80211_parse_key_old()
692 k->p.key = nla_data(info->attrs[NL80211_ATTR_KEY_DATA]); in nl80211_parse_key_old()
693 k->p.key_len = nla_len(info->attrs[NL80211_ATTR_KEY_DATA]); in nl80211_parse_key_old()
696 if (info->attrs[NL80211_ATTR_KEY_SEQ]) { in nl80211_parse_key_old()
697 k->p.seq = nla_data(info->attrs[NL80211_ATTR_KEY_SEQ]); in nl80211_parse_key_old()
698 k->p.seq_len = nla_len(info->attrs[NL80211_ATTR_KEY_SEQ]); in nl80211_parse_key_old()
701 if (info->attrs[NL80211_ATTR_KEY_IDX]) in nl80211_parse_key_old()
702 k->idx = nla_get_u8(info->attrs[NL80211_ATTR_KEY_IDX]); in nl80211_parse_key_old()
704 if (info->attrs[NL80211_ATTR_KEY_CIPHER]) in nl80211_parse_key_old()
705 k->p.cipher = nla_get_u32(info->attrs[NL80211_ATTR_KEY_CIPHER]); in nl80211_parse_key_old()
707 k->def = !!info->attrs[NL80211_ATTR_KEY_DEFAULT]; in nl80211_parse_key_old()
708 k->defmgmt = !!info->attrs[NL80211_ATTR_KEY_DEFAULT_MGMT]; in nl80211_parse_key_old()
717 if (info->attrs[NL80211_ATTR_KEY_TYPE]) { in nl80211_parse_key_old()
718 k->type = nla_get_u32(info->attrs[NL80211_ATTR_KEY_TYPE]); in nl80211_parse_key_old()
723 if (info->attrs[NL80211_ATTR_KEY_DEFAULT_TYPES]) { in nl80211_parse_key_old()
727 info->attrs[NL80211_ATTR_KEY_DEFAULT_TYPES], in nl80211_parse_key_old()
739 static int nl80211_parse_key(struct genl_info *info, struct key_parse *k) in nl80211_parse_key() argument
747 if (info->attrs[NL80211_ATTR_KEY]) in nl80211_parse_key()
748 err = nl80211_parse_key_new(info->attrs[NL80211_ATTR_KEY], k); in nl80211_parse_key()
750 err = nl80211_parse_key_old(info, k); in nl80211_parse_key()
1531 const struct nl80211_vendor_cmd_info *info; in nl80211_send_wiphy() local
1539 info = &dev->wiphy.vendor_commands[i].info; in nl80211_send_wiphy()
1540 if (nla_put(msg, i + 1, sizeof(*info), info)) in nl80211_send_wiphy()
1547 const struct nl80211_vendor_cmd_info *info; in nl80211_send_wiphy() local
1556 info = &dev->wiphy.vendor_events[i]; in nl80211_send_wiphy()
1557 if (nla_put(msg, i + 1, sizeof(*info), info)) in nl80211_send_wiphy()
1696 static int nl80211_get_wiphy(struct sk_buff *skb, struct genl_info *info) in nl80211_get_wiphy() argument
1699 struct cfg80211_registered_device *dev = info->user_ptr[0]; in nl80211_get_wiphy()
1705 if (nl80211_send_wiphy(dev, msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_wiphy()
1711 return genlmsg_reply(msg, info); in nl80211_get_wiphy()
1767 struct genl_info *info, in nl80211_parse_chandef() argument
1772 if (!info->attrs[NL80211_ATTR_WIPHY_FREQ]) in nl80211_parse_chandef()
1775 control_freq = nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ]); in nl80211_parse_chandef()
1786 if (info->attrs[NL80211_ATTR_WIPHY_CHANNEL_TYPE]) { in nl80211_parse_chandef()
1790 info->attrs[NL80211_ATTR_WIPHY_CHANNEL_TYPE]); in nl80211_parse_chandef()
1803 } else if (info->attrs[NL80211_ATTR_CHANNEL_WIDTH]) { in nl80211_parse_chandef()
1805 nla_get_u32(info->attrs[NL80211_ATTR_CHANNEL_WIDTH]); in nl80211_parse_chandef()
1806 if (info->attrs[NL80211_ATTR_CENTER_FREQ1]) in nl80211_parse_chandef()
1809 info->attrs[NL80211_ATTR_CENTER_FREQ1]); in nl80211_parse_chandef()
1810 if (info->attrs[NL80211_ATTR_CENTER_FREQ2]) in nl80211_parse_chandef()
1813 info->attrs[NL80211_ATTR_CENTER_FREQ2]); in nl80211_parse_chandef()
1828 struct genl_info *info) in __nl80211_set_channel() argument
1840 result = nl80211_parse_chandef(rdev, info, &chandef); in __nl80211_set_channel()
1873 static int nl80211_set_channel(struct sk_buff *skb, struct genl_info *info) in nl80211_set_channel() argument
1875 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_channel()
1876 struct net_device *netdev = info->user_ptr[1]; in nl80211_set_channel()
1878 return __nl80211_set_channel(rdev, netdev->ieee80211_ptr, info); in nl80211_set_channel()
1881 static int nl80211_set_wds_peer(struct sk_buff *skb, struct genl_info *info) in nl80211_set_wds_peer() argument
1883 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_wds_peer()
1884 struct net_device *dev = info->user_ptr[1]; in nl80211_set_wds_peer()
1888 if (!info->attrs[NL80211_ATTR_MAC]) in nl80211_set_wds_peer()
1900 bssid = nla_data(info->attrs[NL80211_ATTR_MAC]); in nl80211_set_wds_peer()
1905 static int nl80211_set_wiphy(struct sk_buff *skb, struct genl_info *info) in nl80211_set_wiphy() argument
1928 if (info->attrs[NL80211_ATTR_IFINDEX]) { in nl80211_set_wiphy()
1929 int ifindex = nla_get_u32(info->attrs[NL80211_ATTR_IFINDEX]); in nl80211_set_wiphy()
1931 netdev = dev_get_by_index(genl_info_net(info), ifindex); in nl80211_set_wiphy()
1940 rdev = __cfg80211_rdev_from_attrs(genl_info_net(info), in nl80211_set_wiphy()
1941 info->attrs); in nl80211_set_wiphy()
1959 if (info->attrs[NL80211_ATTR_WIPHY_NAME]) in nl80211_set_wiphy()
1961 rdev, nla_data(info->attrs[NL80211_ATTR_WIPHY_NAME])); in nl80211_set_wiphy()
1968 if (info->attrs[NL80211_ATTR_WIPHY_TXQ_PARAMS]) { in nl80211_set_wiphy()
1994 info->attrs[NL80211_ATTR_WIPHY_TXQ_PARAMS], in nl80211_set_wiphy()
2011 if (info->attrs[NL80211_ATTR_WIPHY_FREQ]) { in nl80211_set_wiphy()
2014 info); in nl80211_set_wiphy()
2019 if (info->attrs[NL80211_ATTR_WIPHY_TX_POWER_SETTING]) { in nl80211_set_wiphy()
2033 type = nla_get_u32(info->attrs[idx]); in nl80211_set_wiphy()
2035 if (!info->attrs[NL80211_ATTR_WIPHY_TX_POWER_LEVEL] && in nl80211_set_wiphy()
2043 mbm = nla_get_u32(info->attrs[idx]); in nl80211_set_wiphy()
2051 if (info->attrs[NL80211_ATTR_WIPHY_ANTENNA_TX] && in nl80211_set_wiphy()
2052 info->attrs[NL80211_ATTR_WIPHY_ANTENNA_RX]) { in nl80211_set_wiphy()
2061 tx_ant = nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_ANTENNA_TX]); in nl80211_set_wiphy()
2062 rx_ant = nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_ANTENNA_RX]); in nl80211_set_wiphy()
2082 if (info->attrs[NL80211_ATTR_WIPHY_RETRY_SHORT]) { in nl80211_set_wiphy()
2084 info->attrs[NL80211_ATTR_WIPHY_RETRY_SHORT]); in nl80211_set_wiphy()
2092 if (info->attrs[NL80211_ATTR_WIPHY_RETRY_LONG]) { in nl80211_set_wiphy()
2094 info->attrs[NL80211_ATTR_WIPHY_RETRY_LONG]); in nl80211_set_wiphy()
2102 if (info->attrs[NL80211_ATTR_WIPHY_FRAG_THRESHOLD]) { in nl80211_set_wiphy()
2104 info->attrs[NL80211_ATTR_WIPHY_FRAG_THRESHOLD]); in nl80211_set_wiphy()
2121 if (info->attrs[NL80211_ATTR_WIPHY_RTS_THRESHOLD]) { in nl80211_set_wiphy()
2123 info->attrs[NL80211_ATTR_WIPHY_RTS_THRESHOLD]); in nl80211_set_wiphy()
2127 if (info->attrs[NL80211_ATTR_WIPHY_COVERAGE_CLASS]) { in nl80211_set_wiphy()
2129 info->attrs[NL80211_ATTR_WIPHY_COVERAGE_CLASS]); in nl80211_set_wiphy()
2306 static int nl80211_get_interface(struct sk_buff *skb, struct genl_info *info) in nl80211_get_interface() argument
2309 struct cfg80211_registered_device *dev = info->user_ptr[0]; in nl80211_get_interface()
2310 struct wireless_dev *wdev = info->user_ptr[1]; in nl80211_get_interface()
2316 if (nl80211_send_iface(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_interface()
2322 return genlmsg_reply(msg, info); in nl80211_get_interface()
2380 static int nl80211_set_interface(struct sk_buff *skb, struct genl_info *info) in nl80211_set_interface() argument
2382 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_interface()
2386 struct net_device *dev = info->user_ptr[1]; in nl80211_set_interface()
2394 if (info->attrs[NL80211_ATTR_IFTYPE]) { in nl80211_set_interface()
2395 ntype = nla_get_u32(info->attrs[NL80211_ATTR_IFTYPE]); in nl80211_set_interface()
2402 if (info->attrs[NL80211_ATTR_MESH_ID]) { in nl80211_set_interface()
2414 nla_len(info->attrs[NL80211_ATTR_MESH_ID]); in nl80211_set_interface()
2415 memcpy(wdev->ssid, nla_data(info->attrs[NL80211_ATTR_MESH_ID]), in nl80211_set_interface()
2420 if (info->attrs[NL80211_ATTR_4ADDR]) { in nl80211_set_interface()
2421 params.use_4addr = !!nla_get_u8(info->attrs[NL80211_ATTR_4ADDR]); in nl80211_set_interface()
2430 if (info->attrs[NL80211_ATTR_MNTR_FLAGS]) { in nl80211_set_interface()
2433 err = parse_monitor_flags(info->attrs[NL80211_ATTR_MNTR_FLAGS], in nl80211_set_interface()
2453 static int nl80211_new_interface(struct sk_buff *skb, struct genl_info *info) in nl80211_new_interface() argument
2455 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_new_interface()
2468 if (!info->attrs[NL80211_ATTR_IFNAME]) in nl80211_new_interface()
2471 if (info->attrs[NL80211_ATTR_IFTYPE]) { in nl80211_new_interface()
2472 type = nla_get_u32(info->attrs[NL80211_ATTR_IFTYPE]); in nl80211_new_interface()
2481 if (type == NL80211_IFTYPE_P2P_DEVICE && info->attrs[NL80211_ATTR_MAC]) { in nl80211_new_interface()
2482 nla_memcpy(params.macaddr, info->attrs[NL80211_ATTR_MAC], in nl80211_new_interface()
2488 if (info->attrs[NL80211_ATTR_4ADDR]) { in nl80211_new_interface()
2489 params.use_4addr = !!nla_get_u8(info->attrs[NL80211_ATTR_4ADDR]); in nl80211_new_interface()
2500 info->attrs[NL80211_ATTR_MNTR_FLAGS] : NULL, in nl80211_new_interface()
2503 nla_data(info->attrs[NL80211_ATTR_IFNAME]), in nl80211_new_interface()
2510 if (info->attrs[NL80211_ATTR_IFACE_SOCKET_OWNER]) in nl80211_new_interface()
2511 wdev->owner_nlportid = info->snd_portid; in nl80211_new_interface()
2515 if (!info->attrs[NL80211_ATTR_MESH_ID]) in nl80211_new_interface()
2521 nla_len(info->attrs[NL80211_ATTR_MESH_ID]); in nl80211_new_interface()
2522 memcpy(wdev->ssid, nla_data(info->attrs[NL80211_ATTR_MESH_ID]), in nl80211_new_interface()
2547 if (nl80211_send_iface(msg, info->snd_portid, info->snd_seq, 0, in nl80211_new_interface()
2553 return genlmsg_reply(msg, info); in nl80211_new_interface()
2556 static int nl80211_del_interface(struct sk_buff *skb, struct genl_info *info) in nl80211_del_interface() argument
2558 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_del_interface()
2559 struct wireless_dev *wdev = info->user_ptr[1]; in nl80211_del_interface()
2572 info->user_ptr[1] = NULL; in nl80211_del_interface()
2577 static int nl80211_set_noack_map(struct sk_buff *skb, struct genl_info *info) in nl80211_set_noack_map() argument
2579 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_noack_map()
2580 struct net_device *dev = info->user_ptr[1]; in nl80211_set_noack_map()
2583 if (!info->attrs[NL80211_ATTR_NOACK_MAP]) in nl80211_set_noack_map()
2589 noack_map = nla_get_u16(info->attrs[NL80211_ATTR_NOACK_MAP]); in nl80211_set_noack_map()
2641 static int nl80211_get_key(struct sk_buff *skb, struct genl_info *info) in nl80211_get_key() argument
2643 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_get_key()
2645 struct net_device *dev = info->user_ptr[1]; in nl80211_get_key()
2655 if (info->attrs[NL80211_ATTR_KEY_IDX]) in nl80211_get_key()
2656 key_idx = nla_get_u8(info->attrs[NL80211_ATTR_KEY_IDX]); in nl80211_get_key()
2661 if (info->attrs[NL80211_ATTR_MAC]) in nl80211_get_key()
2662 mac_addr = nla_data(info->attrs[NL80211_ATTR_MAC]); in nl80211_get_key()
2665 if (info->attrs[NL80211_ATTR_KEY_TYPE]) { in nl80211_get_key()
2666 u32 kt = nla_get_u32(info->attrs[NL80211_ATTR_KEY_TYPE]); in nl80211_get_key()
2682 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_key()
2711 return genlmsg_reply(msg, info); in nl80211_get_key()
2720 static int nl80211_set_key(struct sk_buff *skb, struct genl_info *info) in nl80211_set_key() argument
2722 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_key()
2725 struct net_device *dev = info->user_ptr[1]; in nl80211_set_key()
2727 err = nl80211_parse_key(info, &key); in nl80211_set_key()
2789 static int nl80211_new_key(struct sk_buff *skb, struct genl_info *info) in nl80211_new_key() argument
2791 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_new_key()
2793 struct net_device *dev = info->user_ptr[1]; in nl80211_new_key()
2797 err = nl80211_parse_key(info, &key); in nl80211_new_key()
2804 if (info->attrs[NL80211_ATTR_MAC]) in nl80211_new_key()
2805 mac_addr = nla_data(info->attrs[NL80211_ATTR_MAC]); in nl80211_new_key()
2838 static int nl80211_del_key(struct sk_buff *skb, struct genl_info *info) in nl80211_del_key() argument
2840 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_del_key()
2842 struct net_device *dev = info->user_ptr[1]; in nl80211_del_key()
2846 err = nl80211_parse_key(info, &key); in nl80211_del_key()
2850 if (info->attrs[NL80211_ATTR_MAC]) in nl80211_del_key()
2851 mac_addr = nla_data(info->attrs[NL80211_ATTR_MAC]); in nl80211_del_key()
2915 struct genl_info *info) in parse_acl_data() argument
2925 if (!info->attrs[NL80211_ATTR_ACL_POLICY]) in parse_acl_data()
2928 acl_policy = nla_get_u32(info->attrs[NL80211_ATTR_ACL_POLICY]); in parse_acl_data()
2933 if (!info->attrs[NL80211_ATTR_MAC_ADDRS]) in parse_acl_data()
2936 n_entries = validate_acl_mac_addrs(info->attrs[NL80211_ATTR_MAC_ADDRS]); in parse_acl_data()
2948 nla_for_each_nested(attr, info->attrs[NL80211_ATTR_MAC_ADDRS], tmp) { in parse_acl_data()
2959 static int nl80211_set_mac_acl(struct sk_buff *skb, struct genl_info *info) in nl80211_set_mac_acl() argument
2961 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_mac_acl()
2962 struct net_device *dev = info->user_ptr[1]; in nl80211_set_mac_acl()
2973 acl = parse_acl_data(&rdev->wiphy, info); in nl80211_set_mac_acl()
2984 static int nl80211_parse_beacon(struct genl_info *info, in nl80211_parse_beacon() argument
2989 if (!is_valid_ie_attr(info->attrs[NL80211_ATTR_BEACON_TAIL]) || in nl80211_parse_beacon()
2990 !is_valid_ie_attr(info->attrs[NL80211_ATTR_IE]) || in nl80211_parse_beacon()
2991 !is_valid_ie_attr(info->attrs[NL80211_ATTR_IE_PROBE_RESP]) || in nl80211_parse_beacon()
2992 !is_valid_ie_attr(info->attrs[NL80211_ATTR_IE_ASSOC_RESP])) in nl80211_parse_beacon()
2997 if (info->attrs[NL80211_ATTR_BEACON_HEAD]) { in nl80211_parse_beacon()
2998 bcn->head = nla_data(info->attrs[NL80211_ATTR_BEACON_HEAD]); in nl80211_parse_beacon()
2999 bcn->head_len = nla_len(info->attrs[NL80211_ATTR_BEACON_HEAD]); in nl80211_parse_beacon()
3005 if (info->attrs[NL80211_ATTR_BEACON_TAIL]) { in nl80211_parse_beacon()
3006 bcn->tail = nla_data(info->attrs[NL80211_ATTR_BEACON_TAIL]); in nl80211_parse_beacon()
3008 nla_len(info->attrs[NL80211_ATTR_BEACON_TAIL]); in nl80211_parse_beacon()
3015 if (info->attrs[NL80211_ATTR_IE]) { in nl80211_parse_beacon()
3016 bcn->beacon_ies = nla_data(info->attrs[NL80211_ATTR_IE]); in nl80211_parse_beacon()
3017 bcn->beacon_ies_len = nla_len(info->attrs[NL80211_ATTR_IE]); in nl80211_parse_beacon()
3020 if (info->attrs[NL80211_ATTR_IE_PROBE_RESP]) { in nl80211_parse_beacon()
3022 nla_data(info->attrs[NL80211_ATTR_IE_PROBE_RESP]); in nl80211_parse_beacon()
3024 nla_len(info->attrs[NL80211_ATTR_IE_PROBE_RESP]); in nl80211_parse_beacon()
3027 if (info->attrs[NL80211_ATTR_IE_ASSOC_RESP]) { in nl80211_parse_beacon()
3029 nla_data(info->attrs[NL80211_ATTR_IE_ASSOC_RESP]); in nl80211_parse_beacon()
3031 nla_len(info->attrs[NL80211_ATTR_IE_ASSOC_RESP]); in nl80211_parse_beacon()
3034 if (info->attrs[NL80211_ATTR_PROBE_RESP]) { in nl80211_parse_beacon()
3036 nla_data(info->attrs[NL80211_ATTR_PROBE_RESP]); in nl80211_parse_beacon()
3038 nla_len(info->attrs[NL80211_ATTR_PROBE_RESP]); in nl80211_parse_beacon()
3094 static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info) in nl80211_start_ap() argument
3096 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_start_ap()
3097 struct net_device *dev = info->user_ptr[1]; in nl80211_start_ap()
3116 if (!info->attrs[NL80211_ATTR_BEACON_INTERVAL] || in nl80211_start_ap()
3117 !info->attrs[NL80211_ATTR_DTIM_PERIOD] || in nl80211_start_ap()
3118 !info->attrs[NL80211_ATTR_BEACON_HEAD]) in nl80211_start_ap()
3121 err = nl80211_parse_beacon(info, ¶ms.beacon); in nl80211_start_ap()
3126 nla_get_u32(info->attrs[NL80211_ATTR_BEACON_INTERVAL]); in nl80211_start_ap()
3128 nla_get_u32(info->attrs[NL80211_ATTR_DTIM_PERIOD]); in nl80211_start_ap()
3141 if (info->attrs[NL80211_ATTR_SSID]) { in nl80211_start_ap()
3142 params.ssid = nla_data(info->attrs[NL80211_ATTR_SSID]); in nl80211_start_ap()
3144 nla_len(info->attrs[NL80211_ATTR_SSID]); in nl80211_start_ap()
3150 if (info->attrs[NL80211_ATTR_HIDDEN_SSID]) { in nl80211_start_ap()
3152 info->attrs[NL80211_ATTR_HIDDEN_SSID]); in nl80211_start_ap()
3159 params.privacy = !!info->attrs[NL80211_ATTR_PRIVACY]; in nl80211_start_ap()
3161 if (info->attrs[NL80211_ATTR_AUTH_TYPE]) { in nl80211_start_ap()
3163 info->attrs[NL80211_ATTR_AUTH_TYPE]); in nl80211_start_ap()
3170 err = nl80211_crypto_settings(rdev, info, ¶ms.crypto, in nl80211_start_ap()
3175 if (info->attrs[NL80211_ATTR_INACTIVITY_TIMEOUT]) { in nl80211_start_ap()
3179 info->attrs[NL80211_ATTR_INACTIVITY_TIMEOUT]); in nl80211_start_ap()
3182 if (info->attrs[NL80211_ATTR_P2P_CTWINDOW]) { in nl80211_start_ap()
3186 nla_get_u8(info->attrs[NL80211_ATTR_P2P_CTWINDOW]); in nl80211_start_ap()
3194 if (info->attrs[NL80211_ATTR_P2P_OPPPS]) { in nl80211_start_ap()
3199 tmp = nla_get_u8(info->attrs[NL80211_ATTR_P2P_OPPPS]); in nl80211_start_ap()
3208 if (info->attrs[NL80211_ATTR_WIPHY_FREQ]) { in nl80211_start_ap()
3209 err = nl80211_parse_chandef(rdev, info, ¶ms.chandef); in nl80211_start_ap()
3238 if (info->attrs[NL80211_ATTR_ACL_POLICY]) { in nl80211_start_ap()
3239 params.acl = parse_acl_data(&rdev->wiphy, info); in nl80211_start_ap()
3258 static int nl80211_set_beacon(struct sk_buff *skb, struct genl_info *info) in nl80211_set_beacon() argument
3260 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_beacon()
3261 struct net_device *dev = info->user_ptr[1]; in nl80211_set_beacon()
3276 err = nl80211_parse_beacon(info, ¶ms); in nl80211_set_beacon()
3283 static int nl80211_stop_ap(struct sk_buff *skb, struct genl_info *info) in nl80211_stop_ap() argument
3285 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_stop_ap()
3286 struct net_device *dev = info->user_ptr[1]; in nl80211_stop_ap()
3300 static int parse_station_flags(struct genl_info *info, in parse_station_flags() argument
3312 nla = info->attrs[NL80211_ATTR_STA_FLAGS2]; in parse_station_flags()
3328 nla = info->attrs[NL80211_ATTR_STA_FLAGS]; in parse_station_flags()
3377 static bool nl80211_put_sta_rate(struct sk_buff *msg, struct rate_info *info, in nl80211_put_sta_rate() argument
3389 bitrate = cfg80211_calculate_bitrate(info); in nl80211_put_sta_rate()
3399 if (info->flags & RATE_INFO_FLAGS_MCS) { in nl80211_put_sta_rate()
3400 if (nla_put_u8(msg, NL80211_RATE_INFO_MCS, info->mcs)) in nl80211_put_sta_rate()
3402 if (info->flags & RATE_INFO_FLAGS_40_MHZ_WIDTH && in nl80211_put_sta_rate()
3405 if (info->flags & RATE_INFO_FLAGS_SHORT_GI && in nl80211_put_sta_rate()
3408 } else if (info->flags & RATE_INFO_FLAGS_VHT_MCS) { in nl80211_put_sta_rate()
3409 if (nla_put_u8(msg, NL80211_RATE_INFO_VHT_MCS, info->mcs)) in nl80211_put_sta_rate()
3411 if (nla_put_u8(msg, NL80211_RATE_INFO_VHT_NSS, info->nss)) in nl80211_put_sta_rate()
3413 if (info->flags & RATE_INFO_FLAGS_40_MHZ_WIDTH && in nl80211_put_sta_rate()
3416 if (info->flags & RATE_INFO_FLAGS_80_MHZ_WIDTH && in nl80211_put_sta_rate()
3419 if (info->flags & RATE_INFO_FLAGS_80P80_MHZ_WIDTH && in nl80211_put_sta_rate()
3422 if (info->flags & RATE_INFO_FLAGS_160_MHZ_WIDTH && in nl80211_put_sta_rate()
3425 if (info->flags & RATE_INFO_FLAGS_SHORT_GI && in nl80211_put_sta_rate()
3642 static int nl80211_get_station(struct sk_buff *skb, struct genl_info *info) in nl80211_get_station() argument
3644 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_get_station()
3645 struct net_device *dev = info->user_ptr[1]; in nl80211_get_station()
3653 if (!info->attrs[NL80211_ATTR_MAC]) in nl80211_get_station()
3656 mac_addr = nla_data(info->attrs[NL80211_ATTR_MAC]); in nl80211_get_station()
3669 if (nl80211_send_station(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_station()
3675 return genlmsg_reply(msg, info); in nl80211_get_station()
3811 static struct net_device *get_vlan(struct genl_info *info, in get_vlan() argument
3814 struct nlattr *vlanattr = info->attrs[NL80211_ATTR_STA_VLAN]; in get_vlan()
3821 v = dev_get_by_index(genl_info_net(info), nla_get_u32(vlanattr)); in get_vlan()
3854 static int nl80211_parse_sta_wme(struct genl_info *info, in nl80211_parse_sta_wme() argument
3862 if (!info->attrs[NL80211_ATTR_STA_WME]) in nl80211_parse_sta_wme()
3865 nla = info->attrs[NL80211_ATTR_STA_WME]; in nl80211_parse_sta_wme()
3888 static int nl80211_set_station_tdls(struct genl_info *info, in nl80211_set_station_tdls() argument
3892 if (info->attrs[NL80211_ATTR_HT_CAPABILITY]) in nl80211_set_station_tdls()
3894 nla_data(info->attrs[NL80211_ATTR_HT_CAPABILITY]); in nl80211_set_station_tdls()
3895 if (info->attrs[NL80211_ATTR_VHT_CAPABILITY]) in nl80211_set_station_tdls()
3897 nla_data(info->attrs[NL80211_ATTR_VHT_CAPABILITY]); in nl80211_set_station_tdls()
3899 return nl80211_parse_sta_wme(info, params); in nl80211_set_station_tdls()
3902 static int nl80211_set_station(struct sk_buff *skb, struct genl_info *info) in nl80211_set_station() argument
3904 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_station()
3905 struct net_device *dev = info->user_ptr[1]; in nl80211_set_station()
3917 if (info->attrs[NL80211_ATTR_STA_AID]) in nl80211_set_station()
3920 if (!info->attrs[NL80211_ATTR_MAC]) in nl80211_set_station()
3923 mac_addr = nla_data(info->attrs[NL80211_ATTR_MAC]); in nl80211_set_station()
3925 if (info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]) { in nl80211_set_station()
3927 nla_data(info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]); in nl80211_set_station()
3929 nla_len(info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]); in nl80211_set_station()
3932 if (info->attrs[NL80211_ATTR_STA_CAPABILITY]) { in nl80211_set_station()
3934 nla_get_u16(info->attrs[NL80211_ATTR_STA_CAPABILITY]); in nl80211_set_station()
3938 if (info->attrs[NL80211_ATTR_STA_EXT_CAPABILITY]) { in nl80211_set_station()
3940 nla_data(info->attrs[NL80211_ATTR_STA_EXT_CAPABILITY]); in nl80211_set_station()
3942 nla_len(info->attrs[NL80211_ATTR_STA_EXT_CAPABILITY]); in nl80211_set_station()
3945 if (info->attrs[NL80211_ATTR_STA_LISTEN_INTERVAL]) in nl80211_set_station()
3948 if (parse_station_flags(info, dev->ieee80211_ptr->iftype, ¶ms)) in nl80211_set_station()
3951 if (info->attrs[NL80211_ATTR_STA_PLINK_ACTION]) { in nl80211_set_station()
3953 nla_get_u8(info->attrs[NL80211_ATTR_STA_PLINK_ACTION]); in nl80211_set_station()
3958 if (info->attrs[NL80211_ATTR_STA_PLINK_STATE]) { in nl80211_set_station()
3960 nla_get_u8(info->attrs[NL80211_ATTR_STA_PLINK_STATE]); in nl80211_set_station()
3966 if (info->attrs[NL80211_ATTR_LOCAL_MESH_POWER_MODE]) { in nl80211_set_station()
3968 info->attrs[NL80211_ATTR_LOCAL_MESH_POWER_MODE]); in nl80211_set_station()
3978 err = nl80211_set_station_tdls(info, ¶ms); in nl80211_set_station()
3982 params.vlan = get_vlan(info, rdev); in nl80211_set_station()
4010 static int nl80211_new_station(struct sk_buff *skb, struct genl_info *info) in nl80211_new_station() argument
4012 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_new_station()
4014 struct net_device *dev = info->user_ptr[1]; in nl80211_new_station()
4023 if (!info->attrs[NL80211_ATTR_MAC]) in nl80211_new_station()
4026 if (!info->attrs[NL80211_ATTR_STA_LISTEN_INTERVAL]) in nl80211_new_station()
4029 if (!info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]) in nl80211_new_station()
4032 if (!info->attrs[NL80211_ATTR_STA_AID]) in nl80211_new_station()
4035 mac_addr = nla_data(info->attrs[NL80211_ATTR_MAC]); in nl80211_new_station()
4037 nla_data(info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]); in nl80211_new_station()
4039 nla_len(info->attrs[NL80211_ATTR_STA_SUPPORTED_RATES]); in nl80211_new_station()
4041 nla_get_u16(info->attrs[NL80211_ATTR_STA_LISTEN_INTERVAL]); in nl80211_new_station()
4043 params.aid = nla_get_u16(info->attrs[NL80211_ATTR_STA_AID]); in nl80211_new_station()
4047 if (info->attrs[NL80211_ATTR_STA_CAPABILITY]) { in nl80211_new_station()
4049 nla_get_u16(info->attrs[NL80211_ATTR_STA_CAPABILITY]); in nl80211_new_station()
4053 if (info->attrs[NL80211_ATTR_STA_EXT_CAPABILITY]) { in nl80211_new_station()
4055 nla_data(info->attrs[NL80211_ATTR_STA_EXT_CAPABILITY]); in nl80211_new_station()
4057 nla_len(info->attrs[NL80211_ATTR_STA_EXT_CAPABILITY]); in nl80211_new_station()
4060 if (info->attrs[NL80211_ATTR_HT_CAPABILITY]) in nl80211_new_station()
4062 nla_data(info->attrs[NL80211_ATTR_HT_CAPABILITY]); in nl80211_new_station()
4064 if (info->attrs[NL80211_ATTR_VHT_CAPABILITY]) in nl80211_new_station()
4066 nla_data(info->attrs[NL80211_ATTR_VHT_CAPABILITY]); in nl80211_new_station()
4068 if (info->attrs[NL80211_ATTR_STA_PLINK_ACTION]) { in nl80211_new_station()
4070 nla_get_u8(info->attrs[NL80211_ATTR_STA_PLINK_ACTION]); in nl80211_new_station()
4075 err = nl80211_parse_sta_wme(info, ¶ms); in nl80211_new_station()
4079 if (parse_station_flags(info, dev->ieee80211_ptr->iftype, ¶ms)) in nl80211_new_station()
4109 params.vlan = get_vlan(info, rdev); in nl80211_new_station()
4162 static int nl80211_del_station(struct sk_buff *skb, struct genl_info *info) in nl80211_del_station() argument
4164 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_del_station()
4165 struct net_device *dev = info->user_ptr[1]; in nl80211_del_station()
4168 if (info->attrs[NL80211_ATTR_MAC]) in nl80211_del_station()
4169 mac_addr = nla_data(info->attrs[NL80211_ATTR_MAC]); in nl80211_del_station()
4287 static int nl80211_get_mpath(struct sk_buff *skb, struct genl_info *info) in nl80211_get_mpath() argument
4289 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_get_mpath()
4291 struct net_device *dev = info->user_ptr[1]; in nl80211_get_mpath()
4299 if (!info->attrs[NL80211_ATTR_MAC]) in nl80211_get_mpath()
4302 dst = nla_data(info->attrs[NL80211_ATTR_MAC]); in nl80211_get_mpath()
4318 if (nl80211_send_mpath(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_mpath()
4324 return genlmsg_reply(msg, info); in nl80211_get_mpath()
4327 static int nl80211_set_mpath(struct sk_buff *skb, struct genl_info *info) in nl80211_set_mpath() argument
4329 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_mpath()
4330 struct net_device *dev = info->user_ptr[1]; in nl80211_set_mpath()
4334 if (!info->attrs[NL80211_ATTR_MAC]) in nl80211_set_mpath()
4337 if (!info->attrs[NL80211_ATTR_MPATH_NEXT_HOP]) in nl80211_set_mpath()
4340 dst = nla_data(info->attrs[NL80211_ATTR_MAC]); in nl80211_set_mpath()
4341 next_hop = nla_data(info->attrs[NL80211_ATTR_MPATH_NEXT_HOP]); in nl80211_set_mpath()
4352 static int nl80211_new_mpath(struct sk_buff *skb, struct genl_info *info) in nl80211_new_mpath() argument
4354 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_new_mpath()
4355 struct net_device *dev = info->user_ptr[1]; in nl80211_new_mpath()
4359 if (!info->attrs[NL80211_ATTR_MAC]) in nl80211_new_mpath()
4362 if (!info->attrs[NL80211_ATTR_MPATH_NEXT_HOP]) in nl80211_new_mpath()
4365 dst = nla_data(info->attrs[NL80211_ATTR_MAC]); in nl80211_new_mpath()
4366 next_hop = nla_data(info->attrs[NL80211_ATTR_MPATH_NEXT_HOP]); in nl80211_new_mpath()
4377 static int nl80211_del_mpath(struct sk_buff *skb, struct genl_info *info) in nl80211_del_mpath() argument
4379 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_del_mpath()
4380 struct net_device *dev = info->user_ptr[1]; in nl80211_del_mpath()
4383 if (info->attrs[NL80211_ATTR_MAC]) in nl80211_del_mpath()
4384 dst = nla_data(info->attrs[NL80211_ATTR_MAC]); in nl80211_del_mpath()
4392 static int nl80211_set_bss(struct sk_buff *skb, struct genl_info *info) in nl80211_set_bss() argument
4394 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_bss()
4395 struct net_device *dev = info->user_ptr[1]; in nl80211_set_bss()
4408 if (info->attrs[NL80211_ATTR_BSS_CTS_PROT]) in nl80211_set_bss()
4410 nla_get_u8(info->attrs[NL80211_ATTR_BSS_CTS_PROT]); in nl80211_set_bss()
4411 if (info->attrs[NL80211_ATTR_BSS_SHORT_PREAMBLE]) in nl80211_set_bss()
4413 nla_get_u8(info->attrs[NL80211_ATTR_BSS_SHORT_PREAMBLE]); in nl80211_set_bss()
4414 if (info->attrs[NL80211_ATTR_BSS_SHORT_SLOT_TIME]) in nl80211_set_bss()
4416 nla_get_u8(info->attrs[NL80211_ATTR_BSS_SHORT_SLOT_TIME]); in nl80211_set_bss()
4417 if (info->attrs[NL80211_ATTR_BSS_BASIC_RATES]) { in nl80211_set_bss()
4419 nla_data(info->attrs[NL80211_ATTR_BSS_BASIC_RATES]); in nl80211_set_bss()
4421 nla_len(info->attrs[NL80211_ATTR_BSS_BASIC_RATES]); in nl80211_set_bss()
4423 if (info->attrs[NL80211_ATTR_AP_ISOLATE]) in nl80211_set_bss()
4424 params.ap_isolate = !!nla_get_u8(info->attrs[NL80211_ATTR_AP_ISOLATE]); in nl80211_set_bss()
4425 if (info->attrs[NL80211_ATTR_BSS_HT_OPMODE]) in nl80211_set_bss()
4427 nla_get_u16(info->attrs[NL80211_ATTR_BSS_HT_OPMODE]); in nl80211_set_bss()
4429 if (info->attrs[NL80211_ATTR_P2P_CTWINDOW]) { in nl80211_set_bss()
4433 nla_get_s8(info->attrs[NL80211_ATTR_P2P_CTWINDOW]); in nl80211_set_bss()
4441 if (info->attrs[NL80211_ATTR_P2P_OPPPS]) { in nl80211_set_bss()
4446 tmp = nla_get_u8(info->attrs[NL80211_ATTR_P2P_OPPPS]); in nl80211_set_bss()
4510 static int nl80211_req_set_reg(struct sk_buff *skb, struct genl_info *info) in nl80211_req_set_reg() argument
4525 if (!info->attrs[NL80211_ATTR_REG_ALPHA2]) in nl80211_req_set_reg()
4528 data = nla_data(info->attrs[NL80211_ATTR_REG_ALPHA2]); in nl80211_req_set_reg()
4530 if (info->attrs[NL80211_ATTR_USER_REG_HINT_TYPE]) in nl80211_req_set_reg()
4532 nla_get_u32(info->attrs[NL80211_ATTR_USER_REG_HINT_TYPE]); in nl80211_req_set_reg()
4550 struct genl_info *info) in nl80211_get_mesh_config() argument
4552 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_get_mesh_config()
4553 struct net_device *dev = info->user_ptr[1]; in nl80211_get_mesh_config()
4582 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_mesh_config()
4647 return genlmsg_reply(msg, info); in nl80211_get_mesh_config()
4698 static int nl80211_parse_mesh_config(struct genl_info *info, in nl80211_parse_mesh_config() argument
4716 if (!info->attrs[NL80211_ATTR_MESH_CONFIG]) in nl80211_parse_mesh_config()
4719 info->attrs[NL80211_ATTR_MESH_CONFIG], in nl80211_parse_mesh_config()
4828 static int nl80211_parse_mesh_setup(struct genl_info *info, in nl80211_parse_mesh_setup() argument
4831 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_parse_mesh_setup()
4834 if (!info->attrs[NL80211_ATTR_MESH_SETUP]) in nl80211_parse_mesh_setup()
4837 info->attrs[NL80211_ATTR_MESH_SETUP], in nl80211_parse_mesh_setup()
4881 struct genl_info *info) in nl80211_update_mesh_config() argument
4883 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_update_mesh_config()
4884 struct net_device *dev = info->user_ptr[1]; in nl80211_update_mesh_config()
4896 err = nl80211_parse_mesh_config(info, &cfg, &mask); in nl80211_update_mesh_config()
4912 static int nl80211_get_reg(struct sk_buff *skb, struct genl_info *info) in nl80211_get_reg() argument
4932 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_reg()
4989 err = genlmsg_reply(msg, info); in nl80211_get_reg()
5004 static int nl80211_set_reg(struct sk_buff *skb, struct genl_info *info) in nl80211_set_reg() argument
5014 if (!info->attrs[NL80211_ATTR_REG_ALPHA2]) in nl80211_set_reg()
5017 if (!info->attrs[NL80211_ATTR_REG_RULES]) in nl80211_set_reg()
5020 alpha2 = nla_data(info->attrs[NL80211_ATTR_REG_ALPHA2]); in nl80211_set_reg()
5022 if (info->attrs[NL80211_ATTR_DFS_REGION]) in nl80211_set_reg()
5023 dfs_region = nla_get_u8(info->attrs[NL80211_ATTR_DFS_REGION]); in nl80211_set_reg()
5025 nla_for_each_nested(nl_reg_rule, info->attrs[NL80211_ATTR_REG_RULES], in nl80211_set_reg()
5050 nla_for_each_nested(nl_reg_rule, info->attrs[NL80211_ATTR_REG_RULES], in nl80211_set_reg()
5104 static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info) in nl80211_trigger_scan() argument
5106 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_trigger_scan()
5107 struct wireless_dev *wdev = info->user_ptr[1]; in nl80211_trigger_scan()
5114 if (!is_valid_ie_attr(info->attrs[NL80211_ATTR_IE])) in nl80211_trigger_scan()
5128 if (info->attrs[NL80211_ATTR_SCAN_FREQUENCIES]) { in nl80211_trigger_scan()
5130 info->attrs[NL80211_ATTR_SCAN_FREQUENCIES]); in nl80211_trigger_scan()
5144 if (info->attrs[NL80211_ATTR_SCAN_SSIDS]) in nl80211_trigger_scan()
5145 nla_for_each_nested(attr, info->attrs[NL80211_ATTR_SCAN_SSIDS], tmp) in nl80211_trigger_scan()
5153 if (info->attrs[NL80211_ATTR_IE]) in nl80211_trigger_scan()
5154 ie_len = nla_len(info->attrs[NL80211_ATTR_IE]); in nl80211_trigger_scan()
5183 if (info->attrs[NL80211_ATTR_SCAN_FREQUENCIES]) { in nl80211_trigger_scan()
5185 nla_for_each_nested(attr, info->attrs[NL80211_ATTR_SCAN_FREQUENCIES], tmp) { in nl80211_trigger_scan()
5232 if (info->attrs[NL80211_ATTR_SCAN_SSIDS]) { in nl80211_trigger_scan()
5233 nla_for_each_nested(attr, info->attrs[NL80211_ATTR_SCAN_SSIDS], tmp) { in nl80211_trigger_scan()
5244 if (info->attrs[NL80211_ATTR_IE]) { in nl80211_trigger_scan()
5245 request->ie_len = nla_len(info->attrs[NL80211_ATTR_IE]); in nl80211_trigger_scan()
5247 nla_data(info->attrs[NL80211_ATTR_IE]), in nl80211_trigger_scan()
5256 if (info->attrs[NL80211_ATTR_SCAN_SUPP_RATES]) { in nl80211_trigger_scan()
5258 info->attrs[NL80211_ATTR_SCAN_SUPP_RATES], in nl80211_trigger_scan()
5275 if (info->attrs[NL80211_ATTR_SCAN_FLAGS]) { in nl80211_trigger_scan()
5277 info->attrs[NL80211_ATTR_SCAN_FLAGS]); in nl80211_trigger_scan()
5288 nla_get_flag(info->attrs[NL80211_ATTR_TX_NO_CCK_RATE]); in nl80211_trigger_scan()
5313 struct genl_info *info) in nl80211_start_sched_scan() argument
5316 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_start_sched_scan()
5317 struct net_device *dev = info->user_ptr[1]; in nl80211_start_sched_scan()
5331 if (!is_valid_ie_attr(info->attrs[NL80211_ATTR_IE])) in nl80211_start_sched_scan()
5334 if (!info->attrs[NL80211_ATTR_SCHED_SCAN_INTERVAL]) in nl80211_start_sched_scan()
5337 interval = nla_get_u32(info->attrs[NL80211_ATTR_SCHED_SCAN_INTERVAL]); in nl80211_start_sched_scan()
5343 if (info->attrs[NL80211_ATTR_SCAN_FREQUENCIES]) { in nl80211_start_sched_scan()
5345 info->attrs[NL80211_ATTR_SCAN_FREQUENCIES]); in nl80211_start_sched_scan()
5356 if (info->attrs[NL80211_ATTR_SCAN_SSIDS]) in nl80211_start_sched_scan()
5357 nla_for_each_nested(attr, info->attrs[NL80211_ATTR_SCAN_SSIDS], in nl80211_start_sched_scan()
5373 if (info->attrs[NL80211_ATTR_SCHED_SCAN_MATCH]) { in nl80211_start_sched_scan()
5375 info->attrs[NL80211_ATTR_SCHED_SCAN_MATCH], in nl80211_start_sched_scan()
5402 if (info->attrs[NL80211_ATTR_IE]) in nl80211_start_sched_scan()
5403 ie_len = nla_len(info->attrs[NL80211_ATTR_IE]); in nl80211_start_sched_scan()
5450 if (info->attrs[NL80211_ATTR_SCAN_FREQUENCIES]) { in nl80211_start_sched_scan()
5453 info->attrs[NL80211_ATTR_SCAN_FREQUENCIES], in nl80211_start_sched_scan()
5499 if (info->attrs[NL80211_ATTR_SCAN_SSIDS]) { in nl80211_start_sched_scan()
5500 nla_for_each_nested(attr, info->attrs[NL80211_ATTR_SCAN_SSIDS], in nl80211_start_sched_scan()
5514 if (info->attrs[NL80211_ATTR_SCHED_SCAN_MATCH]) { in nl80211_start_sched_scan()
5516 info->attrs[NL80211_ATTR_SCHED_SCAN_MATCH], in nl80211_start_sched_scan()
5568 if (info->attrs[NL80211_ATTR_IE]) { in nl80211_start_sched_scan()
5569 request->ie_len = nla_len(info->attrs[NL80211_ATTR_IE]); in nl80211_start_sched_scan()
5571 nla_data(info->attrs[NL80211_ATTR_IE]), in nl80211_start_sched_scan()
5575 if (info->attrs[NL80211_ATTR_SCAN_FLAGS]) { in nl80211_start_sched_scan()
5577 info->attrs[NL80211_ATTR_SCAN_FLAGS]); in nl80211_start_sched_scan()
5594 if (info->attrs[NL80211_ATTR_IFACE_SOCKET_OWNER]) in nl80211_start_sched_scan()
5595 request->owner_nlportid = info->snd_portid; in nl80211_start_sched_scan()
5611 struct genl_info *info) in nl80211_stop_sched_scan() argument
5613 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_stop_sched_scan()
5628 struct genl_info *info) in nl80211_start_radar_detection() argument
5630 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_start_radar_detection()
5631 struct net_device *dev = info->user_ptr[1]; in nl80211_start_radar_detection()
5636 err = nl80211_parse_chandef(rdev, info, &chandef); in nl80211_start_radar_detection()
5954 static int nl80211_authenticate(struct sk_buff *skb, struct genl_info *info) in nl80211_authenticate() argument
5956 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_authenticate()
5957 struct net_device *dev = info->user_ptr[1]; in nl80211_authenticate()
5965 if (!is_valid_ie_attr(info->attrs[NL80211_ATTR_IE])) in nl80211_authenticate()
5968 if (!info->attrs[NL80211_ATTR_MAC]) in nl80211_authenticate()
5971 if (!info->attrs[NL80211_ATTR_AUTH_TYPE]) in nl80211_authenticate()
5974 if (!info->attrs[NL80211_ATTR_SSID]) in nl80211_authenticate()
5977 if (!info->attrs[NL80211_ATTR_WIPHY_FREQ]) in nl80211_authenticate()
5980 err = nl80211_parse_key(info, &key); in nl80211_authenticate()
6021 bssid = nla_data(info->attrs[NL80211_ATTR_MAC]); in nl80211_authenticate()
6023 nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ])); in nl80211_authenticate()
6027 ssid = nla_data(info->attrs[NL80211_ATTR_SSID]); in nl80211_authenticate()
6028 ssid_len = nla_len(info->attrs[NL80211_ATTR_SSID]); in nl80211_authenticate()
6030 if (info->attrs[NL80211_ATTR_IE]) { in nl80211_authenticate()
6031 ie = nla_data(info->attrs[NL80211_ATTR_IE]); in nl80211_authenticate()
6032 ie_len = nla_len(info->attrs[NL80211_ATTR_IE]); in nl80211_authenticate()
6035 auth_type = nla_get_u32(info->attrs[NL80211_ATTR_AUTH_TYPE]); in nl80211_authenticate()
6040 !info->attrs[NL80211_ATTR_SAE_DATA]) in nl80211_authenticate()
6043 if (info->attrs[NL80211_ATTR_SAE_DATA]) { in nl80211_authenticate()
6046 sae_data = nla_data(info->attrs[NL80211_ATTR_SAE_DATA]); in nl80211_authenticate()
6047 sae_data_len = nla_len(info->attrs[NL80211_ATTR_SAE_DATA]); in nl80211_authenticate()
6053 local_state_change = !!info->attrs[NL80211_ATTR_LOCAL_STATE_CHANGE]; in nl80211_authenticate()
6069 struct genl_info *info, in nl80211_crypto_settings() argument
6075 settings->control_port = info->attrs[NL80211_ATTR_CONTROL_PORT]; in nl80211_crypto_settings()
6077 if (info->attrs[NL80211_ATTR_CONTROL_PORT_ETHERTYPE]) { in nl80211_crypto_settings()
6080 info->attrs[NL80211_ATTR_CONTROL_PORT_ETHERTYPE]); in nl80211_crypto_settings()
6085 if (info->attrs[NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT]) in nl80211_crypto_settings()
6090 if (info->attrs[NL80211_ATTR_CIPHER_SUITES_PAIRWISE]) { in nl80211_crypto_settings()
6094 data = nla_data(info->attrs[NL80211_ATTR_CIPHER_SUITES_PAIRWISE]); in nl80211_crypto_settings()
6095 len = nla_len(info->attrs[NL80211_ATTR_CIPHER_SUITES_PAIRWISE]); in nl80211_crypto_settings()
6113 if (info->attrs[NL80211_ATTR_CIPHER_SUITE_GROUP]) { in nl80211_crypto_settings()
6115 nla_get_u32(info->attrs[NL80211_ATTR_CIPHER_SUITE_GROUP]); in nl80211_crypto_settings()
6121 if (info->attrs[NL80211_ATTR_WPA_VERSIONS]) { in nl80211_crypto_settings()
6123 nla_get_u32(info->attrs[NL80211_ATTR_WPA_VERSIONS]); in nl80211_crypto_settings()
6128 if (info->attrs[NL80211_ATTR_AKM_SUITES]) { in nl80211_crypto_settings()
6132 data = nla_data(info->attrs[NL80211_ATTR_AKM_SUITES]); in nl80211_crypto_settings()
6133 len = nla_len(info->attrs[NL80211_ATTR_AKM_SUITES]); in nl80211_crypto_settings()
6148 static int nl80211_associate(struct sk_buff *skb, struct genl_info *info) in nl80211_associate() argument
6150 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_associate()
6151 struct net_device *dev = info->user_ptr[1]; in nl80211_associate()
6157 if (!is_valid_ie_attr(info->attrs[NL80211_ATTR_IE])) in nl80211_associate()
6160 if (!info->attrs[NL80211_ATTR_MAC] || in nl80211_associate()
6161 !info->attrs[NL80211_ATTR_SSID] || in nl80211_associate()
6162 !info->attrs[NL80211_ATTR_WIPHY_FREQ]) in nl80211_associate()
6172 bssid = nla_data(info->attrs[NL80211_ATTR_MAC]); in nl80211_associate()
6175 nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ])); in nl80211_associate()
6179 ssid = nla_data(info->attrs[NL80211_ATTR_SSID]); in nl80211_associate()
6180 ssid_len = nla_len(info->attrs[NL80211_ATTR_SSID]); in nl80211_associate()
6182 if (info->attrs[NL80211_ATTR_IE]) { in nl80211_associate()
6183 req.ie = nla_data(info->attrs[NL80211_ATTR_IE]); in nl80211_associate()
6184 req.ie_len = nla_len(info->attrs[NL80211_ATTR_IE]); in nl80211_associate()
6187 if (info->attrs[NL80211_ATTR_USE_MFP]) { in nl80211_associate()
6189 nla_get_u32(info->attrs[NL80211_ATTR_USE_MFP]); in nl80211_associate()
6196 if (info->attrs[NL80211_ATTR_PREV_BSSID]) in nl80211_associate()
6197 req.prev_bssid = nla_data(info->attrs[NL80211_ATTR_PREV_BSSID]); in nl80211_associate()
6199 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_HT])) in nl80211_associate()
6202 if (info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK]) in nl80211_associate()
6204 nla_data(info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK]), in nl80211_associate()
6207 if (info->attrs[NL80211_ATTR_HT_CAPABILITY]) { in nl80211_associate()
6208 if (!info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK]) in nl80211_associate()
6211 nla_data(info->attrs[NL80211_ATTR_HT_CAPABILITY]), in nl80211_associate()
6215 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_VHT])) in nl80211_associate()
6218 if (info->attrs[NL80211_ATTR_VHT_CAPABILITY_MASK]) in nl80211_associate()
6220 nla_data(info->attrs[NL80211_ATTR_VHT_CAPABILITY_MASK]), in nl80211_associate()
6223 if (info->attrs[NL80211_ATTR_VHT_CAPABILITY]) { in nl80211_associate()
6224 if (!info->attrs[NL80211_ATTR_VHT_CAPABILITY_MASK]) in nl80211_associate()
6227 nla_data(info->attrs[NL80211_ATTR_VHT_CAPABILITY]), in nl80211_associate()
6231 err = nl80211_crypto_settings(rdev, info, &req.crypto, 1); in nl80211_associate()
6239 static int nl80211_deauthenticate(struct sk_buff *skb, struct genl_info *info) in nl80211_deauthenticate() argument
6241 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_deauthenticate()
6242 struct net_device *dev = info->user_ptr[1]; in nl80211_deauthenticate()
6248 if (!is_valid_ie_attr(info->attrs[NL80211_ATTR_IE])) in nl80211_deauthenticate()
6251 if (!info->attrs[NL80211_ATTR_MAC]) in nl80211_deauthenticate()
6254 if (!info->attrs[NL80211_ATTR_REASON_CODE]) in nl80211_deauthenticate()
6264 bssid = nla_data(info->attrs[NL80211_ATTR_MAC]); in nl80211_deauthenticate()
6266 reason_code = nla_get_u16(info->attrs[NL80211_ATTR_REASON_CODE]); in nl80211_deauthenticate()
6272 if (info->attrs[NL80211_ATTR_IE]) { in nl80211_deauthenticate()
6273 ie = nla_data(info->attrs[NL80211_ATTR_IE]); in nl80211_deauthenticate()
6274 ie_len = nla_len(info->attrs[NL80211_ATTR_IE]); in nl80211_deauthenticate()
6277 local_state_change = !!info->attrs[NL80211_ATTR_LOCAL_STATE_CHANGE]; in nl80211_deauthenticate()
6283 static int nl80211_disassociate(struct sk_buff *skb, struct genl_info *info) in nl80211_disassociate() argument
6285 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_disassociate()
6286 struct net_device *dev = info->user_ptr[1]; in nl80211_disassociate()
6292 if (!is_valid_ie_attr(info->attrs[NL80211_ATTR_IE])) in nl80211_disassociate()
6295 if (!info->attrs[NL80211_ATTR_MAC]) in nl80211_disassociate()
6298 if (!info->attrs[NL80211_ATTR_REASON_CODE]) in nl80211_disassociate()
6308 bssid = nla_data(info->attrs[NL80211_ATTR_MAC]); in nl80211_disassociate()
6310 reason_code = nla_get_u16(info->attrs[NL80211_ATTR_REASON_CODE]); in nl80211_disassociate()
6316 if (info->attrs[NL80211_ATTR_IE]) { in nl80211_disassociate()
6317 ie = nla_data(info->attrs[NL80211_ATTR_IE]); in nl80211_disassociate()
6318 ie_len = nla_len(info->attrs[NL80211_ATTR_IE]); in nl80211_disassociate()
6321 local_state_change = !!info->attrs[NL80211_ATTR_LOCAL_STATE_CHANGE]; in nl80211_disassociate()
6355 static int nl80211_join_ibss(struct sk_buff *skb, struct genl_info *info) in nl80211_join_ibss() argument
6357 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_join_ibss()
6358 struct net_device *dev = info->user_ptr[1]; in nl80211_join_ibss()
6366 if (!is_valid_ie_attr(info->attrs[NL80211_ATTR_IE])) in nl80211_join_ibss()
6369 if (!info->attrs[NL80211_ATTR_SSID] || in nl80211_join_ibss()
6370 !nla_len(info->attrs[NL80211_ATTR_SSID])) in nl80211_join_ibss()
6375 if (info->attrs[NL80211_ATTR_BEACON_INTERVAL]) { in nl80211_join_ibss()
6377 nla_get_u32(info->attrs[NL80211_ATTR_BEACON_INTERVAL]); in nl80211_join_ibss()
6390 if (info->attrs[NL80211_ATTR_MAC]) { in nl80211_join_ibss()
6391 ibss.bssid = nla_data(info->attrs[NL80211_ATTR_MAC]); in nl80211_join_ibss()
6396 ibss.ssid = nla_data(info->attrs[NL80211_ATTR_SSID]); in nl80211_join_ibss()
6397 ibss.ssid_len = nla_len(info->attrs[NL80211_ATTR_SSID]); in nl80211_join_ibss()
6399 if (info->attrs[NL80211_ATTR_IE]) { in nl80211_join_ibss()
6400 ibss.ie = nla_data(info->attrs[NL80211_ATTR_IE]); in nl80211_join_ibss()
6401 ibss.ie_len = nla_len(info->attrs[NL80211_ATTR_IE]); in nl80211_join_ibss()
6404 err = nl80211_parse_chandef(rdev, info, &ibss.chandef); in nl80211_join_ibss()
6417 ibss.channel_fixed = !!info->attrs[NL80211_ATTR_FREQ_FIXED]; in nl80211_join_ibss()
6418 ibss.privacy = !!info->attrs[NL80211_ATTR_PRIVACY]; in nl80211_join_ibss()
6420 if (info->attrs[NL80211_ATTR_BSS_BASIC_RATES]) { in nl80211_join_ibss()
6422 nla_data(info->attrs[NL80211_ATTR_BSS_BASIC_RATES]); in nl80211_join_ibss()
6424 nla_len(info->attrs[NL80211_ATTR_BSS_BASIC_RATES]); in nl80211_join_ibss()
6434 if (info->attrs[NL80211_ATTR_MCAST_RATE] && in nl80211_join_ibss()
6436 nla_get_u32(info->attrs[NL80211_ATTR_MCAST_RATE]))) in nl80211_join_ibss()
6439 if (ibss.privacy && info->attrs[NL80211_ATTR_KEYS]) { in nl80211_join_ibss()
6443 info->attrs[NL80211_ATTR_KEYS], in nl80211_join_ibss()
6456 nla_get_flag(info->attrs[NL80211_ATTR_CONTROL_PORT]); in nl80211_join_ibss()
6464 static int nl80211_leave_ibss(struct sk_buff *skb, struct genl_info *info) in nl80211_leave_ibss() argument
6466 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_leave_ibss()
6467 struct net_device *dev = info->user_ptr[1]; in nl80211_leave_ibss()
6478 static int nl80211_set_mcast_rate(struct sk_buff *skb, struct genl_info *info) in nl80211_set_mcast_rate() argument
6480 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_mcast_rate()
6481 struct net_device *dev = info->user_ptr[1]; in nl80211_set_mcast_rate()
6495 if (!info->attrs[NL80211_ATTR_MCAST_RATE]) in nl80211_set_mcast_rate()
6498 nla_rate = nla_get_u32(info->attrs[NL80211_ATTR_MCAST_RATE]); in nl80211_set_mcast_rate()
6512 const struct nl80211_vendor_cmd_info *info, in __cfg80211_alloc_vendor_skb() argument
6532 if (info) { in __cfg80211_alloc_vendor_skb()
6534 info->vendor_id)) in __cfg80211_alloc_vendor_skb()
6537 info->subcmd)) in __cfg80211_alloc_vendor_skb()
6563 static int nl80211_testmode_do(struct sk_buff *skb, struct genl_info *info) in nl80211_testmode_do() argument
6565 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_testmode_do()
6568 if (!info->attrs[NL80211_ATTR_TESTDATA]) in nl80211_testmode_do()
6573 rdev->cur_cmd_info = info; in nl80211_testmode_do()
6575 nla_data(info->attrs[NL80211_ATTR_TESTDATA]), in nl80211_testmode_do()
6576 nla_len(info->attrs[NL80211_ATTR_TESTDATA])); in nl80211_testmode_do()
6688 const struct nl80211_vendor_cmd_info *info; in __cfg80211_alloc_event_skb() local
6694 info = NULL; in __cfg80211_alloc_event_skb()
6700 info = &wiphy->vendor_events[vendor_event_idx]; in __cfg80211_alloc_event_skb()
6707 cmd, attr, info, gfp); in __cfg80211_alloc_event_skb()
6730 static int nl80211_connect(struct sk_buff *skb, struct genl_info *info) in nl80211_connect() argument
6732 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_connect()
6733 struct net_device *dev = info->user_ptr[1]; in nl80211_connect()
6741 if (!is_valid_ie_attr(info->attrs[NL80211_ATTR_IE])) in nl80211_connect()
6744 if (!info->attrs[NL80211_ATTR_SSID] || in nl80211_connect()
6745 !nla_len(info->attrs[NL80211_ATTR_SSID])) in nl80211_connect()
6748 if (info->attrs[NL80211_ATTR_AUTH_TYPE]) { in nl80211_connect()
6750 nla_get_u32(info->attrs[NL80211_ATTR_AUTH_TYPE]); in nl80211_connect()
6757 connect.privacy = info->attrs[NL80211_ATTR_PRIVACY]; in nl80211_connect()
6759 err = nl80211_crypto_settings(rdev, info, &connect.crypto, in nl80211_connect()
6771 if (info->attrs[NL80211_ATTR_BG_SCAN_PERIOD] && in nl80211_connect()
6774 nla_get_u16(info->attrs[NL80211_ATTR_BG_SCAN_PERIOD]); in nl80211_connect()
6777 if (info->attrs[NL80211_ATTR_MAC]) in nl80211_connect()
6778 connect.bssid = nla_data(info->attrs[NL80211_ATTR_MAC]); in nl80211_connect()
6779 connect.ssid = nla_data(info->attrs[NL80211_ATTR_SSID]); in nl80211_connect()
6780 connect.ssid_len = nla_len(info->attrs[NL80211_ATTR_SSID]); in nl80211_connect()
6782 if (info->attrs[NL80211_ATTR_IE]) { in nl80211_connect()
6783 connect.ie = nla_data(info->attrs[NL80211_ATTR_IE]); in nl80211_connect()
6784 connect.ie_len = nla_len(info->attrs[NL80211_ATTR_IE]); in nl80211_connect()
6787 if (info->attrs[NL80211_ATTR_USE_MFP]) { in nl80211_connect()
6788 connect.mfp = nla_get_u32(info->attrs[NL80211_ATTR_USE_MFP]); in nl80211_connect()
6796 if (info->attrs[NL80211_ATTR_WIPHY_FREQ]) { in nl80211_connect()
6799 nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ])); in nl80211_connect()
6805 if (connect.privacy && info->attrs[NL80211_ATTR_KEYS]) { in nl80211_connect()
6807 info->attrs[NL80211_ATTR_KEYS], NULL); in nl80211_connect()
6812 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_HT])) in nl80211_connect()
6815 if (info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK]) in nl80211_connect()
6817 nla_data(info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK]), in nl80211_connect()
6820 if (info->attrs[NL80211_ATTR_HT_CAPABILITY]) { in nl80211_connect()
6821 if (!info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK]) { in nl80211_connect()
6826 nla_data(info->attrs[NL80211_ATTR_HT_CAPABILITY]), in nl80211_connect()
6830 if (nla_get_flag(info->attrs[NL80211_ATTR_DISABLE_VHT])) in nl80211_connect()
6833 if (info->attrs[NL80211_ATTR_VHT_CAPABILITY_MASK]) in nl80211_connect()
6835 nla_data(info->attrs[NL80211_ATTR_VHT_CAPABILITY_MASK]), in nl80211_connect()
6838 if (info->attrs[NL80211_ATTR_VHT_CAPABILITY]) { in nl80211_connect()
6839 if (!info->attrs[NL80211_ATTR_VHT_CAPABILITY_MASK]) { in nl80211_connect()
6844 nla_data(info->attrs[NL80211_ATTR_VHT_CAPABILITY]), in nl80211_connect()
6854 static int nl80211_disconnect(struct sk_buff *skb, struct genl_info *info) in nl80211_disconnect() argument
6856 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_disconnect()
6857 struct net_device *dev = info->user_ptr[1]; in nl80211_disconnect()
6860 if (!info->attrs[NL80211_ATTR_REASON_CODE]) in nl80211_disconnect()
6863 reason = nla_get_u16(info->attrs[NL80211_ATTR_REASON_CODE]); in nl80211_disconnect()
6875 static int nl80211_wiphy_netns(struct sk_buff *skb, struct genl_info *info) in nl80211_wiphy_netns() argument
6877 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_wiphy_netns()
6882 if (!info->attrs[NL80211_ATTR_PID]) in nl80211_wiphy_netns()
6885 pid = nla_get_u32(info->attrs[NL80211_ATTR_PID]); in nl80211_wiphy_netns()
6901 static int nl80211_setdel_pmksa(struct sk_buff *skb, struct genl_info *info) in nl80211_setdel_pmksa() argument
6903 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_setdel_pmksa()
6906 struct net_device *dev = info->user_ptr[1]; in nl80211_setdel_pmksa()
6911 if (!info->attrs[NL80211_ATTR_MAC]) in nl80211_setdel_pmksa()
6914 if (!info->attrs[NL80211_ATTR_PMKID]) in nl80211_setdel_pmksa()
6917 pmksa.pmkid = nla_data(info->attrs[NL80211_ATTR_PMKID]); in nl80211_setdel_pmksa()
6918 pmksa.bssid = nla_data(info->attrs[NL80211_ATTR_MAC]); in nl80211_setdel_pmksa()
6924 switch (info->genlhdr->cmd) { in nl80211_setdel_pmksa()
6942 static int nl80211_flush_pmksa(struct sk_buff *skb, struct genl_info *info) in nl80211_flush_pmksa() argument
6944 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_flush_pmksa()
6945 struct net_device *dev = info->user_ptr[1]; in nl80211_flush_pmksa()
6957 static int nl80211_tdls_mgmt(struct sk_buff *skb, struct genl_info *info) in nl80211_tdls_mgmt() argument
6959 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_tdls_mgmt()
6960 struct net_device *dev = info->user_ptr[1]; in nl80211_tdls_mgmt()
6969 if (!info->attrs[NL80211_ATTR_TDLS_ACTION] || in nl80211_tdls_mgmt()
6970 !info->attrs[NL80211_ATTR_STATUS_CODE] || in nl80211_tdls_mgmt()
6971 !info->attrs[NL80211_ATTR_TDLS_DIALOG_TOKEN] || in nl80211_tdls_mgmt()
6972 !info->attrs[NL80211_ATTR_IE] || in nl80211_tdls_mgmt()
6973 !info->attrs[NL80211_ATTR_MAC]) in nl80211_tdls_mgmt()
6976 peer = nla_data(info->attrs[NL80211_ATTR_MAC]); in nl80211_tdls_mgmt()
6977 action_code = nla_get_u8(info->attrs[NL80211_ATTR_TDLS_ACTION]); in nl80211_tdls_mgmt()
6978 status_code = nla_get_u16(info->attrs[NL80211_ATTR_STATUS_CODE]); in nl80211_tdls_mgmt()
6979 dialog_token = nla_get_u8(info->attrs[NL80211_ATTR_TDLS_DIALOG_TOKEN]); in nl80211_tdls_mgmt()
6983 nla_data(info->attrs[NL80211_ATTR_IE]), in nl80211_tdls_mgmt()
6984 nla_len(info->attrs[NL80211_ATTR_IE])); in nl80211_tdls_mgmt()
6987 static int nl80211_tdls_oper(struct sk_buff *skb, struct genl_info *info) in nl80211_tdls_oper() argument
6989 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_tdls_oper()
6990 struct net_device *dev = info->user_ptr[1]; in nl80211_tdls_oper()
6998 if (!info->attrs[NL80211_ATTR_TDLS_OPERATION] || in nl80211_tdls_oper()
6999 !info->attrs[NL80211_ATTR_MAC]) in nl80211_tdls_oper()
7002 operation = nla_get_u8(info->attrs[NL80211_ATTR_TDLS_OPERATION]); in nl80211_tdls_oper()
7003 peer = nla_data(info->attrs[NL80211_ATTR_MAC]); in nl80211_tdls_oper()
7009 struct genl_info *info) in nl80211_remain_on_channel() argument
7011 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_remain_on_channel()
7012 struct wireless_dev *wdev = info->user_ptr[1]; in nl80211_remain_on_channel()
7020 if (!info->attrs[NL80211_ATTR_WIPHY_FREQ] || in nl80211_remain_on_channel()
7021 !info->attrs[NL80211_ATTR_DURATION]) in nl80211_remain_on_channel()
7024 duration = nla_get_u32(info->attrs[NL80211_ATTR_DURATION]); in nl80211_remain_on_channel()
7038 err = nl80211_parse_chandef(rdev, info, &chandef); in nl80211_remain_on_channel()
7046 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_remain_on_channel()
7064 return genlmsg_reply(msg, info); in nl80211_remain_on_channel()
7074 struct genl_info *info) in nl80211_cancel_remain_on_channel() argument
7076 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_cancel_remain_on_channel()
7077 struct wireless_dev *wdev = info->user_ptr[1]; in nl80211_cancel_remain_on_channel()
7080 if (!info->attrs[NL80211_ATTR_COOKIE]) in nl80211_cancel_remain_on_channel()
7086 cookie = nla_get_u64(info->attrs[NL80211_ATTR_COOKIE]); in nl80211_cancel_remain_on_channel()
7151 struct genl_info *info) in nl80211_set_tx_bitrate_mask() argument
7154 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_tx_bitrate_mask()
7157 struct net_device *dev = info->user_ptr[1]; in nl80211_set_tx_bitrate_mask()
7161 if (info->attrs[NL80211_ATTR_TX_RATES] == NULL) in nl80211_set_tx_bitrate_mask()
7187 nla_for_each_nested(tx_rates, info->attrs[NL80211_ATTR_TX_RATES], rem) in nl80211_set_tx_bitrate_mask()
7234 static int nl80211_register_mgmt(struct sk_buff *skb, struct genl_info *info) in nl80211_register_mgmt() argument
7236 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_register_mgmt()
7237 struct wireless_dev *wdev = info->user_ptr[1]; in nl80211_register_mgmt()
7240 if (!info->attrs[NL80211_ATTR_FRAME_MATCH]) in nl80211_register_mgmt()
7243 if (info->attrs[NL80211_ATTR_FRAME_TYPE]) in nl80211_register_mgmt()
7244 frame_type = nla_get_u16(info->attrs[NL80211_ATTR_FRAME_TYPE]); in nl80211_register_mgmt()
7264 return cfg80211_mlme_register_mgmt(wdev, info->snd_portid, frame_type, in nl80211_register_mgmt()
7265 nla_data(info->attrs[NL80211_ATTR_FRAME_MATCH]), in nl80211_register_mgmt()
7266 nla_len(info->attrs[NL80211_ATTR_FRAME_MATCH])); in nl80211_register_mgmt()
7269 static int nl80211_tx_mgmt(struct sk_buff *skb, struct genl_info *info) in nl80211_tx_mgmt() argument
7271 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_tx_mgmt()
7272 struct wireless_dev *wdev = info->user_ptr[1]; in nl80211_tx_mgmt()
7281 dont_wait_for_ack = info->attrs[NL80211_ATTR_DONT_WAIT_FOR_ACK]; in nl80211_tx_mgmt()
7283 if (!info->attrs[NL80211_ATTR_FRAME]) in nl80211_tx_mgmt()
7303 if (info->attrs[NL80211_ATTR_DURATION]) { in nl80211_tx_mgmt()
7306 wait = nla_get_u32(info->attrs[NL80211_ATTR_DURATION]); in nl80211_tx_mgmt()
7318 offchan = info->attrs[NL80211_ATTR_OFFCHANNEL_TX_OK]; in nl80211_tx_mgmt()
7323 no_cck = nla_get_flag(info->attrs[NL80211_ATTR_TX_NO_CCK_RATE]); in nl80211_tx_mgmt()
7325 err = nl80211_parse_chandef(rdev, info, &chandef); in nl80211_tx_mgmt()
7334 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_tx_mgmt()
7343 nla_data(info->attrs[NL80211_ATTR_FRAME]), in nl80211_tx_mgmt()
7344 nla_len(info->attrs[NL80211_ATTR_FRAME]), in nl80211_tx_mgmt()
7354 return genlmsg_reply(msg, info); in nl80211_tx_mgmt()
7366 static int nl80211_tx_mgmt_cancel_wait(struct sk_buff *skb, struct genl_info *info) in nl80211_tx_mgmt_cancel_wait() argument
7368 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_tx_mgmt_cancel_wait()
7369 struct wireless_dev *wdev = info->user_ptr[1]; in nl80211_tx_mgmt_cancel_wait()
7372 if (!info->attrs[NL80211_ATTR_COOKIE]) in nl80211_tx_mgmt_cancel_wait()
7391 cookie = nla_get_u64(info->attrs[NL80211_ATTR_COOKIE]); in nl80211_tx_mgmt_cancel_wait()
7396 static int nl80211_set_power_save(struct sk_buff *skb, struct genl_info *info) in nl80211_set_power_save() argument
7398 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_power_save()
7400 struct net_device *dev = info->user_ptr[1]; in nl80211_set_power_save()
7405 if (!info->attrs[NL80211_ATTR_PS_STATE]) in nl80211_set_power_save()
7408 ps_state = nla_get_u32(info->attrs[NL80211_ATTR_PS_STATE]); in nl80211_set_power_save()
7429 static int nl80211_get_power_save(struct sk_buff *skb, struct genl_info *info) in nl80211_get_power_save() argument
7431 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_get_power_save()
7434 struct net_device *dev = info->user_ptr[1]; in nl80211_get_power_save()
7448 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_power_save()
7464 return genlmsg_reply(msg, info); in nl80211_get_power_save()
7483 static int nl80211_set_cqm_txe(struct genl_info *info, in nl80211_set_cqm_txe() argument
7486 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_cqm_txe()
7488 struct net_device *dev = info->user_ptr[1]; in nl80211_set_cqm_txe()
7505 static int nl80211_set_cqm_rssi(struct genl_info *info, in nl80211_set_cqm_rssi() argument
7508 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_cqm_rssi()
7510 struct net_device *dev = info->user_ptr[1]; in nl80211_set_cqm_rssi()
7527 static int nl80211_set_cqm(struct sk_buff *skb, struct genl_info *info) in nl80211_set_cqm() argument
7533 cqm = info->attrs[NL80211_ATTR_CQM]; in nl80211_set_cqm()
7550 err = nl80211_set_cqm_rssi(info, threshold, hysteresis); in nl80211_set_cqm()
7558 err = nl80211_set_cqm_txe(info, rate, pkts, intvl); in nl80211_set_cqm()
7566 static int nl80211_join_mesh(struct sk_buff *skb, struct genl_info *info) in nl80211_join_mesh() argument
7568 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_join_mesh()
7569 struct net_device *dev = info->user_ptr[1]; in nl80211_join_mesh()
7578 if (info->attrs[NL80211_ATTR_MESH_CONFIG]) { in nl80211_join_mesh()
7580 err = nl80211_parse_mesh_config(info, &cfg, NULL); in nl80211_join_mesh()
7585 if (!info->attrs[NL80211_ATTR_MESH_ID] || in nl80211_join_mesh()
7586 !nla_len(info->attrs[NL80211_ATTR_MESH_ID])) in nl80211_join_mesh()
7589 setup.mesh_id = nla_data(info->attrs[NL80211_ATTR_MESH_ID]); in nl80211_join_mesh()
7590 setup.mesh_id_len = nla_len(info->attrs[NL80211_ATTR_MESH_ID]); in nl80211_join_mesh()
7592 if (info->attrs[NL80211_ATTR_MCAST_RATE] && in nl80211_join_mesh()
7594 nla_get_u32(info->attrs[NL80211_ATTR_MCAST_RATE]))) in nl80211_join_mesh()
7597 if (info->attrs[NL80211_ATTR_BEACON_INTERVAL]) { in nl80211_join_mesh()
7599 nla_get_u32(info->attrs[NL80211_ATTR_BEACON_INTERVAL]); in nl80211_join_mesh()
7605 if (info->attrs[NL80211_ATTR_DTIM_PERIOD]) { in nl80211_join_mesh()
7607 nla_get_u32(info->attrs[NL80211_ATTR_DTIM_PERIOD]); in nl80211_join_mesh()
7612 if (info->attrs[NL80211_ATTR_MESH_SETUP]) { in nl80211_join_mesh()
7614 err = nl80211_parse_mesh_setup(info, &setup); in nl80211_join_mesh()
7622 if (info->attrs[NL80211_ATTR_WIPHY_FREQ]) { in nl80211_join_mesh()
7623 err = nl80211_parse_chandef(rdev, info, &setup.chandef); in nl80211_join_mesh()
7634 static int nl80211_leave_mesh(struct sk_buff *skb, struct genl_info *info) in nl80211_leave_mesh() argument
7636 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_leave_mesh()
7637 struct net_device *dev = info->user_ptr[1]; in nl80211_leave_mesh()
7719 static int nl80211_get_wowlan(struct sk_buff *skb, struct genl_info *info) in nl80211_get_wowlan() argument
7721 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_get_wowlan()
7742 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_wowlan()
7780 return genlmsg_reply(msg, info); in nl80211_get_wowlan()
7932 static int nl80211_set_wowlan(struct sk_buff *skb, struct genl_info *info) in nl80211_set_wowlan() argument
7934 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_wowlan()
7946 if (!info->attrs[NL80211_ATTR_WOWLAN_TRIGGERS]) { in nl80211_set_wowlan()
7953 nla_data(info->attrs[NL80211_ATTR_WOWLAN_TRIGGERS]), in nl80211_set_wowlan()
7954 nla_len(info->attrs[NL80211_ATTR_WOWLAN_TRIGGERS]), in nl80211_set_wowlan()
8102 static int nl80211_set_rekey_data(struct sk_buff *skb, struct genl_info *info) in nl80211_set_rekey_data() argument
8104 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_rekey_data()
8105 struct net_device *dev = info->user_ptr[1]; in nl80211_set_rekey_data()
8111 if (!info->attrs[NL80211_ATTR_REKEY_DATA]) in nl80211_set_rekey_data()
8115 nla_data(info->attrs[NL80211_ATTR_REKEY_DATA]), in nl80211_set_rekey_data()
8116 nla_len(info->attrs[NL80211_ATTR_REKEY_DATA]), in nl80211_set_rekey_data()
8154 struct genl_info *info) in nl80211_register_unexpected_frame() argument
8156 struct net_device *dev = info->user_ptr[1]; in nl80211_register_unexpected_frame()
8166 wdev->ap_unexpected_nlportid = info->snd_portid; in nl80211_register_unexpected_frame()
8171 struct genl_info *info) in nl80211_probe_client() argument
8173 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_probe_client()
8174 struct net_device *dev = info->user_ptr[1]; in nl80211_probe_client()
8186 if (!info->attrs[NL80211_ATTR_MAC]) in nl80211_probe_client()
8196 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_probe_client()
8203 addr = nla_data(info->attrs[NL80211_ATTR_MAC]); in nl80211_probe_client()
8214 return genlmsg_reply(msg, info); in nl80211_probe_client()
8223 static int nl80211_register_beacons(struct sk_buff *skb, struct genl_info *info) in nl80211_register_beacons() argument
8225 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_register_beacons()
8239 if (reg->nlportid == info->snd_portid) { in nl80211_register_beacons()
8245 nreg->nlportid = info->snd_portid; in nl80211_register_beacons()
8257 static int nl80211_start_p2p_device(struct sk_buff *skb, struct genl_info *info) in nl80211_start_p2p_device() argument
8259 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_start_p2p_device()
8260 struct wireless_dev *wdev = info->user_ptr[1]; in nl80211_start_p2p_device()
8290 static int nl80211_stop_p2p_device(struct sk_buff *skb, struct genl_info *info) in nl80211_stop_p2p_device() argument
8292 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_stop_p2p_device()
8293 struct wireless_dev *wdev = info->user_ptr[1]; in nl80211_stop_p2p_device()
8311 struct genl_info *info) in nl80211_get_protocol_features() argument
8320 hdr = nl80211hdr_put(msg, info->snd_portid, info->snd_seq, 0, in nl80211_get_protocol_features()
8330 return genlmsg_reply(msg, info); in nl80211_get_protocol_features()
8337 static int nl80211_update_ft_ies(struct sk_buff *skb, struct genl_info *info) in nl80211_update_ft_ies() argument
8339 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_update_ft_ies()
8341 struct net_device *dev = info->user_ptr[1]; in nl80211_update_ft_ies()
8346 if (!info->attrs[NL80211_ATTR_MDID] || in nl80211_update_ft_ies()
8347 !is_valid_ie_attr(info->attrs[NL80211_ATTR_IE])) in nl80211_update_ft_ies()
8351 ft_params.md = nla_get_u16(info->attrs[NL80211_ATTR_MDID]); in nl80211_update_ft_ies()
8352 ft_params.ie = nla_data(info->attrs[NL80211_ATTR_IE]); in nl80211_update_ft_ies()
8353 ft_params.ie_len = nla_len(info->attrs[NL80211_ATTR_IE]); in nl80211_update_ft_ies()
8359 struct genl_info *info) in nl80211_crit_protocol_start() argument
8361 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_crit_protocol_start()
8362 struct wireless_dev *wdev = info->user_ptr[1]; in nl80211_crit_protocol_start()
8377 if (info->attrs[NL80211_ATTR_CRIT_PROT_ID]) in nl80211_crit_protocol_start()
8378 proto = nla_get_u16(info->attrs[NL80211_ATTR_CRIT_PROT_ID]); in nl80211_crit_protocol_start()
8384 if (!info->attrs[NL80211_ATTR_MAX_CRIT_PROT_DURATION]) in nl80211_crit_protocol_start()
8388 nla_get_u16(info->attrs[NL80211_ATTR_MAX_CRIT_PROT_DURATION]); in nl80211_crit_protocol_start()
8395 rdev->crit_proto_nlportid = info->snd_portid; in nl80211_crit_protocol_start()
8401 struct genl_info *info) in nl80211_crit_protocol_stop() argument
8403 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_crit_protocol_stop()
8404 struct wireless_dev *wdev = info->user_ptr[1]; in nl80211_crit_protocol_stop()
8416 static int nl80211_vendor_cmd(struct sk_buff *skb, struct genl_info *info) in nl80211_vendor_cmd() argument
8418 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_vendor_cmd()
8420 __cfg80211_wdev_from_attrs(genl_info_net(info), info->attrs); in nl80211_vendor_cmd()
8436 if (!info->attrs[NL80211_ATTR_VENDOR_ID] || in nl80211_vendor_cmd()
8437 !info->attrs[NL80211_ATTR_VENDOR_SUBCMD]) in nl80211_vendor_cmd()
8440 vid = nla_get_u32(info->attrs[NL80211_ATTR_VENDOR_ID]); in nl80211_vendor_cmd()
8441 subcmd = nla_get_u32(info->attrs[NL80211_ATTR_VENDOR_SUBCMD]); in nl80211_vendor_cmd()
8449 if (vcmd->info.vendor_id != vid || vcmd->info.subcmd != subcmd) in nl80211_vendor_cmd()
8469 if (info->attrs[NL80211_ATTR_VENDOR_DATA]) { in nl80211_vendor_cmd()
8470 data = nla_data(info->attrs[NL80211_ATTR_VENDOR_DATA]); in nl80211_vendor_cmd()
8471 len = nla_len(info->attrs[NL80211_ATTR_VENDOR_DATA]); in nl80211_vendor_cmd()
8474 rdev->cur_cmd_info = info; in nl80211_vendor_cmd()
8530 struct genl_info *info) in nl80211_pre_doit() argument
8541 rdev = cfg80211_get_dev_from_info(genl_info_net(info), info); in nl80211_pre_doit()
8547 info->user_ptr[0] = rdev; in nl80211_pre_doit()
8551 wdev = __cfg80211_wdev_from_attrs(genl_info_net(info), in nl80211_pre_doit()
8552 info->attrs); in nl80211_pre_doit()
8571 info->user_ptr[1] = dev; in nl80211_pre_doit()
8573 info->user_ptr[1] = wdev; in nl80211_pre_doit()
8599 info->user_ptr[0] = rdev; in nl80211_pre_doit()
8606 struct genl_info *info) in nl80211_post_doit() argument
8608 if (info->user_ptr[0]) in nl80211_post_doit()
8609 cfg80211_unlock_rdev(info->user_ptr[0]); in nl80211_post_doit()
8610 if (info->user_ptr[1]) { in nl80211_post_doit()
8612 struct wireless_dev *wdev = info->user_ptr[1]; in nl80211_post_doit()
8617 dev_put(info->user_ptr[1]); in nl80211_post_doit()