Lines Matching defs:sdata
48 bool __ieee80211_recalc_txpower(struct ieee80211_sub_if_data *sdata)
54 chanctx_conf = rcu_dereference(sdata->vif.bss_conf.chanctx_conf);
63 if (sdata->deflink.user_power_level != IEEE80211_UNSET_POWER_LEVEL)
64 power = min(power, sdata->deflink.user_power_level);
66 if (sdata->deflink.ap_power_level != IEEE80211_UNSET_POWER_LEVEL)
67 power = min(power, sdata->deflink.ap_power_level);
69 if (power != sdata->vif.bss_conf.txpower) {
70 sdata->vif.bss_conf.txpower = power;
71 ieee80211_hw_config(sdata->local, 0);
78 void ieee80211_recalc_txpower(struct ieee80211_sub_if_data *sdata,
81 if (__ieee80211_recalc_txpower(sdata) ||
82 (update_bss && ieee80211_sdata_running(sdata)))
83 ieee80211_link_info_change_notify(sdata, &sdata->deflink,
154 static int ieee80211_verify_mac(struct ieee80211_sub_if_data *sdata, u8 *addr,
157 struct ieee80211_local *local = sdata->local;
181 if (iter == sdata)
203 static int ieee80211_can_powered_addr_change(struct ieee80211_sub_if_data *sdata)
206 struct ieee80211_local *local = sdata->local;
214 if (netif_carrier_ok(sdata->dev))
221 if (roc->sdata != sdata)
234 if (sdata == scan_sdata)
238 switch (sdata->vif.type) {
256 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
257 struct ieee80211_local *local = sdata->local;
263 if (ieee80211_sdata_running(sdata)) {
264 ret = ieee80211_can_powered_addr_change(sdata);
271 if (sdata->vif.type == NL80211_IFTYPE_MONITOR &&
272 !(sdata->u.mntr.flags & MONITOR_FLAG_ACTIVE))
275 ret = ieee80211_verify_mac(sdata, sa->sa_data, check_dup);
280 drv_remove_interface(local, sdata);
284 memcpy(sdata->vif.addr, sa->sa_data, ETH_ALEN);
285 ether_addr_copy(sdata->vif.bss_conf.addr, sdata->vif.addr);
292 WARN_ON(drv_add_interface(local, sdata));
309 static int ieee80211_check_concurrent_iface(struct ieee80211_sub_if_data *sdata,
312 struct ieee80211_local *local = sdata->local;
320 if (nsdata != sdata && ieee80211_sdata_running(nsdata)) {
324 if ((sdata->vif.type == NL80211_IFTYPE_OCB &&
326 (sdata->vif.type != NL80211_IFTYPE_MONITOR &&
354 if (!ether_addr_equal(sdata->vif.addr,
367 sdata->wdev.use_4addr &&
377 sdata->bss = &nsdata->u.ap;
382 ret = ieee80211_check_combinations(sdata, NULL, 0, 0);
387 static int ieee80211_check_queues(struct ieee80211_sub_if_data *sdata,
390 int n_queues = sdata->local->hw.queues;
398 if (WARN_ON_ONCE(sdata->vif.hw_queue[i] ==
401 if (WARN_ON_ONCE(sdata->vif.hw_queue[i] >=
410 !ieee80211_hw_check(&sdata->local->hw, QUEUE_CONTROL)) {
411 sdata->vif.cab_queue = IEEE80211_INVAL_HW_QUEUE;
415 if (WARN_ON_ONCE(sdata->vif.cab_queue == IEEE80211_INVAL_HW_QUEUE))
418 if (WARN_ON_ONCE(sdata->vif.cab_queue >= n_queues))
426 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
433 err = ieee80211_check_concurrent_iface(sdata, sdata->vif.type);
437 wiphy_lock(sdata->local->hw.wiphy);
438 err = ieee80211_do_open(&sdata->wdev, true);
439 wiphy_unlock(sdata->local->hw.wiphy);
444 static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, bool going_down)
446 struct ieee80211_local *local = sdata->local;
456 clear_bit(SDATA_STATE_RUNNING, &sdata->state);
459 cancel_scan = rcu_access_pointer(local->scan_sdata) == sdata;
463 ieee80211_roc_purge(local, sdata);
465 switch (sdata->vif.type) {
467 ieee80211_mgd_stop(sdata);
470 ieee80211_ibss_stop(sdata);
473 if (sdata->u.mntr.flags & MONITOR_FLAG_COOK_FRAMES)
475 list_del_rcu(&sdata->u.mntr.list);
495 flushed = sta_info_flush(sdata);
496 WARN_ON_ONCE(sdata->vif.type != NL80211_IFTYPE_AP_VLAN && flushed > 0);
499 if (sdata->flags & IEEE80211_SDATA_ALLMULTI)
502 if (sdata->vif.type == NL80211_IFTYPE_AP) {
505 } else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) {
509 if (sdata->dev) {
510 netif_addr_lock_bh(sdata->dev);
512 __hw_addr_unsync(&local->mc_list, &sdata->dev->mc,
513 sdata->dev->addr_len);
515 netif_addr_unlock_bh(sdata->dev);
521 cancel_work_sync(&sdata->recalc_smps);
523 sdata_lock(sdata);
524 WARN(ieee80211_vif_is_mld(&sdata->vif),
526 sdata->vif.valid_links);
529 sdata->vif.bss_conf.csa_active = false;
530 if (sdata->vif.type == NL80211_IFTYPE_STATION)
531 sdata->deflink.u.mgd.csa_waiting_bcn = false;
532 if (sdata->deflink.csa_block_tx) {
533 ieee80211_wake_vif_queues(local, sdata,
535 sdata->deflink.csa_block_tx = false;
538 sdata_unlock(sdata);
540 cancel_work_sync(&sdata->deflink.csa_finalize_work);
541 cancel_work_sync(&sdata->deflink.color_change_finalize_work);
543 cancel_delayed_work_sync(&sdata->deflink.dfs_cac_timer_work);
545 if (sdata->wdev.cac_started) {
546 chandef = sdata->vif.bss_conf.chandef;
549 ieee80211_link_release_channel(&sdata->deflink);
551 cfg80211_cac_event(sdata->dev, &chandef,
556 if (sdata->vif.type == NL80211_IFTYPE_AP) {
557 WARN_ON(!list_empty(&sdata->u.ap.vlans));
558 } else if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) {
560 ps = &sdata->bss->ps;
564 if (skb->dev == sdata->dev) {
576 switch (sdata->vif.type) {
579 list_del(&sdata->u.vlan.list);
581 RCU_INIT_POINTER(sdata->vif.bss_conf.chanctx_conf, NULL);
583 ieee80211_free_keys(sdata, true);
587 if (sdata->u.mntr.flags & MONITOR_FLAG_COOK_FRAMES) {
598 ieee80211_adjust_monitor_flags(sdata, -1);
602 spin_lock_bh(&sdata->u.nan.func_lock);
604 idr_for_each_entry(&sdata->u.nan.function_inst_ids, func, i) {
605 idr_remove(&sdata->u.nan.function_inst_ids, i);
608 idr_destroy(&sdata->u.nan.function_inst_ids);
610 spin_unlock_bh(&sdata->u.nan.func_lock);
617 wiphy_work_cancel(sdata->local->hw.wiphy, &sdata->work);
629 ieee80211_free_keys(sdata, true);
630 skb_queue_purge(&sdata->skb_queue);
631 skb_queue_purge(&sdata->status_queue);
638 if (info->control.vif == &sdata->vif) {
646 if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
647 ieee80211_txq_remove_vlan(local, sdata);
649 sdata->bss = NULL;
654 sdata->vif.bss_conf.beacon_int = 0;
671 switch (sdata->vif.type) {
682 if (!(sdata->u.mntr.flags & MONITOR_FLAG_ACTIVE))
688 drv_remove_interface(local, sdata);
711 static void ieee80211_stop_mbssid(struct ieee80211_sub_if_data *sdata)
714 struct ieee80211_vif *tx_vif = sdata->vif.mbssid_tx_vif;
720 sdata->vif.mbssid_tx_vif = NULL;
724 if (non_tx_sdata != sdata && non_tx_sdata != tx_sdata &&
732 if (sdata != tx_sdata && ieee80211_sdata_running(tx_sdata)) {
740 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
743 if (sdata->vif.type == NL80211_IFTYPE_AP) {
746 list_for_each_entry_safe(vlan, tmpsdata, &sdata->u.ap.vlans,
750 ieee80211_stop_mbssid(sdata);
753 cancel_work_sync(&sdata->activate_links_work);
755 wiphy_lock(sdata->local->hw.wiphy);
756 ieee80211_do_stop(sdata, true);
757 wiphy_unlock(sdata->local->hw.wiphy);
764 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
765 struct ieee80211_local *local = sdata->local;
769 sdata_allmulti = !!(sdata->flags & IEEE80211_SDATA_ALLMULTI);
776 sdata->flags ^= IEEE80211_SDATA_ALLMULTI;
789 static void ieee80211_teardown_sdata(struct ieee80211_sub_if_data *sdata)
792 ieee80211_free_keys(sdata, false);
794 ieee80211_debugfs_remove_netdev(sdata);
796 ieee80211_destroy_frag_cache(&sdata->frags);
798 if (ieee80211_vif_is_mesh(&sdata->vif))
799 ieee80211_mesh_teardown_sdata(sdata);
801 ieee80211_vif_clear_links(sdata);
802 ieee80211_link_stop(&sdata->deflink);
819 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
820 struct ieee80211_local *local = sdata->local;
822 return drv_net_setup_tc(local, sdata, dev, type, type_data);
840 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
841 struct ieee80211_local *local = sdata->local;
861 return ieee80211_select_queue_80211(sdata, skb, hdr);
878 struct ieee80211_sub_if_data *sdata;
883 sdata = IEEE80211_DEV_TO_SUB_IF(ctx->dev);
884 local = sdata->local;
890 switch (sdata->vif.type) {
892 sta = rcu_dereference(sdata->u.vlan.sta);
895 if (sdata->wdev.use_4addr)
899 sta = sta_info_get_bss(sdata, ctx->daddr);
904 sta = sta_info_get(sdata, ctx->daddr);
907 if (sdata->wdev.wiphy->flags & WIPHY_FLAG_SUPPORTS_TDLS) {
908 sta = sta_info_get(sdata, ctx->daddr);
917 sta = sta_info_get(sdata, sdata->deflink.u.mgd.bssid);
926 ret = drv_net_fill_forward_path(local, sdata, &sta->sta, ctx, path);
957 static bool ieee80211_set_sdata_offload_flags(struct ieee80211_sub_if_data *sdata)
959 struct ieee80211_local *local = sdata->local;
962 flags = sdata->vif.offload_flags;
965 ieee80211_iftype_supports_hdr_offload(sdata->vif.type)) {
979 ieee80211_iftype_supports_hdr_offload(sdata->vif.type)) {
989 if (sdata->vif.offload_flags == flags)
992 sdata->vif.offload_flags = flags;
993 ieee80211_check_fast_rx_iface(sdata);
997 static void ieee80211_set_vif_encap_ops(struct ieee80211_sub_if_data *sdata)
999 struct ieee80211_local *local = sdata->local;
1000 struct ieee80211_sub_if_data *bss = sdata;
1003 if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) {
1004 if (!sdata->bss)
1007 bss = container_of(sdata->bss, struct ieee80211_sub_if_data, u.ap);
1015 if (sdata->wdev.use_4addr &&
1019 sdata->dev->netdev_ops = enabled ? &ieee80211_dataif_8023_ops :
1023 static void ieee80211_recalc_sdata_offload(struct ieee80211_sub_if_data *sdata)
1025 struct ieee80211_local *local = sdata->local;
1028 if (ieee80211_set_sdata_offload_flags(sdata)) {
1029 drv_update_vif_offload(local, sdata);
1030 ieee80211_set_vif_encap_ops(sdata);
1035 vsdata->bss != &sdata->u.ap)
1044 struct ieee80211_sub_if_data *sdata;
1051 list_for_each_entry(sdata, &local->interfaces, list) {
1052 if (!ieee80211_sdata_running(sdata))
1055 ieee80211_recalc_sdata_offload(sdata);
1061 void ieee80211_adjust_monitor_flags(struct ieee80211_sub_if_data *sdata,
1064 struct ieee80211_local *local = sdata->local;
1065 u32 flags = sdata->u.mntr.flags;
1081 static void ieee80211_set_default_queues(struct ieee80211_sub_if_data *sdata)
1083 struct ieee80211_local *local = sdata->local;
1088 sdata->vif.hw_queue[i] = IEEE80211_INVAL_HW_QUEUE;
1090 sdata->vif.hw_queue[i] = i;
1092 sdata->vif.hw_queue[i] = 0;
1094 sdata->vif.cab_queue = IEEE80211_INVAL_HW_QUEUE;
1098 struct ieee80211_sub_if_data *sdata)
1100 sdata->local = local;
1110 ieee80211_link_init(sdata, -1, &sdata->deflink, &sdata->vif.bss_conf);
1115 struct ieee80211_sub_if_data *sdata;
1127 sdata = kzalloc(sizeof(*sdata) + local->hw.vif_data_size, GFP_KERNEL);
1128 if (!sdata)
1132 sdata->vif.type = NL80211_IFTYPE_MONITOR;
1133 snprintf(sdata->name, IFNAMSIZ, "%s-monitor",
1135 sdata->wdev.iftype = NL80211_IFTYPE_MONITOR;
1136 mutex_init(&sdata->wdev.mtx);
1138 ieee80211_sdata_init(local, sdata);
1140 ieee80211_set_default_queues(sdata);
1142 ret = drv_add_interface(local, sdata);
1145 kfree(sdata);
1149 set_bit(SDATA_STATE_RUNNING, &sdata->state);
1151 ret = ieee80211_check_queues(sdata, NL80211_IFTYPE_MONITOR);
1153 kfree(sdata);
1158 rcu_assign_pointer(local->monitor_sdata, sdata);
1161 sdata_lock(sdata);
1163 ret = ieee80211_link_use_channel(&sdata->deflink, &local->monitor_chandef,
1166 sdata_unlock(sdata);
1172 drv_remove_interface(local, sdata);
1173 mutex_destroy(&sdata->wdev.mtx);
1174 kfree(sdata);
1178 skb_queue_head_init(&sdata->skb_queue);
1179 skb_queue_head_init(&sdata->status_queue);
1180 wiphy_work_init(&sdata->work, ieee80211_iface_work);
1187 struct ieee80211_sub_if_data *sdata;
1197 sdata = rcu_dereference_protected(local->monitor_sdata,
1199 if (!sdata) {
1209 sdata_lock(sdata);
1211 ieee80211_link_release_channel(&sdata->deflink);
1213 sdata_unlock(sdata);
1215 drv_remove_interface(local, sdata);
1217 mutex_destroy(&sdata->wdev.mtx);
1218 kfree(sdata);
1228 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
1230 struct ieee80211_local *local = sdata->local;
1235 switch (sdata->vif.type) {
1239 if (!sdata->bss)
1243 list_add(&sdata->u.vlan.list, &sdata->bss->vlans);
1246 master = container_of(sdata->bss,
1248 sdata->control_port_protocol =
1250 sdata->control_port_no_encrypt =
1252 sdata->control_port_over_nl80211 =
1254 sdata->control_port_no_preauth =
1256 sdata->vif.cab_queue = master->vif.cab_queue;
1257 memcpy(sdata->vif.hw_queue, master->vif.hw_queue,
1258 sizeof(sdata->vif.hw_queue));
1259 sdata->vif.bss_conf.chandef = master->vif.bss_conf.chandef;
1262 sdata->crypto_tx_tailroom_needed_cnt +=
1269 sdata->bss = &sdata->u.ap;
1318 switch (sdata->vif.type) {
1321 if (sdata->bss->active) {
1322 ieee80211_link_vlan_copy_chanctx(&sdata->deflink);
1324 ieee80211_set_vif_encap_ops(sdata);
1330 if (sdata->u.mntr.flags & MONITOR_FLAG_COOK_FRAMES) {
1335 if (sdata->u.mntr.flags & MONITOR_FLAG_ACTIVE) {
1336 res = drv_add_interface(local, sdata);
1352 ieee80211_adjust_monitor_flags(sdata, 1);
1364 ieee80211_set_sdata_offload_flags(sdata);
1366 res = drv_add_interface(local, sdata);
1370 ieee80211_set_vif_encap_ops(sdata);
1371 res = ieee80211_check_queues(sdata,
1372 ieee80211_vif_type_p2p(&sdata->vif));
1377 if (sdata->vif.type == NL80211_IFTYPE_AP) {
1382 } else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) {
1386 if (sdata->vif.probe_req_reg)
1387 drv_config_iface_filter(local, sdata,
1391 if (sdata->vif.type != NL80211_IFTYPE_P2P_DEVICE &&
1392 sdata->vif.type != NL80211_IFTYPE_NAN)
1393 changed |= ieee80211_reset_erp_info(sdata);
1394 ieee80211_link_info_change_notify(sdata, &sdata->deflink,
1397 switch (sdata->vif.type) {
1419 ieee80211_set_wmm_default(&sdata->deflink, true,
1420 sdata->vif.type != NL80211_IFTYPE_STATION);
1423 switch (sdata->vif.type) {
1425 rcu_assign_pointer(local->p2p_sdata, sdata);
1428 if (sdata->u.mntr.flags & MONITOR_FLAG_COOK_FRAMES)
1430 list_add_tail_rcu(&sdata->u.mntr.list, &local->mon_list);
1441 if (sdata->flags & IEEE80211_SDATA_ALLMULTI)
1452 set_bit(SDATA_STATE_RUNNING, &sdata->state);
1456 drv_remove_interface(local, sdata);
1461 sdata->bss = NULL;
1462 if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) {
1464 list_del(&sdata->u.vlan.list);
1468 clear_bit(SDATA_STATE_RUNNING, &sdata->state);
1488 struct ieee80211_sub_if_data *sdata,
1499 sta = sta_info_get_bss(sdata, mgmt->sa);
1511 ieee80211_process_delba(sdata, sta,
1534 sta = sta_info_get_bss(sdata, mgmt->sa);
1537 ieee80211_vht_handle_opmode(sdata,
1545 ieee80211_process_mu_groups(sdata, &sdata->deflink,
1557 ieee80211_s1g_rx_twt_action(sdata, skb);
1563 if (sdata->vif.type == NL80211_IFTYPE_STATION)
1564 ieee80211_sta_rx_queued_ext(sdata, skb);
1589 sta = sta_info_get_bss(sdata, mgmt->sa);
1599 } else switch (sdata->vif.type) {
1601 ieee80211_sta_rx_queued_mgmt(sdata, skb);
1604 ieee80211_ibss_rx_queued_mgmt(sdata, skb);
1607 if (!ieee80211_vif_is_mesh(&sdata->vif))
1609 ieee80211_mesh_rx_queued_mgmt(sdata, skb);
1617 static void ieee80211_iface_process_status(struct ieee80211_sub_if_data *sdata,
1627 ieee80211_s1g_status_twt_action(sdata, skb);
1637 struct ieee80211_sub_if_data *sdata =
1639 struct ieee80211_local *local = sdata->local;
1642 if (!ieee80211_sdata_running(sdata))
1652 while ((skb = skb_dequeue(&sdata->skb_queue))) {
1656 ieee80211_process_tdls_channel_switch(sdata, skb);
1658 ieee80211_iface_process_skb(local, sdata, skb);
1665 while ((skb = skb_dequeue(&sdata->status_queue))) {
1668 ieee80211_iface_process_status(sdata, skb);
1675 switch (sdata->vif.type) {
1677 ieee80211_sta_work(sdata);
1680 ieee80211_ibss_work(sdata);
1683 if (!ieee80211_vif_is_mesh(&sdata->vif))
1685 ieee80211_mesh_work(sdata);
1688 ieee80211_ocb_work(sdata);
1697 struct ieee80211_sub_if_data *sdata =
1700 ieee80211_recalc_smps(sdata, &sdata->deflink);
1705 struct ieee80211_sub_if_data *sdata =
1709 ieee80211_set_active_links(&sdata->vif, sdata->desired_active_links);
1715 static void ieee80211_setup_sdata(struct ieee80211_sub_if_data *sdata,
1722 memset(&sdata->u, 0, sizeof(sdata->u));
1723 memset(&sdata->deflink.u, 0, sizeof(sdata->deflink.u));
1726 sdata->vif.type = type;
1727 sdata->vif.p2p = false;
1728 sdata->wdev.iftype = type;
1730 sdata->control_port_protocol = cpu_to_be16(ETH_P_PAE);
1731 sdata->control_port_no_encrypt = false;
1732 sdata->control_port_over_nl80211 = false;
1733 sdata->control_port_no_preauth = false;
1734 sdata->vif.cfg.idle = true;
1735 sdata->vif.bss_conf.txpower = INT_MIN; /* unset */
1737 sdata->noack_map = 0;
1740 if (sdata->dev) {
1741 sdata->dev->netdev_ops = &ieee80211_dataif_ops;
1742 sdata->dev->type = ARPHRD_ETHER;
1745 skb_queue_head_init(&sdata->skb_queue);
1746 skb_queue_head_init(&sdata->status_queue);
1747 wiphy_work_init(&sdata->work, ieee80211_iface_work);
1748 INIT_WORK(&sdata->recalc_smps, ieee80211_recalc_smps_work);
1749 INIT_WORK(&sdata->activate_links_work, ieee80211_activate_links_work);
1754 sdata->vif.type = type;
1755 sdata->vif.p2p = true;
1758 skb_queue_head_init(&sdata->u.ap.ps.bc_buf);
1759 INIT_LIST_HEAD(&sdata->u.ap.vlans);
1760 sdata->vif.bss_conf.bssid = sdata->vif.addr;
1764 sdata->vif.type = type;
1765 sdata->vif.p2p = true;
1768 sdata->vif.bss_conf.bssid = sdata->deflink.u.mgd.bssid;
1769 ieee80211_sta_setup_sdata(sdata);
1772 sdata->vif.bss_conf.bssid = bssid_wildcard;
1773 ieee80211_ocb_setup_sdata(sdata);
1776 sdata->vif.bss_conf.bssid = sdata->u.ibss.bssid;
1777 ieee80211_ibss_setup_sdata(sdata);
1780 if (ieee80211_vif_is_mesh(&sdata->vif))
1781 ieee80211_mesh_init_sdata(sdata);
1784 sdata->dev->type = ARPHRD_IEEE80211_RADIOTAP;
1785 sdata->dev->netdev_ops = &ieee80211_monitorif_ops;
1786 sdata->u.mntr.flags = MONITOR_FLAG_CONTROL |
1790 idr_init(&sdata->u.nan.function_inst_ids);
1791 spin_lock_init(&sdata->u.nan.func_lock);
1792 sdata->vif.bss_conf.bssid = sdata->vif.addr;
1796 sdata->vif.bss_conf.bssid = sdata->vif.addr;
1806 ieee80211_link_setup(&sdata->deflink);
1808 ieee80211_debugfs_add_netdev(sdata);
1811 static int ieee80211_runtime_change_iftype(struct ieee80211_sub_if_data *sdata,
1814 struct ieee80211_local *local = sdata->local;
1825 if (ieee80211_vif_is_mld(&sdata->vif))
1828 switch (sdata->vif.type) {
1830 if (!list_empty(&sdata->u.ap.vlans))
1869 ret = ieee80211_check_concurrent_iface(sdata, internal_type);
1873 ieee80211_stop_vif_queues(local, sdata,
1876 ieee80211_do_stop(sdata, false);
1878 ieee80211_teardown_sdata(sdata);
1880 ieee80211_set_sdata_offload_flags(sdata);
1881 ret = drv_change_interface(local, sdata, internal_type, p2p);
1883 type = ieee80211_vif_type_p2p(&sdata->vif);
1890 ieee80211_check_queues(sdata, type);
1892 ieee80211_setup_sdata(sdata, type);
1893 ieee80211_set_vif_encap_ops(sdata);
1895 err = ieee80211_do_open(&sdata->wdev, false);
1898 ieee80211_wake_vif_queues(local, sdata,
1903 int ieee80211_if_change_type(struct ieee80211_sub_if_data *sdata,
1910 if (type == ieee80211_vif_type_p2p(&sdata->vif))
1913 if (ieee80211_sdata_running(sdata)) {
1914 ret = ieee80211_runtime_change_iftype(sdata, type);
1919 ieee80211_teardown_sdata(sdata);
1920 ieee80211_setup_sdata(sdata, type);
1925 sdata->u.mgd.use_4addr = false;
1933 struct ieee80211_sub_if_data *sdata;
1954 list_for_each_entry(sdata, &local->interfaces, list) {
1955 if (sdata->vif.type != NL80211_IFTYPE_AP)
1957 memcpy(perm_addr, sdata->vif.addr, ETH_ALEN);
1965 list_for_each_entry(sdata, &local->interfaces, list) {
1966 if (sdata->vif.type != NL80211_IFTYPE_P2P_DEVICE)
1968 if (!ieee80211_sdata_running(sdata))
1970 memcpy(perm_addr, sdata->vif.addr, ETH_ALEN);
1980 list_for_each_entry(sdata, &local->interfaces, list) {
1982 sdata->vif.addr)) {
2016 list_for_each_entry(sdata, &local->interfaces, list) {
2017 if (sdata->vif.type == NL80211_IFTYPE_MONITOR)
2019 m = sdata->vif.addr;
2041 list_for_each_entry(sdata, &local->interfaces, list) {
2042 if (ether_addr_equal(tmp_addr, sdata->vif.addr)) {
2068 struct ieee80211_sub_if_data *sdata = NULL;
2077 sdata = kzalloc(sizeof(*sdata) + local->hw.vif_data_size,
2079 if (!sdata)
2081 wdev = &sdata->wdev;
2083 sdata->dev = NULL;
2084 strscpy(sdata->name, name, IFNAMSIZ);
2086 memcpy(sdata->vif.addr, wdev->address, ETH_ALEN);
2087 ether_addr_copy(sdata->vif.bss_conf.addr, sdata->vif.addr);
2089 int size = ALIGN(sizeof(*sdata) + local->hw.vif_data_size,
2137 sdata = netdev_priv(ndev);
2138 ndev->ieee80211_ptr = &sdata->wdev;
2139 memcpy(sdata->vif.addr, ndev->dev_addr, ETH_ALEN);
2140 ether_addr_copy(sdata->vif.bss_conf.addr, sdata->vif.addr);
2141 memcpy(sdata->name, ndev->name, IFNAMSIZ);
2145 ieee80211_txq_init(sdata, NULL, txqi, 0);
2148 sdata->dev = ndev;
2152 sdata->wdev.wiphy = local->hw.wiphy;
2154 ieee80211_sdata_init(local, sdata);
2156 ieee80211_init_frag_cache(&sdata->frags);
2158 INIT_LIST_HEAD(&sdata->key_list);
2160 INIT_DELAYED_WORK(&sdata->dec_tailroom_needed_wk,
2166 sdata->rc_rateidx_mask[i] =
2172 memcpy(sdata->rc_rateidx_mcs_mask[i],
2174 sizeof(sdata->rc_rateidx_mcs_mask[i]));
2177 vht_rate_mask = sdata->rc_rateidx_vht_mcs_mask[i];
2180 memset(sdata->rc_rateidx_mcs_mask[i], 0,
2181 sizeof(sdata->rc_rateidx_mcs_mask[i]));
2182 memset(sdata->rc_rateidx_vht_mcs_mask[i], 0,
2183 sizeof(sdata->rc_rateidx_vht_mcs_mask[i]));
2187 ieee80211_set_default_queues(sdata);
2189 sdata->deflink.ap_power_level = IEEE80211_UNSET_POWER_LEVEL;
2190 sdata->deflink.user_power_level = local->user_power_level;
2193 ieee80211_setup_sdata(sdata, type);
2198 sdata->u.mgd.use_4addr = params->use_4addr;
2204 sdata->vif.netdev_features = local->hw.netdev_features;
2227 list_add_tail_rcu(&sdata->list, &local->interfaces);
2231 *new_wdev = &sdata->wdev;
2236 void ieee80211_if_remove(struct ieee80211_sub_if_data *sdata)
2240 mutex_lock(&sdata->local->iflist_mtx);
2241 list_del_rcu(&sdata->list);
2242 mutex_unlock(&sdata->local->iflist_mtx);
2244 if (sdata->vif.txq)
2245 ieee80211_txq_purge(sdata->local, to_txq_info(sdata->vif.txq));
2249 cfg80211_unregister_wdev(&sdata->wdev);
2251 if (!sdata->dev) {
2252 ieee80211_teardown_sdata(sdata);
2253 kfree(sdata);
2257 void ieee80211_sdata_stop(struct ieee80211_sub_if_data *sdata)
2259 if (WARN_ON_ONCE(!test_bit(SDATA_STATE_RUNNING, &sdata->state)))
2261 ieee80211_do_stop(sdata, true);
2266 struct ieee80211_sub_if_data *sdata, *tmp;
2294 list_for_each_entry_safe(sdata, tmp, &unreg_list, list) {
2295 bool netdev = sdata->dev;
2297 list_del(&sdata->list);
2298 cfg80211_unregister_wdev(&sdata->wdev);
2301 kfree(sdata);
2310 struct ieee80211_sub_if_data *sdata;
2321 sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2322 memcpy(sdata->name, dev->name, IFNAMSIZ);
2323 ieee80211_debugfs_rename_netdev(sdata);
2342 void ieee80211_vif_inc_num_mcast(struct ieee80211_sub_if_data *sdata)
2344 if (sdata->vif.type == NL80211_IFTYPE_AP)
2345 atomic_inc(&sdata->u.ap.num_mcast_sta);
2346 else if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
2347 atomic_inc(&sdata->u.vlan.num_mcast_sta);
2350 void ieee80211_vif_dec_num_mcast(struct ieee80211_sub_if_data *sdata)
2352 if (sdata->vif.type == NL80211_IFTYPE_AP)
2353 atomic_dec(&sdata->u.ap.num_mcast_sta);
2354 else if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
2355 atomic_dec(&sdata->u.vlan.num_mcast_sta);