mac80211: allow sending multicast frames through virtual ports

When reworking the port access control code, I forgot multicast frames
and those are now always rejected because the destination station is
not known. This changes the code to allow through multicast frames and
also avoid the sta hash lookup (which is bound to fail) for them.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
Johannes Berg 2008-01-28 17:11:43 +01:00 committed by John W. Linville
parent b220525696
commit 7d185b8bb1

View file

@ -1409,10 +1409,17 @@ int ieee80211_subif_start_xmit(struct sk_buff *skb,
goto fail; goto fail;
} }
sta = sta_info_get(local, hdr.addr1); /*
if (sta) { * There's no need to try to look up the destination
sta_flags = sta->flags; * if it is a multicast address (which can only happen
sta_info_put(sta); * in AP mode)
*/
if (!is_multicast_ether_addr(hdr.addr1)) {
sta = sta_info_get(local, hdr.addr1);
if (sta) {
sta_flags = sta->flags;
sta_info_put(sta);
}
} }
/* receiver is QoS enabled, use a QoS type frame */ /* receiver is QoS enabled, use a QoS type frame */
@ -1422,10 +1429,12 @@ int ieee80211_subif_start_xmit(struct sk_buff *skb,
} }
/* /*
* If port access control is enabled, drop frames to unauthorised * If port access control is enabled, drop unicast frames to
* stations unless they are EAPOL frames from the local station. * unauthorised stations unless they are EAPOL frames from the
* local station.
*/ */
if (unlikely(sdata->ieee802_1x_pac && if (unlikely(sdata->ieee802_1x_pac &&
!is_multicast_ether_addr(hdr.addr1) &&
!(sta_flags & WLAN_STA_AUTHORIZED) && !(sta_flags & WLAN_STA_AUTHORIZED) &&
!(ethertype == ETH_P_PAE && !(ethertype == ETH_P_PAE &&
compare_ether_addr(dev->dev_addr, compare_ether_addr(dev->dev_addr,