Lines Matching refs:sdata
42 struct ieee80211_sub_if_data *sdata = in ieee80211_mesh_housekeeping_timer() local
43 from_timer(sdata, t, u.mesh.housekeeping_timer); in ieee80211_mesh_housekeeping_timer()
44 struct ieee80211_local *local = sdata->local; in ieee80211_mesh_housekeeping_timer()
45 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_mesh_housekeeping_timer()
49 ieee80211_queue_work(&local->hw, &sdata->work); in ieee80211_mesh_housekeeping_timer()
61 bool mesh_matches_local(struct ieee80211_sub_if_data *sdata, in mesh_matches_local() argument
64 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in mesh_matches_local()
88 sband = ieee80211_get_sband(sdata); in mesh_matches_local()
92 ieee80211_sta_get_rates(sdata, ie, sband->band, in mesh_matches_local()
95 if (sdata->vif.bss_conf.basic_rates != basic_rates) in mesh_matches_local()
98 cfg80211_chandef_create(&sta_chan_def, sdata->vif.bss_conf.chandef.chan, 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()
291 int mesh_add_meshid_ie(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb) in mesh_add_meshid_ie() argument
293 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in mesh_add_meshid_ie()
308 static int mesh_add_awake_window_ie(struct ieee80211_sub_if_data *sdata, in mesh_add_awake_window_ie() argument
311 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in mesh_add_awake_window_ie()
331 int mesh_add_vendor_ies(struct ieee80211_sub_if_data *sdata, in mesh_add_vendor_ies() argument
334 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in mesh_add_vendor_ies()
355 int mesh_add_rsn_ie(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb) in mesh_add_rsn_ie() argument
357 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in mesh_add_rsn_ie()
378 static int mesh_add_ds_params_ie(struct ieee80211_sub_if_data *sdata, in mesh_add_ds_params_ie() argument
389 chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf); in mesh_add_ds_params_ie()
405 int mesh_add_ht_cap_ie(struct ieee80211_sub_if_data *sdata, in mesh_add_ht_cap_ie() argument
411 sband = ieee80211_get_sband(sdata); in mesh_add_ht_cap_ie()
416 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_20_NOHT || in mesh_add_ht_cap_ie()
417 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_5 || in mesh_add_ht_cap_ie()
418 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_10) in mesh_add_ht_cap_ie()
430 int mesh_add_ht_oper_ie(struct ieee80211_sub_if_data *sdata, in mesh_add_ht_oper_ie() argument
433 struct ieee80211_local *local = sdata->local; in mesh_add_ht_oper_ie()
441 chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf); in mesh_add_ht_oper_ie()
453 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_20_NOHT || in mesh_add_ht_oper_ie()
454 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_5 || in mesh_add_ht_oper_ie()
455 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_10) in mesh_add_ht_oper_ie()
462 ieee80211_ie_build_ht_oper(pos, ht_cap, &sdata->vif.bss_conf.chandef, in mesh_add_ht_oper_ie()
463 sdata->vif.bss_conf.ht_operation_mode, in mesh_add_ht_oper_ie()
469 int mesh_add_vht_cap_ie(struct ieee80211_sub_if_data *sdata, in mesh_add_vht_cap_ie() argument
475 sband = ieee80211_get_sband(sdata); in mesh_add_vht_cap_ie()
480 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_20_NOHT || in mesh_add_vht_cap_ie()
481 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_5 || in mesh_add_vht_cap_ie()
482 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_10) in mesh_add_vht_cap_ie()
494 int mesh_add_vht_oper_ie(struct ieee80211_sub_if_data *sdata, in mesh_add_vht_oper_ie() argument
497 struct ieee80211_local *local = sdata->local; in mesh_add_vht_oper_ie()
505 chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf); in mesh_add_vht_oper_ie()
517 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_20_NOHT || in mesh_add_vht_oper_ie()
518 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_5 || in mesh_add_vht_oper_ie()
519 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_10) in mesh_add_vht_oper_ie()
527 &sdata->vif.bss_conf.chandef); in mesh_add_vht_oper_ie()
534 struct ieee80211_sub_if_data *sdata = in ieee80211_mesh_path_timer() local
535 from_timer(sdata, t, u.mesh.mesh_path_timer); in ieee80211_mesh_path_timer()
537 ieee80211_queue_work(&sdata->local->hw, &sdata->work); in ieee80211_mesh_path_timer()
542 struct ieee80211_sub_if_data *sdata = in ieee80211_mesh_path_root_timer() local
543 from_timer(sdata, t, u.mesh.mesh_path_root_timer); in ieee80211_mesh_path_root_timer()
544 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_mesh_path_root_timer()
548 ieee80211_queue_work(&sdata->local->hw, &sdata->work); in ieee80211_mesh_path_root_timer()
605 unsigned int ieee80211_new_mesh_header(struct ieee80211_sub_if_data *sdata, in ieee80211_new_mesh_header() argument
614 meshhdr->ttl = sdata->u.mesh.mshcfg.dot11MeshTTL; in ieee80211_new_mesh_header()
617 put_unaligned(cpu_to_le32(sdata->u.mesh.mesh_seqnum), &meshhdr->seqnum); in ieee80211_new_mesh_header()
618 sdata->u.mesh.mesh_seqnum++; in ieee80211_new_mesh_header()
634 static void ieee80211_mesh_housekeeping(struct ieee80211_sub_if_data *sdata) in ieee80211_mesh_housekeeping() argument
636 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_mesh_housekeeping()
640 ieee80211_sta_expire(sdata, ifmsh->mshcfg.plink_timeout * HZ); in ieee80211_mesh_housekeeping()
641 mesh_path_expire(sdata); in ieee80211_mesh_housekeeping()
643 changed = mesh_accept_plinks_update(sdata); in ieee80211_mesh_housekeeping()
644 ieee80211_mbss_info_change_notify(sdata, changed); in ieee80211_mesh_housekeeping()
651 static void ieee80211_mesh_rootpath(struct ieee80211_sub_if_data *sdata) in ieee80211_mesh_rootpath() argument
653 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_mesh_rootpath()
656 mesh_path_tx_root_frame(sdata); in ieee80211_mesh_rootpath()
678 struct ieee80211_sub_if_data *sdata; in ieee80211_mesh_build_beacon() local
681 sdata = container_of(ifmsh, struct ieee80211_sub_if_data, u.mesh); in ieee80211_mesh_build_beacon()
683 chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf); in ieee80211_mesh_build_beacon()
726 memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN); in ieee80211_mesh_build_beacon()
727 memcpy(mgmt->bssid, sdata->vif.addr, ETH_ALEN); in ieee80211_mesh_build_beacon()
728 ieee80211_mps_set_frame_flags(sdata, NULL, (void *) mgmt); in ieee80211_mesh_build_beacon()
730 cpu_to_le16(sdata->vif.bss_conf.beacon_int); in ieee80211_mesh_build_beacon()
732 sdata->u.mesh.security ? WLAN_CAPABILITY_PRIVACY : 0); in ieee80211_mesh_build_beacon()
803 if (ieee80211_add_srates_ie(sdata, skb, true, band) || in ieee80211_mesh_build_beacon()
804 mesh_add_ds_params_ie(sdata, skb)) in ieee80211_mesh_build_beacon()
814 if (ieee80211_add_ext_srates_ie(sdata, skb, true, band) || in ieee80211_mesh_build_beacon()
815 mesh_add_rsn_ie(sdata, skb) || in ieee80211_mesh_build_beacon()
816 mesh_add_ht_cap_ie(sdata, skb) || in ieee80211_mesh_build_beacon()
817 mesh_add_ht_oper_ie(sdata, skb) || in ieee80211_mesh_build_beacon()
818 mesh_add_meshid_ie(sdata, skb) || in ieee80211_mesh_build_beacon()
819 mesh_add_meshconf_ie(sdata, skb) || in ieee80211_mesh_build_beacon()
820 mesh_add_awake_window_ie(sdata, skb) || in ieee80211_mesh_build_beacon()
821 mesh_add_vht_cap_ie(sdata, skb) || in ieee80211_mesh_build_beacon()
822 mesh_add_vht_oper_ie(sdata, skb) || in ieee80211_mesh_build_beacon()
823 mesh_add_vendor_ies(sdata, skb)) in ieee80211_mesh_build_beacon()
841 ieee80211_mesh_rebuild_beacon(struct ieee80211_sub_if_data *sdata) in ieee80211_mesh_rebuild_beacon() argument
846 old_bcn = rcu_dereference_protected(sdata->u.mesh.beacon, in ieee80211_mesh_rebuild_beacon()
847 lockdep_is_held(&sdata->wdev.mtx)); in ieee80211_mesh_rebuild_beacon()
848 ret = ieee80211_mesh_build_beacon(&sdata->u.mesh); in ieee80211_mesh_rebuild_beacon()
858 void ieee80211_mbss_info_change_notify(struct ieee80211_sub_if_data *sdata, in ieee80211_mbss_info_change_notify() argument
861 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_mbss_info_change_notify()
872 ieee80211_queue_work(&sdata->local->hw, &sdata->work); in ieee80211_mbss_info_change_notify()
875 int ieee80211_start_mesh(struct ieee80211_sub_if_data *sdata) in ieee80211_start_mesh() argument
877 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_start_mesh()
878 struct ieee80211_local *local = sdata->local; in ieee80211_start_mesh()
897 ieee80211_queue_work(&local->hw, &sdata->work); in ieee80211_start_mesh()
898 sdata->vif.bss_conf.ht_operation_mode = in ieee80211_start_mesh()
900 sdata->vif.bss_conf.enable_beacon = true; in ieee80211_start_mesh()
902 changed |= ieee80211_mps_local_status_update(sdata); in ieee80211_start_mesh()
905 ieee80211_stop_mesh(sdata); in ieee80211_start_mesh()
909 ieee80211_recalc_dtim(local, sdata); in ieee80211_start_mesh()
910 ieee80211_bss_info_change_notify(sdata, changed); in ieee80211_start_mesh()
912 netif_carrier_on(sdata->dev); in ieee80211_start_mesh()
916 void ieee80211_stop_mesh(struct ieee80211_sub_if_data *sdata) in ieee80211_stop_mesh() argument
918 struct ieee80211_local *local = sdata->local; in ieee80211_stop_mesh()
919 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_stop_mesh()
922 netif_carrier_off(sdata->dev); in ieee80211_stop_mesh()
925 sta_info_flush(sdata); in ieee80211_stop_mesh()
926 mesh_path_flush_by_iface(sdata); in ieee80211_stop_mesh()
930 sdata->vif.bss_conf.enable_beacon = false; in ieee80211_stop_mesh()
931 clear_bit(SDATA_STATE_OFFCHANNEL_BEACON_STOPPED, &sdata->state); in ieee80211_stop_mesh()
932 ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED); in ieee80211_stop_mesh()
936 lockdep_is_held(&sdata->wdev.mtx)); in ieee80211_stop_mesh()
944 del_timer_sync(&sdata->u.mesh.housekeeping_timer); in ieee80211_stop_mesh()
945 del_timer_sync(&sdata->u.mesh.mesh_path_root_timer); in ieee80211_stop_mesh()
946 del_timer_sync(&sdata->u.mesh.mesh_path_timer); in ieee80211_stop_mesh()
957 static void ieee80211_mesh_csa_mark_radar(struct ieee80211_sub_if_data *sdata) in ieee80211_mesh_csa_mark_radar() argument
964 err = cfg80211_chandef_dfs_required(sdata->local->hw.wiphy, in ieee80211_mesh_csa_mark_radar()
965 &sdata->vif.bss_conf.chandef, in ieee80211_mesh_csa_mark_radar()
968 cfg80211_radar_event(sdata->local->hw.wiphy, in ieee80211_mesh_csa_mark_radar()
969 &sdata->vif.bss_conf.chandef, GFP_ATOMIC); in ieee80211_mesh_csa_mark_radar()
973 ieee80211_mesh_process_chnswitch(struct ieee80211_sub_if_data *sdata, in ieee80211_mesh_process_chnswitch() argument
978 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_mesh_process_chnswitch()
983 sdata_assert_lock(sdata); in ieee80211_mesh_process_chnswitch()
985 sband = ieee80211_get_sband(sdata); in ieee80211_mesh_process_chnswitch()
990 switch (sdata->vif.bss_conf.chandef.width) { in ieee80211_mesh_process_chnswitch()
1005 err = ieee80211_parse_ch_switch_ie(sdata, elems, sband->band, in ieee80211_mesh_process_chnswitch()
1006 sta_flags, sdata->vif.addr, in ieee80211_mesh_process_chnswitch()
1017 ieee80211_mesh_csa_mark_radar(sdata); in ieee80211_mesh_process_chnswitch()
1022 if (!cfg80211_chandef_usable(sdata->local->hw.wiphy, ¶ms.chandef, in ieee80211_mesh_process_chnswitch()
1024 !cfg80211_reg_can_beacon(sdata->local->hw.wiphy, ¶ms.chandef, in ieee80211_mesh_process_chnswitch()
1026 sdata_info(sdata, in ieee80211_mesh_process_chnswitch()
1028 sdata->vif.addr, in ieee80211_mesh_process_chnswitch()
1036 err = cfg80211_chandef_dfs_required(sdata->local->hw.wiphy, in ieee80211_mesh_process_chnswitch()
1042 sdata_info(sdata, in ieee80211_mesh_process_chnswitch()
1044 sdata->vif.addr, in ieee80211_mesh_process_chnswitch()
1055 &sdata->vif.bss_conf.chandef)) { in ieee80211_mesh_process_chnswitch()
1056 mcsa_dbg(sdata, in ieee80211_mesh_process_chnswitch()
1061 mcsa_dbg(sdata, in ieee80211_mesh_process_chnswitch()
1078 if (ieee80211_channel_switch(sdata->local->hw.wiphy, sdata->dev, in ieee80211_mesh_process_chnswitch()
1086 ieee80211_mesh_rx_probe_req(struct ieee80211_sub_if_data *sdata, in ieee80211_mesh_rx_probe_req() argument
1089 struct ieee80211_local *local = sdata->local; in ieee80211_mesh_rx_probe_req()
1090 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_mesh_rx_probe_req()
1109 if ((!ether_addr_equal(mgmt->da, sdata->vif.addr) && in ieee80211_mesh_rx_probe_req()
1138 ieee80211_tx_skb(sdata, presp); in ieee80211_mesh_rx_probe_req()
1143 static void ieee80211_mesh_rx_bcn_presp(struct ieee80211_sub_if_data *sdata, in ieee80211_mesh_rx_bcn_presp() argument
1149 struct ieee80211_local *local = sdata->local; in ieee80211_mesh_rx_bcn_presp()
1150 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_mesh_rx_bcn_presp()
1159 !ether_addr_equal(mgmt->da, sdata->vif.addr)) in ieee80211_mesh_rx_bcn_presp()
1171 (elems.rsn && sdata->u.mesh.security == IEEE80211_MESH_SEC_NONE) || in ieee80211_mesh_rx_bcn_presp()
1172 (!elems.rsn && sdata->u.mesh.security != IEEE80211_MESH_SEC_NONE)) in ieee80211_mesh_rx_bcn_presp()
1185 if (mesh_matches_local(sdata, &elems)) { in ieee80211_mesh_rx_bcn_presp()
1186 mpl_dbg(sdata, "rssi_threshold=%d,rx_status->signal=%d\n", in ieee80211_mesh_rx_bcn_presp()
1187 sdata->u.mesh.mshcfg.rssi_threshold, rx_status->signal); in ieee80211_mesh_rx_bcn_presp()
1188 if (!sdata->u.mesh.user_mpm || in ieee80211_mesh_rx_bcn_presp()
1189 sdata->u.mesh.mshcfg.rssi_threshold == 0 || in ieee80211_mesh_rx_bcn_presp()
1190 sdata->u.mesh.mshcfg.rssi_threshold < rx_status->signal) in ieee80211_mesh_rx_bcn_presp()
1191 mesh_neighbour_update(sdata, mgmt->sa, &elems); in ieee80211_mesh_rx_bcn_presp()
1195 ifmsh->sync_ops->rx_bcn_presp(sdata, in ieee80211_mesh_rx_bcn_presp()
1199 !sdata->vif.csa_active) in ieee80211_mesh_rx_bcn_presp()
1200 ieee80211_mesh_process_chnswitch(sdata, &elems, true); in ieee80211_mesh_rx_bcn_presp()
1203 int ieee80211_mesh_finish_csa(struct ieee80211_sub_if_data *sdata) in ieee80211_mesh_finish_csa() argument
1205 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_mesh_finish_csa()
1219 ret = ieee80211_mesh_rebuild_beacon(sdata); in ieee80211_mesh_finish_csa()
1225 mcsa_dbg(sdata, "complete switching to center freq %d MHz", in ieee80211_mesh_finish_csa()
1226 sdata->vif.bss_conf.chandef.chan->center_freq); in ieee80211_mesh_finish_csa()
1230 int ieee80211_mesh_csa_beacon(struct ieee80211_sub_if_data *sdata, in ieee80211_mesh_csa_beacon() argument
1233 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_mesh_csa_beacon()
1247 ret = ieee80211_mesh_rebuild_beacon(sdata); in ieee80211_mesh_csa_beacon()
1258 static int mesh_fwd_csa_frame(struct ieee80211_sub_if_data *sdata, in mesh_fwd_csa_frame() argument
1264 struct ieee80211_local *local = sdata->local; in mesh_fwd_csa_frame()
1278 memcpy(mgmt_fwd->sa, sdata->vif.addr, ETH_ALEN); in mesh_fwd_csa_frame()
1279 memcpy(mgmt_fwd->bssid, sdata->vif.addr, ETH_ALEN); in mesh_fwd_csa_frame()
1281 ieee80211_tx_skb(sdata, skb); in mesh_fwd_csa_frame()
1285 static void mesh_rx_csa_frame(struct ieee80211_sub_if_data *sdata, in mesh_rx_csa_frame() argument
1288 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in mesh_rx_csa_frame()
1314 if (!sdata->vif.csa_active && in mesh_rx_csa_frame()
1315 !ieee80211_mesh_process_chnswitch(sdata, &elems, false)) { in mesh_rx_csa_frame()
1316 mcsa_dbg(sdata, "Failed to process CSA action frame"); in mesh_rx_csa_frame()
1322 if (mesh_fwd_csa_frame(sdata, mgmt, len, &elems) < 0) in mesh_rx_csa_frame()
1323 mcsa_dbg(sdata, "Failed to forward the CSA frame"); in mesh_rx_csa_frame()
1327 static void ieee80211_mesh_rx_mgmt_action(struct ieee80211_sub_if_data *sdata, in ieee80211_mesh_rx_mgmt_action() argument
1338 mesh_rx_plink_frame(sdata, mgmt, len, rx_status); in ieee80211_mesh_rx_mgmt_action()
1344 mesh_rx_path_sel_frame(sdata, mgmt, len); in ieee80211_mesh_rx_mgmt_action()
1347 mesh_rx_csa_frame(sdata, mgmt, len); in ieee80211_mesh_rx_mgmt_action()
1352 void ieee80211_mesh_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata, in ieee80211_mesh_rx_queued_mgmt() argument
1359 sdata_lock(sdata); in ieee80211_mesh_rx_queued_mgmt()
1362 if (!sdata->u.mesh.mesh_id_len) in ieee80211_mesh_rx_queued_mgmt()
1372 ieee80211_mesh_rx_bcn_presp(sdata, stype, mgmt, skb->len, in ieee80211_mesh_rx_queued_mgmt()
1376 ieee80211_mesh_rx_probe_req(sdata, mgmt, skb->len); in ieee80211_mesh_rx_queued_mgmt()
1379 ieee80211_mesh_rx_mgmt_action(sdata, mgmt, skb->len, rx_status); in ieee80211_mesh_rx_queued_mgmt()
1383 sdata_unlock(sdata); in ieee80211_mesh_rx_queued_mgmt()
1386 static void mesh_bss_info_changed(struct ieee80211_sub_if_data *sdata) in mesh_bss_info_changed() argument
1388 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in mesh_bss_info_changed()
1397 if (sdata->vif.bss_conf.enable_beacon && in mesh_bss_info_changed()
1402 if (ieee80211_mesh_rebuild_beacon(sdata)) in mesh_bss_info_changed()
1405 ieee80211_bss_info_change_notify(sdata, changed); in mesh_bss_info_changed()
1408 void ieee80211_mesh_work(struct ieee80211_sub_if_data *sdata) in ieee80211_mesh_work() argument
1410 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_mesh_work()
1412 sdata_lock(sdata); in ieee80211_mesh_work()
1415 if (!sdata->u.mesh.mesh_id_len) in ieee80211_mesh_work()
1421 mesh_path_start_discovery(sdata); in ieee80211_mesh_work()
1424 ieee80211_mesh_housekeeping(sdata); in ieee80211_mesh_work()
1427 ieee80211_mesh_rootpath(sdata); in ieee80211_mesh_work()
1430 mesh_sync_adjust_tsf(sdata); in ieee80211_mesh_work()
1433 mesh_bss_info_changed(sdata); in ieee80211_mesh_work()
1435 sdata_unlock(sdata); in ieee80211_mesh_work()
1439 void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata) in ieee80211_mesh_init_sdata() argument
1441 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_mesh_init_sdata()
1449 mesh_rmc_init(sdata); in ieee80211_mesh_init_sdata()
1457 mesh_pathtbl_init(sdata); in ieee80211_mesh_init_sdata()
1468 sdata->vif.bss_conf.bssid = zero_addr; in ieee80211_mesh_init_sdata()
1471 void ieee80211_mesh_teardown_sdata(struct ieee80211_sub_if_data *sdata) in ieee80211_mesh_teardown_sdata() argument
1473 mesh_rmc_free(sdata); in ieee80211_mesh_teardown_sdata()
1474 mesh_pathtbl_unregister(sdata); in ieee80211_mesh_teardown_sdata()