diff options
Diffstat (limited to 'net/mac80211/mesh.h')
-rw-r--r-- | net/mac80211/mesh.h | 105 |
1 files changed, 50 insertions, 55 deletions
diff --git a/net/mac80211/mesh.h b/net/mac80211/mesh.h index 1a1da877b1d2..336c88a16687 100644 --- a/net/mac80211/mesh.h +++ b/net/mac80211/mesh.h | |||
@@ -26,12 +26,12 @@ | |||
26 | * @MESH_PATH_ACTIVE: the mesh path can be used for forwarding | 26 | * @MESH_PATH_ACTIVE: the mesh path can be used for forwarding |
27 | * @MESH_PATH_RESOLVING: the discovery process is running for this mesh path | 27 | * @MESH_PATH_RESOLVING: the discovery process is running for this mesh path |
28 | * @MESH_PATH_SN_VALID: the mesh path contains a valid destination sequence | 28 | * @MESH_PATH_SN_VALID: the mesh path contains a valid destination sequence |
29 | * number | 29 | * number |
30 | * @MESH_PATH_FIXED: the mesh path has been manually set and should not be | 30 | * @MESH_PATH_FIXED: the mesh path has been manually set and should not be |
31 | * modified | 31 | * modified |
32 | * @MESH_PATH_RESOLVED: the mesh path can has been resolved | 32 | * @MESH_PATH_RESOLVED: the mesh path can has been resolved |
33 | * @MESH_PATH_REQ_QUEUED: there is an unsent path request for this destination | 33 | * @MESH_PATH_REQ_QUEUED: there is an unsent path request for this destination |
34 | * already queued up, waiting for the discovery process to start. | 34 | * already queued up, waiting for the discovery process to start. |
35 | * | 35 | * |
36 | * MESH_PATH_RESOLVED is used by the mesh path timer to | 36 | * MESH_PATH_RESOLVED is used by the mesh path timer to |
37 | * decide when to stop or cancel the mesh path discovery. | 37 | * decide when to stop or cancel the mesh path discovery. |
@@ -73,16 +73,16 @@ enum mesh_deferred_task_flags { | |||
73 | * @dst: mesh path destination mac address | 73 | * @dst: mesh path destination mac address |
74 | * @sdata: mesh subif | 74 | * @sdata: mesh subif |
75 | * @next_hop: mesh neighbor to which frames for this destination will be | 75 | * @next_hop: mesh neighbor to which frames for this destination will be |
76 | * forwarded | 76 | * forwarded |
77 | * @timer: mesh path discovery timer | 77 | * @timer: mesh path discovery timer |
78 | * @frame_queue: pending queue for frames sent to this destination while the | 78 | * @frame_queue: pending queue for frames sent to this destination while the |
79 | * path is unresolved | 79 | * path is unresolved |
80 | * @sn: target sequence number | 80 | * @sn: target sequence number |
81 | * @metric: current metric to this destination | 81 | * @metric: current metric to this destination |
82 | * @hop_count: hops to destination | 82 | * @hop_count: hops to destination |
83 | * @exp_time: in jiffies, when the path will expire or when it expired | 83 | * @exp_time: in jiffies, when the path will expire or when it expired |
84 | * @discovery_timeout: timeout (lapse in jiffies) used for the last discovery | 84 | * @discovery_timeout: timeout (lapse in jiffies) used for the last discovery |
85 | * retry | 85 | * retry |
86 | * @discovery_retries: number of discovery retries | 86 | * @discovery_retries: number of discovery retries |
87 | * @flags: mesh path flags, as specified on &enum mesh_path_flags | 87 | * @flags: mesh path flags, as specified on &enum mesh_path_flags |
88 | * @state_lock: mesh path state lock used to protect changes to the | 88 | * @state_lock: mesh path state lock used to protect changes to the |
@@ -206,38 +206,33 @@ struct mesh_rmc { | |||
206 | /* Various */ | 206 | /* Various */ |
207 | int ieee80211_fill_mesh_addresses(struct ieee80211_hdr *hdr, __le16 *fc, | 207 | int ieee80211_fill_mesh_addresses(struct ieee80211_hdr *hdr, __le16 *fc, |
208 | const u8 *da, const u8 *sa); | 208 | const u8 *da, const u8 *sa); |
209 | int ieee80211_new_mesh_header(struct ieee80211s_hdr *meshhdr, | 209 | int ieee80211_new_mesh_header(struct ieee80211_sub_if_data *sdata, |
210 | struct ieee80211_sub_if_data *sdata, char *addr4or5, | 210 | struct ieee80211s_hdr *meshhdr, |
211 | char *addr6); | 211 | const char *addr4or5, const char *addr6); |
212 | int mesh_rmc_check(u8 *addr, struct ieee80211s_hdr *mesh_hdr, | 212 | int mesh_rmc_check(struct ieee80211_sub_if_data *sdata, |
213 | struct ieee80211_sub_if_data *sdata); | 213 | const u8 *addr, struct ieee80211s_hdr *mesh_hdr); |
214 | bool mesh_matches_local(struct ieee80211_sub_if_data *sdata, | 214 | bool mesh_matches_local(struct ieee80211_sub_if_data *sdata, |
215 | struct ieee802_11_elems *ie); | 215 | struct ieee802_11_elems *ie); |
216 | void mesh_ids_set_default(struct ieee80211_if_mesh *mesh); | 216 | void mesh_ids_set_default(struct ieee80211_if_mesh *mesh); |
217 | void mesh_mgmt_ies_add(struct sk_buff *skb, | 217 | void mesh_mgmt_ies_add(struct ieee80211_sub_if_data *sdata, |
218 | struct ieee80211_sub_if_data *sdata); | 218 | struct sk_buff *skb); |
219 | int mesh_add_meshconf_ie(struct sk_buff *skb, | 219 | int mesh_add_meshconf_ie(struct ieee80211_sub_if_data *sdata, |
220 | struct ieee80211_sub_if_data *sdata); | 220 | struct sk_buff *skb); |
221 | int mesh_add_meshid_ie(struct sk_buff *skb, | 221 | int mesh_add_meshid_ie(struct ieee80211_sub_if_data *sdata, |
222 | struct ieee80211_sub_if_data *sdata); | 222 | struct sk_buff *skb); |
223 | int mesh_add_rsn_ie(struct sk_buff *skb, | 223 | int mesh_add_rsn_ie(struct ieee80211_sub_if_data *sdata, |
224 | struct ieee80211_sub_if_data *sdata); | 224 | struct sk_buff *skb); |
225 | int mesh_add_awake_window_ie(struct sk_buff *skb, | 225 | int mesh_add_vendor_ies(struct ieee80211_sub_if_data *sdata, |
226 | struct ieee80211_sub_if_data *sdata); | 226 | struct sk_buff *skb); |
227 | int mesh_add_vendor_ies(struct sk_buff *skb, | 227 | int mesh_add_ht_cap_ie(struct ieee80211_sub_if_data *sdata, |
228 | struct ieee80211_sub_if_data *sdata); | 228 | struct sk_buff *skb); |
229 | int mesh_add_ds_params_ie(struct sk_buff *skb, | 229 | int mesh_add_ht_oper_ie(struct ieee80211_sub_if_data *sdata, |
230 | struct ieee80211_sub_if_data *sdata); | 230 | struct sk_buff *skb); |
231 | int mesh_add_ht_cap_ie(struct sk_buff *skb, | ||
232 | struct ieee80211_sub_if_data *sdata); | ||
233 | int mesh_add_ht_oper_ie(struct sk_buff *skb, | ||
234 | struct ieee80211_sub_if_data *sdata); | ||
235 | void mesh_rmc_free(struct ieee80211_sub_if_data *sdata); | 231 | void mesh_rmc_free(struct ieee80211_sub_if_data *sdata); |
236 | int mesh_rmc_init(struct ieee80211_sub_if_data *sdata); | 232 | int mesh_rmc_init(struct ieee80211_sub_if_data *sdata); |
237 | void ieee80211s_init(void); | 233 | void ieee80211s_init(void); |
238 | void ieee80211s_update_metric(struct ieee80211_local *local, | 234 | void ieee80211s_update_metric(struct ieee80211_local *local, |
239 | struct sta_info *sta, struct sk_buff *skb); | 235 | struct sta_info *sta, struct sk_buff *skb); |
240 | void ieee80211s_stop(void); | ||
241 | void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata); | 236 | void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata); |
242 | int ieee80211_start_mesh(struct ieee80211_sub_if_data *sdata); | 237 | int ieee80211_start_mesh(struct ieee80211_sub_if_data *sdata); |
243 | void ieee80211_stop_mesh(struct ieee80211_sub_if_data *sdata); | 238 | void ieee80211_stop_mesh(struct ieee80211_sub_if_data *sdata); |
@@ -263,31 +258,32 @@ void ieee80211_mps_frame_release(struct sta_info *sta, | |||
263 | struct ieee802_11_elems *elems); | 258 | struct ieee802_11_elems *elems); |
264 | 259 | ||
265 | /* Mesh paths */ | 260 | /* Mesh paths */ |
266 | int mesh_nexthop_lookup(struct sk_buff *skb, | 261 | int mesh_nexthop_lookup(struct ieee80211_sub_if_data *sdata, |
267 | struct ieee80211_sub_if_data *sdata); | 262 | struct sk_buff *skb); |
268 | int mesh_nexthop_resolve(struct sk_buff *skb, | 263 | int mesh_nexthop_resolve(struct ieee80211_sub_if_data *sdata, |
269 | struct ieee80211_sub_if_data *sdata); | 264 | struct sk_buff *skb); |
270 | void mesh_path_start_discovery(struct ieee80211_sub_if_data *sdata); | 265 | void mesh_path_start_discovery(struct ieee80211_sub_if_data *sdata); |
271 | struct mesh_path *mesh_path_lookup(const u8 *dst, | 266 | struct mesh_path *mesh_path_lookup(struct ieee80211_sub_if_data *sdata, |
272 | struct ieee80211_sub_if_data *sdata); | 267 | const u8 *dst); |
273 | struct mesh_path *mpp_path_lookup(u8 *dst, | 268 | struct mesh_path *mpp_path_lookup(struct ieee80211_sub_if_data *sdata, |
274 | struct ieee80211_sub_if_data *sdata); | 269 | const u8 *dst); |
275 | int mpp_path_add(u8 *dst, u8 *mpp, struct ieee80211_sub_if_data *sdata); | 270 | int mpp_path_add(struct ieee80211_sub_if_data *sdata, |
276 | struct mesh_path *mesh_path_lookup_by_idx(int idx, | 271 | const u8 *dst, const u8 *mpp); |
277 | struct ieee80211_sub_if_data *sdata); | 272 | struct mesh_path * |
273 | mesh_path_lookup_by_idx(struct ieee80211_sub_if_data *sdata, int idx); | ||
278 | void mesh_path_fix_nexthop(struct mesh_path *mpath, struct sta_info *next_hop); | 274 | void mesh_path_fix_nexthop(struct mesh_path *mpath, struct sta_info *next_hop); |
279 | void mesh_path_expire(struct ieee80211_sub_if_data *sdata); | 275 | void mesh_path_expire(struct ieee80211_sub_if_data *sdata); |
280 | void mesh_rx_path_sel_frame(struct ieee80211_sub_if_data *sdata, | 276 | void mesh_rx_path_sel_frame(struct ieee80211_sub_if_data *sdata, |
281 | struct ieee80211_mgmt *mgmt, size_t len); | 277 | struct ieee80211_mgmt *mgmt, size_t len); |
282 | int mesh_path_add(const u8 *dst, struct ieee80211_sub_if_data *sdata); | 278 | int mesh_path_add(struct ieee80211_sub_if_data *sdata, const u8 *dst); |
283 | 279 | ||
284 | int mesh_path_add_gate(struct mesh_path *mpath); | 280 | int mesh_path_add_gate(struct mesh_path *mpath); |
285 | int mesh_path_send_to_gates(struct mesh_path *mpath); | 281 | int mesh_path_send_to_gates(struct mesh_path *mpath); |
286 | int mesh_gate_num(struct ieee80211_sub_if_data *sdata); | 282 | int mesh_gate_num(struct ieee80211_sub_if_data *sdata); |
283 | |||
287 | /* Mesh plinks */ | 284 | /* Mesh plinks */ |
288 | void mesh_neighbour_update(struct ieee80211_sub_if_data *sdata, | 285 | void mesh_neighbour_update(struct ieee80211_sub_if_data *sdata, |
289 | u8 *hw_addr, | 286 | u8 *hw_addr, struct ieee802_11_elems *ie); |
290 | struct ieee802_11_elems *ie); | ||
291 | bool mesh_peer_accepts_plinks(struct ieee802_11_elems *ie); | 287 | bool mesh_peer_accepts_plinks(struct ieee802_11_elems *ie); |
292 | u32 mesh_accept_plinks_update(struct ieee80211_sub_if_data *sdata); | 288 | u32 mesh_accept_plinks_update(struct ieee80211_sub_if_data *sdata); |
293 | void mesh_plink_broken(struct sta_info *sta); | 289 | void mesh_plink_broken(struct sta_info *sta); |
@@ -304,19 +300,19 @@ void mesh_sta_cleanup(struct sta_info *sta); | |||
304 | void mesh_mpath_table_grow(void); | 300 | void mesh_mpath_table_grow(void); |
305 | void mesh_mpp_table_grow(void); | 301 | void mesh_mpp_table_grow(void); |
306 | /* Mesh paths */ | 302 | /* Mesh paths */ |
307 | int mesh_path_error_tx(u8 ttl, const u8 *target, __le32 target_sn, | 303 | int mesh_path_error_tx(struct ieee80211_sub_if_data *sdata, |
308 | __le16 target_rcode, const u8 *ra, | 304 | u8 ttl, const u8 *target, __le32 target_sn, |
309 | struct ieee80211_sub_if_data *sdata); | 305 | __le16 target_rcode, const u8 *ra); |
310 | void mesh_path_assign_nexthop(struct mesh_path *mpath, struct sta_info *sta); | 306 | void mesh_path_assign_nexthop(struct mesh_path *mpath, struct sta_info *sta); |
311 | void mesh_path_flush_pending(struct mesh_path *mpath); | 307 | void mesh_path_flush_pending(struct mesh_path *mpath); |
312 | void mesh_path_tx_pending(struct mesh_path *mpath); | 308 | void mesh_path_tx_pending(struct mesh_path *mpath); |
313 | int mesh_pathtbl_init(void); | 309 | int mesh_pathtbl_init(void); |
314 | void mesh_pathtbl_unregister(void); | 310 | void mesh_pathtbl_unregister(void); |
315 | int mesh_path_del(u8 *addr, struct ieee80211_sub_if_data *sdata); | 311 | int mesh_path_del(struct ieee80211_sub_if_data *sdata, const u8 *addr); |
316 | void mesh_path_timer(unsigned long data); | 312 | void mesh_path_timer(unsigned long data); |
317 | void mesh_path_flush_by_nexthop(struct sta_info *sta); | 313 | void mesh_path_flush_by_nexthop(struct sta_info *sta); |
318 | void mesh_path_discard_frame(struct sk_buff *skb, | 314 | void mesh_path_discard_frame(struct ieee80211_sub_if_data *sdata, |
319 | struct ieee80211_sub_if_data *sdata); | 315 | struct sk_buff *skb); |
320 | void mesh_path_quiesce(struct ieee80211_sub_if_data *sdata); | 316 | void mesh_path_quiesce(struct ieee80211_sub_if_data *sdata); |
321 | void mesh_path_restart(struct ieee80211_sub_if_data *sdata); | 317 | void mesh_path_restart(struct ieee80211_sub_if_data *sdata); |
322 | void mesh_path_tx_root_frame(struct ieee80211_sub_if_data *sdata); | 318 | void mesh_path_tx_root_frame(struct ieee80211_sub_if_data *sdata); |
@@ -325,8 +321,6 @@ bool mesh_action_is_path_sel(struct ieee80211_mgmt *mgmt); | |||
325 | extern int mesh_paths_generation; | 321 | extern int mesh_paths_generation; |
326 | 322 | ||
327 | #ifdef CONFIG_MAC80211_MESH | 323 | #ifdef CONFIG_MAC80211_MESH |
328 | extern int mesh_allocated; | ||
329 | |||
330 | static inline | 324 | static inline |
331 | u32 mesh_plink_inc_estab_count(struct ieee80211_sub_if_data *sdata) | 325 | u32 mesh_plink_inc_estab_count(struct ieee80211_sub_if_data *sdata) |
332 | { | 326 | { |
@@ -371,8 +365,8 @@ void mesh_plink_quiesce(struct sta_info *sta); | |||
371 | void mesh_plink_restart(struct sta_info *sta); | 365 | void mesh_plink_restart(struct sta_info *sta); |
372 | void mesh_path_flush_by_iface(struct ieee80211_sub_if_data *sdata); | 366 | void mesh_path_flush_by_iface(struct ieee80211_sub_if_data *sdata); |
373 | void mesh_sync_adjust_tbtt(struct ieee80211_sub_if_data *sdata); | 367 | void mesh_sync_adjust_tbtt(struct ieee80211_sub_if_data *sdata); |
368 | void ieee80211s_stop(void); | ||
374 | #else | 369 | #else |
375 | #define mesh_allocated 0 | ||
376 | static inline void | 370 | static inline void |
377 | ieee80211_mesh_notify_scan_completed(struct ieee80211_local *local) {} | 371 | ieee80211_mesh_notify_scan_completed(struct ieee80211_local *local) {} |
378 | static inline void ieee80211_mesh_quiesce(struct ieee80211_sub_if_data *sdata) | 372 | static inline void ieee80211_mesh_quiesce(struct ieee80211_sub_if_data *sdata) |
@@ -385,6 +379,7 @@ static inline bool mesh_path_sel_is_hwmp(struct ieee80211_sub_if_data *sdata) | |||
385 | { return false; } | 379 | { return false; } |
386 | static inline void mesh_path_flush_by_iface(struct ieee80211_sub_if_data *sdata) | 380 | static inline void mesh_path_flush_by_iface(struct ieee80211_sub_if_data *sdata) |
387 | {} | 381 | {} |
382 | static inline void ieee80211s_stop(void) {} | ||
388 | #endif | 383 | #endif |
389 | 384 | ||
390 | #endif /* IEEE80211S_H */ | 385 | #endif /* IEEE80211S_H */ |