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>
This commit is contained in:
committed by
John W. Linville
parent
e32f85f7b9
commit
8dbc1722a7
@@ -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)
|
|||||||
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;
|
||||||
|
Reference in New Issue
Block a user