Lines Matching full:drv
164 wpa_driver_nl80211_finish_drv_init(struct wpa_driver_nl80211_data *drv,
178 static void add_ifidx(struct wpa_driver_nl80211_data *drv, int ifidx,
180 static void del_ifidx(struct wpa_driver_nl80211_data *drv, int ifidx,
182 static int have_ifidx(struct wpa_driver_nl80211_data *drv, int ifidx,
187 static int nl80211_disable_11b_rates(struct wpa_driver_nl80211_data *drv,
190 static int nl80211_leave_ibss(struct wpa_driver_nl80211_data *drv,
249 struct i802_bss * get_bss_ifindex(struct wpa_driver_nl80211_data *drv, in get_bss_ifindex() argument
254 for (bss = drv->first_bss; bss; bss = bss->next) { in get_bss_ifindex()
269 void nl80211_mark_disconnected(struct wpa_driver_nl80211_data *drv) in nl80211_mark_disconnected() argument
271 if (drv->associated) in nl80211_mark_disconnected()
272 os_memcpy(drv->prev_bssid, drv->bssid, ETH_ALEN); in nl80211_mark_disconnected()
273 drv->associated = 0; in nl80211_mark_disconnected()
274 os_memset(&drv->sta_mlo_info, 0, sizeof(drv->sta_mlo_info)); in nl80211_mark_disconnected()
275 os_memset(drv->bssid, 0, ETH_ALEN); in nl80211_mark_disconnected()
276 drv->first_bss->flink->freq = 0; in nl80211_mark_disconnected()
278 os_free(drv->pending_roam_data); in nl80211_mark_disconnected()
279 drv->pending_roam_data = NULL; in nl80211_mark_disconnected()
280 os_free(drv->pending_t2lm_data); in nl80211_mark_disconnected()
281 drv->pending_t2lm_data = NULL; in nl80211_mark_disconnected()
282 os_free(drv->pending_link_reconfig_data); in nl80211_mark_disconnected()
283 drv->pending_link_reconfig_data = NULL; in nl80211_mark_disconnected()
286 drv->auth_mld = false; in nl80211_mark_disconnected()
287 drv->auth_mld_link_id = -1; in nl80211_mark_disconnected()
288 os_memset(drv->auth_ap_mld_addr, 0, ETH_ALEN); in nl80211_mark_disconnected()
455 static int send_event_marker(struct wpa_driver_nl80211_data *drv) in send_event_marker() argument
468 if (!nl80211_cmd(drv, msg, 0, NL80211_CMD_GET_PROTOCOL_FEATURES)) in send_event_marker()
471 handle = (void *) (((intptr_t) drv->global->nl_event) ^ in send_event_marker()
586 static int nl80211_put_control_port(struct wpa_driver_nl80211_data *drv, in nl80211_put_control_port() argument
591 ((drv->capa.flags2 & WPA_DRIVER_FLAGS2_CONTROL_PORT_RX) && in nl80211_put_control_port()
661 void * nl80211_cmd(struct wpa_driver_nl80211_data *drv, in nl80211_cmd() argument
666 return genlmsg_put(msg, 0, 0, drv->global->nl80211_id, in nl80211_cmd()
687 if (!nl80211_cmd(bss->drv, msg, flags, cmd) || in nl80211_cmd_msg()
698 nl80211_ifindex_msg_build(struct wpa_driver_nl80211_data *drv, in nl80211_ifindex_msg_build() argument
705 if (!nl80211_cmd(drv, msg, flags, cmd) || in nl80211_ifindex_msg_build()
716 nl80211_ifindex_msg(struct wpa_driver_nl80211_data *drv, int ifindex, in nl80211_ifindex_msg() argument
719 return nl80211_ifindex_msg_build(drv, nlmsg_alloc(), ifindex, flags, in nl80211_ifindex_msg()
724 struct nl_msg * nl80211_drv_msg(struct wpa_driver_nl80211_data *drv, int flags, in nl80211_drv_msg() argument
727 return nl80211_ifindex_msg(drv, drv->ifindex, flags, cmd); in nl80211_drv_msg()
733 return nl80211_ifindex_msg(bss->drv, bss->ifindex, flags, cmd); in nl80211_bss_msg()
782 if (send_and_recv_resp(bss->drv, msg, netdev_info_handler, &data) == 0) in nl80211_get_wiphy_index()
799 if (send_and_recv_resp(bss->drv, msg, netdev_info_handler, &data) == 0) in nl80211_get_ifmode()
815 return send_and_recv_resp(bss->drv, msg, netdev_info_handler, &data); in nl80211_get_macaddr()
827 send_and_recv_resp(bss->drv, msg, netdev_info_handler, &data)) in nl80211_get_4addr()
833 static int nl80211_register_beacons(struct wpa_driver_nl80211_data *drv, in nl80211_register_beacons() argument
843 if (!nl80211_cmd(drv, msg, 0, NL80211_CMD_REGISTER_BEACONS) || in nl80211_register_beacons()
849 ret = send_and_recv(drv->global, w->nl_beacons, msg, NULL, NULL, in nl80211_register_beacons()
878 struct wpa_driver_nl80211_data *drv; in process_beacon_event() local
895 dl_list_for_each(drv, &w->drvs, struct wpa_driver_nl80211_data, in process_beacon_event()
900 wpa_supplicant_event(drv->ctx, EVENT_RX_MGMT, &event); in process_beacon_event()
947 w->nl_beacons = nl_create_handle(bss->drv->global->nl_cb, in nl80211_get_wiphy_data_ap()
954 if (nl80211_register_beacons(bss->drv, w)) { in nl80211_get_wiphy_data_ap()
967 /* drv entry for this bss already there? */ in nl80211_get_wiphy_data_ap()
969 if (tmp_bss->drv == bss->drv) { in nl80211_get_wiphy_data_ap()
976 dl_list_add(&w->drvs, &bss->drv->wiphy_list); in nl80211_get_wiphy_data_ap()
995 /* still any for this drv present? */ in nl80211_put_wiphy_data_ap()
997 if (tmp_bss->drv == bss->drv) { in nl80211_put_wiphy_data_ap()
1004 dl_list_del(&bss->drv->wiphy_list); in nl80211_put_wiphy_data_ap()
1021 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_get_ifindex() local
1023 return drv->ifindex; in nl80211_get_ifindex()
1030 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_get_bssid() local
1031 if (!drv->associated) in wpa_driver_nl80211_get_bssid()
1033 os_memcpy(bssid, drv->bssid, ETH_ALEN); in wpa_driver_nl80211_get_bssid()
1041 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_get_ssid() local
1042 if (!drv->associated) in wpa_driver_nl80211_get_ssid()
1044 os_memcpy(ssid, drv->ssid, drv->ssid_len); in wpa_driver_nl80211_get_ssid()
1045 return drv->ssid_len; in wpa_driver_nl80211_get_ssid()
1098 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_get_sta_mlo_info() local
1100 if (!drv->associated) in nl80211_get_sta_mlo_info()
1103 if (drv->capa.flags & WPA_DRIVER_FLAGS_SME) { in nl80211_get_sta_mlo_info()
1106 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_GET_INTERFACE); in nl80211_get_sta_mlo_info()
1107 if (send_and_recv_resp(drv, msg, get_mlo_info, in nl80211_get_sta_mlo_info()
1108 &drv->sta_mlo_info)) in nl80211_get_sta_mlo_info()
1112 os_memcpy(mlo_info, &drv->sta_mlo_info, sizeof(*mlo_info)); in nl80211_get_sta_mlo_info()
1118 struct nl80211_global *global, struct wpa_driver_nl80211_data *drv, in wpa_driver_nl80211_event_newlink() argument
1123 if (drv && os_strcmp(drv->first_bss->ifname, ifname) == 0) { in wpa_driver_nl80211_event_newlink()
1124 if (if_nametoindex(drv->first_bss->ifname) == 0) { in wpa_driver_nl80211_event_newlink()
1126 drv->first_bss->ifname); in wpa_driver_nl80211_event_newlink()
1129 if (!drv->if_removed) in wpa_driver_nl80211_event_newlink()
1132 drv->first_bss->ifname); in wpa_driver_nl80211_event_newlink()
1133 drv->if_removed = 0; in wpa_driver_nl80211_event_newlink()
1141 if (drv) in wpa_driver_nl80211_event_newlink()
1142 wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_STATUS, &event); in wpa_driver_nl80211_event_newlink()
1150 struct nl80211_global *global, struct wpa_driver_nl80211_data *drv, in wpa_driver_nl80211_event_dellink() argument
1155 if (drv && os_strcmp(drv->first_bss->ifname, ifname) == 0) { in wpa_driver_nl80211_event_dellink()
1156 if (drv->if_removed) { in wpa_driver_nl80211_event_dellink()
1163 drv->if_removed = 1; in wpa_driver_nl80211_event_dellink()
1174 if (drv) in wpa_driver_nl80211_event_dellink()
1175 wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_STATUS, &event); in wpa_driver_nl80211_event_dellink()
1182 static int wpa_driver_nl80211_own_ifname(struct wpa_driver_nl80211_data *drv, in wpa_driver_nl80211_own_ifname() argument
1195 drv->first_bss->ifname) == 0) in wpa_driver_nl80211_own_ifname()
1207 static int wpa_driver_nl80211_own_ifindex(struct wpa_driver_nl80211_data *drv, in wpa_driver_nl80211_own_ifindex() argument
1210 if (drv->ifindex == ifindex) in wpa_driver_nl80211_own_ifindex()
1213 if (drv->if_removed && wpa_driver_nl80211_own_ifname(drv, buf, len)) { in wpa_driver_nl80211_own_ifindex()
1214 nl80211_check_global(drv->global); in wpa_driver_nl80211_own_ifindex()
1217 if (wpa_driver_nl80211_finish_drv_init(drv, NULL, 0, NULL) < 0) in wpa_driver_nl80211_own_ifindex()
1230 struct wpa_driver_nl80211_data *drv; in nl80211_find_drv() local
1235 dl_list_for_each(drv, &global->interfaces, in nl80211_find_drv()
1237 res = wpa_driver_nl80211_own_ifindex(drv, idx, buf, len); in nl80211_find_drv()
1243 return drv; in nl80211_find_drv()
1245 if (res > 0 || have_ifidx(drv, idx, IFIDX_ANY)) in nl80211_find_drv()
1246 return drv; in nl80211_find_drv()
1252 static void nl80211_refresh_mac(struct wpa_driver_nl80211_data *drv, in nl80211_refresh_mac() argument
1258 bss = get_bss_ifindex(drv, ifindex); in nl80211_refresh_mac()
1260 linux_get_ifhwaddr(drv->global->ioctl_sock, in nl80211_refresh_mac()
1274 wpa_supplicant_event(drv->ctx, in nl80211_refresh_mac()
1285 struct wpa_driver_nl80211_data *drv; in wpa_driver_nl80211_event_rtm_newlink() local
1337 drv = nl80211_find_drv(global, ifi->ifi_index, buf, len, &init_failed); in wpa_driver_nl80211_event_rtm_newlink()
1338 if (!drv) in wpa_driver_nl80211_event_rtm_newlink()
1343 if (!drv->if_disabled && !(ifi->ifi_flags & IFF_UP)) { in wpa_driver_nl80211_event_rtm_newlink()
1346 linux_iface_up(drv->global->ioctl_sock, namebuf) > 0) { in wpa_driver_nl80211_event_rtm_newlink()
1349 drv->ignore_if_down_event = 0; in wpa_driver_nl80211_event_rtm_newlink()
1351 nl80211_refresh_mac(drv, ifi->ifi_index, 1); in wpa_driver_nl80211_event_rtm_newlink()
1356 if (os_strcmp(drv->first_bss->ifname, ifname) != 0) { in wpa_driver_nl80211_event_rtm_newlink()
1359 drv->first_bss->ifname); in wpa_driver_nl80211_event_rtm_newlink()
1360 } else if (drv->ignore_if_down_event) { in wpa_driver_nl80211_event_rtm_newlink()
1363 drv->ignore_if_down_event = 0; in wpa_driver_nl80211_event_rtm_newlink()
1365 drv->if_disabled = 1; in wpa_driver_nl80211_event_rtm_newlink()
1366 wpa_supplicant_event(drv->ctx, in wpa_driver_nl80211_event_rtm_newlink()
1370 * Try to get drv again, since it may be removed as in wpa_driver_nl80211_event_rtm_newlink()
1374 drv = nl80211_find_drv(global, ifi->ifi_index, in wpa_driver_nl80211_event_rtm_newlink()
1376 if (!drv) in wpa_driver_nl80211_event_rtm_newlink()
1381 if (drv->if_disabled && (ifi->ifi_flags & IFF_UP)) { in wpa_driver_nl80211_event_rtm_newlink()
1384 linux_iface_up(drv->global->ioctl_sock, namebuf) == 0) { in wpa_driver_nl80211_event_rtm_newlink()
1392 if (os_strcmp(drv->first_bss->ifname, ifname) != 0) { in wpa_driver_nl80211_event_rtm_newlink()
1395 drv->first_bss->ifname); in wpa_driver_nl80211_event_rtm_newlink()
1396 } else if (if_nametoindex(drv->first_bss->ifname) == 0) { in wpa_driver_nl80211_event_rtm_newlink()
1399 drv->first_bss->ifname); in wpa_driver_nl80211_event_rtm_newlink()
1400 } else if (drv->if_removed) { in wpa_driver_nl80211_event_rtm_newlink()
1403 "removed", drv->first_bss->ifname); in wpa_driver_nl80211_event_rtm_newlink()
1406 nl80211_refresh_mac(drv, ifi->ifi_index, 0); in wpa_driver_nl80211_event_rtm_newlink()
1408 drv->if_disabled = 0; in wpa_driver_nl80211_event_rtm_newlink()
1409 wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_ENABLED, in wpa_driver_nl80211_event_rtm_newlink()
1420 if (drv->operstate == 1 && in wpa_driver_nl80211_event_rtm_newlink()
1424 netlink_send_oper_ifla(drv->global->netlink, drv->ifindex, in wpa_driver_nl80211_event_rtm_newlink()
1430 wpa_driver_nl80211_event_newlink(global, drv, ifi->ifi_index, in wpa_driver_nl80211_event_rtm_newlink()
1433 if (ifi->ifi_family == AF_BRIDGE && brid && drv) { in wpa_driver_nl80211_event_rtm_newlink()
1445 add_ifidx(drv, brid, ifi->ifi_index); in wpa_driver_nl80211_event_rtm_newlink()
1447 for (bss = drv->first_bss; bss; bss = bss->next) { in wpa_driver_nl80211_event_rtm_newlink()
1462 struct wpa_driver_nl80211_data *drv; in wpa_driver_nl80211_event_rtm_dellink() local
1509 drv = nl80211_find_drv(global, ifi->ifi_index, buf, len, NULL); in wpa_driver_nl80211_event_rtm_dellink()
1511 if (ifi->ifi_family == AF_BRIDGE && brid && drv) { in wpa_driver_nl80211_event_rtm_dellink()
1524 del_ifidx(drv, brid, ifi->ifi_index); in wpa_driver_nl80211_event_rtm_dellink()
1528 wpa_driver_nl80211_event_dellink(global, drv, ifi->ifi_index, in wpa_driver_nl80211_event_rtm_dellink()
1534 struct wpa_driver_nl80211_data *drv; member
1558 struct wpa_driver_nl80211_data *drv = ctx->drv; in nl80211_get_assoc_freq_handler() local
1584 if (!drv->sta_mlo_info.valid_links || in nl80211_get_assoc_freq_handler()
1585 drv->sta_mlo_info.assoc_link_id == link_id) { in nl80211_get_assoc_freq_handler()
1612 if (!drv->sta_mlo_info.valid_links || in nl80211_get_assoc_freq_handler()
1613 drv->sta_mlo_info.assoc_link_id == link_id) { in nl80211_get_assoc_freq_handler()
1639 int nl80211_get_assoc_ssid(struct wpa_driver_nl80211_data *drv, u8 *ssid) in nl80211_get_assoc_ssid() argument
1647 msg = nl80211_drv_msg(drv, NLM_F_DUMP, NL80211_CMD_GET_SCAN); in nl80211_get_assoc_ssid()
1649 arg.drv = drv; in nl80211_get_assoc_ssid()
1650 ret = send_and_recv_resp(drv, msg, nl80211_get_assoc_freq_handler, in nl80211_get_assoc_ssid()
1673 unsigned int nl80211_get_assoc_freq(struct wpa_driver_nl80211_data *drv) in nl80211_get_assoc_freq() argument
1681 msg = nl80211_drv_msg(drv, NLM_F_DUMP, NL80211_CMD_GET_SCAN); in nl80211_get_assoc_freq()
1683 arg.drv = drv; in nl80211_get_assoc_freq()
1684 ret = send_and_recv_resp(drv, msg, nl80211_get_assoc_freq_handler, in nl80211_get_assoc_freq()
1698 unsigned int freq = drv->nlmode == NL80211_IFTYPE_ADHOC ? in nl80211_get_assoc_freq()
1703 drv->assoc_freq = freq; in nl80211_get_assoc_freq()
1705 if (drv->sta_mlo_info.valid_links) { in nl80211_get_assoc_freq()
1709 drv->sta_mlo_info.links[i].freq = arg.freq[i]; in nl80211_get_assoc_freq()
1712 return drv->assoc_freq; in nl80211_get_assoc_freq()
1716 return drv->assoc_freq; in nl80211_get_assoc_freq()
1764 int nl80211_get_link_noise(struct wpa_driver_nl80211_data *drv, in nl80211_get_link_noise() argument
1770 sig_change->frequency = drv->assoc_freq; in nl80211_get_link_noise()
1772 msg = nl80211_drv_msg(drv, NLM_F_DUMP, NL80211_CMD_GET_SURVEY); in nl80211_get_link_noise()
1773 return send_and_recv_resp(drv, msg, get_link_noise, sig_change); in nl80211_get_link_noise()
1833 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_channel_info() local
1836 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_GET_INTERFACE); in nl80211_channel_info()
1837 return send_and_recv_resp(drv, msg, get_channel_info, ci); in nl80211_channel_info()
1869 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_set_country() local
1881 if (!nl80211_cmd(drv, msg, 0, NL80211_CMD_REQ_SET_REG) || in wpa_driver_nl80211_set_country()
1886 if (send_and_recv_cmd(drv, msg)) in wpa_driver_nl80211_set_country()
1912 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_get_country() local
1920 nl80211_cmd(drv, msg, 0, NL80211_CMD_GET_REG); in wpa_driver_nl80211_get_country()
1922 if (drv->capa.flags & WPA_DRIVER_FLAGS_SELF_MANAGED_REGULATORY) { in wpa_driver_nl80211_get_country()
1925 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, drv->wiphy_idx)) { in wpa_driver_nl80211_get_country()
1932 ret = send_and_recv_resp(drv, msg, nl80211_get_country, alpha2); in wpa_driver_nl80211_get_country()
2089 struct wpa_driver_nl80211_data *drv = ctx; in wpa_driver_nl80211_rfkill_blocked() local
2097 if (drv->nlmode == NL80211_IFTYPE_P2P_DEVICE) in wpa_driver_nl80211_rfkill_blocked()
2098 wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_DISABLED, NULL); in wpa_driver_nl80211_rfkill_blocked()
2104 struct wpa_driver_nl80211_data *drv = ctx; in wpa_driver_nl80211_rfkill_unblocked() local
2106 if (i802_set_iface_flags(drv->first_bss, 1)) { in wpa_driver_nl80211_rfkill_unblocked()
2112 if (is_p2p_net_interface(drv->nlmode)) in wpa_driver_nl80211_rfkill_unblocked()
2113 nl80211_disable_11b_rates(drv, drv->ifindex, 1); in wpa_driver_nl80211_rfkill_unblocked()
2119 if (drv->nlmode == NL80211_IFTYPE_P2P_DEVICE) in wpa_driver_nl80211_rfkill_unblocked()
2120 wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_ENABLED, NULL); in wpa_driver_nl80211_rfkill_unblocked()
2128 struct wpa_driver_nl80211_data *drv = eloop_ctx; in wpa_driver_nl80211_handle_eapol_tx_status() local
2179 wpa_supplicant_event(drv->ctx, EVENT_EAPOL_TX_STATUS, &event); in wpa_driver_nl80211_handle_eapol_tx_status()
2230 wpa_driver_nl80211_drv_init_rfkill(struct wpa_driver_nl80211_data *drv) in wpa_driver_nl80211_drv_init_rfkill() argument
2234 if (drv->rfkill) in wpa_driver_nl80211_drv_init_rfkill()
2241 rcfg->ctx = drv; in wpa_driver_nl80211_drv_init_rfkill()
2250 if (drv->nlmode == NL80211_IFTYPE_P2P_DEVICE) { in wpa_driver_nl80211_drv_init_rfkill()
2251 struct nl80211_global *global = drv->global; in wpa_driver_nl80211_drv_init_rfkill()
2256 if (drv == tmp1 || drv->wiphy_idx != tmp1->wiphy_idx || in wpa_driver_nl80211_drv_init_rfkill()
2268 os_strlcpy(rcfg->ifname, drv->first_bss->ifname, in wpa_driver_nl80211_drv_init_rfkill()
2274 drv->rfkill = rfkill_init(rcfg); in wpa_driver_nl80211_drv_init_rfkill()
2275 if (!drv->rfkill) { in wpa_driver_nl80211_drv_init_rfkill()
2287 struct wpa_driver_nl80211_data *drv; in wpa_driver_nl80211_drv_init() local
2312 drv = os_zalloc(sizeof(*drv)); in wpa_driver_nl80211_drv_init()
2313 if (drv == NULL) in wpa_driver_nl80211_drv_init()
2315 drv->global = global_priv; in wpa_driver_nl80211_drv_init()
2316 drv->ctx = ctx; in wpa_driver_nl80211_drv_init()
2317 drv->hostapd = !!hostapd; in wpa_driver_nl80211_drv_init()
2318 drv->eapol_sock = -1; in wpa_driver_nl80211_drv_init()
2325 drv->set_rekey_offload = 1; in wpa_driver_nl80211_drv_init()
2327 drv->num_if_indices = ARRAY_SIZE(drv->default_if_indices); in wpa_driver_nl80211_drv_init()
2328 drv->if_indices = drv->default_if_indices; in wpa_driver_nl80211_drv_init()
2330 drv->first_bss = os_zalloc(sizeof(*drv->first_bss)); in wpa_driver_nl80211_drv_init()
2331 if (!drv->first_bss) { in wpa_driver_nl80211_drv_init()
2332 os_free(drv); in wpa_driver_nl80211_drv_init()
2335 bss = drv->first_bss; in wpa_driver_nl80211_drv_init()
2336 bss->drv = drv; in wpa_driver_nl80211_drv_init()
2340 drv->monitor_ifidx = -1; in wpa_driver_nl80211_drv_init()
2341 drv->monitor_sock = -1; in wpa_driver_nl80211_drv_init()
2342 drv->eapol_tx_sock = -1; in wpa_driver_nl80211_drv_init()
2343 drv->ap_scan_as_station = NL80211_IFTYPE_UNSPECIFIED; in wpa_driver_nl80211_drv_init()
2348 if (wpa_driver_nl80211_finish_drv_init(drv, set_addr, 1, driver_params)) in wpa_driver_nl80211_drv_init()
2351 if (drv->capa.flags2 & WPA_DRIVER_FLAGS2_CONTROL_PORT_TX_STATUS) { in wpa_driver_nl80211_drv_init()
2352 drv->control_port_ap = 1; in wpa_driver_nl80211_drv_init()
2356 drv->eapol_tx_sock = socket(PF_PACKET, SOCK_DGRAM, 0); in wpa_driver_nl80211_drv_init()
2357 if (drv->eapol_tx_sock < 0) in wpa_driver_nl80211_drv_init()
2360 if (drv->data_tx_status) { in wpa_driver_nl80211_drv_init()
2363 if (setsockopt(drv->eapol_tx_sock, SOL_SOCKET, SO_WIFI_STATUS, in wpa_driver_nl80211_drv_init()
2368 drv->data_tx_status = 0; in wpa_driver_nl80211_drv_init()
2369 if (!drv->use_monitor) in wpa_driver_nl80211_drv_init()
2370 drv->capa.flags &= in wpa_driver_nl80211_drv_init()
2374 drv->eapol_tx_sock, in wpa_driver_nl80211_drv_init()
2376 drv, NULL); in wpa_driver_nl80211_drv_init()
2381 if (drv->global) { in wpa_driver_nl80211_drv_init()
2382 nl80211_check_global(drv->global); in wpa_driver_nl80211_drv_init()
2383 dl_list_add(&drv->global->interfaces, &drv->list); in wpa_driver_nl80211_drv_init()
2384 drv->in_interface_list = 1; in wpa_driver_nl80211_drv_init()
2423 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_register_frame() local
2442 ret = send_and_recv(drv->global, nl_handle, msg, NULL, NULL, in nl80211_register_frame()
2498 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_mgmt_subscribe_non_ap() local
2507 if (drv->nlmode == NL80211_IFTYPE_ADHOC) { in nl80211_mgmt_subscribe_non_ap()
2510 } else if ((drv->capa.flags & WPA_DRIVER_FLAGS_SAE) && in nl80211_mgmt_subscribe_non_ap()
2511 !(drv->capa.flags & WPA_DRIVER_FLAGS_SME)) { in nl80211_mgmt_subscribe_non_ap()
2594 if ((drv->capa.flags & WPA_DRIVER_FLAGS_TDLS_SUPPORT)) { in nl80211_mgmt_subscribe_non_ap()
2610 else if (!drv->has_driver_key_mgmt) { in nl80211_mgmt_subscribe_non_ap()
2615 drv->capa.key_mgmt |= WPA_DRIVER_CAPA_KEY_MGMT_FT | in nl80211_mgmt_subscribe_non_ap()
2620 drv->capa.key_mgmt_iftype[i] = drv->capa.key_mgmt; in nl80211_mgmt_subscribe_non_ap()
2654 if (!drv->no_rrm && in nl80211_mgmt_subscribe_non_ap()
2659 if ((drv->capa.rrm_flags & WPA_DRIVER_FLAGS_TX_POWER_INSERTION) && in nl80211_mgmt_subscribe_non_ap()
2722 ret = send_and_recv(bss->drv->global, bss->nl_mgmt, msg, NULL, NULL, in nl80211_register_spurious_class3()
2834 if (bss->drv->device_ap_sme) { in nl80211_mgmt_subscribe_ap_dev_sme()
2877 ret = send_and_recv_cmd(bss->drv, msg); in nl80211_del_p2pdev()
2892 ret = send_and_recv_cmd(bss->drv, msg); in nl80211_set_p2pdev()
2908 return linux_set_iface_flags(bss->drv->global->ioctl_sock, in i802_set_iface_flags()
2920 /* struct wpa_driver_nl80211_data *drv = arg; */ in qca_vendor_test_cmd_handler()
2945 static void qca_vendor_test(struct wpa_driver_nl80211_data *drv) in qca_vendor_test() argument
2952 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in qca_vendor_test()
2963 ret = send_and_recv_resp(drv, msg, qca_vendor_test_cmd_handler, drv); in qca_vendor_test()
2972 wpa_driver_nl80211_finish_drv_init(struct wpa_driver_nl80211_data *drv, in wpa_driver_nl80211_finish_drv_init() argument
2976 struct i802_bss *bss = drv->first_bss; in wpa_driver_nl80211_finish_drv_init()
2980 drv->ifindex = if_nametoindex(bss->ifname); in wpa_driver_nl80211_finish_drv_init()
2981 bss->ifindex = drv->ifindex; in wpa_driver_nl80211_finish_drv_init()
2982 bss->wdev_id = drv->global->if_add_wdevid; in wpa_driver_nl80211_finish_drv_init()
2983 bss->wdev_id_set = drv->global->if_add_wdevid_set; in wpa_driver_nl80211_finish_drv_init()
2985 bss->if_dynamic = drv->ifindex == drv->global->if_add_ifindex; in wpa_driver_nl80211_finish_drv_init()
2986 bss->if_dynamic = bss->if_dynamic || drv->global->if_add_wdevid_set; in wpa_driver_nl80211_finish_drv_init()
2987 drv->global->if_add_wdevid_set = 0; in wpa_driver_nl80211_finish_drv_init()
2994 linux_iface_up(drv->global->ioctl_sock, bss->ifname) > 0) in wpa_driver_nl80211_finish_drv_init()
2995 drv->start_iface_up = 1; in wpa_driver_nl80211_finish_drv_init()
2997 if (wpa_driver_nl80211_capa(drv)) in wpa_driver_nl80211_finish_drv_init()
3004 bss->ifname, drv->phyname); in wpa_driver_nl80211_finish_drv_init()
3007 (linux_set_iface_flags(drv->global->ioctl_sock, bss->ifname, 0) || in wpa_driver_nl80211_finish_drv_init()
3008 linux_set_ifhwaddr(drv->global->ioctl_sock, bss->ifname, in wpa_driver_nl80211_finish_drv_init()
3013 drv->start_mode_sta = 1; in wpa_driver_nl80211_finish_drv_init()
3015 if (drv->hostapd || bss->static_ap) in wpa_driver_nl80211_finish_drv_init()
3031 wpa_driver_nl80211_drv_init_rfkill(drv); in wpa_driver_nl80211_finish_drv_init()
3033 if (!rfkill_is_blocked(drv->rfkill)) { in wpa_driver_nl80211_finish_drv_init()
3042 nl80211_disable_11b_rates(bss->drv, in wpa_driver_nl80211_finish_drv_init()
3043 bss->drv->ifindex, 1); in wpa_driver_nl80211_finish_drv_init()
3051 drv->if_disabled = 1; in wpa_driver_nl80211_finish_drv_init()
3056 if (!drv->hostapd && nlmode != NL80211_IFTYPE_P2P_DEVICE) in wpa_driver_nl80211_finish_drv_init()
3057 netlink_send_oper_ifla(drv->global->netlink, drv->ifindex, in wpa_driver_nl80211_finish_drv_init()
3061 if (linux_get_ifhwaddr(drv->global->ioctl_sock, bss->ifname, in wpa_driver_nl80211_finish_drv_init()
3064 os_memcpy(drv->perm_addr, bss->addr, ETH_ALEN); in wpa_driver_nl80211_finish_drv_init()
3069 drv, drv->ctx); in wpa_driver_nl80211_finish_drv_init()
3072 if (drv->vendor_cmd_test_avail) in wpa_driver_nl80211_finish_drv_init()
3073 qca_vendor_test(drv); in wpa_driver_nl80211_finish_drv_init()
3083 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_del_beacon() local
3110 return send_and_recv_cmd(drv, msg); in wpa_driver_nl80211_del_beacon()
3132 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_deinit() local
3136 bss->ifname, drv->disabled_11b_rates); in wpa_driver_nl80211_deinit()
3139 if (drv->data_tx_status) in wpa_driver_nl80211_deinit()
3140 eloop_unregister_read_sock(drv->eapol_tx_sock); in wpa_driver_nl80211_deinit()
3141 if (drv->eapol_tx_sock >= 0) in wpa_driver_nl80211_deinit()
3142 close(drv->eapol_tx_sock); in wpa_driver_nl80211_deinit()
3147 if (linux_br_del_if(drv->global->ioctl_sock, bss->brname, in wpa_driver_nl80211_deinit()
3154 if (drv->rtnl_sk) in wpa_driver_nl80211_deinit()
3155 nl_socket_free(drv->rtnl_sk); in wpa_driver_nl80211_deinit()
3158 if (linux_set_iface_flags(drv->global->ioctl_sock, bss->brname, in wpa_driver_nl80211_deinit()
3163 if (linux_br_del(drv->global->ioctl_sock, bss->brname) < 0) in wpa_driver_nl80211_deinit()
3169 nl80211_remove_monitor_interface(drv); in wpa_driver_nl80211_deinit()
3171 if (is_ap_interface(drv->nlmode)) { in wpa_driver_nl80211_deinit()
3176 if (drv->eapol_sock >= 0) { in wpa_driver_nl80211_deinit()
3177 eloop_unregister_read_sock(drv->eapol_sock); in wpa_driver_nl80211_deinit()
3178 close(drv->eapol_sock); in wpa_driver_nl80211_deinit()
3181 if (drv->if_indices != drv->default_if_indices) in wpa_driver_nl80211_deinit()
3182 os_free(drv->if_indices); in wpa_driver_nl80211_deinit()
3184 if (drv->disabled_11b_rates) in wpa_driver_nl80211_deinit()
3185 nl80211_disable_11b_rates(drv, drv->ifindex, 0); in wpa_driver_nl80211_deinit()
3187 netlink_send_oper_ifla(drv->global->netlink, drv->ifindex, 0, in wpa_driver_nl80211_deinit()
3189 eloop_cancel_timeout(wpa_driver_nl80211_send_rfkill, drv, drv->ctx); in wpa_driver_nl80211_deinit()
3190 rfkill_deinit(drv->rfkill); in wpa_driver_nl80211_deinit()
3192 eloop_cancel_timeout(wpa_driver_nl80211_scan_timeout, drv, drv->ctx); in wpa_driver_nl80211_deinit()
3194 if (!drv->start_iface_up) in wpa_driver_nl80211_deinit()
3197 if (drv->addr_changed) { in wpa_driver_nl80211_deinit()
3198 if (linux_set_iface_flags(drv->global->ioctl_sock, bss->ifname, in wpa_driver_nl80211_deinit()
3203 if (linux_set_ifhwaddr(drv->global->ioctl_sock, bss->ifname, in wpa_driver_nl80211_deinit()
3204 drv->perm_addr) < 0) { in wpa_driver_nl80211_deinit()
3210 if (drv->nlmode != NL80211_IFTYPE_P2P_DEVICE) { in wpa_driver_nl80211_deinit()
3211 if (drv->start_mode_sta) in wpa_driver_nl80211_deinit()
3220 nl80211_destroy_bss(drv->first_bss); in wpa_driver_nl80211_deinit()
3222 os_free(drv->filter_ssids); in wpa_driver_nl80211_deinit()
3224 os_free(drv->auth_ie); in wpa_driver_nl80211_deinit()
3225 os_free(drv->auth_data); in wpa_driver_nl80211_deinit()
3227 if (drv->in_interface_list) in wpa_driver_nl80211_deinit()
3228 dl_list_del(&drv->list); in wpa_driver_nl80211_deinit()
3230 os_free(drv->extended_capa); in wpa_driver_nl80211_deinit()
3231 os_free(drv->extended_capa_mask); in wpa_driver_nl80211_deinit()
3232 for (i = 0; i < drv->num_iface_capa; i++) { in wpa_driver_nl80211_deinit()
3233 os_free(drv->iface_capa[i].ext_capa); in wpa_driver_nl80211_deinit()
3234 os_free(drv->iface_capa[i].ext_capa_mask); in wpa_driver_nl80211_deinit()
3236 os_free(drv->first_bss); in wpa_driver_nl80211_deinit()
3238 os_free(drv->pending_roam_data); in wpa_driver_nl80211_deinit()
3240 os_free(drv); in wpa_driver_nl80211_deinit()
3372 static int issue_key_mgmt_set_key(struct wpa_driver_nl80211_data *drv, in issue_key_mgmt_set_key() argument
3378 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_KEY_MGMT_OFFLOAD)) in issue_key_mgmt_set_key()
3381 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in issue_key_mgmt_set_key()
3390 ret = send_and_recv_cmd(drv, msg); in issue_key_mgmt_set_key()
3402 static int nl80211_set_pmk(struct wpa_driver_nl80211_data *drv, in nl80211_set_pmk() argument
3413 if (!addr && drv->associated) in nl80211_set_pmk()
3414 addr = drv->bssid; in nl80211_set_pmk()
3421 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_SET_PMK); in nl80211_set_pmk()
3430 ret = send_and_recv_cmd(drv, msg); in nl80211_set_pmk()
3443 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_set_key() local
3463 if (drv->nlmode == NL80211_IFTYPE_P2P_DEVICE) in wpa_driver_nl80211_set_key()
3480 (drv->capa.flags & WPA_DRIVER_FLAGS_KEY_MGMT_OFFLOAD)) { in wpa_driver_nl80211_set_key()
3483 ret = issue_key_mgmt_set_key(drv, key, key_len); in wpa_driver_nl80211_set_key()
3489 if (drv->capa.flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_8021X) in wpa_driver_nl80211_set_key()
3490 return nl80211_set_pmk(drv, key, key_len, addr); in wpa_driver_nl80211_set_key()
3505 msg = nl80211_ifindex_msg(drv, ifindex, 0, NL80211_CMD_SET_KEY); in wpa_driver_nl80211_set_key()
3515 msg = nl80211_ifindex_msg(drv, ifindex, 0, NL80211_CMD_DEL_KEY); in wpa_driver_nl80211_set_key()
3527 msg = nl80211_ifindex_msg(drv, ifindex, 0, NL80211_CMD_NEW_KEY); in wpa_driver_nl80211_set_key()
3592 if (vlan_id && (drv->capa.flags & WPA_DRIVER_FLAGS_VLAN_OFFLOAD)) { in wpa_driver_nl80211_set_key()
3604 ret = send_and_recv_cmd(drv, msg); in wpa_driver_nl80211_set_key()
3624 msg = nl80211_ifindex_msg(drv, ifindex, 0, NL80211_CMD_SET_KEY); in wpa_driver_nl80211_set_key()
3659 if (vlan_id && (drv->capa.flags & WPA_DRIVER_FLAGS_VLAN_OFFLOAD)) { in wpa_driver_nl80211_set_key()
3673 ret = send_and_recv_cmd(drv, msg); in wpa_driver_nl80211_set_key()
3779 int wpa_driver_nl80211_mlme(struct wpa_driver_nl80211_data *drv, in wpa_driver_nl80211_mlme() argument
3787 if (!(msg = nl80211_drv_msg(drv, 0, cmd)) || in wpa_driver_nl80211_mlme()
3796 ret = send_and_recv(drv->global, bss->nl_connect, msg, in wpa_driver_nl80211_mlme()
3799 wpa_dbg(drv->ctx, MSG_DEBUG, in wpa_driver_nl80211_mlme()
3807 static int wpa_driver_nl80211_disconnect(struct wpa_driver_nl80211_data *drv, in wpa_driver_nl80211_disconnect() argument
3814 nl80211_mark_disconnected(drv); in wpa_driver_nl80211_disconnect()
3816 ret = wpa_driver_nl80211_mlme(drv, NULL, NL80211_CMD_DISCONNECT, in wpa_driver_nl80211_disconnect()
3823 drv->ignore_next_local_disconnect = send_event_marker(drv); in wpa_driver_nl80211_disconnect()
3832 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_deauthenticate() local
3835 if (drv->nlmode == NL80211_IFTYPE_ADHOC) { in wpa_driver_nl80211_deauthenticate()
3836 nl80211_mark_disconnected(drv); in wpa_driver_nl80211_deauthenticate()
3837 return nl80211_leave_ibss(drv, 1); in wpa_driver_nl80211_deauthenticate()
3839 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_SME)) { in wpa_driver_nl80211_deauthenticate()
3840 return wpa_driver_nl80211_disconnect(drv, reason_code, bss); in wpa_driver_nl80211_deauthenticate()
3844 nl80211_mark_disconnected(drv); in wpa_driver_nl80211_deauthenticate()
3845 ret = wpa_driver_nl80211_mlme(drv, addr, NL80211_CMD_DEAUTHENTICATE, in wpa_driver_nl80211_deauthenticate()
3852 drv->ignore_next_local_deauth = send_event_marker(drv); in wpa_driver_nl80211_deauthenticate()
3858 static void nl80211_copy_auth_params(struct wpa_driver_nl80211_data *drv, in nl80211_copy_auth_params() argument
3863 drv->auth_freq = params->freq; in nl80211_copy_auth_params()
3864 drv->auth_alg = params->auth_alg; in nl80211_copy_auth_params()
3865 drv->auth_wep_tx_keyidx = params->wep_tx_keyidx; in nl80211_copy_auth_params()
3866 drv->auth_local_state_change = params->local_state_change; in nl80211_copy_auth_params()
3867 drv->auth_p2p = params->p2p; in nl80211_copy_auth_params()
3870 os_memcpy(drv->auth_bssid_, params->bssid, ETH_ALEN); in nl80211_copy_auth_params()
3872 os_memset(drv->auth_bssid_, 0, ETH_ALEN); in nl80211_copy_auth_params()
3875 os_memcpy(drv->auth_ssid, params->ssid, params->ssid_len); in nl80211_copy_auth_params()
3876 drv->auth_ssid_len = params->ssid_len; in nl80211_copy_auth_params()
3878 drv->auth_ssid_len = 0; in nl80211_copy_auth_params()
3881 os_free(drv->auth_ie); in nl80211_copy_auth_params()
3882 drv->auth_ie = NULL; in nl80211_copy_auth_params()
3883 drv->auth_ie_len = 0; in nl80211_copy_auth_params()
3885 drv->auth_ie = os_malloc(params->ie_len); in nl80211_copy_auth_params()
3886 if (drv->auth_ie) { in nl80211_copy_auth_params()
3887 os_memcpy(drv->auth_ie, params->ie, params->ie_len); in nl80211_copy_auth_params()
3888 drv->auth_ie_len = params->ie_len; in nl80211_copy_auth_params()
3893 drv->auth_mld = params->mld; in nl80211_copy_auth_params()
3894 drv->auth_mld_link_id = params->mld_link_id; in nl80211_copy_auth_params()
3895 os_memcpy(drv->auth_ap_mld_addr, params->ap_mld_addr, ETH_ALEN); in nl80211_copy_auth_params()
3897 drv->auth_mld = false; in nl80211_copy_auth_params()
3898 drv->auth_mld_link_id = -1; in nl80211_copy_auth_params()
3901 os_free(drv->auth_data); in nl80211_copy_auth_params()
3902 drv->auth_data = NULL; in nl80211_copy_auth_params()
3903 drv->auth_data_len = 0; in nl80211_copy_auth_params()
3905 drv->auth_data = os_memdup(params->auth_data, in nl80211_copy_auth_params()
3907 if (drv->auth_data) in nl80211_copy_auth_params()
3908 drv->auth_data_len = params->auth_data_len; in nl80211_copy_auth_params()
3914 os_memcpy(drv->auth_wep_key[i], params->wep_key[i], in nl80211_copy_auth_params()
3916 drv->auth_wep_key_len[i] = params->wep_key_len[i]; in nl80211_copy_auth_params()
3918 drv->auth_wep_key_len[i] = 0; in nl80211_copy_auth_params()
3925 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_unmask_11b_rates() local
3927 if (is_p2p_net_interface(drv->nlmode) || !drv->disabled_11b_rates) in nl80211_unmask_11b_rates()
3938 nl80211_disable_11b_rates(drv, drv->ifindex, 0); in nl80211_unmask_11b_rates()
3966 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_authenticate() local
3977 is_retry = drv->retry_auth; in wpa_driver_nl80211_authenticate()
3978 drv->retry_auth = 0; in wpa_driver_nl80211_authenticate()
3979 drv->ignore_deauth_event = 0; in wpa_driver_nl80211_authenticate()
3981 nl80211_mark_disconnected(drv); in wpa_driver_nl80211_authenticate()
3982 os_memset(drv->auth_bssid, 0, ETH_ALEN); in wpa_driver_nl80211_authenticate()
3984 os_memcpy(drv->auth_attempt_bssid, params->bssid, ETH_ALEN); in wpa_driver_nl80211_authenticate()
3986 os_memset(drv->auth_attempt_bssid, 0, ETH_ALEN); in wpa_driver_nl80211_authenticate()
3990 if (drv->nlmode != nlmode && in wpa_driver_nl80211_authenticate()
3996 drv->ifindex); in wpa_driver_nl80211_authenticate()
3998 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_AUTHENTICATE); in wpa_driver_nl80211_authenticate()
4075 ret = send_and_recv_cmd(drv, msg); in wpa_driver_nl80211_authenticate()
4078 wpa_dbg(drv->ctx, MSG_DEBUG, in wpa_driver_nl80211_authenticate()
4091 drv->ignore_deauth_event = 1; in wpa_driver_nl80211_authenticate()
4123 nl80211_copy_auth_params(drv, params); in wpa_driver_nl80211_authenticate()
4124 drv->scan_for_auth = 1; in wpa_driver_nl80211_authenticate()
4135 os_memcpy(event.timeout_event.addr, drv->auth_bssid_, in wpa_driver_nl80211_authenticate()
4137 wpa_supplicant_event(drv->ctx, EVENT_AUTH_TIMED_OUT, in wpa_driver_nl80211_authenticate()
4151 int wpa_driver_nl80211_authenticate_retry(struct wpa_driver_nl80211_data *drv) in wpa_driver_nl80211_authenticate_retry() argument
4154 struct i802_bss *bss = drv->first_bss; in wpa_driver_nl80211_authenticate_retry()
4161 params.freq = drv->auth_freq; in wpa_driver_nl80211_authenticate_retry()
4162 params.auth_alg = drv->auth_alg; in wpa_driver_nl80211_authenticate_retry()
4163 params.wep_tx_keyidx = drv->auth_wep_tx_keyidx; in wpa_driver_nl80211_authenticate_retry()
4164 params.local_state_change = drv->auth_local_state_change; in wpa_driver_nl80211_authenticate_retry()
4165 params.p2p = drv->auth_p2p; in wpa_driver_nl80211_authenticate_retry()
4167 if (!is_zero_ether_addr(drv->auth_bssid_)) in wpa_driver_nl80211_authenticate_retry()
4168 params.bssid = drv->auth_bssid_; in wpa_driver_nl80211_authenticate_retry()
4170 if (drv->auth_ssid_len) { in wpa_driver_nl80211_authenticate_retry()
4171 params.ssid = drv->auth_ssid; in wpa_driver_nl80211_authenticate_retry()
4172 params.ssid_len = drv->auth_ssid_len; in wpa_driver_nl80211_authenticate_retry()
4175 params.ie = drv->auth_ie; in wpa_driver_nl80211_authenticate_retry()
4176 params.ie_len = drv->auth_ie_len; in wpa_driver_nl80211_authenticate_retry()
4177 params.auth_data = drv->auth_data; in wpa_driver_nl80211_authenticate_retry()
4178 params.auth_data_len = drv->auth_data_len; in wpa_driver_nl80211_authenticate_retry()
4179 params.mld = drv->auth_mld; in wpa_driver_nl80211_authenticate_retry()
4180 params.mld_link_id = drv->auth_mld_link_id; in wpa_driver_nl80211_authenticate_retry()
4181 if (drv->auth_mld) { in wpa_driver_nl80211_authenticate_retry()
4182 os_memcpy(ap_mld_addr, drv->auth_ap_mld_addr, ETH_ALEN); in wpa_driver_nl80211_authenticate_retry()
4187 if (drv->auth_wep_key_len[i]) { in wpa_driver_nl80211_authenticate_retry()
4188 params.wep_key[i] = drv->auth_wep_key[i]; in wpa_driver_nl80211_authenticate_retry()
4189 params.wep_key_len[i] = drv->auth_wep_key_len[i]; in wpa_driver_nl80211_authenticate_retry()
4193 drv->retry_auth = 1; in wpa_driver_nl80211_authenticate_retry()
4250 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_send_mlme() local
4265 no_encrypt, fc, fc2str(fc), drv->nlmode); in wpa_driver_nl80211_send_mlme()
4267 if ((is_sta_interface(drv->nlmode) || in wpa_driver_nl80211_send_mlme()
4268 drv->nlmode == NL80211_IFTYPE_P2P_DEVICE) && in wpa_driver_nl80211_send_mlme()
4278 drv->last_mgmt_freq); in wpa_driver_nl80211_send_mlme()
4279 freq = drv->last_mgmt_freq; in wpa_driver_nl80211_send_mlme()
4288 if (drv->device_ap_sme && is_ap_interface(drv->nlmode)) { in wpa_driver_nl80211_send_mlme()
4315 if (is_sta_interface(drv->nlmode) && in wpa_driver_nl80211_send_mlme()
4319 (drv->capa.flags & WPA_DRIVER_FLAGS_SAE) && in wpa_driver_nl80211_send_mlme()
4320 !(drv->capa.flags & WPA_DRIVER_FLAGS_SME)) { in wpa_driver_nl80211_send_mlme()
4321 freq = nl80211_get_assoc_freq(drv); in wpa_driver_nl80211_send_mlme()
4338 if (is_sta_interface(drv->nlmode) && in wpa_driver_nl80211_send_mlme()
4350 if (freq == 0 && drv->nlmode == NL80211_IFTYPE_ADHOC) { in wpa_driver_nl80211_send_mlme()
4351 freq = nl80211_get_assoc_freq(drv); in wpa_driver_nl80211_send_mlme()
4362 if (drv->use_monitor && is_ap_interface(drv->nlmode)) { in wpa_driver_nl80211_send_mlme()
4366 return nl80211_send_monitor(drv, data, data_len, encrypt, in wpa_driver_nl80211_send_mlme()
4376 if (no_encrypt && !encrypt && !drv->use_monitor) { in wpa_driver_nl80211_send_mlme()
4379 if (nl80211_create_monitor_interface(drv) < 0) in wpa_driver_nl80211_send_mlme()
4381 res = nl80211_send_monitor(drv, data, data_len, encrypt, in wpa_driver_nl80211_send_mlme()
4383 nl80211_remove_monitor_interface(drv); in wpa_driver_nl80211_send_mlme()
4393 drv->send_frame_link_id = link_id; in wpa_driver_nl80211_send_mlme()
4419 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_bss() local
4440 return send_and_recv_cmd(drv, msg); in nl80211_set_bss()
4448 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_set_acl() local
4455 if (!(drv->capa.max_acl_mac_addrs)) in wpa_driver_nl80211_set_acl()
4458 if (params->num_mac_acl > drv->capa.max_acl_mac_addrs) in wpa_driver_nl80211_set_acl()
4486 if (!(msg = nl80211_ifindex_msg_build(drv, nlmsg_alloc_size(nlmsg_sz), in wpa_driver_nl80211_set_acl()
4487 drv->ifindex, 0, in wpa_driver_nl80211_set_acl()
4499 ret = send_and_recv_cmd(drv, msg); in wpa_driver_nl80211_set_acl()
4537 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_mesh_config() local
4541 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_SET_MESH_CONFIG); in nl80211_set_mesh_config()
4551 ret = send_and_recv_cmd(drv, msg); in nl80211_set_mesh_config()
4682 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_multicast_to_unicast() local
4697 ret = send_and_recv_cmd(drv, msg); in nl80211_set_multicast_to_unicast()
4755 if (!bss->drv->fils_discovery) { in nl80211_fils_discovery()
4787 if (!bss->drv->unsol_bcast_probe_resp) { in nl80211_unsol_bcast_probe_resp()
4890 static void qca_set_allowed_ap_freqs(struct wpa_driver_nl80211_data *drv, in qca_set_allowed_ap_freqs() argument
4898 if (!drv->set_wifi_conf_vendor_cmd_avail || !drv->qca_ap_allowed_freqs) in qca_set_allowed_ap_freqs()
4903 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in qca_set_allowed_ap_freqs()
4927 ret = send_and_recv_cmd(drv, msg); in qca_set_allowed_ap_freqs()
5050 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_set_ap() local
5084 else if (!drv->device_ap_sme && !drv->use_monitor && in wpa_driver_nl80211_set_ap()
5105 nl80211_put_beacon_rate(msg, drv->capa.flags, drv->capa.flags2, in wpa_driver_nl80211_set_ap()
5183 if ((unsigned int) num_suites > drv->capa.max_num_akms) in wpa_driver_nl80211_set_ap()
5186 num_suites, drv->capa.max_num_akms); in wpa_driver_nl80211_set_ap()
5193 (drv->capa.flags2 & WPA_DRIVER_FLAGS2_4WAY_HANDSHAKE_AP_PSK) && in wpa_driver_nl80211_set_ap()
5199 (drv->capa.flags2 & WPA_DRIVER_FLAGS2_SAE_OFFLOAD_AP) && in wpa_driver_nl80211_set_ap()
5205 if (nl80211_put_control_port(drv, msg) < 0) in wpa_driver_nl80211_set_ap()
5214 if (drv->device_ap_sme) { in wpa_driver_nl80211_set_ap()
5230 if (nl80211_attr_supported(drv, in wpa_driver_nl80211_set_ap()
5277 if (drv->capa.flags & WPA_DRIVER_FLAGS_INACTIVITY_TIMER) { in wpa_driver_nl80211_set_ap()
5287 if (drv->p2p_go_ctwindow_supported) { in wpa_driver_nl80211_set_ap()
5309 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_FTM_RESPONDER)) { in wpa_driver_nl80211_set_ap()
5367 nl80211_attr_supported(drv, NL80211_ATTR_HE_BSS_COLOR)) { in wpa_driver_nl80211_set_ap()
5418 qca_set_allowed_ap_freqs(drv, params->allowed_freqs, in wpa_driver_nl80211_set_ap()
5426 ret = send_and_recv(drv->global, bss->nl_connect, msg, NULL, NULL, NULL, in wpa_driver_nl80211_set_ap()
5467 if (is_mesh_interface(drv->nlmode) && params->ht_opmode != -1) { in wpa_driver_nl80211_set_ap()
5487 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_channel() local
5497 msg = nl80211_drv_msg(drv, 0, set_chan ? NL80211_CMD_SET_CHANNEL : in nl80211_set_channel()
5514 ret = send_and_recv_cmd(drv, msg); in nl80211_set_channel()
5579 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_sta_add() local
5587 !(drv->capa.flags & WPA_DRIVER_FLAGS_TDLS_SUPPORT)) in wpa_driver_nl80211_sta_add()
5617 (params->set && FULL_AP_CLIENT_STATE_SUPP(drv->capa.flags) && in wpa_driver_nl80211_sta_add()
5683 if (is_ap_interface(drv->nlmode) && in wpa_driver_nl80211_sta_add()
5717 } else if (FULL_AP_CLIENT_STATE_SUPP(drv->capa.flags) && in wpa_driver_nl80211_sta_add()
5771 if (!is_mesh_interface(drv->nlmode)) { in wpa_driver_nl80211_sta_add()
5772 if (!FULL_AP_CLIENT_STATE_SUPP(drv->capa.flags)) { in wpa_driver_nl80211_sta_add()
5808 FULL_AP_CLIENT_STATE_SUPP(drv->capa.flags)) && in wpa_driver_nl80211_sta_add()
5855 ret = send_and_recv_cmd(drv, msg); in wpa_driver_nl80211_sta_add()
5870 struct wpa_driver_nl80211_data *drv = bss->drv; in rtnl_neigh_delete_fdb_entry() local
5885 nl_send_auto_complete(drv->rtnl_sk, msg) < 0) in rtnl_neigh_delete_fdb_entry()
5888 err = nl_wait_for_ack(drv->rtnl_sk); in rtnl_neigh_delete_fdb_entry()
5906 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_sta_remove() local
5924 ret = send_and_recv_cmd(drv, msg); in wpa_driver_nl80211_sta_remove()
5929 if (drv->rtnl_sk) in wpa_driver_nl80211_sta_remove()
5938 void nl80211_remove_iface(struct wpa_driver_nl80211_data *drv, int ifidx) in nl80211_remove_iface() argument
5946 dl_list_for_each(drv2, &drv->global->interfaces, in nl80211_remove_iface()
5954 msg = nl80211_ifindex_msg(drv, ifidx, 0, NL80211_CMD_DEL_INTERFACE); in nl80211_remove_iface()
5955 if (send_and_recv_cmd(drv, msg) == 0) in nl80211_remove_iface()
5994 static int nl80211_create_iface_once(struct wpa_driver_nl80211_data *drv, in nl80211_create_iface_once() argument
6008 msg = nl80211_cmd_msg(drv->first_bss, 0, NL80211_CMD_NEW_INTERFACE); in nl80211_create_iface_once()
6039 ret = send_and_recv_resp(drv, msg, handler, arg); in nl80211_create_iface_once()
6063 if (drv->hostapd || in nl80211_create_iface_once()
6068 add_ifidx(drv, ifidx, IFIDX_ANY); in nl80211_create_iface_once()
6072 linux_set_ifhwaddr(drv->global->ioctl_sock, ifname, addr)) { in nl80211_create_iface_once()
6073 nl80211_remove_iface(drv, ifidx); in nl80211_create_iface_once()
6081 int nl80211_create_iface(struct wpa_driver_nl80211_data *drv, in nl80211_create_iface() argument
6089 ret = nl80211_create_iface_once(drv, ifname, iftype, addr, wds, handler, in nl80211_create_iface()
6098 linux_set_ifhwaddr(drv->global->ioctl_sock, ifname, in nl80211_create_iface()
6100 (linux_set_iface_flags(drv->global->ioctl_sock, in nl80211_create_iface()
6102 linux_set_ifhwaddr(drv->global->ioctl_sock, ifname, in nl80211_create_iface()
6104 linux_set_iface_flags(drv->global->ioctl_sock, in nl80211_create_iface()
6112 nl80211_remove_iface(drv, if_nametoindex(ifname)); in nl80211_create_iface()
6115 ret = nl80211_create_iface_once(drv, ifname, iftype, addr, in nl80211_create_iface()
6123 nl80211_disable_11b_rates(drv, ret, 1); in nl80211_create_iface()
6132 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_setup_ap() local
6135 bss->ifname, drv->device_ap_sme, drv->use_monitor); in nl80211_setup_ap()
6142 if (!drv->device_ap_sme) in nl80211_setup_ap()
6145 if (!drv->device_ap_sme && !drv->use_monitor) in nl80211_setup_ap()
6149 if (drv->device_ap_sme && !drv->use_monitor) in nl80211_setup_ap()
6154 if (!drv->device_ap_sme && drv->use_monitor && in nl80211_setup_ap()
6155 nl80211_create_monitor_interface(drv) && in nl80211_setup_ap()
6156 !drv->device_ap_sme) in nl80211_setup_ap()
6159 if (drv->device_ap_sme && in nl80211_setup_ap()
6172 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_teardown_ap() local
6175 bss->ifname, drv->device_ap_sme, drv->use_monitor); in nl80211_teardown_ap()
6176 if (drv->device_ap_sme) { in nl80211_teardown_ap()
6178 if (!drv->use_monitor) in nl80211_teardown_ap()
6180 } else if (drv->use_monitor) in nl80211_teardown_ap()
6181 nl80211_remove_monitor_interface(drv); in nl80211_teardown_ap()
6221 ret = send_and_recv(bss->drv->global, bss->drv->global->nl, msg, in nl80211_tx_control_port()
6228 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_tx_control_port() local
6233 drv->eapol_tx_cookie = cookie; in nl80211_tx_control_port()
6234 drv->eapol_tx_link_id = link_id; in nl80211_tx_control_port()
6248 if (bss->drv->eapol_tx_sock < 0) { in nl80211_send_eapol_data()
6259 ret = sendto(bss->drv->eapol_tx_sock, data, data_len, 0, in nl80211_send_eapol_data()
6277 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_hapd_send_eapol() local
6286 if (drv->control_port_ap && in wpa_driver_nl80211_hapd_send_eapol()
6287 (drv->capa.flags & WPA_DRIVER_FLAGS_CONTROL_PORT)) in wpa_driver_nl80211_hapd_send_eapol()
6292 if (drv->device_ap_sme || !drv->use_monitor) in wpa_driver_nl80211_hapd_send_eapol()
6332 res = nl80211_send_monitor(drv, hdr, len, encrypt, 0); in wpa_driver_nl80211_hapd_send_eapol()
6389 return send_and_recv_cmd(bss->drv, msg); in wpa_driver_nl80211_sta_set_flags()
6412 ret = send_and_recv_cmd(bss->drv, msg); in driver_nl80211_sta_set_airtime_weight()
6425 static int wpa_driver_nl80211_ap(struct wpa_driver_nl80211_data *drv, in wpa_driver_nl80211_ap() argument
6437 old_mode = drv->nlmode; in wpa_driver_nl80211_ap()
6438 if (wpa_driver_nl80211_set_mode(drv->first_bss, nlmode)) { in wpa_driver_nl80211_ap()
6439 nl80211_remove_monitor_interface(drv); in wpa_driver_nl80211_ap()
6444 nl80211_set_channel(drv->first_bss, ¶ms->freq, 0)) { in wpa_driver_nl80211_ap()
6446 wpa_driver_nl80211_set_mode(drv->first_bss, old_mode); in wpa_driver_nl80211_ap()
6447 nl80211_remove_monitor_interface(drv); in wpa_driver_nl80211_ap()
6455 static int nl80211_leave_ibss(struct wpa_driver_nl80211_data *drv, in nl80211_leave_ibss() argument
6461 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_LEAVE_IBSS); in nl80211_leave_ibss()
6462 ret = send_and_recv(drv->global, drv->first_bss->nl_connect, msg, NULL, in nl80211_leave_ibss()
6473 wpa_driver_nl80211_set_mode(drv->first_bss, in nl80211_leave_ibss()
6539 static int wpa_driver_nl80211_ibss(struct wpa_driver_nl80211_data *drv, in wpa_driver_nl80211_ibss() argument
6546 wpa_printf(MSG_DEBUG, "nl80211: Join IBSS (ifindex=%d)", drv->ifindex); in wpa_driver_nl80211_ibss()
6548 if (wpa_driver_nl80211_set_mode_ibss(drv->first_bss, ¶ms->freq)) { in wpa_driver_nl80211_ibss()
6555 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_JOIN_IBSS)) || in wpa_driver_nl80211_ibss()
6556 params->ssid == NULL || params->ssid_len > sizeof(drv->ssid)) in wpa_driver_nl80211_ibss()
6563 os_memcpy(drv->ssid, params->ssid, params->ssid_len); in wpa_driver_nl80211_ibss()
6564 drv->ssid_len = params->ssid_len; in wpa_driver_nl80211_ibss()
6593 if (nl80211_put_control_port(drv, msg)) in wpa_driver_nl80211_ibss()
6612 ret = send_and_recv(drv->global, drv->first_bss->nl_connect, msg, NULL, in wpa_driver_nl80211_ibss()
6622 nl80211_leave_ibss(drv, 0); in wpa_driver_nl80211_ibss()
6637 static int nl80211_put_fils_connect_params(struct wpa_driver_nl80211_data *drv, in nl80211_put_fils_connect_params() argument
6689 static int nl80211_connect_common(struct wpa_driver_nl80211_data *drv, in nl80211_connect_common() argument
6732 os_memcpy(drv->sta_mlo_info.links[link_id].bssid, in nl80211_connect_common()
6740 os_memcpy(drv->sta_mlo_info.ap_mld_addr, in nl80211_connect_common()
6742 drv->sta_mlo_info.assoc_link_id = mld_params->assoc_link_id; in nl80211_connect_common()
6743 drv->sta_mlo_info.req_links = mld_params->valid_links; in nl80211_connect_common()
6769 drv->assoc_freq = params->freq.freq; in nl80211_connect_common()
6771 drv->assoc_freq = 0; in nl80211_connect_common()
6806 if (params->ssid_len > sizeof(drv->ssid)) in nl80211_connect_common()
6808 os_memcpy(drv->ssid, params->ssid, params->ssid_len); in nl80211_connect_common()
6809 drv->ssid_len = params->ssid_len; in nl80211_connect_common()
6827 if (nl80211_attr_supported(drv, in nl80211_connect_common()
6849 !(drv->capa.enc & WPA_DRIVER_CAPA_ENC_GTK_NOT_USED)) { in nl80211_connect_common()
6891 if (drv->capa.max_num_akms <= in nl80211_connect_common()
6895 drv->capa.max_num_akms, in nl80211_connect_common()
6900 mgmt = os_malloc(sizeof(u32) * drv->capa.max_num_akms); in nl80211_connect_common()
6976 if (drv->capa.max_num_akms > 1) { in nl80211_connect_common()
6979 drv->capa.max_num_akms - 1); in nl80211_connect_common()
6995 (drv->capa.flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_8021X)) { in nl80211_connect_common()
7003 (drv->capa.flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_PSK)) { in nl80211_connect_common()
7009 if (nl80211_put_control_port(drv, msg)) in nl80211_connect_common()
7020 u32 drv_rrm_flags = drv->capa.rrm_flags; in nl80211_connect_common()
7041 drv->connect_reassoc = 0; in nl80211_connect_common()
7048 drv->connect_reassoc = 1; in nl80211_connect_common()
7052 nl80211_put_fils_connect_params(drv, params, msg) != 0) in nl80211_connect_common()
7057 (!(drv->capa.flags & WPA_DRIVER_FLAGS_SME)) && in nl80211_connect_common()
7061 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_SME) && in nl80211_connect_common()
7070 struct wpa_driver_nl80211_data *drv, in wpa_driver_nl80211_try_connect() argument
7084 ret = issue_key_mgmt_set_key(drv, params->psk, 32); in wpa_driver_nl80211_try_connect()
7090 wpa_printf(MSG_DEBUG, "nl80211: Connect (ifindex=%d)", drv->ifindex); in wpa_driver_nl80211_try_connect()
7091 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_CONNECT); in wpa_driver_nl80211_try_connect()
7095 ret = nl80211_connect_common(drv, params, msg); in wpa_driver_nl80211_try_connect()
7104 (drv->capa.flags & WPA_DRIVER_FLAGS_MFP_OPTIONAL) && in wpa_driver_nl80211_try_connect()
7116 (drv->capa.flags2 & WPA_DRIVER_FLAGS2_SAE_OFFLOAD_STA)) { in wpa_driver_nl80211_try_connect()
7168 ret = send_and_recv(drv->global, bss->nl_connect, msg, NULL, NULL, NULL, in wpa_driver_nl80211_try_connect()
7176 drv->roam_indication_done = false; in wpa_driver_nl80211_try_connect()
7191 struct wpa_driver_nl80211_data *drv, in wpa_driver_nl80211_connect() argument
7199 os_memcpy(drv->auth_attempt_bssid, params->bssid, ETH_ALEN); in wpa_driver_nl80211_connect()
7201 os_memset(drv->auth_attempt_bssid, 0, ETH_ALEN); in wpa_driver_nl80211_connect()
7203 ret = wpa_driver_nl80211_try_connect(drv, params, bss); in wpa_driver_nl80211_connect()
7214 drv, WLAN_REASON_PREV_AUTH_NOT_VALID, bss)) in wpa_driver_nl80211_connect()
7216 ret = wpa_driver_nl80211_try_connect(drv, params, bss); in wpa_driver_nl80211_connect()
7226 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_associate() local
7234 return wpa_driver_nl80211_ap(drv, params); in wpa_driver_nl80211_associate()
7237 return wpa_driver_nl80211_ibss(drv, params); in wpa_driver_nl80211_associate()
7239 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_SME)) { in wpa_driver_nl80211_associate()
7246 return wpa_driver_nl80211_connect(drv, params, bss); in wpa_driver_nl80211_associate()
7249 nl80211_mark_disconnected(drv); in wpa_driver_nl80211_associate()
7252 drv->ifindex); in wpa_driver_nl80211_associate()
7253 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_ASSOCIATE); in wpa_driver_nl80211_associate()
7257 ret = nl80211_connect_common(drv, params, msg); in wpa_driver_nl80211_associate()
7284 ret = send_and_recv(drv->global, drv->first_bss->nl_connect, in wpa_driver_nl80211_associate()
7299 wpa_dbg(drv->ctx, MSG_DEBUG, in wpa_driver_nl80211_associate()
7302 nl80211_dump_scan(drv); in wpa_driver_nl80211_associate()
7328 static int nl80211_set_mode(struct wpa_driver_nl80211_data *drv, in nl80211_set_mode() argument
7337 msg = nl80211_cmd_msg(drv->first_bss, 0, NL80211_CMD_SET_INTERFACE); in nl80211_set_mode()
7341 ret = send_and_recv_cmd(drv, msg); in nl80211_set_mode()
7358 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_set_mode_impl() local
7361 int was_ap = is_ap_interface(drv->nlmode); in wpa_driver_nl80211_set_mode_impl()
7368 mode_switch_res = nl80211_set_mode(drv, drv->ifindex, nlmode); in wpa_driver_nl80211_set_mode_impl()
7373 drv->nlmode = nlmode; in wpa_driver_nl80211_set_mode_impl()
7381 if (nlmode == drv->nlmode) { in wpa_driver_nl80211_set_mode_impl()
7423 if (linux_br_del_if(drv->global->ioctl_sock, in wpa_driver_nl80211_set_mode_impl()
7432 mode_switch_res = nl80211_set_mode(drv, drv->ifindex, nlmode); in wpa_driver_nl80211_set_mode_impl()
7446 drv->nlmode = nlmode; in wpa_driver_nl80211_set_mode_impl()
7447 drv->ignore_if_down_event = 1; in wpa_driver_nl80211_set_mode_impl()
7451 res = linux_set_iface_flags(drv->global->ioctl_sock, bss->ifname, 1); in wpa_driver_nl80211_set_mode_impl()
7461 "from %d failed", nlmode, drv->nlmode); in wpa_driver_nl80211_set_mode_impl()
7469 nl80211_disable_11b_rates(drv, drv->ifindex, 1); in wpa_driver_nl80211_set_mode_impl()
7470 } else if (drv->disabled_11b_rates) { in wpa_driver_nl80211_set_mode_impl()
7474 nl80211_disable_11b_rates(drv, drv->ifindex, 0); in wpa_driver_nl80211_set_mode_impl()
7505 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_restore_ap_mode() local
7506 int was_ap = is_ap_interface(drv->nlmode); in nl80211_restore_ap_mode()
7508 wpa_driver_nl80211_set_mode(bss, drv->ap_scan_as_station); in nl80211_restore_ap_mode()
7509 if (!was_ap && is_ap_interface(drv->ap_scan_as_station) && in nl80211_restore_ap_mode()
7515 if (linux_br_add_if(drv->global->ioctl_sock, bss->brname, in nl80211_restore_ap_mode()
7522 drv->ap_scan_as_station = NL80211_IFTYPE_UNSPECIFIED; in nl80211_restore_ap_mode()
7545 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_get_capa() local
7547 if (!drv->has_capability) in wpa_driver_nl80211_get_capa()
7549 os_memcpy(capa, &drv->capa, sizeof(*capa)); in wpa_driver_nl80211_get_capa()
7550 if (drv->extended_capa && drv->extended_capa_mask) { in wpa_driver_nl80211_get_capa()
7551 capa->extended_capa = drv->extended_capa; in wpa_driver_nl80211_get_capa()
7552 capa->extended_capa_mask = drv->extended_capa_mask; in wpa_driver_nl80211_get_capa()
7553 capa->extended_capa_len = drv->extended_capa_len; in wpa_driver_nl80211_get_capa()
7563 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_set_operstate() local
7566 bss->ifname, drv->operstate, state, in wpa_driver_nl80211_set_operstate()
7568 drv->operstate = state; in wpa_driver_nl80211_set_operstate()
7569 return netlink_send_oper_ifla(drv->global->netlink, drv->ifindex, -1, in wpa_driver_nl80211_set_operstate()
7577 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_set_supp_port() local
7581 const u8 *connected_addr = drv->sta_mlo_info.valid_links ? in wpa_driver_nl80211_set_supp_port()
7582 drv->sta_mlo_info.ap_mld_addr : drv->bssid; in wpa_driver_nl80211_set_supp_port()
7584 if (!drv->associated && is_zero_ether_addr(connected_addr) && in wpa_driver_nl80211_set_supp_port()
7605 ret = send_and_recv_cmd(drv, msg); in wpa_driver_nl80211_set_supp_port()
7656 struct wpa_driver_nl80211_data *drv = bss->drv; in i802_get_seqnum() local
7660 msg = nl80211_ifindex_msg(drv, if_nametoindex(iface), 0, in i802_get_seqnum()
7672 res = send_and_recv_resp(drv, msg, get_key_handler, seq); in i802_get_seqnum()
7686 struct wpa_driver_nl80211_data *drv = bss->drv; in i802_set_rts() local
7696 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_SET_WIPHY)) || in i802_set_rts()
7702 ret = send_and_recv_cmd(drv, msg); in i802_set_rts()
7714 struct wpa_driver_nl80211_data *drv = bss->drv; in i802_set_frag() local
7724 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_SET_WIPHY)) || in i802_set_frag()
7730 ret = send_and_recv_cmd(drv, msg); in i802_set_frag()
7761 res = send_and_recv_cmd(bss->drv, msg); in i802_flush()
8080 int nl80211_get_link_signal(struct wpa_driver_nl80211_data *drv, in nl80211_get_link_signal() argument
8089 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_GET_STATION)) || in nl80211_get_link_signal()
8095 return send_and_recv_resp(drv, msg, get_sta_handler, data); in nl80211_get_link_signal()
8111 return send_and_recv_resp(bss->drv, msg, get_sta_handler, data); in i802_read_sta_data()
8120 struct wpa_driver_nl80211_data *drv = bss->drv; in i802_set_tx_queue_params() local
8173 res = send_and_recv_cmd(drv, msg); in i802_set_tx_queue_params()
8189 struct wpa_driver_nl80211_data *drv = bss->drv; in i802_set_sta_vlan() local
8199 (vlan_id && (drv->capa.flags & WPA_DRIVER_FLAGS_VLAN_OFFLOAD) && in i802_set_sta_vlan()
8208 ret = send_and_recv_cmd(drv, msg); in i802_set_sta_vlan()
8248 struct wpa_driver_nl80211_data *drv = bss->drv; in i802_sta_deauth() local
8260 if (is_mesh_interface(drv->nlmode)) in i802_sta_deauth()
8263 if (drv->device_ap_sme) in i802_sta_deauth()
8284 struct wpa_driver_nl80211_data *drv = bss->drv; in i802_sta_disassoc() local
8287 if (is_mesh_interface(drv->nlmode)) in i802_sta_disassoc()
8290 if (drv->device_ap_sme) in i802_sta_disassoc()
8307 static void dump_ifidx(struct wpa_driver_nl80211_data *drv) in dump_ifidx() argument
8315 for (i = 0; i < drv->num_if_indices; i++) { in dump_ifidx()
8316 if (!drv->if_indices[i].ifindex) in dump_ifidx()
8319 drv->if_indices[i].ifindex, in dump_ifidx()
8320 drv->if_indices[i].reason); in dump_ifidx()
8328 drv->num_if_indices, buf); in dump_ifidx()
8332 static void add_ifidx(struct wpa_driver_nl80211_data *drv, int ifidx, in add_ifidx() argument
8341 if (have_ifidx(drv, ifidx, ifidx_reason)) { in add_ifidx()
8346 for (i = 0; i < drv->num_if_indices; i++) { in add_ifidx()
8347 if (drv->if_indices[i].ifindex == 0) { in add_ifidx()
8348 drv->if_indices[i].ifindex = ifidx; in add_ifidx()
8349 drv->if_indices[i].reason = ifidx_reason; in add_ifidx()
8350 dump_ifidx(drv); in add_ifidx()
8355 if (drv->if_indices != drv->default_if_indices) in add_ifidx()
8356 old = drv->if_indices; in add_ifidx()
8360 drv->if_indices = os_realloc_array(old, drv->num_if_indices + 1, in add_ifidx()
8362 if (!drv->if_indices) { in add_ifidx()
8364 drv->if_indices = drv->default_if_indices; in add_ifidx()
8366 drv->if_indices = old; in add_ifidx()
8373 os_memcpy(drv->if_indices, drv->default_if_indices, in add_ifidx()
8374 sizeof(drv->default_if_indices)); in add_ifidx()
8375 drv->if_indices[drv->num_if_indices].ifindex = ifidx; in add_ifidx()
8376 drv->if_indices[drv->num_if_indices].reason = ifidx_reason; in add_ifidx()
8377 drv->num_if_indices++; in add_ifidx()
8378 dump_ifidx(drv); in add_ifidx()
8382 static void del_ifidx(struct wpa_driver_nl80211_data *drv, int ifidx, in del_ifidx() argument
8387 for (i = 0; i < drv->num_if_indices; i++) { in del_ifidx()
8388 if ((drv->if_indices[i].ifindex == ifidx || in del_ifidx()
8390 (drv->if_indices[i].reason == ifidx_reason || in del_ifidx()
8392 drv->if_indices[i].ifindex = 0; in del_ifidx()
8393 drv->if_indices[i].reason = 0; in del_ifidx()
8397 dump_ifidx(drv); in del_ifidx()
8401 static int have_ifidx(struct wpa_driver_nl80211_data *drv, int ifidx, in have_ifidx() argument
8406 for (i = 0; i < drv->num_if_indices; i++) in have_ifidx()
8407 if (drv->if_indices[i].ifindex == ifidx && in have_ifidx()
8408 (drv->if_indices[i].reason == ifidx_reason || in have_ifidx()
8420 struct wpa_driver_nl80211_data *drv = bss->drv; in i802_set_wds_sta() local
8439 if (nl80211_create_iface(drv, name, in i802_set_wds_sta()
8445 linux_br_add_if(drv->global->ioctl_sock, in i802_set_wds_sta()
8457 if (linux_set_iface_flags(drv->global->ioctl_sock, name, 1)) { in i802_set_wds_sta()
8465 linux_br_del_if(drv->global->ioctl_sock, bridge_ifname, in i802_set_wds_sta()
8473 nl80211_remove_iface(drv, if_nametoindex(name)); in i802_set_wds_sta()
8487 struct wpa_driver_nl80211_data *drv = eloop_ctx; in handle_eapol() local
8501 if (have_ifidx(drv, lladdr.sll_ifindex, IFIDX_ANY)) in handle_eapol()
8502 drv_event_eapol_rx(drv->ctx, lladdr.sll_addr, buf, len); in handle_eapol()
8506 static int i802_check_bridge(struct wpa_driver_nl80211_data *drv, in i802_check_bridge() argument
8520 if (linux_br_add(drv->global->ioctl_sock, brname) < 0) { in i802_check_bridge()
8528 add_ifidx(drv, br_ifindex, drv->ifindex); in i802_check_bridge()
8540 if (linux_br_del_if(drv->global->ioctl_sock, in_br, ifname) < in i802_check_bridge()
8552 if (linux_br_add_if(drv->global->ioctl_sock, brname, ifname) < 0) { in i802_check_bridge()
8571 struct wpa_driver_nl80211_data *drv; in i802_init() local
8584 drv = bss->drv; in i802_init()
8596 add_ifidx(drv, if_nametoindex(master_ifname), drv->ifindex); in i802_init()
8615 add_ifidx(drv, ifindex, drv->ifindex); in i802_init()
8622 add_ifidx(drv, drv->ifindex, IFIDX_ANY); in i802_init()
8625 if (i802_check_bridge(drv, bss, params->bridge[0], in i802_init()
8634 add_ifidx(drv, br_ifindex, drv->ifindex); in i802_init()
8639 drv->rtnl_sk = nl_socket_alloc(); in i802_init()
8640 if (drv->rtnl_sk == NULL) { in i802_init()
8645 err = nl_connect(drv->rtnl_sk, NETLINK_ROUTE); in i802_init()
8653 if (drv->capa.flags2 & WPA_DRIVER_FLAGS2_CONTROL_PORT_RX) { in i802_init()
8659 drv->eapol_sock = socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_PAE)); in i802_init()
8660 if (drv->eapol_sock < 0) { in i802_init()
8666 if (eloop_register_read_sock(drv->eapol_sock, handle_eapol, drv, NULL)) in i802_init()
8673 if (linux_get_ifhwaddr(drv->global->ioctl_sock, bss->ifname, in i802_init()
8676 os_memcpy(drv->perm_addr, params->own_addr, ETH_ALEN); in i802_init()
8722 struct wpa_driver_nl80211_data *drv; in nl80211_addr_in_use() local
8723 dl_list_for_each(drv, &global->interfaces, in nl80211_addr_in_use()
8725 if (ether_addr_equal(addr, drv->first_bss->addr)) in nl80211_addr_in_use()
8732 static int nl80211_vif_addr(struct wpa_driver_nl80211_data *drv, u8 *new_addr) in nl80211_vif_addr() argument
8736 if (!drv->global) in nl80211_vif_addr()
8739 os_memcpy(new_addr, drv->first_bss->addr, ETH_ALEN); in nl80211_vif_addr()
8741 new_addr[0] = drv->first_bss->addr[0] | 0x02; in nl80211_vif_addr()
8743 if (!nl80211_addr_in_use(drv->global, new_addr)) in nl80211_vif_addr()
8792 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_if_add() local
8803 ifidx = nl80211_create_iface(drv, ifname, nlmode, addr, in wpa_driver_nl80211_if_add()
8812 drv->global->if_add_wdevid = p2pdev_info.wdev_id; in wpa_driver_nl80211_if_add()
8813 drv->global->if_add_wdevid_set = p2pdev_info.wdev_id_set; in wpa_driver_nl80211_if_add()
8820 ifidx = nl80211_create_iface(drv, ifname, nlmode, addr, in wpa_driver_nl80211_if_add()
8833 else if (linux_get_ifhwaddr(drv->global->ioctl_sock, in wpa_driver_nl80211_if_add()
8836 nl80211_remove_iface(drv, ifidx); in wpa_driver_nl80211_if_add()
8848 if (linux_get_ifhwaddr(drv->global->ioctl_sock, ifname, in wpa_driver_nl80211_if_add()
8851 nl80211_remove_iface(drv, ifidx); in wpa_driver_nl80211_if_add()
8854 if (nl80211_addr_in_use(drv->global, new_addr)) { in wpa_driver_nl80211_if_add()
8857 if (nl80211_vif_addr(drv, new_addr) < 0) { in wpa_driver_nl80211_if_add()
8859 nl80211_remove_iface(drv, ifidx); in wpa_driver_nl80211_if_add()
8862 if (linux_set_ifhwaddr(drv->global->ioctl_sock, ifname, in wpa_driver_nl80211_if_add()
8865 nl80211_remove_iface(drv, ifidx); in wpa_driver_nl80211_if_add()
8877 nl80211_remove_iface(drv, ifidx); in wpa_driver_nl80211_if_add()
8882 i802_check_bridge(drv, new_bss, bridge, ifname) < 0) { in wpa_driver_nl80211_if_add()
8887 nl80211_remove_iface(drv, ifidx); in wpa_driver_nl80211_if_add()
8892 if (linux_set_iface_flags(drv->global->ioctl_sock, ifname, 1)) in wpa_driver_nl80211_if_add()
8895 nl80211_remove_iface(drv, ifidx); in wpa_driver_nl80211_if_add()
8902 new_bss->drv = drv; in wpa_driver_nl80211_if_add()
8903 new_bss->next = drv->first_bss->next; in wpa_driver_nl80211_if_add()
8908 new_bss->flink->freq = drv->first_bss->flink->freq; in wpa_driver_nl80211_if_add()
8911 drv->first_bss->next = new_bss; in wpa_driver_nl80211_if_add()
8921 if (drv->global) in wpa_driver_nl80211_if_add()
8922 drv->global->if_add_ifindex = ifidx; in wpa_driver_nl80211_if_add()
8929 (drv->hostapd || in wpa_driver_nl80211_if_add()
8933 add_ifidx(drv, ifidx, IFIDX_ANY); in wpa_driver_nl80211_if_add()
8943 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_if_remove() local
8949 nl80211_remove_iface(drv, ifindex); in wpa_driver_nl80211_if_remove()
8952 dl_list_for_each(drv2, &drv->global->interfaces, in wpa_driver_nl80211_if_remove()
8963 if (linux_br_del_if(drv->global->ioctl_sock, bss->brname, in wpa_driver_nl80211_if_remove()
8970 if (linux_br_del(drv->global->ioctl_sock, bss->brname) < 0) in wpa_driver_nl80211_if_remove()
8976 if (bss != drv->first_bss) { in wpa_driver_nl80211_if_remove()
8980 for (tbss = drv->first_bss; tbss; tbss = tbss->next) { in wpa_driver_nl80211_if_remove()
9001 if (!bss->added_if && !drv->first_bss->next) in wpa_driver_nl80211_if_remove()
9006 if (drv->first_bss->next) { in wpa_driver_nl80211_if_remove()
9007 drv->first_bss = drv->first_bss->next; in wpa_driver_nl80211_if_remove()
9008 drv->ctx = drv->first_bss->ctx; in wpa_driver_nl80211_if_remove()
9009 drv->ifindex = drv->first_bss->ifindex; in wpa_driver_nl80211_if_remove()
9040 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_send_frame_cmd() local
9055 (offchanok && ((drv->capa.flags & WPA_DRIVER_FLAGS_OFFCHANNEL_TX) || in nl80211_send_frame_cmd()
9056 drv->test_use_roc_tx) && in nl80211_send_frame_cmd()
9066 ret = send_and_recv_resp(drv, msg, cookie_handler, &cookie); in nl80211_send_frame_cmd()
9078 drv->send_frame_cookie = no_ack ? (u64) -1 : cookie; in nl80211_send_frame_cmd()
9085 if (drv->num_send_frame_cookies == MAX_SEND_FRAME_COOKIES) { in nl80211_send_frame_cmd()
9089 drv->send_frame_cookies[0]); in nl80211_send_frame_cmd()
9090 os_memmove(&drv->send_frame_cookies[0], in nl80211_send_frame_cmd()
9091 &drv->send_frame_cookies[1], in nl80211_send_frame_cmd()
9094 drv->num_send_frame_cookies--; in nl80211_send_frame_cmd()
9096 drv->send_frame_cookies[drv->num_send_frame_cookies] = cookie; in nl80211_send_frame_cmd()
9097 drv->num_send_frame_cookies++; in nl80211_send_frame_cmd()
9114 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_send_action() local
9120 if (is_ap_interface(drv->nlmode) && (int) freq == bss->flink->freq && in wpa_driver_nl80211_send_action()
9124 if (!freq && is_sta_interface(drv->nlmode)) in wpa_driver_nl80211_send_action()
9130 drv->ifindex, freq, wait_time, no_cck, offchanok, in wpa_driver_nl80211_send_action()
9153 if (is_mesh_interface(drv->nlmode)) { in wpa_driver_nl80211_send_action()
9174 if (is_ap_interface(drv->nlmode) && in wpa_driver_nl80211_send_action()
9175 (!(drv->capa.flags & WPA_DRIVER_FLAGS_OFFCHANNEL_TX) || in wpa_driver_nl80211_send_action()
9176 (int) freq == bss->flink->freq || drv->device_ap_sme || in wpa_driver_nl80211_send_action()
9177 !drv->use_monitor)) in wpa_driver_nl80211_send_action()
9194 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_frame_wait_cancel() local
9206 ret = send_and_recv_cmd(drv, msg); in nl80211_frame_wait_cancel()
9216 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_send_action_cancel_wait() local
9221 if (drv->send_frame_cookie != (u64) -1) in wpa_driver_nl80211_send_action_cancel_wait()
9222 nl80211_frame_wait_cancel(bss, drv->send_frame_cookie); in wpa_driver_nl80211_send_action_cancel_wait()
9229 for (i = drv->num_send_frame_cookies; i > 0; i--) { in wpa_driver_nl80211_send_action_cancel_wait()
9230 cookie = drv->send_frame_cookies[i - 1]; in wpa_driver_nl80211_send_action_cancel_wait()
9231 if (cookie != drv->send_frame_cookie) in wpa_driver_nl80211_send_action_cancel_wait()
9234 drv->num_send_frame_cookies = 0; in wpa_driver_nl80211_send_action_cancel_wait()
9279 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_remain_on_channel() local
9287 nl80211_put_any_link_id(msg, &drv->sta_mlo_info, freq)) { in wpa_driver_nl80211_remain_on_channel()
9293 ret = send_and_recv_resp(drv, msg, cookie_handler, &cookie); in wpa_driver_nl80211_remain_on_channel()
9298 drv->remain_on_chan_cookie = cookie; in wpa_driver_nl80211_remain_on_channel()
9299 drv->pending_remain_on_chan = 1; in wpa_driver_nl80211_remain_on_channel()
9312 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_cancel_remain_on_channel() local
9316 if (!drv->pending_remain_on_chan) { in wpa_driver_nl80211_cancel_remain_on_channel()
9324 (long long unsigned int) drv->remain_on_chan_cookie); in wpa_driver_nl80211_cancel_remain_on_channel()
9328 nla_put_u64(msg, NL80211_ATTR_COOKIE, drv->remain_on_chan_cookie)) { in wpa_driver_nl80211_cancel_remain_on_channel()
9333 ret = send_and_recv_cmd(drv, msg); in wpa_driver_nl80211_cancel_remain_on_channel()
9344 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_probe_req_report() local
9347 if (bss->nl_preq && drv->device_ap_sme && in wpa_driver_nl80211_probe_req_report()
9348 is_ap_interface(drv->nlmode) && !bss->in_deinit && in wpa_driver_nl80211_probe_req_report()
9371 bss->nl_preq = nl_create_handle(drv->global->nl_cb, "preq"); in wpa_driver_nl80211_probe_req_report()
9395 static int nl80211_disable_11b_rates(struct wpa_driver_nl80211_data *drv, in nl80211_disable_11b_rates() argument
9407 msg = nl80211_ifindex_msg(drv, ifindex, 0, in nl80211_disable_11b_rates()
9430 ret = send_and_recv_cmd(drv, msg); in nl80211_disable_11b_rates()
9435 drv->disabled_11b_rates = disabled; in nl80211_disable_11b_rates()
9447 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_remove_link() local
9497 ret = send_and_recv_cmd(drv, msg); in nl80211_remove_link()
9526 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_deinit_ap() local
9528 if (!is_ap_interface(drv->nlmode)) in wpa_driver_nl80211_deinit_ap()
9540 if (drv->nlmode == NL80211_IFTYPE_P2P_GO && bss->if_dynamic) in wpa_driver_nl80211_deinit_ap()
9550 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_stop_ap() local
9552 if (!is_ap_interface(drv->nlmode)) in wpa_driver_nl80211_stop_ap()
9572 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_deinit_p2p_cli() local
9573 if (drv->nlmode != NL80211_IFTYPE_P2P_CLIENT) in wpa_driver_nl80211_deinit_p2p_cli()
9596 nl80211_disable_11b_rates(bss->drv, bss->drv->ifindex, 1); in wpa_driver_nl80211_resume()
9603 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_signal_monitor() local
9619 return send_and_recv_cmd(drv, msg); in nl80211_signal_monitor()
9651 static int nl80211_get_channel_width(struct wpa_driver_nl80211_data *drv, in nl80211_get_channel_width() argument
9656 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_GET_INTERFACE); in nl80211_get_channel_width()
9657 return send_and_recv_resp(drv, msg, get_channel_width, sig); in nl80211_get_channel_width()
9664 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_signal_poll() local
9668 res = nl80211_get_link_signal(drv, drv->bssid, &si->data); in nl80211_signal_poll()
9670 if (drv->nlmode != NL80211_IFTYPE_ADHOC && in nl80211_signal_poll()
9671 drv->nlmode != NL80211_IFTYPE_MESH_POINT) in nl80211_signal_poll()
9676 res = nl80211_get_channel_width(drv, si); in nl80211_signal_poll()
9680 return nl80211_get_link_noise(drv, si); in nl80211_signal_poll()
9732 static int nl80211_get_links_noise(struct wpa_driver_nl80211_data *drv, in nl80211_get_links_noise() argument
9737 msg = nl80211_drv_msg(drv, NLM_F_DUMP, NL80211_CMD_GET_SURVEY); in nl80211_get_links_noise()
9738 return send_and_recv_resp(drv, msg, get_links_noise, mlo_sig); in nl80211_get_links_noise()
9786 static int nl80211_get_links_channel_width(struct wpa_driver_nl80211_data *drv, in nl80211_get_links_channel_width() argument
9791 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_GET_INTERFACE); in nl80211_get_links_channel_width()
9792 return send_and_recv_resp(drv, msg, get_links_channel_width, mlo_sig); in nl80211_get_links_channel_width()
9800 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_mlo_signal_poll() local
9804 if (drv->nlmode != NL80211_IFTYPE_STATION || in nl80211_mlo_signal_poll()
9805 !drv->sta_mlo_info.valid_links) in nl80211_mlo_signal_poll()
9809 mlo_si->valid_links = drv->sta_mlo_info.valid_links; in nl80211_mlo_signal_poll()
9812 res = nl80211_get_link_signal(drv, in nl80211_mlo_signal_poll()
9813 drv->sta_mlo_info.links[i].bssid, in nl80211_mlo_signal_poll()
9822 mlo_si->links[i].frequency = drv->sta_mlo_info.links[i].freq; in nl80211_mlo_signal_poll()
9825 res = nl80211_get_links_channel_width(drv, mlo_si); in nl80211_mlo_signal_poll()
9829 return nl80211_get_links_noise(drv, mlo_si); in nl80211_mlo_signal_poll()
9836 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_param() local
9846 drv->capa.flags |= WPA_DRIVER_FLAGS_P2P_CONCURRENT; in nl80211_set_param()
9847 drv->capa.flags |= WPA_DRIVER_FLAGS_P2P_MGMT_AND_NON_P2P; in nl80211_set_param()
9852 drv->use_monitor = 1; in nl80211_set_param()
9855 drv->capa.flags &= ~WPA_DRIVER_FLAGS_SME; in nl80211_set_param()
9856 drv->force_connect_cmd = 1; in nl80211_set_param()
9860 drv->capa.flags |= WPA_DRIVER_FLAGS_BSS_SELECTION; in nl80211_set_param()
9863 drv->capa.flags &= ~WPA_DRIVER_FLAGS_OFFCHANNEL_TX; in nl80211_set_param()
9864 drv->test_use_roc_tx = 1; in nl80211_set_param()
9868 drv->capa.flags &= ~WPA_DRIVER_FLAGS_CONTROL_PORT; in nl80211_set_param()
9869 drv->capa.flags2 &= ~(WPA_DRIVER_FLAGS2_CONTROL_PORT_RX | in nl80211_set_param()
9871 drv->control_port_ap = 0; in nl80211_set_param()
9875 drv->control_port_ap = 1; in nl80211_set_param()
9878 drv->capa.flags2 &= ~WPA_DRIVER_FLAGS2_CONTROL_PORT_TX_STATUS; in nl80211_set_param()
9879 drv->control_port_ap = 0; in nl80211_set_param()
9883 drv->capa.flags &= ~WPA_DRIVER_FLAGS_FULL_AP_CLIENT_STATE; in nl80211_set_param()
9886 drv->no_rrm = 1; in nl80211_set_param()
9888 if (!bss->in_deinit && !is_ap_interface(drv->nlmode) && in nl80211_set_param()
9889 !is_mesh_interface(drv->nlmode)) { in nl80211_set_param()
9898 drv->capa.flags2 |= WPA_DRIVER_FLAGS2_SEC_LTF_STA | in nl80211_set_param()
9988 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_get_radio_name() local
9989 return drv->phyname; in nl80211_get_radio_name()
10027 return send_and_recv_cmd(bss->drv, msg); in nl80211_pmkid()
10103 return send_and_recv_cmd(bss->drv, msg); in nl80211_flush_pmkid()
10247 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_get_survey() local
10258 msg = nl80211_drv_msg(drv, NLM_F_DUMP, NL80211_CMD_GET_SURVEY); in wpa_driver_nl80211_get_survey()
10267 err = send_and_recv_resp(drv, msg, survey_handler, in wpa_driver_nl80211_get_survey()
10274 wpa_supplicant_event(drv->ctx, EVENT_SURVEY, &data); in wpa_driver_nl80211_get_survey()
10286 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_rekey_info() local
10291 if (!drv->set_rekey_offload) in nl80211_set_rekey_info()
10308 ret = send_and_recv_cmd(drv, msg); in nl80211_set_rekey_info()
10312 drv->set_rekey_offload = 0; in nl80211_set_rekey_info()
10359 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_poll_client() local
10364 if (!drv->poll_command_supported) { in nl80211_poll_client()
10375 ret = send_and_recv_resp(drv, msg, cookie_handler, &cookie); in nl80211_poll_client()
10401 ret = send_and_recv_cmd(bss->drv, msg); in nl80211_set_power_save()
10441 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_start_radar_detection() local
10449 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_RADAR)) { in nl80211_start_radar_detection()
10455 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_RADAR_DETECT)) || in nl80211_start_radar_detection()
10461 ret = send_and_recv_cmd(drv, msg); in nl80211_start_radar_detection()
10494 nl80211_tdls_set_discovery_resp_link(struct wpa_driver_nl80211_data *drv, in nl80211_tdls_set_discovery_resp_link() argument
10504 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_tdls_set_discovery_resp_link()
10505 nla_put_u32(msg, NL80211_ATTR_IFINDEX, drv->ifindex) || in nl80211_tdls_set_discovery_resp_link()
10520 return send_and_recv_cmd(drv, msg); in nl80211_tdls_set_discovery_resp_link()
10535 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_send_tdls_mgmt() local
10538 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_TDLS_SUPPORT)) in nl80211_send_tdls_mgmt()
10545 nl80211_tdls_set_discovery_resp_link(drv, link_id) < 0) in nl80211_send_tdls_mgmt()
10548 if (link_id < 0 && drv->sta_mlo_info.valid_links) in nl80211_send_tdls_mgmt()
10549 link_id = drv->sta_mlo_info.assoc_link_id; in nl80211_send_tdls_mgmt()
10551 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_TDLS_MGMT)) || in nl80211_send_tdls_mgmt()
10563 return send_and_recv_cmd(drv, msg); in nl80211_send_tdls_mgmt()
10574 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_tdls_oper() local
10579 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_TDLS_SUPPORT)) in nl80211_tdls_oper()
10606 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_TDLS_OPER)) || in nl80211_tdls_oper()
10613 res = send_and_recv_cmd(drv, msg); in nl80211_tdls_oper()
10626 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_tdls_enable_channel_switch() local
10630 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_TDLS_SUPPORT) || in nl80211_tdls_enable_channel_switch()
10631 !(drv->capa.flags & WPA_DRIVER_FLAGS_TDLS_CHANNEL_SWITCH)) in nl80211_tdls_enable_channel_switch()
10647 return send_and_recv_cmd(drv, msg); in nl80211_tdls_enable_channel_switch()
10655 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_tdls_disable_channel_switch() local
10658 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_TDLS_SUPPORT) || in nl80211_tdls_disable_channel_switch()
10659 !(drv->capa.flags & WPA_DRIVER_FLAGS_TDLS_CHANNEL_SWITCH)) in nl80211_tdls_disable_channel_switch()
10673 return send_and_recv_cmd(drv, msg); in nl80211_tdls_disable_channel_switch()
10693 struct wpa_driver_nl80211_data *drv = bss->drv; in driver_nl80211_scan2() local
10702 if (drv->scan_vendor_cmd_avail && !params->only_new_results) in driver_nl80211_scan2()
10746 struct wpa_driver_nl80211_data *drv = bss->drv; in driver_nl80211_link_remove() local
10760 if (drv->first_bss == bss && bss->valid_links) in driver_nl80211_link_remove()
10761 drv->ctx = bss->ctx; in driver_nl80211_link_remove()
10776 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_is_drv_shared() local
10783 for (bss = drv->first_bss; bss; bss = bss->next) { in nl80211_is_drv_shared()
10874 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_update_ft_ies() local
10878 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_UPDATE_FT_IES)) || in wpa_driver_nl80211_update_ft_ies()
10885 ret = send_and_recv_cmd(drv, msg); in wpa_driver_nl80211_update_ft_ies()
10901 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_update_dh_ie() local
10913 ret = send_and_recv_cmd(drv, msg); in nl80211_update_dh_ie()
10927 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_get_macaddr() local
10929 if (drv->nlmode != NL80211_IFTYPE_P2P_DEVICE) in wpa_driver_nl80211_get_macaddr()
10964 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_status() local
11022 drv->phyname, in wpa_driver_nl80211_status()
11023 MAC2STR(drv->perm_addr), in wpa_driver_nl80211_status()
11024 drv->ifindex, in wpa_driver_nl80211_status()
11025 drv->operstate, in wpa_driver_nl80211_status()
11026 scan_state_str(drv->scan_state), in wpa_driver_nl80211_status()
11027 MAC2STR(drv->auth_bssid), in wpa_driver_nl80211_status()
11028 MAC2STR(drv->auth_attempt_bssid), in wpa_driver_nl80211_status()
11029 MAC2STR(drv->bssid), in wpa_driver_nl80211_status()
11030 MAC2STR(drv->prev_bssid), in wpa_driver_nl80211_status()
11031 drv->associated, in wpa_driver_nl80211_status()
11032 drv->assoc_freq, in wpa_driver_nl80211_status()
11033 drv->monitor_sock, in wpa_driver_nl80211_status()
11034 drv->monitor_ifidx, in wpa_driver_nl80211_status()
11035 drv->monitor_refcount, in wpa_driver_nl80211_status()
11036 drv->last_mgmt_freq, in wpa_driver_nl80211_status()
11037 drv->eapol_tx_sock, in wpa_driver_nl80211_status()
11038 drv->ignore_if_down_event ? in wpa_driver_nl80211_status()
11040 drv->scan_complete_events ? in wpa_driver_nl80211_status()
11042 drv->disabled_11b_rates ? in wpa_driver_nl80211_status()
11044 drv->pending_remain_on_chan ? in wpa_driver_nl80211_status()
11046 drv->in_interface_list ? "in_interface_list=1\n" : "", in wpa_driver_nl80211_status()
11047 drv->device_ap_sme ? "device_ap_sme=1\n" : "", in wpa_driver_nl80211_status()
11048 drv->poll_command_supported ? in wpa_driver_nl80211_status()
11050 drv->data_tx_status ? "data_tx_status=1\n" : "", in wpa_driver_nl80211_status()
11051 drv->scan_for_auth ? "scan_for_auth=1\n" : "", in wpa_driver_nl80211_status()
11052 drv->retry_auth ? "retry_auth=1\n" : "", in wpa_driver_nl80211_status()
11053 drv->use_monitor ? "use_monitor=1\n" : "", in wpa_driver_nl80211_status()
11054 drv->ignore_next_local_disconnect ? in wpa_driver_nl80211_status()
11056 drv->ignore_next_local_deauth ? in wpa_driver_nl80211_status()
11062 if (drv->sta_mlo_info.valid_links) { in wpa_driver_nl80211_status()
11064 struct driver_sta_mlo_info *mlo = &drv->sta_mlo_info; in wpa_driver_nl80211_status()
11101 if (drv->has_capability) { in wpa_driver_nl80211_status()
11128 drv->capa.key_mgmt, in wpa_driver_nl80211_status()
11129 drv->capa.enc, in wpa_driver_nl80211_status()
11130 drv->capa.auth, in wpa_driver_nl80211_status()
11131 (unsigned long long) drv->capa.flags, in wpa_driver_nl80211_status()
11132 (unsigned long long) drv->capa.flags2, in wpa_driver_nl80211_status()
11133 drv->capa.rrm_flags, in wpa_driver_nl80211_status()
11134 drv->capa.max_scan_ssids, in wpa_driver_nl80211_status()
11135 drv->capa.max_sched_scan_ssids, in wpa_driver_nl80211_status()
11136 drv->capa.sched_scan_supported, in wpa_driver_nl80211_status()
11137 drv->capa.max_match_sets, in wpa_driver_nl80211_status()
11138 drv->capa.max_remain_on_chan, in wpa_driver_nl80211_status()
11139 drv->capa.max_stations, in wpa_driver_nl80211_status()
11140 drv->capa.probe_resp_offloads, in wpa_driver_nl80211_status()
11141 drv->capa.max_acl_mac_addrs, in wpa_driver_nl80211_status()
11142 drv->capa.num_multichan_concurrent, in wpa_driver_nl80211_status()
11143 drv->capa.mac_addr_rand_sched_scan_supported, in wpa_driver_nl80211_status()
11144 drv->capa.mac_addr_rand_scan_supported, in wpa_driver_nl80211_status()
11145 drv->capa.conc_capab, in wpa_driver_nl80211_status()
11146 drv->capa.max_conc_chan_2_4, in wpa_driver_nl80211_status()
11147 drv->capa.max_conc_chan_5_0, in wpa_driver_nl80211_status()
11148 drv->capa.max_sched_scan_plans, in wpa_driver_nl80211_status()
11149 drv->capa.max_sched_scan_plan_interval, in wpa_driver_nl80211_status()
11150 drv->capa.max_sched_scan_plan_iterations, in wpa_driver_nl80211_status()
11151 drv->capa.mbssid_max_interfaces, in wpa_driver_nl80211_status()
11152 drv->capa.ema_max_periodicity); in wpa_driver_nl80211_status()
11160 nl80211_cmd(drv, msg, 0, NL80211_CMD_GET_REG) && in wpa_driver_nl80211_status()
11161 nla_put_u32(msg, NL80211_ATTR_WIPHY, drv->wiphy_idx) == 0) { in wpa_driver_nl80211_status()
11162 if (send_and_recv_resp(drv, msg, nl80211_get_country, in wpa_driver_nl80211_status()
11209 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_switch_channel() local
11230 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_AP_CSA)) { in nl80211_switch_channel()
11235 if (drv->nlmode != NL80211_IFTYPE_AP && in nl80211_switch_channel()
11236 drv->nlmode != NL80211_IFTYPE_P2P_GO && in nl80211_switch_channel()
11237 drv->nlmode != NL80211_IFTYPE_MESH_POINT) in nl80211_switch_channel()
11264 if (drv->capa.max_csa_counters && in nl80211_switch_channel()
11265 csa_off_len > drv->capa.max_csa_counters) { in nl80211_switch_channel()
11335 ret = send_and_recv_cmd(drv, msg); in nl80211_switch_channel()
11355 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_switch_color() local
11364 if (drv->nlmode != NL80211_IFTYPE_AP) in nl80211_switch_color()
11437 ret = send_and_recv_cmd(drv, msg); in nl80211_switch_color()
11457 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_add_ts() local
11465 if (!is_sta_interface(drv->nlmode)) in nl80211_add_ts()
11478 ret = send_and_recv_cmd(drv, msg); in nl80211_add_ts()
11489 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_del_ts() local
11495 if (!is_sta_interface(drv->nlmode)) in nl80211_del_ts()
11505 ret = send_and_recv_cmd(drv, msg); in nl80211_del_ts()
11592 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_vendor_cmd() local
11602 nl80211_cmd(drv, msg, 0, subcmd); in nl80211_vendor_cmd()
11609 ret = send_and_recv(drv->global, bss->nl_connect, msg, in nl80211_vendor_cmd()
11634 ret = send_and_recv_resp(drv, msg, vendor_reply_handler, buf); in nl80211_vendor_cmd()
11650 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_qos_map() local
11663 ret = send_and_recv_cmd(drv, msg); in nl80211_set_qos_map()
11689 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_get_wowlan() local
11696 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_GET_WOWLAN); in nl80211_get_wowlan()
11698 ret = send_and_recv_resp(drv, msg, get_wowlan_handler, &wowlan_enabled); in nl80211_get_wowlan()
11715 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_wowlan() local
11745 ret = send_and_recv_cmd(drv, msg); in nl80211_set_wowlan()
11757 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_roaming() local
11763 if (!drv->roaming_vendor_cmd_avail) { in nl80211_roaming()
11769 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_roaming()
11784 return send_and_recv_cmd(drv, msg); in nl80211_roaming()
11791 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_disable_fils() local
11797 if (!drv->set_wifi_conf_vendor_cmd_avail) in nl80211_disable_fils()
11800 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_disable_fils()
11812 return send_and_recv_cmd(drv, msg); in nl80211_disable_fils()
11823 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_bssid_tmp_disallow() local
11832 if (!drv->roam_vendor_cmd_avail) in nl80211_set_bssid_tmp_disallow()
11835 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_set_bssid_tmp_disallow()
11869 return send_and_recv_cmd(drv, msg); in nl80211_set_bssid_tmp_disallow()
11880 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_add_sta_node() local
11884 if (!drv->add_sta_node_vendor_cmd_avail) in nl80211_add_sta_node()
11889 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_add_sta_node()
11907 return send_and_recv_cmd(drv, msg); in nl80211_add_sta_node()
11916 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_mac_addr() local
11923 addr = drv->perm_addr; in nl80211_set_mac_addr()
11925 if (linux_set_iface_flags(drv->global->ioctl_sock, bss->ifname, 0) < 0) in nl80211_set_mac_addr()
11928 if (linux_set_ifhwaddr(drv->global->ioctl_sock, bss->ifname, addr) < 0) in nl80211_set_mac_addr()
11933 if (linux_set_iface_flags(drv->global->ioctl_sock, bss->ifname, in nl80211_set_mac_addr()
11943 drv->addr_changed = new_addr; in nl80211_set_mac_addr()
11947 if (linux_set_iface_flags(drv->global->ioctl_sock, bss->ifname, 1) < 0) in nl80211_set_mac_addr()
12032 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_join_mesh() local
12037 wpa_printf(MSG_DEBUG, "nl80211: mesh join (ifindex=%d)", drv->ifindex); in nl80211_join_mesh()
12038 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_JOIN_MESH); in nl80211_join_mesh()
12084 ret = send_and_recv(drv->global, bss->nl_connect, msg, NULL, NULL, NULL, in nl80211_join_mesh()
12093 drv->assoc_freq = bss->flink->freq = params->freq.freq; in nl80211_join_mesh()
12136 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_leave_mesh() local
12140 wpa_printf(MSG_DEBUG, "nl80211: mesh leave (ifindex=%d)", drv->ifindex); in wpa_driver_nl80211_leave_mesh()
12141 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_LEAVE_MESH); in wpa_driver_nl80211_leave_mesh()
12142 ret = send_and_recv(drv->global, bss->nl_connect, msg, NULL, NULL, NULL, in wpa_driver_nl80211_leave_mesh()
12150 drv->first_bss->flink->freq = 0; in wpa_driver_nl80211_leave_mesh()
12153 if (drv->start_mode_sta && in wpa_driver_nl80211_leave_mesh()
12154 wpa_driver_nl80211_set_mode(drv->first_bss, in wpa_driver_nl80211_leave_mesh()
12167 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_probe_mesh_link() local
12171 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_PROBE_MESH_LINK); in nl80211_probe_mesh_link()
12179 ret = send_and_recv_cmd(drv, msg); in nl80211_probe_mesh_link()
12200 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_br_add_ip_neigh() local
12218 if (!drv->rtnl_sk) { in wpa_driver_br_add_ip_neigh()
12244 res = nl_send_auto_complete(drv->rtnl_sk, msg); in wpa_driver_br_add_ip_neigh()
12248 res = nl_wait_for_ack(drv->rtnl_sk); in wpa_driver_br_add_ip_neigh()
12264 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_br_delete_ip_neigh() local
12292 if (!drv->rtnl_sk) { in wpa_driver_br_delete_ip_neigh()
12307 res = nl_send_auto_complete(drv->rtnl_sk, msg); in wpa_driver_br_delete_ip_neigh()
12311 res = nl_wait_for_ack(drv->rtnl_sk); in wpa_driver_br_delete_ip_neigh()
12518 static int nl80211_qca_do_acs(struct wpa_driver_nl80211_data *drv, in nl80211_qca_do_acs() argument
12530 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_qca_do_acs()
12564 ret = send_and_recv_cmd(drv, msg); in nl80211_qca_do_acs()
12577 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_band() local
12584 if (!drv->setband_vendor_cmd_avail || in nl80211_set_band()
12608 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_set_band()
12622 ret = send_and_recv_cmd(drv, msg); in nl80211_set_band()
12768 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_get_pref_freq_list() local
12776 if (!drv->get_pref_freq_list) in nl80211_get_pref_freq_list()
12805 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_get_pref_freq_list()
12806 nla_put_u32(msg, NL80211_ATTR_IFINDEX, drv->ifindex) || in nl80211_get_pref_freq_list()
12824 ret = send_and_recv_resp(drv, msg, preferred_freq_info_handler, ¶m); in nl80211_get_pref_freq_list()
12847 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_prob_oper_freq() local
12852 if (!drv->set_prob_oper_freq) in nl80211_set_prob_oper_freq()
12859 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_set_prob_oper_freq()
12878 ret = send_and_recv_cmd(drv, msg); in nl80211_set_prob_oper_freq()
12897 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_p2p_lo_start() local
12906 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_P2P_LISTEN_OFFLOAD)) in nl80211_p2p_lo_start()
12909 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_p2p_lo_start()
12934 ret = send_and_recv_cmd(drv, msg); in nl80211_p2p_lo_start()
12953 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_p2p_lo_stop() local
12958 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_P2P_LISTEN_OFFLOAD)) in nl80211_p2p_lo_stop()
12961 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_p2p_lo_stop()
12969 return send_and_recv_cmd(drv, msg); in nl80211_p2p_lo_stop()
12976 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_tdls_mode() local
12992 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_set_tdls_mode()
13008 ret = send_and_recv_cmd(drv, msg); in nl80211_set_tdls_mode()
13132 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_get_bss_transition_status() local
13140 if (!drv->fetch_bss_trans_status) in nl80211_get_bss_transition_status()
13162 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_get_bss_transition_status()
13199 ret = send_and_recv_resp(drv, msg, in nl80211_get_bss_transition_status()
13228 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_ignore_assoc_disallow() local
13233 if (!drv->set_wifi_conf_vendor_cmd_avail) in nl80211_ignore_assoc_disallow()
13236 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_ignore_assoc_disallow()
13254 ret = send_and_recv_cmd(drv, msg); in nl80211_ignore_assoc_disallow()
13279 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_send_pasn_resp() local
13281 wpa_dbg(drv->ctx, MSG_DEBUG, in nl80211_send_pasn_resp()
13284 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR); in nl80211_send_pasn_resp()
13325 return send_and_recv_cmd(drv, msg); in nl80211_send_pasn_resp()
13353 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_secure_ranging_ctx() local
13357 if (!drv->secure_ranging_ctx_vendor_cmd_avail) in nl80211_set_secure_ranging_ctx()
13363 wpa_dbg(drv->ctx, MSG_DEBUG, in nl80211_set_secure_ranging_ctx()
13367 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR); in nl80211_set_secure_ranging_ctx()
13421 ret = send_and_recv_cmd(drv, msg); in nl80211_set_secure_ranging_ctx()
13438 static int wpa_driver_do_broadcom_acs(struct wpa_driver_nl80211_data *drv, in wpa_driver_do_broadcom_acs() argument
13450 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR); in wpa_driver_do_broadcom_acs()
13475 ret = send_and_recv_cmd(drv, msg); in wpa_driver_do_broadcom_acs()
13494 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_do_acs() local
13498 if (drv->qca_do_acs) in nl80211_do_acs()
13499 return nl80211_qca_do_acs(drv, params); in nl80211_do_acs()
13503 if (drv->brcm_do_acs) in nl80211_do_acs()
13504 return wpa_driver_do_broadcom_acs(drv, params); in nl80211_do_acs()
13626 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_get_ext_capab() local
13636 *ext_capa = drv->extended_capa; in nl80211_get_ext_capab()
13637 *ext_capa_mask = drv->extended_capa_mask; in nl80211_get_ext_capab()
13638 *ext_capa_len = drv->extended_capa_len; in nl80211_get_ext_capab()
13641 for (i = 0; i < drv->num_iface_capa; i++) { in nl80211_get_ext_capab()
13642 if (nlmode == drv->iface_capa[i].iftype) { in nl80211_get_ext_capab()
13643 *ext_capa = drv->iface_capa[i].ext_capa; in nl80211_get_ext_capab()
13644 *ext_capa_mask = drv->iface_capa[i].ext_capa_mask; in nl80211_get_ext_capab()
13645 *ext_capa_len = drv->iface_capa[i].ext_capa_len; in nl80211_get_ext_capab()
13658 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_get_mld_capab() local
13672 for (i = 0; i < drv->num_iface_capa; i++) { in nl80211_get_mld_capab()
13673 if (nlmode == drv->iface_capa[i].iftype) { in nl80211_get_mld_capab()
13674 *eml_capa = drv->iface_capa[i].eml_capa; in nl80211_get_mld_capab()
13676 drv->iface_capa[i].mld_capa_and_ops; in nl80211_get_mld_capab()
13690 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_update_connection_params() local
13700 if (drv->capa.flags & WPA_DRIVER_FLAGS_SME) in nl80211_update_connection_params()
13703 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_UPDATE_CONNECT_PARAMS); in nl80211_update_connection_params()
13708 drv->ifindex); in nl80211_update_connection_params()
13727 nl80211_put_fils_connect_params(drv, params, msg)) in nl80211_update_connection_params()
13730 ret = send_and_recv_cmd(drv, msg); in nl80211_update_connection_params()
13733 wpa_dbg(drv->ctx, MSG_DEBUG, in nl80211_update_connection_params()
13747 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_send_external_auth_status() local
13756 if ((is_ap_interface(drv->nlmode) && !bss->drv->device_ap_sme) || in nl80211_send_external_auth_status()
13757 (drv->capa.flags & WPA_DRIVER_FLAGS_SME)) in nl80211_send_external_auth_status()
13760 wpa_dbg(drv->ctx, MSG_DEBUG, in nl80211_send_external_auth_status()
13763 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_EXTERNAL_AUTH); in nl80211_send_external_auth_status()
13773 ret = send_and_recv_cmd(drv, msg); in nl80211_send_external_auth_status()
13791 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_4addr_mode() local
13798 msg = nl80211_cmd_msg(drv->first_bss, 0, NL80211_CMD_SET_INTERFACE); in nl80211_set_4addr_mode()
13803 if (linux_br_del_if(drv->global->ioctl_sock, in nl80211_set_4addr_mode()
13813 ret = send_and_recv_cmd(drv, msg); in nl80211_set_4addr_mode()
13822 i802_check_bridge(drv, bss, bridge_ifname, bss->ifname) < 0) in nl80211_set_4addr_mode()
13839 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_dpp_listen() local
13843 if (!drv->multicast_registrations || !bss->nl_mgmt) in nl80211_dpp_listen()
13861 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_link_add() local
13868 if (drv->nlmode != NL80211_IFTYPE_AP) { in nl80211_link_add()
13871 drv->nlmode); in nl80211_link_add()
13903 ret = send_and_recv_cmd(drv, msg); in nl80211_link_add()
13930 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_link_sta_remove() local
13944 ret = send_and_recv_cmd(drv, msg); in wpa_driver_nl80211_link_sta_remove()
13975 struct wpa_driver_nl80211_data *drv = bss->drv; in testing_nl80211_radio_disable() local
13985 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_SME)) in testing_nl80211_radio_disable()
13988 if (!drv->associated) in testing_nl80211_radio_disable()
13991 return wpa_driver_nl80211_mlme(drv, drv->bssid, in testing_nl80211_radio_disable()
13994 drv->first_bss); in testing_nl80211_radio_disable()