diff options
Diffstat (limited to 'net/mac80211/mesh.h')
-rw-r--r-- | net/mac80211/mesh.h | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/net/mac80211/mesh.h b/net/mac80211/mesh.h index d565b3fb9e6a..576eee83d859 100644 --- a/net/mac80211/mesh.h +++ b/net/mac80211/mesh.h | |||
@@ -65,9 +65,10 @@ enum mesh_path_flags { | |||
65 | * @state_lock: mesh pat state lock | 65 | * @state_lock: mesh pat state lock |
66 | * | 66 | * |
67 | * | 67 | * |
68 | * The combination of dst and dev is unique in the mesh path table. A reference | 68 | * The combination of dst and dev is unique in the mesh path table. Since the |
69 | * to the next_hop sta will be kept and in case this sta is removed, the | 69 | * next_hop STA is only protected by RCU as well, deleting the STA must also |
70 | * mesh_path structure must be also removed or substitued in a rcu safe way | 70 | * remove/substitute the mesh_path structure and wait until that is no longer |
71 | * reachable before destroying the STA completely. | ||
71 | */ | 72 | */ |
72 | struct mesh_path { | 73 | struct mesh_path { |
73 | u8 dst[ETH_ALEN]; | 74 | u8 dst[ETH_ALEN]; |
@@ -230,8 +231,9 @@ void mesh_neighbour_update(u8 *hw_addr, u64 rates, struct net_device *dev, | |||
230 | bool add); | 231 | bool add); |
231 | bool mesh_peer_accepts_plinks(struct ieee802_11_elems *ie, | 232 | bool mesh_peer_accepts_plinks(struct ieee802_11_elems *ie, |
232 | struct net_device *dev); | 233 | struct net_device *dev); |
233 | void mesh_accept_plinks_update(struct net_device *dev); | 234 | void mesh_accept_plinks_update(struct ieee80211_sub_if_data *sdata); |
234 | struct sta_info *mesh_plink_add(u8 *hw_addr, u64 rates, struct net_device *dev); | 235 | struct sta_info *mesh_plink_add(u8 *hw_addr, u64 rates, |
236 | struct ieee80211_sub_if_data *sdata); | ||
235 | void mesh_plink_broken(struct sta_info *sta); | 237 | void mesh_plink_broken(struct sta_info *sta); |
236 | void mesh_plink_deactivate(struct sta_info *sta); | 238 | void mesh_plink_deactivate(struct sta_info *sta); |
237 | int mesh_plink_open(struct sta_info *sta); | 239 | int mesh_plink_open(struct sta_info *sta); |
@@ -254,7 +256,7 @@ void mesh_path_flush_pending(struct mesh_path *mpath); | |||
254 | void mesh_path_tx_pending(struct mesh_path *mpath); | 256 | void mesh_path_tx_pending(struct mesh_path *mpath); |
255 | int mesh_pathtbl_init(void); | 257 | int mesh_pathtbl_init(void); |
256 | void mesh_pathtbl_unregister(void); | 258 | void mesh_pathtbl_unregister(void); |
257 | int mesh_path_del(u8 *addr, struct net_device *dev); | 259 | int mesh_path_del(u8 *addr, struct net_device *dev, bool force); |
258 | void mesh_path_timer(unsigned long data); | 260 | void mesh_path_timer(unsigned long data); |
259 | void mesh_path_flush_by_nexthop(struct sta_info *sta); | 261 | void mesh_path_flush_by_nexthop(struct sta_info *sta); |
260 | void mesh_path_discard_frame(struct sk_buff *skb, struct net_device *dev); | 262 | void mesh_path_discard_frame(struct sk_buff *skb, struct net_device *dev); |
@@ -270,7 +272,7 @@ static inline int mesh_plink_free_count(struct ieee80211_sub_if_data *sdata) | |||
270 | 272 | ||
271 | static inline bool mesh_plink_availables(struct ieee80211_sub_if_data *sdata) | 273 | static inline bool mesh_plink_availables(struct ieee80211_sub_if_data *sdata) |
272 | { | 274 | { |
273 | return (min(mesh_plink_free_count(sdata), | 275 | return (min_t(long, mesh_plink_free_count(sdata), |
274 | MESH_MAX_PLINKS - sdata->local->num_sta)) > 0; | 276 | MESH_MAX_PLINKS - sdata->local->num_sta)) > 0; |
275 | } | 277 | } |
276 | 278 | ||