aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorLuis Carlos Cobo <luisca@cozybit.com>2008-08-06 07:17:54 -0400
committerJohn W. Linville <linville@tuxdriver.com>2008-08-07 09:49:04 -0400
commit8dbc1722a78343eb80f0ce1a3ef1965a9774ad5b (patch)
tree5b715063ed70e82817578301a81a64ad947f6322 /net
parente32f85f7b917456265d4c30d15f734c4912cfa6a (diff)
mac80211: keep mesh ifaces in allmulti mode
Currently a mesh node will not forward a multicast frame if it is not subscribed to the specific multicast address. This patch addresses the issue and fixes mesh multicast forwarding. Signed-off-by: Luis Carlos Cobo <luisca@cozybit.com> Acked-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net')
-rw-r--r--net/mac80211/main.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/net/mac80211/main.c b/net/mac80211/main.c
index 0c02c471bca2..aa5a191598c9 100644
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -245,10 +245,13 @@ static int ieee80211_open(struct net_device *dev)
245 case IEEE80211_IF_TYPE_AP: 245 case IEEE80211_IF_TYPE_AP:
246 sdata->bss = &sdata->u.ap; 246 sdata->bss = &sdata->u.ap;
247 break; 247 break;
248 case IEEE80211_IF_TYPE_MESH_POINT:
249 /* mesh ifaces must set allmulti to forward mcast traffic */
250 atomic_inc(&local->iff_allmultis);
251 break;
248 case IEEE80211_IF_TYPE_STA: 252 case IEEE80211_IF_TYPE_STA:
249 case IEEE80211_IF_TYPE_MNTR: 253 case IEEE80211_IF_TYPE_MNTR:
250 case IEEE80211_IF_TYPE_IBSS: 254 case IEEE80211_IF_TYPE_IBSS:
251 case IEEE80211_IF_TYPE_MESH_POINT:
252 /* no special treatment */ 255 /* no special treatment */
253 break; 256 break;
254 case IEEE80211_IF_TYPE_INVALID: 257 case IEEE80211_IF_TYPE_INVALID:
@@ -495,6 +498,9 @@ static int ieee80211_stop(struct net_device *dev)
495 netif_addr_unlock_bh(local->mdev); 498 netif_addr_unlock_bh(local->mdev);
496 break; 499 break;
497 case IEEE80211_IF_TYPE_MESH_POINT: 500 case IEEE80211_IF_TYPE_MESH_POINT:
501 /* allmulti is always set on mesh ifaces */
502 atomic_dec(&local->iff_allmultis);
503 /* fall through */
498 case IEEE80211_IF_TYPE_STA: 504 case IEEE80211_IF_TYPE_STA:
499 case IEEE80211_IF_TYPE_IBSS: 505 case IEEE80211_IF_TYPE_IBSS:
500 sdata->u.sta.state = IEEE80211_DISABLED; 506 sdata->u.sta.state = IEEE80211_DISABLED;