Lines Matching refs:sdata

40 	struct ieee80211_sub_if_data *sdata =  in ieee80211_mesh_housekeeping_timer()  local
41 from_timer(sdata, t, u.mesh.housekeeping_timer); in ieee80211_mesh_housekeeping_timer()
42 struct ieee80211_local *local = sdata->local; in ieee80211_mesh_housekeeping_timer()
43 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_mesh_housekeeping_timer()
47 ieee80211_queue_work(&local->hw, &sdata->work); in ieee80211_mesh_housekeeping_timer()
59 bool mesh_matches_local(struct ieee80211_sub_if_data *sdata, in mesh_matches_local() argument
62 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in mesh_matches_local()
86 sband = ieee80211_get_sband(sdata); in mesh_matches_local()
90 ieee80211_sta_get_rates(sdata, ie, sband->band, in mesh_matches_local()
93 if (sdata->vif.bss_conf.basic_rates != basic_rates) in mesh_matches_local()
96 cfg80211_chandef_create(&sta_chan_def, sdata->vif.bss_conf.chandef.chan, in mesh_matches_local()
99 ieee80211_chandef_vht_oper(&sdata->local->hw, in mesh_matches_local()
103 if (!cfg80211_chandef_compatible(&sdata->vif.bss_conf.chandef, in mesh_matches_local()
128 u32 mesh_accept_plinks_update(struct ieee80211_sub_if_data *sdata) in mesh_accept_plinks_update() argument
139 free_plinks = mesh_plink_availables(sdata); in mesh_accept_plinks_update()
141 if (free_plinks != sdata->u.mesh.accepting_plinks) { in mesh_accept_plinks_update()
142 sdata->u.mesh.accepting_plinks = free_plinks; in mesh_accept_plinks_update()
156 struct ieee80211_sub_if_data *sdata = sta->sdata; in mesh_sta_cleanup() local
160 ieee80211_mbss_info_change_notify(sdata, changed); in mesh_sta_cleanup()
163 int mesh_rmc_init(struct ieee80211_sub_if_data *sdata) in mesh_rmc_init() argument
167 sdata->u.mesh.rmc = kmalloc(sizeof(struct mesh_rmc), GFP_KERNEL); in mesh_rmc_init()
168 if (!sdata->u.mesh.rmc) in mesh_rmc_init()
170 sdata->u.mesh.rmc->idx_mask = RMC_BUCKETS - 1; in mesh_rmc_init()
172 INIT_HLIST_HEAD(&sdata->u.mesh.rmc->bucket[i]); in mesh_rmc_init()
176 void mesh_rmc_free(struct ieee80211_sub_if_data *sdata) in mesh_rmc_free() argument
178 struct mesh_rmc *rmc = sdata->u.mesh.rmc; in mesh_rmc_free()
183 if (!sdata->u.mesh.rmc) in mesh_rmc_free()
194 sdata->u.mesh.rmc = NULL; in mesh_rmc_free()
210 int mesh_rmc_check(struct ieee80211_sub_if_data *sdata, in mesh_rmc_check() argument
213 struct mesh_rmc *rmc = sdata->u.mesh.rmc; in mesh_rmc_check()
248 int mesh_add_meshconf_ie(struct ieee80211_sub_if_data *sdata, in mesh_add_meshconf_ie() argument
251 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in mesh_add_meshconf_ie()
294 int mesh_add_meshid_ie(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb) in mesh_add_meshid_ie() argument
296 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in mesh_add_meshid_ie()
311 static int mesh_add_awake_window_ie(struct ieee80211_sub_if_data *sdata, in mesh_add_awake_window_ie() argument
314 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in mesh_add_awake_window_ie()
334 int mesh_add_vendor_ies(struct ieee80211_sub_if_data *sdata, in mesh_add_vendor_ies() argument
337 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in mesh_add_vendor_ies()
358 int mesh_add_rsn_ie(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb) in mesh_add_rsn_ie() argument
360 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in mesh_add_rsn_ie()
381 static int mesh_add_ds_params_ie(struct ieee80211_sub_if_data *sdata, in mesh_add_ds_params_ie() argument
392 chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf); in mesh_add_ds_params_ie()
408 int mesh_add_ht_cap_ie(struct ieee80211_sub_if_data *sdata, in mesh_add_ht_cap_ie() argument
414 sband = ieee80211_get_sband(sdata); in mesh_add_ht_cap_ie()
419 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_20_NOHT || in mesh_add_ht_cap_ie()
420 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_5 || in mesh_add_ht_cap_ie()
421 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_10) in mesh_add_ht_cap_ie()
433 int mesh_add_ht_oper_ie(struct ieee80211_sub_if_data *sdata, in mesh_add_ht_oper_ie() argument
436 struct ieee80211_local *local = sdata->local; in mesh_add_ht_oper_ie()
444 chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf); in mesh_add_ht_oper_ie()
456 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_20_NOHT || in mesh_add_ht_oper_ie()
457 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_5 || in mesh_add_ht_oper_ie()
458 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_10) in mesh_add_ht_oper_ie()
465 ieee80211_ie_build_ht_oper(pos, ht_cap, &sdata->vif.bss_conf.chandef, in mesh_add_ht_oper_ie()
466 sdata->vif.bss_conf.ht_operation_mode, in mesh_add_ht_oper_ie()
472 int mesh_add_vht_cap_ie(struct ieee80211_sub_if_data *sdata, in mesh_add_vht_cap_ie() argument
478 sband = ieee80211_get_sband(sdata); in mesh_add_vht_cap_ie()
483 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_20_NOHT || in mesh_add_vht_cap_ie()
484 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_5 || in mesh_add_vht_cap_ie()
485 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_10) in mesh_add_vht_cap_ie()
497 int mesh_add_vht_oper_ie(struct ieee80211_sub_if_data *sdata, in mesh_add_vht_oper_ie() argument
500 struct ieee80211_local *local = sdata->local; in mesh_add_vht_oper_ie()
508 chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf); in mesh_add_vht_oper_ie()
520 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_20_NOHT || in mesh_add_vht_oper_ie()
521 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_5 || in mesh_add_vht_oper_ie()
522 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_10) in mesh_add_vht_oper_ie()
530 &sdata->vif.bss_conf.chandef); in mesh_add_vht_oper_ie()
535 int mesh_add_he_cap_ie(struct ieee80211_sub_if_data *sdata, in mesh_add_he_cap_ie() argument
542 sband = ieee80211_get_sband(sdata); in mesh_add_he_cap_ie()
549 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_20_NOHT || in mesh_add_he_cap_ie()
550 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_5 || in mesh_add_he_cap_ie()
551 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_10) in mesh_add_he_cap_ie()
563 int mesh_add_he_oper_ie(struct ieee80211_sub_if_data *sdata, in mesh_add_he_oper_ie() argument
570 sband = ieee80211_get_sband(sdata); in mesh_add_he_oper_ie()
576 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_20_NOHT || in mesh_add_he_oper_ie()
577 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_5 || in mesh_add_he_oper_ie()
578 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_10) in mesh_add_he_oper_ie()
592 struct ieee80211_sub_if_data *sdata = in ieee80211_mesh_path_timer() local
593 from_timer(sdata, t, u.mesh.mesh_path_timer); in ieee80211_mesh_path_timer()
595 ieee80211_queue_work(&sdata->local->hw, &sdata->work); in ieee80211_mesh_path_timer()
600 struct ieee80211_sub_if_data *sdata = in ieee80211_mesh_path_root_timer() local
601 from_timer(sdata, t, u.mesh.mesh_path_root_timer); in ieee80211_mesh_path_root_timer()
602 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_mesh_path_root_timer()
606 ieee80211_queue_work(&sdata->local->hw, &sdata->work); in ieee80211_mesh_path_root_timer()
663 unsigned int ieee80211_new_mesh_header(struct ieee80211_sub_if_data *sdata, in ieee80211_new_mesh_header() argument
672 meshhdr->ttl = sdata->u.mesh.mshcfg.dot11MeshTTL; in ieee80211_new_mesh_header()
675 put_unaligned(cpu_to_le32(sdata->u.mesh.mesh_seqnum), &meshhdr->seqnum); in ieee80211_new_mesh_header()
676 sdata->u.mesh.mesh_seqnum++; in ieee80211_new_mesh_header()
692 static void ieee80211_mesh_housekeeping(struct ieee80211_sub_if_data *sdata) in ieee80211_mesh_housekeeping() argument
694 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_mesh_housekeeping()
698 ieee80211_sta_expire(sdata, ifmsh->mshcfg.plink_timeout * HZ); in ieee80211_mesh_housekeeping()
699 mesh_path_expire(sdata); in ieee80211_mesh_housekeeping()
701 changed = mesh_accept_plinks_update(sdata); in ieee80211_mesh_housekeeping()
702 ieee80211_mbss_info_change_notify(sdata, changed); in ieee80211_mesh_housekeeping()
709 static void ieee80211_mesh_rootpath(struct ieee80211_sub_if_data *sdata) in ieee80211_mesh_rootpath() argument
711 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_mesh_rootpath()
714 mesh_path_tx_root_frame(sdata); in ieee80211_mesh_rootpath()
737 struct ieee80211_sub_if_data *sdata; in ieee80211_mesh_build_beacon() local
740 sdata = container_of(ifmsh, struct ieee80211_sub_if_data, u.mesh); in ieee80211_mesh_build_beacon()
742 chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf); in ieee80211_mesh_build_beacon()
746 ie_len_he_cap = ieee80211_ie_len_he_cap(sdata, in ieee80211_mesh_build_beacon()
789 memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN); in ieee80211_mesh_build_beacon()
790 memcpy(mgmt->bssid, sdata->vif.addr, ETH_ALEN); in ieee80211_mesh_build_beacon()
791 ieee80211_mps_set_frame_flags(sdata, NULL, (void *) mgmt); in ieee80211_mesh_build_beacon()
793 cpu_to_le16(sdata->vif.bss_conf.beacon_int); in ieee80211_mesh_build_beacon()
795 sdata->u.mesh.security ? WLAN_CAPABILITY_PRIVACY : 0); in ieee80211_mesh_build_beacon()
866 if (ieee80211_add_srates_ie(sdata, skb, true, band) || in ieee80211_mesh_build_beacon()
867 mesh_add_ds_params_ie(sdata, skb)) in ieee80211_mesh_build_beacon()
877 if (ieee80211_add_ext_srates_ie(sdata, skb, true, band) || in ieee80211_mesh_build_beacon()
878 mesh_add_rsn_ie(sdata, skb) || in ieee80211_mesh_build_beacon()
879 mesh_add_ht_cap_ie(sdata, skb) || in ieee80211_mesh_build_beacon()
880 mesh_add_ht_oper_ie(sdata, skb) || in ieee80211_mesh_build_beacon()
881 mesh_add_meshid_ie(sdata, skb) || in ieee80211_mesh_build_beacon()
882 mesh_add_meshconf_ie(sdata, skb) || in ieee80211_mesh_build_beacon()
883 mesh_add_awake_window_ie(sdata, skb) || in ieee80211_mesh_build_beacon()
884 mesh_add_vht_cap_ie(sdata, skb) || in ieee80211_mesh_build_beacon()
885 mesh_add_vht_oper_ie(sdata, skb) || in ieee80211_mesh_build_beacon()
886 mesh_add_he_cap_ie(sdata, skb, ie_len_he_cap) || in ieee80211_mesh_build_beacon()
887 mesh_add_he_oper_ie(sdata, skb) || in ieee80211_mesh_build_beacon()
888 mesh_add_vendor_ies(sdata, skb)) in ieee80211_mesh_build_beacon()
906 ieee80211_mesh_rebuild_beacon(struct ieee80211_sub_if_data *sdata) in ieee80211_mesh_rebuild_beacon() argument
911 old_bcn = rcu_dereference_protected(sdata->u.mesh.beacon, in ieee80211_mesh_rebuild_beacon()
912 lockdep_is_held(&sdata->wdev.mtx)); in ieee80211_mesh_rebuild_beacon()
913 ret = ieee80211_mesh_build_beacon(&sdata->u.mesh); in ieee80211_mesh_rebuild_beacon()
923 void ieee80211_mbss_info_change_notify(struct ieee80211_sub_if_data *sdata, in ieee80211_mbss_info_change_notify() argument
926 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_mbss_info_change_notify()
937 ieee80211_queue_work(&sdata->local->hw, &sdata->work); in ieee80211_mbss_info_change_notify()
940 int ieee80211_start_mesh(struct ieee80211_sub_if_data *sdata) in ieee80211_start_mesh() argument
942 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_start_mesh()
943 struct ieee80211_local *local = sdata->local; in ieee80211_start_mesh()
962 ieee80211_queue_work(&local->hw, &sdata->work); in ieee80211_start_mesh()
963 sdata->vif.bss_conf.ht_operation_mode = in ieee80211_start_mesh()
965 sdata->vif.bss_conf.enable_beacon = true; in ieee80211_start_mesh()
967 changed |= ieee80211_mps_local_status_update(sdata); in ieee80211_start_mesh()
970 ieee80211_stop_mesh(sdata); in ieee80211_start_mesh()
974 ieee80211_recalc_dtim(local, sdata); in ieee80211_start_mesh()
975 ieee80211_bss_info_change_notify(sdata, changed); in ieee80211_start_mesh()
977 netif_carrier_on(sdata->dev); in ieee80211_start_mesh()
981 void ieee80211_stop_mesh(struct ieee80211_sub_if_data *sdata) in ieee80211_stop_mesh() argument
983 struct ieee80211_local *local = sdata->local; in ieee80211_stop_mesh()
984 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_stop_mesh()
987 netif_carrier_off(sdata->dev); in ieee80211_stop_mesh()
990 sta_info_flush(sdata); in ieee80211_stop_mesh()
991 ieee80211_free_keys(sdata, true); in ieee80211_stop_mesh()
992 mesh_path_flush_by_iface(sdata); in ieee80211_stop_mesh()
996 sdata->vif.bss_conf.enable_beacon = false; in ieee80211_stop_mesh()
997 clear_bit(SDATA_STATE_OFFCHANNEL_BEACON_STOPPED, &sdata->state); in ieee80211_stop_mesh()
998 ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED); in ieee80211_stop_mesh()
1002 lockdep_is_held(&sdata->wdev.mtx)); in ieee80211_stop_mesh()
1010 del_timer_sync(&sdata->u.mesh.housekeeping_timer); in ieee80211_stop_mesh()
1011 del_timer_sync(&sdata->u.mesh.mesh_path_root_timer); in ieee80211_stop_mesh()
1012 del_timer_sync(&sdata->u.mesh.mesh_path_timer); in ieee80211_stop_mesh()
1023 static void ieee80211_mesh_csa_mark_radar(struct ieee80211_sub_if_data *sdata) in ieee80211_mesh_csa_mark_radar() argument
1030 err = cfg80211_chandef_dfs_required(sdata->local->hw.wiphy, in ieee80211_mesh_csa_mark_radar()
1031 &sdata->vif.bss_conf.chandef, in ieee80211_mesh_csa_mark_radar()
1034 cfg80211_radar_event(sdata->local->hw.wiphy, in ieee80211_mesh_csa_mark_radar()
1035 &sdata->vif.bss_conf.chandef, GFP_ATOMIC); in ieee80211_mesh_csa_mark_radar()
1039 ieee80211_mesh_process_chnswitch(struct ieee80211_sub_if_data *sdata, in ieee80211_mesh_process_chnswitch() argument
1044 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_mesh_process_chnswitch()
1049 sdata_assert_lock(sdata); in ieee80211_mesh_process_chnswitch()
1051 sband = ieee80211_get_sband(sdata); in ieee80211_mesh_process_chnswitch()
1056 switch (sdata->vif.bss_conf.chandef.width) { in ieee80211_mesh_process_chnswitch()
1071 err = ieee80211_parse_ch_switch_ie(sdata, elems, sband->band, in ieee80211_mesh_process_chnswitch()
1072 sta_flags, sdata->vif.addr, in ieee80211_mesh_process_chnswitch()
1083 ieee80211_mesh_csa_mark_radar(sdata); in ieee80211_mesh_process_chnswitch()
1088 if (!cfg80211_chandef_usable(sdata->local->hw.wiphy, &params.chandef, in ieee80211_mesh_process_chnswitch()
1090 !cfg80211_reg_can_beacon(sdata->local->hw.wiphy, &params.chandef, in ieee80211_mesh_process_chnswitch()
1092 sdata_info(sdata, in ieee80211_mesh_process_chnswitch()
1094 sdata->vif.addr, in ieee80211_mesh_process_chnswitch()
1102 err = cfg80211_chandef_dfs_required(sdata->local->hw.wiphy, in ieee80211_mesh_process_chnswitch()
1108 sdata_info(sdata, in ieee80211_mesh_process_chnswitch()
1110 sdata->vif.addr, in ieee80211_mesh_process_chnswitch()
1121 &sdata->vif.bss_conf.chandef)) { in ieee80211_mesh_process_chnswitch()
1122 mcsa_dbg(sdata, in ieee80211_mesh_process_chnswitch()
1127 mcsa_dbg(sdata, in ieee80211_mesh_process_chnswitch()
1144 if (ieee80211_channel_switch(sdata->local->hw.wiphy, sdata->dev, in ieee80211_mesh_process_chnswitch()
1152 ieee80211_mesh_rx_probe_req(struct ieee80211_sub_if_data *sdata, in ieee80211_mesh_rx_probe_req() argument
1155 struct ieee80211_local *local = sdata->local; in ieee80211_mesh_rx_probe_req()
1156 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_mesh_rx_probe_req()
1176 if ((!ether_addr_equal(mgmt->da, sdata->vif.addr) && in ieee80211_mesh_rx_probe_req()
1205 ieee80211_tx_skb(sdata, presp); in ieee80211_mesh_rx_probe_req()
1210 static void ieee80211_mesh_rx_bcn_presp(struct ieee80211_sub_if_data *sdata, in ieee80211_mesh_rx_bcn_presp() argument
1216 struct ieee80211_local *local = sdata->local; in ieee80211_mesh_rx_bcn_presp()
1217 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_mesh_rx_bcn_presp()
1226 !ether_addr_equal(mgmt->da, sdata->vif.addr)) in ieee80211_mesh_rx_bcn_presp()
1238 (elems.rsn && sdata->u.mesh.security == IEEE80211_MESH_SEC_NONE) || in ieee80211_mesh_rx_bcn_presp()
1239 (!elems.rsn && sdata->u.mesh.security != IEEE80211_MESH_SEC_NONE)) in ieee80211_mesh_rx_bcn_presp()
1252 if (mesh_matches_local(sdata, &elems)) { in ieee80211_mesh_rx_bcn_presp()
1253 mpl_dbg(sdata, "rssi_threshold=%d,rx_status->signal=%d\n", in ieee80211_mesh_rx_bcn_presp()
1254 sdata->u.mesh.mshcfg.rssi_threshold, rx_status->signal); in ieee80211_mesh_rx_bcn_presp()
1255 if (!sdata->u.mesh.user_mpm || in ieee80211_mesh_rx_bcn_presp()
1256 sdata->u.mesh.mshcfg.rssi_threshold == 0 || in ieee80211_mesh_rx_bcn_presp()
1257 sdata->u.mesh.mshcfg.rssi_threshold < rx_status->signal) in ieee80211_mesh_rx_bcn_presp()
1258 mesh_neighbour_update(sdata, mgmt->sa, &elems, in ieee80211_mesh_rx_bcn_presp()
1263 ifmsh->sync_ops->rx_bcn_presp(sdata, in ieee80211_mesh_rx_bcn_presp()
1267 !sdata->vif.csa_active) in ieee80211_mesh_rx_bcn_presp()
1268 ieee80211_mesh_process_chnswitch(sdata, &elems, true); in ieee80211_mesh_rx_bcn_presp()
1271 int ieee80211_mesh_finish_csa(struct ieee80211_sub_if_data *sdata) in ieee80211_mesh_finish_csa() argument
1273 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_mesh_finish_csa()
1284 lockdep_is_held(&sdata->wdev.mtx)); in ieee80211_mesh_finish_csa()
1288 ret = ieee80211_mesh_rebuild_beacon(sdata); in ieee80211_mesh_finish_csa()
1294 mcsa_dbg(sdata, "complete switching to center freq %d MHz", in ieee80211_mesh_finish_csa()
1295 sdata->vif.bss_conf.chandef.chan->center_freq); in ieee80211_mesh_finish_csa()
1299 int ieee80211_mesh_csa_beacon(struct ieee80211_sub_if_data *sdata, in ieee80211_mesh_csa_beacon() argument
1302 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_mesh_csa_beacon()
1306 lockdep_assert_held(&sdata->wdev.mtx); in ieee80211_mesh_csa_beacon()
1318 ret = ieee80211_mesh_rebuild_beacon(sdata); in ieee80211_mesh_csa_beacon()
1329 static int mesh_fwd_csa_frame(struct ieee80211_sub_if_data *sdata, in mesh_fwd_csa_frame() argument
1335 struct ieee80211_local *local = sdata->local; in mesh_fwd_csa_frame()
1349 memcpy(mgmt_fwd->sa, sdata->vif.addr, ETH_ALEN); in mesh_fwd_csa_frame()
1350 memcpy(mgmt_fwd->bssid, sdata->vif.addr, ETH_ALEN); in mesh_fwd_csa_frame()
1352 ieee80211_tx_skb(sdata, skb); in mesh_fwd_csa_frame()
1356 static void mesh_rx_csa_frame(struct ieee80211_sub_if_data *sdata, in mesh_rx_csa_frame() argument
1359 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in mesh_rx_csa_frame()
1386 if (!sdata->vif.csa_active && in mesh_rx_csa_frame()
1387 !ieee80211_mesh_process_chnswitch(sdata, &elems, false)) { in mesh_rx_csa_frame()
1388 mcsa_dbg(sdata, "Failed to process CSA action frame"); in mesh_rx_csa_frame()
1394 if (mesh_fwd_csa_frame(sdata, mgmt, len, &elems) < 0) in mesh_rx_csa_frame()
1395 mcsa_dbg(sdata, "Failed to forward the CSA frame"); in mesh_rx_csa_frame()
1399 static void ieee80211_mesh_rx_mgmt_action(struct ieee80211_sub_if_data *sdata, in ieee80211_mesh_rx_mgmt_action() argument
1410 mesh_rx_plink_frame(sdata, mgmt, len, rx_status); in ieee80211_mesh_rx_mgmt_action()
1416 mesh_rx_path_sel_frame(sdata, mgmt, len); in ieee80211_mesh_rx_mgmt_action()
1419 mesh_rx_csa_frame(sdata, mgmt, len); in ieee80211_mesh_rx_mgmt_action()
1424 void ieee80211_mesh_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata, in ieee80211_mesh_rx_queued_mgmt() argument
1431 sdata_lock(sdata); in ieee80211_mesh_rx_queued_mgmt()
1434 if (!sdata->u.mesh.mesh_id_len) in ieee80211_mesh_rx_queued_mgmt()
1444 ieee80211_mesh_rx_bcn_presp(sdata, stype, mgmt, skb->len, in ieee80211_mesh_rx_queued_mgmt()
1448 ieee80211_mesh_rx_probe_req(sdata, mgmt, skb->len); in ieee80211_mesh_rx_queued_mgmt()
1451 ieee80211_mesh_rx_mgmt_action(sdata, mgmt, skb->len, rx_status); in ieee80211_mesh_rx_queued_mgmt()
1455 sdata_unlock(sdata); in ieee80211_mesh_rx_queued_mgmt()
1458 static void mesh_bss_info_changed(struct ieee80211_sub_if_data *sdata) in mesh_bss_info_changed() argument
1460 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in mesh_bss_info_changed()
1469 if (sdata->vif.bss_conf.enable_beacon && in mesh_bss_info_changed()
1474 if (ieee80211_mesh_rebuild_beacon(sdata)) in mesh_bss_info_changed()
1477 ieee80211_bss_info_change_notify(sdata, changed); in mesh_bss_info_changed()
1480 void ieee80211_mesh_work(struct ieee80211_sub_if_data *sdata) in ieee80211_mesh_work() argument
1482 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_mesh_work()
1484 sdata_lock(sdata); in ieee80211_mesh_work()
1487 if (!sdata->u.mesh.mesh_id_len) in ieee80211_mesh_work()
1493 mesh_path_start_discovery(sdata); in ieee80211_mesh_work()
1496 ieee80211_mesh_housekeeping(sdata); in ieee80211_mesh_work()
1499 ieee80211_mesh_rootpath(sdata); in ieee80211_mesh_work()
1502 mesh_sync_adjust_tsf(sdata); in ieee80211_mesh_work()
1505 mesh_bss_info_changed(sdata); in ieee80211_mesh_work()
1507 sdata_unlock(sdata); in ieee80211_mesh_work()
1511 void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata) in ieee80211_mesh_init_sdata() argument
1513 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_mesh_init_sdata()
1521 mesh_rmc_init(sdata); in ieee80211_mesh_init_sdata()
1529 mesh_pathtbl_init(sdata); in ieee80211_mesh_init_sdata()
1540 sdata->vif.bss_conf.bssid = zero_addr; in ieee80211_mesh_init_sdata()
1543 void ieee80211_mesh_teardown_sdata(struct ieee80211_sub_if_data *sdata) in ieee80211_mesh_teardown_sdata() argument
1545 mesh_rmc_free(sdata); in ieee80211_mesh_teardown_sdata()
1546 mesh_pathtbl_unregister(sdata); in ieee80211_mesh_teardown_sdata()