Lines Matching refs: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()
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()
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()
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()
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, &params->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, &params->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()
7080 static int nl80211_connect_ext(struct wpa_driver_nl80211_data *drv, in nl80211_connect_ext() argument
7088 if (!drv->connect_ext_vendor_cmd_avail) in nl80211_connect_ext()
7092 drv->ifindex); in nl80211_connect_ext()
7094 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_connect_ext()
7115 return send_and_recv_cmd(drv, msg); in nl80211_connect_ext()
7124 struct wpa_driver_nl80211_data *drv, in wpa_driver_nl80211_try_connect() argument
7138 ret = issue_key_mgmt_set_key(drv, params->psk, 32); in wpa_driver_nl80211_try_connect()
7144 nl80211_connect_ext(drv, params); in wpa_driver_nl80211_try_connect()
7145 wpa_printf(MSG_DEBUG, "nl80211: Connect (ifindex=%d)", drv->ifindex); in wpa_driver_nl80211_try_connect()
7146 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_CONNECT); in wpa_driver_nl80211_try_connect()
7150 ret = nl80211_connect_common(drv, params, msg); in wpa_driver_nl80211_try_connect()
7159 (drv->capa.flags & WPA_DRIVER_FLAGS_MFP_OPTIONAL) && in wpa_driver_nl80211_try_connect()
7171 (drv->capa.flags2 & WPA_DRIVER_FLAGS2_SAE_OFFLOAD_STA)) { in wpa_driver_nl80211_try_connect()
7223 ret = send_and_recv(drv->global, bss->nl_connect, msg, NULL, NULL, NULL, in wpa_driver_nl80211_try_connect()
7231 drv->roam_indication_done = false; in wpa_driver_nl80211_try_connect()
7246 struct wpa_driver_nl80211_data *drv, in wpa_driver_nl80211_connect() argument
7254 os_memcpy(drv->auth_attempt_bssid, params->bssid, ETH_ALEN); in wpa_driver_nl80211_connect()
7256 os_memset(drv->auth_attempt_bssid, 0, ETH_ALEN); in wpa_driver_nl80211_connect()
7258 ret = wpa_driver_nl80211_try_connect(drv, params, bss); in wpa_driver_nl80211_connect()
7269 drv, WLAN_REASON_PREV_AUTH_NOT_VALID, bss)) in wpa_driver_nl80211_connect()
7271 ret = wpa_driver_nl80211_try_connect(drv, params, bss); in wpa_driver_nl80211_connect()
7281 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_associate() local
7289 return wpa_driver_nl80211_ap(drv, params); in wpa_driver_nl80211_associate()
7292 return wpa_driver_nl80211_ibss(drv, params); in wpa_driver_nl80211_associate()
7294 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_SME)) { in wpa_driver_nl80211_associate()
7301 return wpa_driver_nl80211_connect(drv, params, bss); in wpa_driver_nl80211_associate()
7304 nl80211_mark_disconnected(drv); in wpa_driver_nl80211_associate()
7307 drv->ifindex); in wpa_driver_nl80211_associate()
7308 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_ASSOCIATE); in wpa_driver_nl80211_associate()
7312 ret = nl80211_connect_common(drv, params, msg); in wpa_driver_nl80211_associate()
7339 ret = send_and_recv(drv->global, drv->first_bss->nl_connect, in wpa_driver_nl80211_associate()
7354 wpa_dbg(drv->ctx, MSG_DEBUG, in wpa_driver_nl80211_associate()
7357 nl80211_dump_scan(drv); in wpa_driver_nl80211_associate()
7383 static int nl80211_set_mode(struct wpa_driver_nl80211_data *drv, in nl80211_set_mode() argument
7392 msg = nl80211_cmd_msg(drv->first_bss, 0, NL80211_CMD_SET_INTERFACE); in nl80211_set_mode()
7396 ret = send_and_recv_cmd(drv, msg); in nl80211_set_mode()
7413 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_set_mode_impl() local
7416 int was_ap = is_ap_interface(drv->nlmode); in wpa_driver_nl80211_set_mode_impl()
7423 mode_switch_res = nl80211_set_mode(drv, drv->ifindex, nlmode); in wpa_driver_nl80211_set_mode_impl()
7428 drv->nlmode = nlmode; in wpa_driver_nl80211_set_mode_impl()
7436 if (nlmode == drv->nlmode) { in wpa_driver_nl80211_set_mode_impl()
7478 if (linux_br_del_if(drv->global->ioctl_sock, in wpa_driver_nl80211_set_mode_impl()
7487 mode_switch_res = nl80211_set_mode(drv, drv->ifindex, nlmode); in wpa_driver_nl80211_set_mode_impl()
7501 drv->nlmode = nlmode; in wpa_driver_nl80211_set_mode_impl()
7502 drv->ignore_if_down_event = 1; in wpa_driver_nl80211_set_mode_impl()
7506 res = linux_set_iface_flags(drv->global->ioctl_sock, bss->ifname, 1); in wpa_driver_nl80211_set_mode_impl()
7516 "from %d failed", nlmode, drv->nlmode); in wpa_driver_nl80211_set_mode_impl()
7524 nl80211_disable_11b_rates(drv, drv->ifindex, 1); in wpa_driver_nl80211_set_mode_impl()
7525 } else if (drv->disabled_11b_rates) { in wpa_driver_nl80211_set_mode_impl()
7529 nl80211_disable_11b_rates(drv, drv->ifindex, 0); in wpa_driver_nl80211_set_mode_impl()
7560 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_restore_ap_mode() local
7561 int was_ap = is_ap_interface(drv->nlmode); in nl80211_restore_ap_mode()
7563 wpa_driver_nl80211_set_mode(bss, drv->ap_scan_as_station); in nl80211_restore_ap_mode()
7564 if (!was_ap && is_ap_interface(drv->ap_scan_as_station) && in nl80211_restore_ap_mode()
7570 if (linux_br_add_if(drv->global->ioctl_sock, bss->brname, in nl80211_restore_ap_mode()
7577 drv->ap_scan_as_station = NL80211_IFTYPE_UNSPECIFIED; in nl80211_restore_ap_mode()
7600 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_get_capa() local
7602 if (!drv->has_capability) in wpa_driver_nl80211_get_capa()
7604 os_memcpy(capa, &drv->capa, sizeof(*capa)); in wpa_driver_nl80211_get_capa()
7605 if (drv->extended_capa && drv->extended_capa_mask) { in wpa_driver_nl80211_get_capa()
7606 capa->extended_capa = drv->extended_capa; in wpa_driver_nl80211_get_capa()
7607 capa->extended_capa_mask = drv->extended_capa_mask; in wpa_driver_nl80211_get_capa()
7608 capa->extended_capa_len = drv->extended_capa_len; in wpa_driver_nl80211_get_capa()
7618 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_set_operstate() local
7621 bss->ifname, drv->operstate, state, in wpa_driver_nl80211_set_operstate()
7623 drv->operstate = state; in wpa_driver_nl80211_set_operstate()
7624 return netlink_send_oper_ifla(drv->global->netlink, drv->ifindex, -1, in wpa_driver_nl80211_set_operstate()
7632 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_set_supp_port() local
7636 const u8 *connected_addr = drv->sta_mlo_info.valid_links ? in wpa_driver_nl80211_set_supp_port()
7637 drv->sta_mlo_info.ap_mld_addr : drv->bssid; in wpa_driver_nl80211_set_supp_port()
7639 if (!drv->associated && is_zero_ether_addr(connected_addr) && in wpa_driver_nl80211_set_supp_port()
7660 ret = send_and_recv_cmd(drv, msg); in wpa_driver_nl80211_set_supp_port()
7711 struct wpa_driver_nl80211_data *drv = bss->drv; in i802_get_seqnum() local
7715 msg = nl80211_ifindex_msg(drv, if_nametoindex(iface), 0, in i802_get_seqnum()
7727 res = send_and_recv_resp(drv, msg, get_key_handler, seq); in i802_get_seqnum()
7741 struct wpa_driver_nl80211_data *drv = bss->drv; in i802_set_rts() local
7751 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_SET_WIPHY)) || in i802_set_rts()
7757 ret = send_and_recv_cmd(drv, msg); in i802_set_rts()
7769 struct wpa_driver_nl80211_data *drv = bss->drv; in i802_set_frag() local
7779 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_SET_WIPHY)) || in i802_set_frag()
7785 ret = send_and_recv_cmd(drv, msg); in i802_set_frag()
7816 res = send_and_recv_cmd(bss->drv, msg); in i802_flush()
8135 int nl80211_get_link_signal(struct wpa_driver_nl80211_data *drv, in nl80211_get_link_signal() argument
8144 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_GET_STATION)) || in nl80211_get_link_signal()
8150 return send_and_recv_resp(drv, msg, get_sta_handler, data); in nl80211_get_link_signal()
8166 return send_and_recv_resp(bss->drv, msg, get_sta_handler, data); in i802_read_sta_data()
8175 struct wpa_driver_nl80211_data *drv = bss->drv; in i802_set_tx_queue_params() local
8228 res = send_and_recv_cmd(drv, msg); in i802_set_tx_queue_params()
8244 struct wpa_driver_nl80211_data *drv = bss->drv; in i802_set_sta_vlan() local
8254 (vlan_id && (drv->capa.flags & WPA_DRIVER_FLAGS_VLAN_OFFLOAD) && in i802_set_sta_vlan()
8263 ret = send_and_recv_cmd(drv, msg); in i802_set_sta_vlan()
8303 struct wpa_driver_nl80211_data *drv = bss->drv; in i802_sta_deauth() local
8315 if (is_mesh_interface(drv->nlmode)) in i802_sta_deauth()
8318 if (drv->device_ap_sme) in i802_sta_deauth()
8339 struct wpa_driver_nl80211_data *drv = bss->drv; in i802_sta_disassoc() local
8342 if (is_mesh_interface(drv->nlmode)) in i802_sta_disassoc()
8345 if (drv->device_ap_sme) in i802_sta_disassoc()
8362 static void dump_ifidx(struct wpa_driver_nl80211_data *drv) in dump_ifidx() argument
8370 for (i = 0; i < drv->num_if_indices; i++) { in dump_ifidx()
8371 if (!drv->if_indices[i].ifindex) in dump_ifidx()
8374 drv->if_indices[i].ifindex, in dump_ifidx()
8375 drv->if_indices[i].reason); in dump_ifidx()
8383 drv->num_if_indices, buf); in dump_ifidx()
8387 static void add_ifidx(struct wpa_driver_nl80211_data *drv, int ifidx, in add_ifidx() argument
8396 if (have_ifidx(drv, ifidx, ifidx_reason)) { in add_ifidx()
8401 for (i = 0; i < drv->num_if_indices; i++) { in add_ifidx()
8402 if (drv->if_indices[i].ifindex == 0) { in add_ifidx()
8403 drv->if_indices[i].ifindex = ifidx; in add_ifidx()
8404 drv->if_indices[i].reason = ifidx_reason; in add_ifidx()
8405 dump_ifidx(drv); in add_ifidx()
8410 if (drv->if_indices != drv->default_if_indices) in add_ifidx()
8411 old = drv->if_indices; in add_ifidx()
8415 drv->if_indices = os_realloc_array(old, drv->num_if_indices + 1, in add_ifidx()
8417 if (!drv->if_indices) { in add_ifidx()
8419 drv->if_indices = drv->default_if_indices; in add_ifidx()
8421 drv->if_indices = old; in add_ifidx()
8428 os_memcpy(drv->if_indices, drv->default_if_indices, in add_ifidx()
8429 sizeof(drv->default_if_indices)); in add_ifidx()
8430 drv->if_indices[drv->num_if_indices].ifindex = ifidx; in add_ifidx()
8431 drv->if_indices[drv->num_if_indices].reason = ifidx_reason; in add_ifidx()
8432 drv->num_if_indices++; in add_ifidx()
8433 dump_ifidx(drv); in add_ifidx()
8437 static void del_ifidx(struct wpa_driver_nl80211_data *drv, int ifidx, in del_ifidx() argument
8442 for (i = 0; i < drv->num_if_indices; i++) { in del_ifidx()
8443 if ((drv->if_indices[i].ifindex == ifidx || in del_ifidx()
8445 (drv->if_indices[i].reason == ifidx_reason || in del_ifidx()
8447 drv->if_indices[i].ifindex = 0; in del_ifidx()
8448 drv->if_indices[i].reason = 0; in del_ifidx()
8452 dump_ifidx(drv); in del_ifidx()
8456 static int have_ifidx(struct wpa_driver_nl80211_data *drv, int ifidx, in have_ifidx() argument
8461 for (i = 0; i < drv->num_if_indices; i++) in have_ifidx()
8462 if (drv->if_indices[i].ifindex == ifidx && in have_ifidx()
8463 (drv->if_indices[i].reason == ifidx_reason || in have_ifidx()
8475 struct wpa_driver_nl80211_data *drv = bss->drv; in i802_set_wds_sta() local
8494 if (nl80211_create_iface(drv, name, in i802_set_wds_sta()
8500 linux_br_add_if(drv->global->ioctl_sock, in i802_set_wds_sta()
8512 if (linux_set_iface_flags(drv->global->ioctl_sock, name, 1)) { in i802_set_wds_sta()
8520 linux_br_del_if(drv->global->ioctl_sock, bridge_ifname, in i802_set_wds_sta()
8528 nl80211_remove_iface(drv, if_nametoindex(name)); in i802_set_wds_sta()
8542 struct wpa_driver_nl80211_data *drv = eloop_ctx; in handle_eapol() local
8556 if (have_ifidx(drv, lladdr.sll_ifindex, IFIDX_ANY)) in handle_eapol()
8557 drv_event_eapol_rx(drv->ctx, lladdr.sll_addr, buf, len); in handle_eapol()
8561 static int i802_check_bridge(struct wpa_driver_nl80211_data *drv, in i802_check_bridge() argument
8575 if (linux_br_add(drv->global->ioctl_sock, brname) < 0) { in i802_check_bridge()
8583 add_ifidx(drv, br_ifindex, drv->ifindex); in i802_check_bridge()
8595 if (linux_br_del_if(drv->global->ioctl_sock, in_br, ifname) < in i802_check_bridge()
8607 if (linux_br_add_if(drv->global->ioctl_sock, brname, ifname) < 0) { in i802_check_bridge()
8626 struct wpa_driver_nl80211_data *drv; in i802_init() local
8639 drv = bss->drv; in i802_init()
8651 add_ifidx(drv, if_nametoindex(master_ifname), drv->ifindex); in i802_init()
8670 add_ifidx(drv, ifindex, drv->ifindex); in i802_init()
8677 add_ifidx(drv, drv->ifindex, IFIDX_ANY); in i802_init()
8680 if (i802_check_bridge(drv, bss, params->bridge[0], in i802_init()
8689 add_ifidx(drv, br_ifindex, drv->ifindex); in i802_init()
8694 drv->rtnl_sk = nl_socket_alloc(); in i802_init()
8695 if (drv->rtnl_sk == NULL) { in i802_init()
8700 err = nl_connect(drv->rtnl_sk, NETLINK_ROUTE); in i802_init()
8708 if (drv->capa.flags2 & WPA_DRIVER_FLAGS2_CONTROL_PORT_RX) { in i802_init()
8714 drv->eapol_sock = socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_PAE)); in i802_init()
8715 if (drv->eapol_sock < 0) { in i802_init()
8721 if (eloop_register_read_sock(drv->eapol_sock, handle_eapol, drv, NULL)) in i802_init()
8728 if (linux_get_ifhwaddr(drv->global->ioctl_sock, bss->ifname, in i802_init()
8731 os_memcpy(drv->perm_addr, params->own_addr, ETH_ALEN); in i802_init()
8777 struct wpa_driver_nl80211_data *drv; in nl80211_addr_in_use() local
8778 dl_list_for_each(drv, &global->interfaces, in nl80211_addr_in_use()
8780 if (ether_addr_equal(addr, drv->first_bss->addr)) in nl80211_addr_in_use()
8787 static int nl80211_vif_addr(struct wpa_driver_nl80211_data *drv, u8 *new_addr) in nl80211_vif_addr() argument
8791 if (!drv->global) in nl80211_vif_addr()
8794 os_memcpy(new_addr, drv->first_bss->addr, ETH_ALEN); in nl80211_vif_addr()
8796 new_addr[0] = drv->first_bss->addr[0] | 0x02; in nl80211_vif_addr()
8798 if (!nl80211_addr_in_use(drv->global, new_addr)) in nl80211_vif_addr()
8847 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_if_add() local
8858 ifidx = nl80211_create_iface(drv, ifname, nlmode, addr, in wpa_driver_nl80211_if_add()
8867 drv->global->if_add_wdevid = p2pdev_info.wdev_id; in wpa_driver_nl80211_if_add()
8868 drv->global->if_add_wdevid_set = p2pdev_info.wdev_id_set; in wpa_driver_nl80211_if_add()
8875 ifidx = nl80211_create_iface(drv, ifname, nlmode, addr, in wpa_driver_nl80211_if_add()
8888 else if (linux_get_ifhwaddr(drv->global->ioctl_sock, in wpa_driver_nl80211_if_add()
8891 nl80211_remove_iface(drv, ifidx); in wpa_driver_nl80211_if_add()
8903 if (linux_get_ifhwaddr(drv->global->ioctl_sock, ifname, in wpa_driver_nl80211_if_add()
8906 nl80211_remove_iface(drv, ifidx); in wpa_driver_nl80211_if_add()
8909 if (nl80211_addr_in_use(drv->global, new_addr)) { in wpa_driver_nl80211_if_add()
8912 if (nl80211_vif_addr(drv, new_addr) < 0) { in wpa_driver_nl80211_if_add()
8914 nl80211_remove_iface(drv, ifidx); in wpa_driver_nl80211_if_add()
8917 if (linux_set_ifhwaddr(drv->global->ioctl_sock, ifname, in wpa_driver_nl80211_if_add()
8920 nl80211_remove_iface(drv, ifidx); in wpa_driver_nl80211_if_add()
8932 nl80211_remove_iface(drv, ifidx); in wpa_driver_nl80211_if_add()
8937 i802_check_bridge(drv, new_bss, bridge, ifname) < 0) { in wpa_driver_nl80211_if_add()
8942 nl80211_remove_iface(drv, ifidx); in wpa_driver_nl80211_if_add()
8947 if (linux_set_iface_flags(drv->global->ioctl_sock, ifname, 1)) in wpa_driver_nl80211_if_add()
8950 nl80211_remove_iface(drv, ifidx); in wpa_driver_nl80211_if_add()
8957 new_bss->drv = drv; in wpa_driver_nl80211_if_add()
8958 new_bss->next = drv->first_bss->next; in wpa_driver_nl80211_if_add()
8963 new_bss->flink->freq = drv->first_bss->flink->freq; in wpa_driver_nl80211_if_add()
8966 drv->first_bss->next = new_bss; in wpa_driver_nl80211_if_add()
8976 if (drv->global) in wpa_driver_nl80211_if_add()
8977 drv->global->if_add_ifindex = ifidx; in wpa_driver_nl80211_if_add()
8984 (drv->hostapd || in wpa_driver_nl80211_if_add()
8988 add_ifidx(drv, ifidx, IFIDX_ANY); in wpa_driver_nl80211_if_add()
8998 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_if_remove() local
9004 nl80211_remove_iface(drv, ifindex); in wpa_driver_nl80211_if_remove()
9007 dl_list_for_each(drv2, &drv->global->interfaces, in wpa_driver_nl80211_if_remove()
9018 if (linux_br_del_if(drv->global->ioctl_sock, bss->brname, in wpa_driver_nl80211_if_remove()
9025 if (linux_br_del(drv->global->ioctl_sock, bss->brname) < 0) in wpa_driver_nl80211_if_remove()
9031 if (bss != drv->first_bss) { in wpa_driver_nl80211_if_remove()
9035 for (tbss = drv->first_bss; tbss; tbss = tbss->next) { in wpa_driver_nl80211_if_remove()
9056 if (!bss->added_if && !drv->first_bss->next) in wpa_driver_nl80211_if_remove()
9061 if (drv->first_bss->next) { in wpa_driver_nl80211_if_remove()
9062 drv->first_bss = drv->first_bss->next; in wpa_driver_nl80211_if_remove()
9063 drv->ctx = drv->first_bss->ctx; in wpa_driver_nl80211_if_remove()
9064 drv->ifindex = drv->first_bss->ifindex; in wpa_driver_nl80211_if_remove()
9095 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_send_frame_cmd() local
9110 (offchanok && ((drv->capa.flags & WPA_DRIVER_FLAGS_OFFCHANNEL_TX) || in nl80211_send_frame_cmd()
9111 drv->test_use_roc_tx) && in nl80211_send_frame_cmd()
9121 ret = send_and_recv_resp(drv, msg, cookie_handler, &cookie); in nl80211_send_frame_cmd()
9133 drv->send_frame_cookie = no_ack ? (u64) -1 : cookie; in nl80211_send_frame_cmd()
9140 if (drv->num_send_frame_cookies == MAX_SEND_FRAME_COOKIES) { in nl80211_send_frame_cmd()
9144 drv->send_frame_cookies[0]); in nl80211_send_frame_cmd()
9145 os_memmove(&drv->send_frame_cookies[0], in nl80211_send_frame_cmd()
9146 &drv->send_frame_cookies[1], in nl80211_send_frame_cmd()
9149 drv->num_send_frame_cookies--; in nl80211_send_frame_cmd()
9151 drv->send_frame_cookies[drv->num_send_frame_cookies] = cookie; in nl80211_send_frame_cmd()
9152 drv->num_send_frame_cookies++; in nl80211_send_frame_cmd()
9169 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_send_action() local
9175 if (is_ap_interface(drv->nlmode) && (int) freq == bss->flink->freq && in wpa_driver_nl80211_send_action()
9179 if (!freq && is_sta_interface(drv->nlmode)) in wpa_driver_nl80211_send_action()
9185 drv->ifindex, freq, wait_time, no_cck, offchanok, in wpa_driver_nl80211_send_action()
9208 if (is_mesh_interface(drv->nlmode)) { in wpa_driver_nl80211_send_action()
9229 if (is_ap_interface(drv->nlmode) && in wpa_driver_nl80211_send_action()
9230 (!(drv->capa.flags & WPA_DRIVER_FLAGS_OFFCHANNEL_TX) || in wpa_driver_nl80211_send_action()
9231 (int) freq == bss->flink->freq || drv->device_ap_sme || in wpa_driver_nl80211_send_action()
9232 !drv->use_monitor)) in wpa_driver_nl80211_send_action()
9249 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_frame_wait_cancel() local
9261 ret = send_and_recv_cmd(drv, msg); in nl80211_frame_wait_cancel()
9271 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_send_action_cancel_wait() local
9276 if (drv->send_frame_cookie != (u64) -1) in wpa_driver_nl80211_send_action_cancel_wait()
9277 nl80211_frame_wait_cancel(bss, drv->send_frame_cookie); in wpa_driver_nl80211_send_action_cancel_wait()
9284 for (i = drv->num_send_frame_cookies; i > 0; i--) { in wpa_driver_nl80211_send_action_cancel_wait()
9285 cookie = drv->send_frame_cookies[i - 1]; in wpa_driver_nl80211_send_action_cancel_wait()
9286 if (cookie != drv->send_frame_cookie) in wpa_driver_nl80211_send_action_cancel_wait()
9289 drv->num_send_frame_cookies = 0; in wpa_driver_nl80211_send_action_cancel_wait()
9334 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_remain_on_channel() local
9342 nl80211_put_any_link_id(msg, &drv->sta_mlo_info, freq)) { in wpa_driver_nl80211_remain_on_channel()
9348 ret = send_and_recv_resp(drv, msg, cookie_handler, &cookie); in wpa_driver_nl80211_remain_on_channel()
9353 drv->remain_on_chan_cookie = cookie; in wpa_driver_nl80211_remain_on_channel()
9354 drv->pending_remain_on_chan = 1; in wpa_driver_nl80211_remain_on_channel()
9367 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_cancel_remain_on_channel() local
9371 if (!drv->pending_remain_on_chan) { in wpa_driver_nl80211_cancel_remain_on_channel()
9379 (long long unsigned int) drv->remain_on_chan_cookie); in wpa_driver_nl80211_cancel_remain_on_channel()
9383 nla_put_u64(msg, NL80211_ATTR_COOKIE, drv->remain_on_chan_cookie)) { in wpa_driver_nl80211_cancel_remain_on_channel()
9388 ret = send_and_recv_cmd(drv, msg); in wpa_driver_nl80211_cancel_remain_on_channel()
9399 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_probe_req_report() local
9402 if (bss->nl_preq && drv->device_ap_sme && in wpa_driver_nl80211_probe_req_report()
9403 is_ap_interface(drv->nlmode) && !bss->in_deinit && in wpa_driver_nl80211_probe_req_report()
9426 bss->nl_preq = nl_create_handle(drv->global->nl_cb, "preq"); in wpa_driver_nl80211_probe_req_report()
9450 static int nl80211_disable_11b_rates(struct wpa_driver_nl80211_data *drv, in nl80211_disable_11b_rates() argument
9462 msg = nl80211_ifindex_msg(drv, ifindex, 0, in nl80211_disable_11b_rates()
9485 ret = send_and_recv_cmd(drv, msg); in nl80211_disable_11b_rates()
9490 drv->disabled_11b_rates = disabled; in nl80211_disable_11b_rates()
9502 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_remove_link() local
9552 ret = send_and_recv_cmd(drv, msg); in nl80211_remove_link()
9581 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_deinit_ap() local
9583 if (!is_ap_interface(drv->nlmode)) in wpa_driver_nl80211_deinit_ap()
9595 if (drv->nlmode == NL80211_IFTYPE_P2P_GO && bss->if_dynamic) in wpa_driver_nl80211_deinit_ap()
9605 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_stop_ap() local
9607 if (!is_ap_interface(drv->nlmode)) in wpa_driver_nl80211_stop_ap()
9627 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_deinit_p2p_cli() local
9628 if (drv->nlmode != NL80211_IFTYPE_P2P_CLIENT) in wpa_driver_nl80211_deinit_p2p_cli()
9651 nl80211_disable_11b_rates(bss->drv, bss->drv->ifindex, 1); in wpa_driver_nl80211_resume()
9658 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_signal_monitor() local
9674 return send_and_recv_cmd(drv, msg); in nl80211_signal_monitor()
9706 static int nl80211_get_channel_width(struct wpa_driver_nl80211_data *drv, in nl80211_get_channel_width() argument
9711 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_GET_INTERFACE); in nl80211_get_channel_width()
9712 return send_and_recv_resp(drv, msg, get_channel_width, sig); in nl80211_get_channel_width()
9719 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_signal_poll() local
9723 res = nl80211_get_link_signal(drv, drv->bssid, &si->data); in nl80211_signal_poll()
9725 if (drv->nlmode != NL80211_IFTYPE_ADHOC && in nl80211_signal_poll()
9726 drv->nlmode != NL80211_IFTYPE_MESH_POINT) in nl80211_signal_poll()
9731 res = nl80211_get_channel_width(drv, si); in nl80211_signal_poll()
9735 return nl80211_get_link_noise(drv, si); in nl80211_signal_poll()
9787 static int nl80211_get_links_noise(struct wpa_driver_nl80211_data *drv, in nl80211_get_links_noise() argument
9792 msg = nl80211_drv_msg(drv, NLM_F_DUMP, NL80211_CMD_GET_SURVEY); in nl80211_get_links_noise()
9793 return send_and_recv_resp(drv, msg, get_links_noise, mlo_sig); in nl80211_get_links_noise()
9841 static int nl80211_get_links_channel_width(struct wpa_driver_nl80211_data *drv, in nl80211_get_links_channel_width() argument
9846 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_GET_INTERFACE); in nl80211_get_links_channel_width()
9847 return send_and_recv_resp(drv, msg, get_links_channel_width, mlo_sig); in nl80211_get_links_channel_width()
9855 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_mlo_signal_poll() local
9859 if (drv->nlmode != NL80211_IFTYPE_STATION || in nl80211_mlo_signal_poll()
9860 !drv->sta_mlo_info.valid_links) in nl80211_mlo_signal_poll()
9864 mlo_si->valid_links = drv->sta_mlo_info.valid_links; in nl80211_mlo_signal_poll()
9867 res = nl80211_get_link_signal(drv, in nl80211_mlo_signal_poll()
9868 drv->sta_mlo_info.links[i].bssid, in nl80211_mlo_signal_poll()
9877 mlo_si->links[i].frequency = drv->sta_mlo_info.links[i].freq; in nl80211_mlo_signal_poll()
9880 res = nl80211_get_links_channel_width(drv, mlo_si); in nl80211_mlo_signal_poll()
9884 return nl80211_get_links_noise(drv, mlo_si); in nl80211_mlo_signal_poll()
9891 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_param() local
9901 drv->capa.flags |= WPA_DRIVER_FLAGS_P2P_CONCURRENT; in nl80211_set_param()
9902 drv->capa.flags |= WPA_DRIVER_FLAGS_P2P_MGMT_AND_NON_P2P; in nl80211_set_param()
9907 drv->use_monitor = 1; in nl80211_set_param()
9910 drv->capa.flags &= ~WPA_DRIVER_FLAGS_SME; in nl80211_set_param()
9911 drv->force_connect_cmd = 1; in nl80211_set_param()
9915 drv->capa.flags |= WPA_DRIVER_FLAGS_BSS_SELECTION; in nl80211_set_param()
9918 drv->capa.flags &= ~WPA_DRIVER_FLAGS_OFFCHANNEL_TX; in nl80211_set_param()
9919 drv->test_use_roc_tx = 1; in nl80211_set_param()
9923 drv->capa.flags &= ~WPA_DRIVER_FLAGS_CONTROL_PORT; in nl80211_set_param()
9924 drv->capa.flags2 &= ~(WPA_DRIVER_FLAGS2_CONTROL_PORT_RX | in nl80211_set_param()
9926 drv->control_port_ap = 0; in nl80211_set_param()
9930 drv->control_port_ap = 1; in nl80211_set_param()
9933 drv->capa.flags2 &= ~WPA_DRIVER_FLAGS2_CONTROL_PORT_TX_STATUS; in nl80211_set_param()
9934 drv->control_port_ap = 0; in nl80211_set_param()
9938 drv->capa.flags &= ~WPA_DRIVER_FLAGS_FULL_AP_CLIENT_STATE; in nl80211_set_param()
9941 drv->no_rrm = 1; in nl80211_set_param()
9943 if (!bss->in_deinit && !is_ap_interface(drv->nlmode) && in nl80211_set_param()
9944 !is_mesh_interface(drv->nlmode)) { in nl80211_set_param()
9953 drv->capa.flags2 |= WPA_DRIVER_FLAGS2_SEC_LTF_STA | in nl80211_set_param()
9958 drv->capa.flags2 |= WPA_DRIVER_FLAGS2_RSN_OVERRIDE_STA; in nl80211_set_param()
10046 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_get_radio_name() local
10047 return drv->phyname; in nl80211_get_radio_name()
10085 return send_and_recv_cmd(bss->drv, msg); in nl80211_pmkid()
10161 return send_and_recv_cmd(bss->drv, msg); in nl80211_flush_pmkid()
10305 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_get_survey() local
10316 msg = nl80211_drv_msg(drv, NLM_F_DUMP, NL80211_CMD_GET_SURVEY); in wpa_driver_nl80211_get_survey()
10325 err = send_and_recv_resp(drv, msg, survey_handler, in wpa_driver_nl80211_get_survey()
10332 wpa_supplicant_event(drv->ctx, EVENT_SURVEY, &data); in wpa_driver_nl80211_get_survey()
10344 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_rekey_info() local
10349 if (!drv->set_rekey_offload) in nl80211_set_rekey_info()
10366 ret = send_and_recv_cmd(drv, msg); in nl80211_set_rekey_info()
10370 drv->set_rekey_offload = 0; in nl80211_set_rekey_info()
10417 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_poll_client() local
10422 if (!drv->poll_command_supported) { in nl80211_poll_client()
10433 ret = send_and_recv_resp(drv, msg, cookie_handler, &cookie); in nl80211_poll_client()
10459 ret = send_and_recv_cmd(bss->drv, msg); in nl80211_set_power_save()
10499 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_start_radar_detection() local
10507 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_RADAR)) { in nl80211_start_radar_detection()
10513 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_RADAR_DETECT)) || in nl80211_start_radar_detection()
10519 ret = send_and_recv_cmd(drv, msg); in nl80211_start_radar_detection()
10552 nl80211_tdls_set_discovery_resp_link(struct wpa_driver_nl80211_data *drv, in nl80211_tdls_set_discovery_resp_link() argument
10562 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_tdls_set_discovery_resp_link()
10563 nla_put_u32(msg, NL80211_ATTR_IFINDEX, drv->ifindex) || in nl80211_tdls_set_discovery_resp_link()
10578 return send_and_recv_cmd(drv, msg); in nl80211_tdls_set_discovery_resp_link()
10593 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_send_tdls_mgmt() local
10596 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_TDLS_SUPPORT)) in nl80211_send_tdls_mgmt()
10603 nl80211_tdls_set_discovery_resp_link(drv, link_id) < 0) in nl80211_send_tdls_mgmt()
10606 if (link_id < 0 && drv->sta_mlo_info.valid_links) in nl80211_send_tdls_mgmt()
10607 link_id = drv->sta_mlo_info.assoc_link_id; in nl80211_send_tdls_mgmt()
10609 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_TDLS_MGMT)) || in nl80211_send_tdls_mgmt()
10621 return send_and_recv_cmd(drv, msg); in nl80211_send_tdls_mgmt()
10632 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_tdls_oper() local
10637 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_TDLS_SUPPORT)) in nl80211_tdls_oper()
10664 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_TDLS_OPER)) || in nl80211_tdls_oper()
10671 res = send_and_recv_cmd(drv, msg); in nl80211_tdls_oper()
10684 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_tdls_enable_channel_switch() local
10688 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_TDLS_SUPPORT) || in nl80211_tdls_enable_channel_switch()
10689 !(drv->capa.flags & WPA_DRIVER_FLAGS_TDLS_CHANNEL_SWITCH)) in nl80211_tdls_enable_channel_switch()
10705 return send_and_recv_cmd(drv, msg); in nl80211_tdls_enable_channel_switch()
10713 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_tdls_disable_channel_switch() local
10716 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_TDLS_SUPPORT) || in nl80211_tdls_disable_channel_switch()
10717 !(drv->capa.flags & WPA_DRIVER_FLAGS_TDLS_CHANNEL_SWITCH)) in nl80211_tdls_disable_channel_switch()
10731 return send_and_recv_cmd(drv, msg); in nl80211_tdls_disable_channel_switch()
10751 struct wpa_driver_nl80211_data *drv = bss->drv; in driver_nl80211_scan2() local
10760 if (drv->scan_vendor_cmd_avail && !params->only_new_results) in driver_nl80211_scan2()
10804 struct wpa_driver_nl80211_data *drv = bss->drv; in driver_nl80211_link_remove() local
10818 if (drv->first_bss == bss && bss->valid_links) in driver_nl80211_link_remove()
10819 drv->ctx = bss->ctx; in driver_nl80211_link_remove()
10834 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_is_drv_shared() local
10841 for (bss = drv->first_bss; bss; bss = bss->next) { in nl80211_is_drv_shared()
10932 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_update_ft_ies() local
10936 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_UPDATE_FT_IES)) || in wpa_driver_nl80211_update_ft_ies()
10943 ret = send_and_recv_cmd(drv, msg); in wpa_driver_nl80211_update_ft_ies()
10959 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_update_dh_ie() local
10971 ret = send_and_recv_cmd(drv, msg); in nl80211_update_dh_ie()
10985 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_get_macaddr() local
10987 if (drv->nlmode != NL80211_IFTYPE_P2P_DEVICE) in wpa_driver_nl80211_get_macaddr()
11022 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_status() local
11080 drv->phyname, in wpa_driver_nl80211_status()
11081 MAC2STR(drv->perm_addr), in wpa_driver_nl80211_status()
11082 drv->ifindex, in wpa_driver_nl80211_status()
11083 drv->operstate, in wpa_driver_nl80211_status()
11084 scan_state_str(drv->scan_state), in wpa_driver_nl80211_status()
11085 MAC2STR(drv->auth_bssid), in wpa_driver_nl80211_status()
11086 MAC2STR(drv->auth_attempt_bssid), in wpa_driver_nl80211_status()
11087 MAC2STR(drv->bssid), in wpa_driver_nl80211_status()
11088 MAC2STR(drv->prev_bssid), in wpa_driver_nl80211_status()
11089 drv->associated, in wpa_driver_nl80211_status()
11090 drv->assoc_freq, in wpa_driver_nl80211_status()
11091 drv->monitor_sock, in wpa_driver_nl80211_status()
11092 drv->monitor_ifidx, in wpa_driver_nl80211_status()
11093 drv->monitor_refcount, in wpa_driver_nl80211_status()
11094 drv->last_mgmt_freq, in wpa_driver_nl80211_status()
11095 drv->eapol_tx_sock, in wpa_driver_nl80211_status()
11096 drv->ignore_if_down_event ? in wpa_driver_nl80211_status()
11098 drv->scan_complete_events ? in wpa_driver_nl80211_status()
11100 drv->disabled_11b_rates ? in wpa_driver_nl80211_status()
11102 drv->pending_remain_on_chan ? in wpa_driver_nl80211_status()
11104 drv->in_interface_list ? "in_interface_list=1\n" : "", in wpa_driver_nl80211_status()
11105 drv->device_ap_sme ? "device_ap_sme=1\n" : "", in wpa_driver_nl80211_status()
11106 drv->poll_command_supported ? in wpa_driver_nl80211_status()
11108 drv->data_tx_status ? "data_tx_status=1\n" : "", in wpa_driver_nl80211_status()
11109 drv->scan_for_auth ? "scan_for_auth=1\n" : "", in wpa_driver_nl80211_status()
11110 drv->retry_auth ? "retry_auth=1\n" : "", in wpa_driver_nl80211_status()
11111 drv->use_monitor ? "use_monitor=1\n" : "", in wpa_driver_nl80211_status()
11112 drv->ignore_next_local_disconnect ? in wpa_driver_nl80211_status()
11114 drv->ignore_next_local_deauth ? in wpa_driver_nl80211_status()
11120 if (drv->sta_mlo_info.valid_links) { in wpa_driver_nl80211_status()
11122 struct driver_sta_mlo_info *mlo = &drv->sta_mlo_info; in wpa_driver_nl80211_status()
11159 if (drv->has_capability) { in wpa_driver_nl80211_status()
11186 drv->capa.key_mgmt, in wpa_driver_nl80211_status()
11187 drv->capa.enc, in wpa_driver_nl80211_status()
11188 drv->capa.auth, in wpa_driver_nl80211_status()
11189 (unsigned long long) drv->capa.flags, in wpa_driver_nl80211_status()
11190 (unsigned long long) drv->capa.flags2, in wpa_driver_nl80211_status()
11191 drv->capa.rrm_flags, in wpa_driver_nl80211_status()
11192 drv->capa.max_scan_ssids, in wpa_driver_nl80211_status()
11193 drv->capa.max_sched_scan_ssids, in wpa_driver_nl80211_status()
11194 drv->capa.sched_scan_supported, in wpa_driver_nl80211_status()
11195 drv->capa.max_match_sets, in wpa_driver_nl80211_status()
11196 drv->capa.max_remain_on_chan, in wpa_driver_nl80211_status()
11197 drv->capa.max_stations, in wpa_driver_nl80211_status()
11198 drv->capa.probe_resp_offloads, in wpa_driver_nl80211_status()
11199 drv->capa.max_acl_mac_addrs, in wpa_driver_nl80211_status()
11200 drv->capa.num_multichan_concurrent, in wpa_driver_nl80211_status()
11201 drv->capa.mac_addr_rand_sched_scan_supported, in wpa_driver_nl80211_status()
11202 drv->capa.mac_addr_rand_scan_supported, in wpa_driver_nl80211_status()
11203 drv->capa.conc_capab, in wpa_driver_nl80211_status()
11204 drv->capa.max_conc_chan_2_4, in wpa_driver_nl80211_status()
11205 drv->capa.max_conc_chan_5_0, in wpa_driver_nl80211_status()
11206 drv->capa.max_sched_scan_plans, in wpa_driver_nl80211_status()
11207 drv->capa.max_sched_scan_plan_interval, in wpa_driver_nl80211_status()
11208 drv->capa.max_sched_scan_plan_iterations, in wpa_driver_nl80211_status()
11209 drv->capa.mbssid_max_interfaces, in wpa_driver_nl80211_status()
11210 drv->capa.ema_max_periodicity); in wpa_driver_nl80211_status()
11218 nl80211_cmd(drv, msg, 0, NL80211_CMD_GET_REG) && in wpa_driver_nl80211_status()
11219 nla_put_u32(msg, NL80211_ATTR_WIPHY, drv->wiphy_idx) == 0) { in wpa_driver_nl80211_status()
11220 if (send_and_recv_resp(drv, msg, nl80211_get_country, in wpa_driver_nl80211_status()
11267 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_switch_channel() local
11288 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_AP_CSA)) { in nl80211_switch_channel()
11293 if (drv->nlmode != NL80211_IFTYPE_AP && in nl80211_switch_channel()
11294 drv->nlmode != NL80211_IFTYPE_P2P_GO && in nl80211_switch_channel()
11295 drv->nlmode != NL80211_IFTYPE_MESH_POINT) in nl80211_switch_channel()
11322 if (drv->capa.max_csa_counters && in nl80211_switch_channel()
11323 csa_off_len > drv->capa.max_csa_counters) { in nl80211_switch_channel()
11393 ret = send_and_recv_cmd(drv, msg); in nl80211_switch_channel()
11413 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_switch_color() local
11422 if (drv->nlmode != NL80211_IFTYPE_AP) in nl80211_switch_color()
11495 ret = send_and_recv_cmd(drv, msg); in nl80211_switch_color()
11515 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_add_ts() local
11523 if (!is_sta_interface(drv->nlmode)) in nl80211_add_ts()
11536 ret = send_and_recv_cmd(drv, msg); in nl80211_add_ts()
11547 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_del_ts() local
11553 if (!is_sta_interface(drv->nlmode)) in nl80211_del_ts()
11563 ret = send_and_recv_cmd(drv, msg); in nl80211_del_ts()
11650 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_vendor_cmd() local
11660 nl80211_cmd(drv, msg, 0, subcmd); in nl80211_vendor_cmd()
11667 ret = send_and_recv(drv->global, bss->nl_connect, msg, in nl80211_vendor_cmd()
11692 ret = send_and_recv_resp(drv, msg, vendor_reply_handler, buf); in nl80211_vendor_cmd()
11708 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_qos_map() local
11721 ret = send_and_recv_cmd(drv, msg); in nl80211_set_qos_map()
11747 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_get_wowlan() local
11754 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_GET_WOWLAN); in nl80211_get_wowlan()
11756 ret = send_and_recv_resp(drv, msg, get_wowlan_handler, &wowlan_enabled); in nl80211_get_wowlan()
11773 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_wowlan() local
11803 ret = send_and_recv_cmd(drv, msg); in nl80211_set_wowlan()
11815 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_roaming() local
11821 if (!drv->roaming_vendor_cmd_avail) { in nl80211_roaming()
11827 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_roaming()
11842 return send_and_recv_cmd(drv, msg); in nl80211_roaming()
11849 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_disable_fils() local
11855 if (!drv->set_wifi_conf_vendor_cmd_avail) in nl80211_disable_fils()
11858 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_disable_fils()
11870 return send_and_recv_cmd(drv, msg); in nl80211_disable_fils()
11881 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_bssid_tmp_disallow() local
11890 if (!drv->roam_vendor_cmd_avail) in nl80211_set_bssid_tmp_disallow()
11893 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_set_bssid_tmp_disallow()
11927 return send_and_recv_cmd(drv, msg); in nl80211_set_bssid_tmp_disallow()
11938 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_add_sta_node() local
11942 if (!drv->add_sta_node_vendor_cmd_avail) in nl80211_add_sta_node()
11947 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_add_sta_node()
11965 return send_and_recv_cmd(drv, msg); in nl80211_add_sta_node()
11974 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_mac_addr() local
11981 addr = drv->perm_addr; in nl80211_set_mac_addr()
11983 if (linux_set_iface_flags(drv->global->ioctl_sock, bss->ifname, 0) < 0) in nl80211_set_mac_addr()
11986 if (linux_set_ifhwaddr(drv->global->ioctl_sock, bss->ifname, addr) < 0) in nl80211_set_mac_addr()
11991 if (linux_set_iface_flags(drv->global->ioctl_sock, bss->ifname, in nl80211_set_mac_addr()
12001 drv->addr_changed = new_addr; in nl80211_set_mac_addr()
12005 if (linux_set_iface_flags(drv->global->ioctl_sock, bss->ifname, 1) < 0) in nl80211_set_mac_addr()
12090 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_join_mesh() local
12095 wpa_printf(MSG_DEBUG, "nl80211: mesh join (ifindex=%d)", drv->ifindex); in nl80211_join_mesh()
12096 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_JOIN_MESH); in nl80211_join_mesh()
12142 ret = send_and_recv(drv->global, bss->nl_connect, msg, NULL, NULL, NULL, in nl80211_join_mesh()
12151 drv->assoc_freq = bss->flink->freq = params->freq.freq; in nl80211_join_mesh()
12194 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_leave_mesh() local
12198 wpa_printf(MSG_DEBUG, "nl80211: mesh leave (ifindex=%d)", drv->ifindex); in wpa_driver_nl80211_leave_mesh()
12199 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_LEAVE_MESH); in wpa_driver_nl80211_leave_mesh()
12200 ret = send_and_recv(drv->global, bss->nl_connect, msg, NULL, NULL, NULL, in wpa_driver_nl80211_leave_mesh()
12208 drv->first_bss->flink->freq = 0; in wpa_driver_nl80211_leave_mesh()
12211 if (drv->start_mode_sta && in wpa_driver_nl80211_leave_mesh()
12212 wpa_driver_nl80211_set_mode(drv->first_bss, in wpa_driver_nl80211_leave_mesh()
12225 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_probe_mesh_link() local
12229 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_PROBE_MESH_LINK); in nl80211_probe_mesh_link()
12237 ret = send_and_recv_cmd(drv, msg); in nl80211_probe_mesh_link()
12258 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_br_add_ip_neigh() local
12276 if (!drv->rtnl_sk) { in wpa_driver_br_add_ip_neigh()
12302 res = nl_send_auto_complete(drv->rtnl_sk, msg); in wpa_driver_br_add_ip_neigh()
12306 res = nl_wait_for_ack(drv->rtnl_sk); in wpa_driver_br_add_ip_neigh()
12322 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_br_delete_ip_neigh() local
12350 if (!drv->rtnl_sk) { in wpa_driver_br_delete_ip_neigh()
12365 res = nl_send_auto_complete(drv->rtnl_sk, msg); in wpa_driver_br_delete_ip_neigh()
12369 res = nl_wait_for_ack(drv->rtnl_sk); in wpa_driver_br_delete_ip_neigh()
12576 static int nl80211_qca_do_acs(struct wpa_driver_nl80211_data *drv, in nl80211_qca_do_acs() argument
12588 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_qca_do_acs()
12622 ret = send_and_recv_cmd(drv, msg); in nl80211_qca_do_acs()
12635 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_band() local
12642 if (!drv->setband_vendor_cmd_avail || in nl80211_set_band()
12666 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_set_band()
12680 ret = send_and_recv_cmd(drv, msg); in nl80211_set_band()
12826 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_get_pref_freq_list() local
12834 if (!drv->get_pref_freq_list) in nl80211_get_pref_freq_list()
12863 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_get_pref_freq_list()
12864 nla_put_u32(msg, NL80211_ATTR_IFINDEX, drv->ifindex) || in nl80211_get_pref_freq_list()
12882 ret = send_and_recv_resp(drv, msg, preferred_freq_info_handler, &param); in nl80211_get_pref_freq_list()
12905 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_prob_oper_freq() local
12910 if (!drv->set_prob_oper_freq) in nl80211_set_prob_oper_freq()
12917 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_set_prob_oper_freq()
12936 ret = send_and_recv_cmd(drv, msg); in nl80211_set_prob_oper_freq()
12955 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_p2p_lo_start() local
12964 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_P2P_LISTEN_OFFLOAD)) in nl80211_p2p_lo_start()
12967 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_p2p_lo_start()
12992 ret = send_and_recv_cmd(drv, msg); in nl80211_p2p_lo_start()
13011 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_p2p_lo_stop() local
13016 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_P2P_LISTEN_OFFLOAD)) in nl80211_p2p_lo_stop()
13019 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_p2p_lo_stop()
13027 return send_and_recv_cmd(drv, msg); in nl80211_p2p_lo_stop()
13034 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_tdls_mode() local
13050 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_set_tdls_mode()
13066 ret = send_and_recv_cmd(drv, msg); in nl80211_set_tdls_mode()
13190 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_get_bss_transition_status() local
13198 if (!drv->fetch_bss_trans_status) in nl80211_get_bss_transition_status()
13220 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_get_bss_transition_status()
13257 ret = send_and_recv_resp(drv, msg, in nl80211_get_bss_transition_status()
13286 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_ignore_assoc_disallow() local
13291 if (!drv->set_wifi_conf_vendor_cmd_avail) in nl80211_ignore_assoc_disallow()
13294 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in nl80211_ignore_assoc_disallow()
13312 ret = send_and_recv_cmd(drv, msg); in nl80211_ignore_assoc_disallow()
13337 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_send_pasn_resp() local
13339 wpa_dbg(drv->ctx, MSG_DEBUG, in nl80211_send_pasn_resp()
13342 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR); in nl80211_send_pasn_resp()
13383 return send_and_recv_cmd(drv, msg); in nl80211_send_pasn_resp()
13411 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_secure_ranging_ctx() local
13415 if (!drv->secure_ranging_ctx_vendor_cmd_avail) in nl80211_set_secure_ranging_ctx()
13421 wpa_dbg(drv->ctx, MSG_DEBUG, in nl80211_set_secure_ranging_ctx()
13425 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR); in nl80211_set_secure_ranging_ctx()
13479 ret = send_and_recv_cmd(drv, msg); in nl80211_set_secure_ranging_ctx()
13496 static int wpa_driver_do_broadcom_acs(struct wpa_driver_nl80211_data *drv, in wpa_driver_do_broadcom_acs() argument
13508 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR); in wpa_driver_do_broadcom_acs()
13533 ret = send_and_recv_cmd(drv, msg); in wpa_driver_do_broadcom_acs()
13552 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_do_acs() local
13556 if (drv->qca_do_acs) in nl80211_do_acs()
13557 return nl80211_qca_do_acs(drv, params); in nl80211_do_acs()
13561 if (drv->brcm_do_acs) in nl80211_do_acs()
13562 return wpa_driver_do_broadcom_acs(drv, params); in nl80211_do_acs()
13684 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_get_ext_capab() local
13694 *ext_capa = drv->extended_capa; in nl80211_get_ext_capab()
13695 *ext_capa_mask = drv->extended_capa_mask; in nl80211_get_ext_capab()
13696 *ext_capa_len = drv->extended_capa_len; in nl80211_get_ext_capab()
13699 for (i = 0; i < drv->num_iface_capa; i++) { in nl80211_get_ext_capab()
13700 if (nlmode == drv->iface_capa[i].iftype) { in nl80211_get_ext_capab()
13701 *ext_capa = drv->iface_capa[i].ext_capa; in nl80211_get_ext_capab()
13702 *ext_capa_mask = drv->iface_capa[i].ext_capa_mask; in nl80211_get_ext_capab()
13703 *ext_capa_len = drv->iface_capa[i].ext_capa_len; in nl80211_get_ext_capab()
13716 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_get_mld_capab() local
13730 for (i = 0; i < drv->num_iface_capa; i++) { in nl80211_get_mld_capab()
13731 if (nlmode == drv->iface_capa[i].iftype) { in nl80211_get_mld_capab()
13732 *eml_capa = drv->iface_capa[i].eml_capa; in nl80211_get_mld_capab()
13734 drv->iface_capa[i].mld_capa_and_ops; in nl80211_get_mld_capab()
13748 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_update_connection_params() local
13758 if (drv->capa.flags & WPA_DRIVER_FLAGS_SME) in nl80211_update_connection_params()
13761 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_UPDATE_CONNECT_PARAMS); in nl80211_update_connection_params()
13766 drv->ifindex); in nl80211_update_connection_params()
13785 nl80211_put_fils_connect_params(drv, params, msg)) in nl80211_update_connection_params()
13788 ret = send_and_recv_cmd(drv, msg); in nl80211_update_connection_params()
13791 wpa_dbg(drv->ctx, MSG_DEBUG, in nl80211_update_connection_params()
13805 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_send_external_auth_status() local
13814 if ((is_ap_interface(drv->nlmode) && !bss->drv->device_ap_sme) || in nl80211_send_external_auth_status()
13815 (drv->capa.flags & WPA_DRIVER_FLAGS_SME)) in nl80211_send_external_auth_status()
13818 wpa_dbg(drv->ctx, MSG_DEBUG, in nl80211_send_external_auth_status()
13821 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_EXTERNAL_AUTH); in nl80211_send_external_auth_status()
13831 ret = send_and_recv_cmd(drv, msg); in nl80211_send_external_auth_status()
13849 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_set_4addr_mode() local
13856 msg = nl80211_cmd_msg(drv->first_bss, 0, NL80211_CMD_SET_INTERFACE); in nl80211_set_4addr_mode()
13861 if (linux_br_del_if(drv->global->ioctl_sock, in nl80211_set_4addr_mode()
13871 ret = send_and_recv_cmd(drv, msg); in nl80211_set_4addr_mode()
13880 i802_check_bridge(drv, bss, bridge_ifname, bss->ifname) < 0) in nl80211_set_4addr_mode()
13897 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_dpp_listen() local
13901 if (!drv->multicast_registrations || !bss->nl_mgmt) in nl80211_dpp_listen()
13919 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_link_add() local
13926 if (drv->nlmode != NL80211_IFTYPE_AP) { in nl80211_link_add()
13929 drv->nlmode); in nl80211_link_add()
13961 ret = send_and_recv_cmd(drv, msg); in nl80211_link_add()
13988 struct wpa_driver_nl80211_data *drv = bss->drv; in wpa_driver_nl80211_link_sta_remove() local
14002 ret = send_and_recv_cmd(drv, msg); in wpa_driver_nl80211_link_sta_remove()
14033 struct wpa_driver_nl80211_data *drv = bss->drv; in testing_nl80211_radio_disable() local
14043 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_SME)) in testing_nl80211_radio_disable()
14046 if (!drv->associated) in testing_nl80211_radio_disable()
14049 return wpa_driver_nl80211_mlme(drv, drv->bssid, in testing_nl80211_radio_disable()
14052 drv->first_bss); in testing_nl80211_radio_disable()