提交 8dbc1722 编写于 作者: L Luis Carlos Cobo 提交者: John W. Linville

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: NLuis Carlos Cobo <luisca@cozybit.com>
Acked-by: NJohannes Berg <johannes@sipsolutions.net>
Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
上级 e32f85f7
...@@ -245,10 +245,13 @@ static int ieee80211_open(struct net_device *dev) ...@@ -245,10 +245,13 @@ static int ieee80211_open(struct net_device *dev)
case IEEE80211_IF_TYPE_AP: case IEEE80211_IF_TYPE_AP:
sdata->bss = &sdata->u.ap; sdata->bss = &sdata->u.ap;
break; break;
case IEEE80211_IF_TYPE_MESH_POINT:
/* mesh ifaces must set allmulti to forward mcast traffic */
atomic_inc(&local->iff_allmultis);
break;
case IEEE80211_IF_TYPE_STA: case IEEE80211_IF_TYPE_STA:
case IEEE80211_IF_TYPE_MNTR: case IEEE80211_IF_TYPE_MNTR:
case IEEE80211_IF_TYPE_IBSS: case IEEE80211_IF_TYPE_IBSS:
case IEEE80211_IF_TYPE_MESH_POINT:
/* no special treatment */ /* no special treatment */
break; break;
case IEEE80211_IF_TYPE_INVALID: case IEEE80211_IF_TYPE_INVALID:
...@@ -495,6 +498,9 @@ static int ieee80211_stop(struct net_device *dev) ...@@ -495,6 +498,9 @@ static int ieee80211_stop(struct net_device *dev)
netif_addr_unlock_bh(local->mdev); netif_addr_unlock_bh(local->mdev);
break; break;
case IEEE80211_IF_TYPE_MESH_POINT: case IEEE80211_IF_TYPE_MESH_POINT:
/* allmulti is always set on mesh ifaces */
atomic_dec(&local->iff_allmultis);
/* fall through */
case IEEE80211_IF_TYPE_STA: case IEEE80211_IF_TYPE_STA:
case IEEE80211_IF_TYPE_IBSS: case IEEE80211_IF_TYPE_IBSS:
sdata->u.sta.state = IEEE80211_DISABLED; sdata->u.sta.state = IEEE80211_DISABLED;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册