Lines Matching refs:sdata

87 	msecs_to_jiffies(sdata->u.mesh.mshcfg.min_discovery_timeout)
89 msecs_to_jiffies(sdata->u.mesh.mshcfg.dot11MeshHWMPconfirmationInterval)
106 struct ieee80211_sub_if_data *sdata) in mesh_path_sel_frame_tx() argument
108 struct ieee80211_local *local = sdata->local; in mesh_path_sel_frame_tx()
126 memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN); in mesh_path_sel_frame_tx()
128 memcpy(mgmt->bssid, sdata->vif.addr, ETH_ALEN); in mesh_path_sel_frame_tx()
135 mhwmp_dbg(sdata, "sending PREQ to %pM\n", target); in mesh_path_sel_frame_tx()
141 mhwmp_dbg(sdata, "sending PREP to %pM\n", orig_addr); in mesh_path_sel_frame_tx()
147 mhwmp_dbg(sdata, "sending RANN from %pM\n", orig_addr); in mesh_path_sel_frame_tx()
193 ieee80211_tx_skb(sdata, skb); in mesh_path_sel_frame_tx()
200 static void prepare_frame_for_deferred_tx(struct ieee80211_sub_if_data *sdata, in prepare_frame_for_deferred_tx() argument
214 info->control.vif = &sdata->vif; in prepare_frame_for_deferred_tx()
216 ieee80211_set_qos_hdr(sdata, skb); in prepare_frame_for_deferred_tx()
217 ieee80211_mps_set_frame_flags(sdata, NULL, hdr); in prepare_frame_for_deferred_tx()
236 int mesh_path_error_tx(struct ieee80211_sub_if_data *sdata, in mesh_path_error_tx() argument
240 struct ieee80211_local *local = sdata->local; in mesh_path_error_tx()
242 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in mesh_path_error_tx()
264 memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN); in mesh_path_error_tx()
266 memcpy(mgmt->bssid, sdata->vif.addr, ETH_ALEN); in mesh_path_error_tx()
290 prepare_frame_for_deferred_tx(sdata, skb); in mesh_path_error_tx()
393 static u32 hwmp_route_info_get(struct ieee80211_sub_if_data *sdata, in hwmp_route_info_get() argument
397 struct ieee80211_local *local = sdata->local; in hwmp_route_info_get()
410 sta = sta_info_get(sdata, mgmt->sa); in hwmp_route_info_get()
449 if (ether_addr_equal(orig_addr, sdata->vif.addr)) { in hwmp_route_info_get()
456 mpath = mesh_path_lookup(sdata, orig_addr); in hwmp_route_info_get()
494 mpath = mesh_path_add(sdata, orig_addr); in hwmp_route_info_get()
536 mpath = mesh_path_lookup(sdata, ta); in hwmp_route_info_get()
546 mpath = mesh_path_add(sdata, ta); in hwmp_route_info_get()
581 static void hwmp_preq_frame_process(struct ieee80211_sub_if_data *sdata, in hwmp_preq_frame_process() argument
585 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in hwmp_preq_frame_process()
605 mhwmp_dbg(sdata, "received PREQ from %pM\n", orig_addr); in hwmp_preq_frame_process()
607 if (ether_addr_equal(target_addr, sdata->vif.addr)) { in hwmp_preq_frame_process()
608 mhwmp_dbg(sdata, "PREQ is for us\n"); in hwmp_preq_frame_process()
617 net_traversal_jiffies(sdata)) || in hwmp_preq_frame_process()
626 mpath = mesh_path_lookup(sdata, orig_addr); in hwmp_preq_frame_process()
630 target_addr = sdata->vif.addr; in hwmp_preq_frame_process()
641 mpath = mesh_path_lookup(sdata, target_addr); in hwmp_preq_frame_process()
665 mhwmp_dbg(sdata, "replying to the PREQ\n"); in hwmp_preq_frame_process()
670 sdata); in hwmp_preq_frame_process()
686 mhwmp_dbg(sdata, "forwarding the PREQ from %pM\n", orig_addr); in hwmp_preq_frame_process()
701 orig_metric, preq_id, sdata); in hwmp_preq_frame_process()
719 static void hwmp_prep_frame_process(struct ieee80211_sub_if_data *sdata, in hwmp_prep_frame_process() argument
723 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in hwmp_prep_frame_process()
730 mhwmp_dbg(sdata, "received PREP from %pM\n", in hwmp_prep_frame_process()
734 if (ether_addr_equal(orig_addr, sdata->vif.addr)) in hwmp_prep_frame_process()
743 sdata->u.mesh.mshstats.dropped_frames_ttl++; in hwmp_prep_frame_process()
748 mpath = mesh_path_lookup(sdata, orig_addr); in hwmp_prep_frame_process()
769 ttl, lifetime, metric, 0, sdata); in hwmp_prep_frame_process()
772 sdata->u.mesh.mshstats.fwded_unicast++; in hwmp_prep_frame_process()
773 sdata->u.mesh.mshstats.fwded_frames++; in hwmp_prep_frame_process()
778 sdata->u.mesh.mshstats.dropped_frames_no_route++; in hwmp_prep_frame_process()
781 static void hwmp_perr_frame_process(struct ieee80211_sub_if_data *sdata, in hwmp_perr_frame_process() argument
785 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in hwmp_perr_frame_process()
804 mpath = mesh_path_lookup(sdata, target_addr); in hwmp_perr_frame_process()
823 mesh_path_error_tx(sdata, ttl, target_addr, in hwmp_perr_frame_process()
833 static void hwmp_rann_frame_process(struct ieee80211_sub_if_data *sdata, in hwmp_rann_frame_process() argument
837 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in hwmp_rann_frame_process()
838 struct ieee80211_local *local = sdata->local; in hwmp_rann_frame_process()
857 if (ether_addr_equal(orig_addr, sdata->vif.addr)) in hwmp_rann_frame_process()
860 mhwmp_dbg(sdata, in hwmp_rann_frame_process()
865 sta = sta_info_get(sdata, mgmt->sa); in hwmp_rann_frame_process()
876 mpath = mesh_path_lookup(sdata, orig_addr); in hwmp_rann_frame_process()
878 mpath = mesh_path_add(sdata, orig_addr); in hwmp_rann_frame_process()
881 sdata->u.mesh.mshstats.dropped_frames_no_route++; in hwmp_rann_frame_process()
894 root_path_confirmation_jiffies(sdata)) || in hwmp_rann_frame_process()
897 mhwmp_dbg(sdata, in hwmp_rann_frame_process()
925 new_metric, 0, sdata); in hwmp_rann_frame_process()
932 void mesh_rx_path_sel_frame(struct ieee80211_sub_if_data *sdata, in mesh_rx_path_sel_frame() argument
945 sta = sta_info_get(sdata, mgmt->sa); in mesh_rx_path_sel_frame()
962 path_metric = hwmp_route_info_get(sdata, mgmt, elems->preq, in mesh_rx_path_sel_frame()
965 hwmp_preq_frame_process(sdata, mgmt, elems->preq, in mesh_rx_path_sel_frame()
972 path_metric = hwmp_route_info_get(sdata, mgmt, elems->prep, in mesh_rx_path_sel_frame()
975 hwmp_prep_frame_process(sdata, mgmt, elems->prep, in mesh_rx_path_sel_frame()
982 hwmp_perr_frame_process(sdata, mgmt, elems->perr); in mesh_rx_path_sel_frame()
985 hwmp_rann_frame_process(sdata, mgmt, elems->rann); in mesh_rx_path_sel_frame()
1001 struct ieee80211_sub_if_data *sdata = mpath->sdata; in mesh_queue_preq() local
1002 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in mesh_queue_preq()
1007 mhwmp_dbg(sdata, "could not allocate PREQ node\n"); in mesh_queue_preq()
1016 mhwmp_dbg(sdata, "PREQ node queue full\n"); in mesh_queue_preq()
1038 if (time_after(jiffies, ifmsh->last_preq + min_preq_int_jiff(sdata))) in mesh_queue_preq()
1039 wiphy_work_queue(sdata->local->hw.wiphy, &sdata->work); in mesh_queue_preq()
1045 ifmsh->last_preq = jiffies - min_preq_int_jiff(sdata) - 1; in mesh_queue_preq()
1046 wiphy_work_queue(sdata->local->hw.wiphy, &sdata->work); in mesh_queue_preq()
1049 min_preq_int_jiff(sdata)); in mesh_queue_preq()
1057 void mesh_path_start_discovery(struct ieee80211_sub_if_data *sdata) in mesh_path_start_discovery() argument
1059 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in mesh_path_start_discovery()
1069 min_preq_int_jiff(sdata))) { in mesh_path_start_discovery()
1081 mpath = mesh_path_lookup(sdata, preq_node->dst); in mesh_path_start_discovery()
1099 mpath->discovery_timeout = disc_timeout_jiff(sdata); in mesh_path_start_discovery()
1111 net_traversal_jiffies(sdata)) || in mesh_path_start_discovery()
1114 sdata->u.mesh.last_sn_update = jiffies; in mesh_path_start_discovery()
1116 lifetime = default_lifetime(sdata); in mesh_path_start_discovery()
1117 ttl = sdata->u.mesh.mshcfg.element_ttl; in mesh_path_start_discovery()
1119 sdata->u.mesh.mshstats.dropped_frames_ttl++; in mesh_path_start_discovery()
1131 mesh_path_sel_frame_tx(MPATH_PREQ, 0, sdata->vif.addr, ifmsh->sn, in mesh_path_start_discovery()
1133 ttl, lifetime, 0, ifmsh->preq_id++, sdata); in mesh_path_start_discovery()
1157 int mesh_nexthop_resolve(struct ieee80211_sub_if_data *sdata, in mesh_nexthop_resolve() argument
1174 if (!mesh_nexthop_lookup(sdata, skb)) in mesh_nexthop_resolve()
1178 mpath = mesh_path_lookup(sdata, target_addr); in mesh_nexthop_resolve()
1180 mpath = mesh_path_add(sdata, target_addr); in mesh_nexthop_resolve()
1182 mesh_path_discard_frame(sdata, skb); in mesh_nexthop_resolve()
1188 mesh_path_sel_is_hwmp(sdata)) in mesh_nexthop_resolve()
1195 ieee80211_set_qos_hdr(sdata, skb); in mesh_nexthop_resolve()
1198 mesh_path_discard_frame(sdata, skb_to_free); in mesh_nexthop_resolve()
1214 static int mesh_nexthop_lookup_nolearn(struct ieee80211_sub_if_data *sdata, in mesh_nexthop_lookup_nolearn() argument
1224 sta = sta_info_get(sdata, hdr->addr3); in mesh_nexthop_lookup_nolearn()
1233 memcpy(hdr->addr2, sdata->vif.addr, ETH_ALEN); in mesh_nexthop_lookup_nolearn()
1237 void mesh_path_refresh(struct ieee80211_sub_if_data *sdata, in mesh_path_refresh() argument
1246 msecs_to_jiffies(sdata->u.mesh.mshcfg.path_refresh_time)) && in mesh_path_refresh()
1247 (!addr || ether_addr_equal(sdata->vif.addr, addr))) in mesh_path_refresh()
1261 int mesh_nexthop_lookup(struct ieee80211_sub_if_data *sdata, in mesh_nexthop_lookup() argument
1264 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in mesh_nexthop_lookup()
1271 !mesh_nexthop_lookup_nolearn(sdata, skb)) in mesh_nexthop_lookup()
1274 mpath = mesh_path_lookup(sdata, target_addr); in mesh_nexthop_lookup()
1278 mesh_path_refresh(sdata, mpath, hdr->addr4); in mesh_nexthop_lookup()
1283 memcpy(hdr->addr2, sdata->vif.addr, ETH_ALEN); in mesh_nexthop_lookup()
1284 ieee80211_mps_set_frame_flags(sdata, next_hop, hdr); in mesh_nexthop_lookup()
1285 if (ieee80211_hw_check(&sdata->local->hw, SUPPORT_FAST_XMIT)) in mesh_nexthop_lookup()
1286 mesh_fast_tx_cache(sdata, skb, mpath); in mesh_nexthop_lookup()
1296 struct ieee80211_sub_if_data *sdata = mpath->sdata; in mesh_path_timer() local
1299 if (sdata->local->quiescing) in mesh_path_timer()
1307 } else if (mpath->discovery_retries < max_preq_retries(sdata)) { in mesh_path_timer()
1319 if (!mpath->is_gate && mesh_gate_num(sdata) > 0) { in mesh_path_timer()
1322 mhwmp_dbg(sdata, "no gate was reachable\n"); in mesh_path_timer()
1328 void mesh_path_tx_root_frame(struct ieee80211_sub_if_data *sdata) in mesh_path_tx_root_frame() argument
1330 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in mesh_path_tx_root_frame()
1339 mesh_path_sel_frame_tx(MPATH_RANN, flags, sdata->vif.addr, in mesh_path_tx_root_frame()
1342 interval, 0, 0, sdata); in mesh_path_tx_root_frame()
1351 mesh_path_sel_frame_tx(MPATH_PREQ, flags, sdata->vif.addr, in mesh_path_tx_root_frame()
1355 0, ifmsh->preq_id++, sdata); in mesh_path_tx_root_frame()
1358 mhwmp_dbg(sdata, "Proactive mechanism not supported\n"); in mesh_path_tx_root_frame()