On Tue, 03 Jan 2006 14:38:03 -0800 (PST)
"David S. Miller" <[EMAIL PROTECTED]> wrote:

> From: Stephen Hemminger <[EMAIL PROTECTED]>
> Date: Tue, 3 Jan 2006 11:42:24 -0800
> 
> > The check for multicast shouldn't exclude broadcast type addresses.
> > This reverts the incorrect change done in 2.6.13.
> > 
> > The broadcast address is a multicast address and should be excluded
> > from being a valid_ether_address for use in bridging or device address.
> > 
> > Signed-off-by: Stephen Hemminger <[EMAIL PROTECTED]>
> 
> Doesn't this function want multicast and only multicast addresses?
> 
> We've been dorking around with various ethernet address checks
> lately, with all the weird wireless etc. considerations, so
> I just want to be careful here.
> 
> Thanks.

The GIT history I found was:

0. originally is_valid_ether() did !((addr[0] & 1) || is_zero_addr(addr))
1. is_multicast_addr separated from is_valid_ether
2. Jeff introduced the (addr[0] != 0xff) as part of some ipw2200 wireless merge.

The only two usages of is_multicast_ether_addr() are is_valid_ether() and 
ipw2200/ieee80211
and both should be fine.

Ipw2200/ieee80211 could be simplified as in:

Index: net-2.6.16/drivers/net/wireless/ipw2200.c
===================================================================
--- net-2.6.16.orig/drivers/net/wireless/ipw2200.c
+++ net-2.6.16/drivers/net/wireless/ipw2200.c
@@ -7456,8 +7456,7 @@ static void ipw_handle_data_packet(struc
        /* HW decrypt will not clear the WEP bit, MIC, PN, etc. */
        hdr = (struct ieee80211_hdr_4addr *)rxb->skb->data;
        if (priv->ieee->iw_mode != IW_MODE_MONITOR &&
-           ((is_multicast_ether_addr(hdr->addr1) ||
-             is_broadcast_ether_addr(hdr->addr1)) ?
+           (is_multicast_ether_addr(hdr->addr1) ?
             !priv->ieee->host_mc_decrypt : !priv->ieee->host_decrypt))
                ipw_rebuild_decrypted_skb(priv, rxb->skb);
 
@@ -7648,8 +7647,7 @@ static inline int is_network_packet(stru
                        return 0;
 
                /* {broad,multi}cast packets to our BSSID go through */
-               if (is_multicast_ether_addr(header->addr1) ||
-                   is_broadcast_ether_addr(header->addr1))
+               if (is_multicast_ether_addr(header->addr1))
                        return !memcmp(header->addr3, priv->bssid, ETH_ALEN);
 
                /* packets to our adapter go through */
@@ -7662,8 +7660,7 @@ static inline int is_network_packet(stru
                        return 0;
 
                /* {broad,multi}cast packets to our BSS go through */
-               if (is_multicast_ether_addr(header->addr1) ||
-                   is_broadcast_ether_addr(header->addr1))
+               if (is_multicast_ether_addr(header->addr1))
                        return !memcmp(header->addr2, priv->bssid, ETH_ALEN);
 
                /* packets to our adapter go through */
@@ -9657,8 +9654,7 @@ static inline int ipw_tx_skb(struct ipw_
        switch (priv->ieee->iw_mode) {
        case IW_MODE_ADHOC:
                hdr_len = IEEE80211_3ADDR_LEN;
-               unicast = !(is_multicast_ether_addr(hdr->addr1) ||
-                           is_broadcast_ether_addr(hdr->addr1));
+               unicast = !is_multicast_ether_addr(hdr->addr1);
                id = ipw_find_station(priv, hdr->addr1);
                if (id == IPW_INVALID_STATION) {
                        id = ipw_add_station(priv, hdr->addr1);
@@ -9673,8 +9669,7 @@ static inline int ipw_tx_skb(struct ipw_
 
        case IW_MODE_INFRA:
        default:
-               unicast = !(is_multicast_ether_addr(hdr->addr3) ||
-                           is_broadcast_ether_addr(hdr->addr3));
+               unicast = !is_multicast_ether_addr(hdr->addr3);
                hdr_len = IEEE80211_3ADDR_LEN;
                id = 0;
                break;
Index: net-2.6.16/net/ieee80211/ieee80211_rx.c
===================================================================
--- net-2.6.16.orig/net/ieee80211/ieee80211_rx.c
+++ net-2.6.16/net/ieee80211/ieee80211_rx.c
@@ -410,9 +410,8 @@ int ieee80211_rx(struct ieee80211_device
                return 1;
        }
 
-       if ((is_multicast_ether_addr(hdr->addr1) ||
-            is_broadcast_ether_addr(hdr->addr2)) ? ieee->host_mc_decrypt :
-           ieee->host_decrypt) {
+       if (is_multicast_ether_addr(hdr->addr1)
+           ? ieee->host_mc_decrypt : ieee->host_decrypt) {
                int idx = 0;
                if (skb->len >= hdrlen + 3)
                        idx = skb->data[hdrlen + 3] >> 6;

-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to