I'm (easily) confused.
Unless the specs have changed recently, the broadcast address of all 1's
is just a special type of multicast adddress, that "all stations shall be
able to recognize".
In looking at the code in etherdevice.h it looks like the test of
is_multicast_ether_addr() is broken, because it will return false for
the value ff:00:00:00:00:00 (for example), which is a valid multicast
address. Or at least it used to be.
If the definition of a multicast address has changed, then maybe the
code is correct, but it should be documented better.
On Tue, Dec 13, 2005 at 09:45:55AM -0800, Stephen Hemminger wrote:
> On Mon, 12 Dec 2005 18:56:49 -0600
> Michael Ellerman <[EMAIL PROTECTED]> wrote:
>
> > Since a5fe736eaf9bae1b45317313de04b564441b94f2 (2.6.13-rc1 ish),
> > is_valid_ether_addr() has been broken, because its assumption that
> > FF:FF:FF:FF:FF:FF is a multicast address is wrong. Ouch.
> >
> > Signed-off-by: Michael Ellerman <[EMAIL PROTECTED]>
> > ---
> >
> > include/linux/etherdevice.h | 6 +++---
> > 1 files changed, 3 insertions(+), 3 deletions(-)
> >
> > Index: linux/include/linux/etherdevice.h
> > ===================================================================
> > --- linux.orig/include/linux/etherdevice.h
> > +++ linux/include/linux/etherdevice.h
> > @@ -91,9 +91,9 @@ static inline int is_broadcast_ether_add
> > */
> > static inline int is_valid_ether_addr(const u8 *addr)
> > {
> > - /* FF:FF:FF:FF:FF:FF is a multicast address so we don't need to
> > - * explicitly check for it here. */
> > - return !is_multicast_ether_addr(addr) && !is_zero_ether_addr(addr);
> > + return !is_broadcast_ether_addr(addr) &&
> > + !is_multicast_ether_addr(addr) &&
> > + !is_zero_ether_addr(addr);
> > }
> >
>
> why not
> return !(addr[0] & 1) && !is_zero_ether_addr(addr);
>
> --
> Stephen Hemminger <[EMAIL PROTECTED]>
> OSDL http://developer.osdl.org/~shemminger
> -
--
Don Fry
[EMAIL PROTECTED]
-
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