aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/mesh.h
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2013-02-15 08:40:31 -0500
committerJohannes Berg <johannes.berg@intel.com>2013-02-15 09:46:37 -0500
commitbf7cd94dcc71682cd6af4a9028f95307b7db41c5 (patch)
tree66b4573619eaebf52c0a298969a9756eb0059266 /net/mac80211/mesh.h
parent93c78c5debeb9c7101ecc73347d4730c26a98c05 (diff)
mac80211: clean up mesh code
There's various code with strange indentation, questionable loop and locking constructs, etc. The bigger change is moving the "sdata" argument to the first argument of all functions, like all other mac80211 functions that have one. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/mesh.h')
-rw-r--r--net/mac80211/mesh.h105
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 */
207int ieee80211_fill_mesh_addresses(struct ieee80211_hdr *hdr, __le16 *fc, 207int ieee80211_fill_mesh_addresses(struct ieee80211_hdr *hdr, __le16 *fc,
208 const u8 *da, const u8 *sa); 208 const u8 *da, const u8 *sa);
209int ieee80211_new_mesh_header(struct ieee80211s_hdr *meshhdr, 209int 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);
212int mesh_rmc_check(u8 *addr, struct ieee80211s_hdr *mesh_hdr, 212int 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);
214bool mesh_matches_local(struct ieee80211_sub_if_data *sdata, 214bool mesh_matches_local(struct ieee80211_sub_if_data *sdata,
215 struct ieee802_11_elems *ie); 215 struct ieee802_11_elems *ie);
216void mesh_ids_set_default(struct ieee80211_if_mesh *mesh); 216void mesh_ids_set_default(struct ieee80211_if_mesh *mesh);
217void mesh_mgmt_ies_add(struct sk_buff *skb, 217void mesh_mgmt_ies_add(struct ieee80211_sub_if_data *sdata,
218 struct ieee80211_sub_if_data *sdata); 218 struct sk_buff *skb);
219int mesh_add_meshconf_ie(struct sk_buff *skb, 219int mesh_add_meshconf_ie(struct ieee80211_sub_if_data *sdata,
220 struct ieee80211_sub_if_data *sdata); 220 struct sk_buff *skb);
221int mesh_add_meshid_ie(struct sk_buff *skb, 221int mesh_add_meshid_ie(struct ieee80211_sub_if_data *sdata,
222 struct ieee80211_sub_if_data *sdata); 222 struct sk_buff *skb);
223int mesh_add_rsn_ie(struct sk_buff *skb, 223int mesh_add_rsn_ie(struct ieee80211_sub_if_data *sdata,
224 struct ieee80211_sub_if_data *sdata); 224 struct sk_buff *skb);
225int mesh_add_awake_window_ie(struct sk_buff *skb, 225int mesh_add_vendor_ies(struct ieee80211_sub_if_data *sdata,
226 struct ieee80211_sub_if_data *sdata); 226 struct sk_buff *skb);
227int mesh_add_vendor_ies(struct sk_buff *skb, 227int mesh_add_ht_cap_ie(struct ieee80211_sub_if_data *sdata,
228 struct ieee80211_sub_if_data *sdata); 228 struct sk_buff *skb);
229int mesh_add_ds_params_ie(struct sk_buff *skb, 229int mesh_add_ht_oper_ie(struct ieee80211_sub_if_data *sdata,
230 struct ieee80211_sub_if_data *sdata); 230 struct sk_buff *skb);
231int mesh_add_ht_cap_ie(struct sk_buff *skb,
232 struct ieee80211_sub_if_data *sdata);
233int mesh_add_ht_oper_ie(struct sk_buff *skb,
234 struct ieee80211_sub_if_data *sdata);
235void mesh_rmc_free(struct ieee80211_sub_if_data *sdata); 231void mesh_rmc_free(struct ieee80211_sub_if_data *sdata);
236int mesh_rmc_init(struct ieee80211_sub_if_data *sdata); 232int mesh_rmc_init(struct ieee80211_sub_if_data *sdata);
237void ieee80211s_init(void); 233void ieee80211s_init(void);
238void ieee80211s_update_metric(struct ieee80211_local *local, 234void 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);
240void ieee80211s_stop(void);
241void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata); 236void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata);
242int ieee80211_start_mesh(struct ieee80211_sub_if_data *sdata); 237int ieee80211_start_mesh(struct ieee80211_sub_if_data *sdata);
243void ieee80211_stop_mesh(struct ieee80211_sub_if_data *sdata); 238void 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 */
266int mesh_nexthop_lookup(struct sk_buff *skb, 261int mesh_nexthop_lookup(struct ieee80211_sub_if_data *sdata,
267 struct ieee80211_sub_if_data *sdata); 262 struct sk_buff *skb);
268int mesh_nexthop_resolve(struct sk_buff *skb, 263int mesh_nexthop_resolve(struct ieee80211_sub_if_data *sdata,
269 struct ieee80211_sub_if_data *sdata); 264 struct sk_buff *skb);
270void mesh_path_start_discovery(struct ieee80211_sub_if_data *sdata); 265void mesh_path_start_discovery(struct ieee80211_sub_if_data *sdata);
271struct mesh_path *mesh_path_lookup(const u8 *dst, 266struct mesh_path *mesh_path_lookup(struct ieee80211_sub_if_data *sdata,
272 struct ieee80211_sub_if_data *sdata); 267 const u8 *dst);
273struct mesh_path *mpp_path_lookup(u8 *dst, 268struct mesh_path *mpp_path_lookup(struct ieee80211_sub_if_data *sdata,
274 struct ieee80211_sub_if_data *sdata); 269 const u8 *dst);
275int mpp_path_add(u8 *dst, u8 *mpp, struct ieee80211_sub_if_data *sdata); 270int mpp_path_add(struct ieee80211_sub_if_data *sdata,
276struct mesh_path *mesh_path_lookup_by_idx(int idx, 271 const u8 *dst, const u8 *mpp);
277 struct ieee80211_sub_if_data *sdata); 272struct mesh_path *
273mesh_path_lookup_by_idx(struct ieee80211_sub_if_data *sdata, int idx);
278void mesh_path_fix_nexthop(struct mesh_path *mpath, struct sta_info *next_hop); 274void mesh_path_fix_nexthop(struct mesh_path *mpath, struct sta_info *next_hop);
279void mesh_path_expire(struct ieee80211_sub_if_data *sdata); 275void mesh_path_expire(struct ieee80211_sub_if_data *sdata);
280void mesh_rx_path_sel_frame(struct ieee80211_sub_if_data *sdata, 276void 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);
282int mesh_path_add(const u8 *dst, struct ieee80211_sub_if_data *sdata); 278int mesh_path_add(struct ieee80211_sub_if_data *sdata, const u8 *dst);
283 279
284int mesh_path_add_gate(struct mesh_path *mpath); 280int mesh_path_add_gate(struct mesh_path *mpath);
285int mesh_path_send_to_gates(struct mesh_path *mpath); 281int mesh_path_send_to_gates(struct mesh_path *mpath);
286int mesh_gate_num(struct ieee80211_sub_if_data *sdata); 282int mesh_gate_num(struct ieee80211_sub_if_data *sdata);
283
287/* Mesh plinks */ 284/* Mesh plinks */
288void mesh_neighbour_update(struct ieee80211_sub_if_data *sdata, 285void 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);
291bool mesh_peer_accepts_plinks(struct ieee802_11_elems *ie); 287bool mesh_peer_accepts_plinks(struct ieee802_11_elems *ie);
292u32 mesh_accept_plinks_update(struct ieee80211_sub_if_data *sdata); 288u32 mesh_accept_plinks_update(struct ieee80211_sub_if_data *sdata);
293void mesh_plink_broken(struct sta_info *sta); 289void mesh_plink_broken(struct sta_info *sta);
@@ -304,19 +300,19 @@ void mesh_sta_cleanup(struct sta_info *sta);
304void mesh_mpath_table_grow(void); 300void mesh_mpath_table_grow(void);
305void mesh_mpp_table_grow(void); 301void mesh_mpp_table_grow(void);
306/* Mesh paths */ 302/* Mesh paths */
307int mesh_path_error_tx(u8 ttl, const u8 *target, __le32 target_sn, 303int 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);
310void mesh_path_assign_nexthop(struct mesh_path *mpath, struct sta_info *sta); 306void mesh_path_assign_nexthop(struct mesh_path *mpath, struct sta_info *sta);
311void mesh_path_flush_pending(struct mesh_path *mpath); 307void mesh_path_flush_pending(struct mesh_path *mpath);
312void mesh_path_tx_pending(struct mesh_path *mpath); 308void mesh_path_tx_pending(struct mesh_path *mpath);
313int mesh_pathtbl_init(void); 309int mesh_pathtbl_init(void);
314void mesh_pathtbl_unregister(void); 310void mesh_pathtbl_unregister(void);
315int mesh_path_del(u8 *addr, struct ieee80211_sub_if_data *sdata); 311int mesh_path_del(struct ieee80211_sub_if_data *sdata, const u8 *addr);
316void mesh_path_timer(unsigned long data); 312void mesh_path_timer(unsigned long data);
317void mesh_path_flush_by_nexthop(struct sta_info *sta); 313void mesh_path_flush_by_nexthop(struct sta_info *sta);
318void mesh_path_discard_frame(struct sk_buff *skb, 314void mesh_path_discard_frame(struct ieee80211_sub_if_data *sdata,
319 struct ieee80211_sub_if_data *sdata); 315 struct sk_buff *skb);
320void mesh_path_quiesce(struct ieee80211_sub_if_data *sdata); 316void mesh_path_quiesce(struct ieee80211_sub_if_data *sdata);
321void mesh_path_restart(struct ieee80211_sub_if_data *sdata); 317void mesh_path_restart(struct ieee80211_sub_if_data *sdata);
322void mesh_path_tx_root_frame(struct ieee80211_sub_if_data *sdata); 318void 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);
325extern int mesh_paths_generation; 321extern int mesh_paths_generation;
326 322
327#ifdef CONFIG_MAC80211_MESH 323#ifdef CONFIG_MAC80211_MESH
328extern int mesh_allocated;
329
330static inline 324static inline
331u32 mesh_plink_inc_estab_count(struct ieee80211_sub_if_data *sdata) 325u32 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);
371void mesh_plink_restart(struct sta_info *sta); 365void mesh_plink_restart(struct sta_info *sta);
372void mesh_path_flush_by_iface(struct ieee80211_sub_if_data *sdata); 366void mesh_path_flush_by_iface(struct ieee80211_sub_if_data *sdata);
373void mesh_sync_adjust_tbtt(struct ieee80211_sub_if_data *sdata); 367void mesh_sync_adjust_tbtt(struct ieee80211_sub_if_data *sdata);
368void ieee80211s_stop(void);
374#else 369#else
375#define mesh_allocated 0
376static inline void 370static inline void
377ieee80211_mesh_notify_scan_completed(struct ieee80211_local *local) {} 371ieee80211_mesh_notify_scan_completed(struct ieee80211_local *local) {}
378static inline void ieee80211_mesh_quiesce(struct ieee80211_sub_if_data *sdata) 372static 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; }
386static inline void mesh_path_flush_by_iface(struct ieee80211_sub_if_data *sdata) 380static inline void mesh_path_flush_by_iface(struct ieee80211_sub_if_data *sdata)
387{} 381{}
382static inline void ieee80211s_stop(void) {}
388#endif 383#endif
389 384
390#endif /* IEEE80211S_H */ 385#endif /* IEEE80211S_H */