netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: Multicast on b44
       [not found] <f3ddc6d305011320416635914@mail.gmail.com>
@ 2005-01-15 23:38 ` Pekka Pietikainen
  2005-01-16  0:08   ` Pekka Pietikainen
  0 siblings, 1 reply; 2+ messages in thread
From: Pekka Pietikainen @ 2005-01-15 23:38 UTC (permalink / raw)
  To: James Hubbard; +Cc: netdev

On Thu, Jan 13, 2005 at 11:41:12PM -0500, James Hubbard wrote:
> I spoke to one of the developers of the communication software.  He
> checked things in a limited way.  This was his take on things.
> 
> "Okay, so I went and looked at the source to the b44 driver that comes
> with Fedora 1, and downloaded the 7.3.5 and 3.0.8 versions of the
> drivers from the broadcom web site."
> 
> "I'm not sure which chip you've got or which driver you're running, but
> the b44 driver looks like it's completely broken as soon as you go over
> about 30 multicast groups.  It just sort of randomly stops accepting new
> joins and so forth.  The ones from broadcom seem a little bit better,
> but are still a little bogus looking."
> 
> Do you have any suggestions that might help us to fix the problem?
Hiya

It looks like the b44 driver is limited to 32 entries (B44_MCAST_TABLE_SIZE)
whereas bcm4400 goes up to 63. It's just a #define so you should be able to
up it to that and be safe, might be worth upping it to that in b44 by
default. 

If you need more than that you're stuck with allmulti, which if I remember
correctly didn't work. Yup, from a previous mail of mine I did test it at
one point:

"Ok, after some digging around ALLMULTI breaking is not a bug, the
vendor-provided driver seems to break in similar ways, at least on 2.6,
so that's a feature unless they fix it in theirs so I can copy the fix :-)"

(well, it receive all multicasts after that, just not any unicasts :-) ).
Might be worth checking if the latest one of theirs still does that.
Wouldn't be surprised if it was a hardware bug...

Another option is promiscuous, which definately does work since I've used
tcpdump quite a bit :-). If it's a hardware bug with allmulti I suppose
just making allmulti == promiscuous.

Debugging this kind of things is very difficult though, since the only
source of documentation I have is the bcm4400 driver. And now that I
upgraded my system to a nice Athlon 64 with dual GigE I don't have the
hardware to test with either, so there's not much I can do to the driver
anyway other than point people to stuff, make "it compiles" patches and hope
someone tests and fixes them :-/

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: Multicast on b44
  2005-01-15 23:38 ` Multicast on b44 Pekka Pietikainen
@ 2005-01-16  0:08   ` Pekka Pietikainen
  0 siblings, 0 replies; 2+ messages in thread
From: Pekka Pietikainen @ 2005-01-16  0:08 UTC (permalink / raw)
  To: James Hubbard; +Cc: netdev

On Sun, Jan 16, 2005 at 01:38:36AM +0200, Pekka Pietikainen wrote:
> It looks like the b44 driver is limited to 32 entries (B44_MCAST_TABLE_SIZE)
> whereas bcm4400 goes up to 63. It's just a #define so you should be able to
> up it to that and be safe, might be worth upping it to that in b44 by
> default. 
> 
> If you need more than that you're stuck with allmulti, which if I remember
> correctly didn't work. Yup, from a previous mail of mine I did test it at
> one point:
> 
> "Ok, after some digging around ALLMULTI breaking is not a bug, the
> vendor-provided driver seems to break in similar ways, at least on 2.6,
> so that's a feature unless they fix it in theirs so I can copy the fix :-)"
> 
But do try with RXCONFIG_ALLMULTI instead of _PROMISC. Anyway, here's
something totally untested:

X-It-Compiles-Lets-Ship-It-By: pp@ee.oulu.fi
--- ./b44.h.2	2005-01-16 02:00:27.000000000 +0200
+++ ./b44.h	2005-01-16 02:00:52.000000000 +0200
@@ -358,7 +358,7 @@
 	DECLARE_PCI_UNMAP_ADDR(mapping);
 };
 
-#define B44_MCAST_TABLE_SIZE	32
+#define B44_MCAST_TABLE_SIZE	63
 #define B44_BOUNCEBUF_SHIFT	3
 #define B44_NUM_BOUNCEBUFS	(1 << B44_BOUNCEBUF_SHIFT)
 
--- ./b44.c.2	2005-01-16 02:00:25.000000000 +0200
+++ ./b44.c	2005-01-16 02:04:06.000000000 +0200
@@ -1425,12 +1425,14 @@
 	} else {
 		__b44_set_mac_addr(bp);
 
-		if (dev->flags & IFF_ALLMULTI)
-			val |= RXCONFIG_ALLMULTI;
+		if ((dev->flags & IFF_ALLMULTI) || (dev->mc_count > B44_MCAST_TABLE_SIZE))
+			/* RXCONFIG_ALLMULTI seems to disable unicast packets :-( */
+			val |= RXCONFIG_PROMISC;
 		else
 			i=__b44_load_mcast(bp, dev);
 		
-		for(;i<64;i++) {
+		/* Fill in remaining entries with zero */
+		for(;i<B44_MCAST_TABLE_SIZE+1;i++) {
 			__b44_cam_write(bp, zero, i);			
 		}
 		bw32(bp, B44_RXCONFIG, val);

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2005-01-16  0:08 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <f3ddc6d305011320416635914@mail.gmail.com>
2005-01-15 23:38 ` Multicast on b44 Pekka Pietikainen
2005-01-16  0:08   ` Pekka Pietikainen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).