Skip to content

Commit

Permalink
mac80211: allow sending multicast frames through virtual ports
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Johannes Berg authored and John W. Linville committed Feb 29, 2008
1 parent b220525 commit 7d185b8
Showing 1 changed file with 15 additions and 6 deletions.
21 changes: 15 additions & 6 deletions net/mac80211/tx.c
Original file line number Diff line number Diff line change
Expand Up @@ -1409,10 +1409,17 @@ int ieee80211_subif_start_xmit(struct sk_buff *skb,
goto fail;
}

sta = sta_info_get(local, hdr.addr1);
if (sta) {
sta_flags = sta->flags;
sta_info_put(sta);
/*
* There's no need to try to look up the destination
* if it is a multicast address (which can only happen
* 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 */
Expand All @@ -1422,10 +1429,12 @@ int ieee80211_subif_start_xmit(struct sk_buff *skb,
}

/*
* If port access control is enabled, drop frames to unauthorised
* stations unless they are EAPOL frames from the local station.
* If port access control is enabled, drop unicast frames to
* unauthorised stations unless they are EAPOL frames from the
* local station.
*/
if (unlikely(sdata->ieee802_1x_pac &&
!is_multicast_ether_addr(hdr.addr1) &&
!(sta_flags & WLAN_STA_AUTHORIZED) &&
!(ethertype == ETH_P_PAE &&
compare_ether_addr(dev->dev_addr,
Expand Down

0 comments on commit 7d185b8

Please sign in to comment.