> > > byte with 0x80 and not 1 when checking for a broadcast or
> multicast
> > > address.
>
> Not necessarily ! See RFC1469.
>
> Either 0x80 or 0x01 is valid for broadcast *but*
>
> 0x80 is valid for multicast when the functional address C0 00
> 00 04 00 00 is being used (rfc 1469 option 2)
>
> 0x01 is valid for multicast when unicast addresses (i.e. 01
> 00 5E with lower 23 bits set) (rfc 1469 option 3) are being
> used. (At least some Olympic based cards can do this)
oh I see. So in the kernel instead of only checking the top
byte of the address for bit 0x01 set we should check the top 25
bits of the address being equal to 01 00 5E to classify an IP multicast
frame because it is perfectly reasonable and valid for an LAA to
have 0x01 bit set but be an ordinary unicast address (e.g.
4F FF FF FF FF FF).
Does this sound correct?
Something along these lines perhaps (from tr.c tr_type_trans)
(this is pseudo code it wont work!!):-
if((*trh->daddr & 1) || (*trh->daddr & 0x80))
{
if(!memcmp(trh->daddr,"FF FF FF FF FF FF",TR_ALEN))
skb->pkt_type=PACKET_BROADCAST;
else
if (!memcmp(top 25 bits of trh->daddr,"01 00
5E",TR_ALEN))
skb->pkt_type=PACKET_MULTICAST;
else
if (!memcmp(trh->daddr,"C0 00 00 04 00 00",TR_ALEN))
skb->pkt_type=PACKET_MULTICAST;
else
skb->pkt_type=PACKET_UNICAST;
}
Or have I just totally mis understood the situation?
>From Tom
-
To unsubscribe from this list: send the line "unsubscribe linux-net" in
the body of a message to [EMAIL PROTECTED]