Subject: Re: ipv6 mcast trouble with Broadcom NetXtreme II BCM5708
To: None <tech-net@NetBSD.org>
From: David Young <dyoung@pobox.com>
List: tech-net
Date: 12/03/2007 17:29:53
--GRPZ8SYKNexpdSJ7
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Tue, Dec 04, 2007 at 12:15:59AM +0100, 6bone@6bone.informatik.uni-leipzig.de wrote:
> hello,
> 
> At my test system I have installed NetBSD 4.0_RC5 amd64.
> 
> After startup the interface doesn't get an ipv6 address via stateless 
> address config. tcpdump (no promisc mode) shows only ipv6 unicast packets 
> but no ipv6 multicast packets like router advertisements.
> 
> If you switch the interface to the promisc mode, everything works well. 
> tcpdump shows all packets and the stateless address config works fine.
> 
> The problem occurs only with Broadcom NIC's but not with INTEL NIC's

Is the product supported by bnx(4) ?  It looks to me like bnx_ioctl()
does not implement SIOCADDMULTI / SIOCDELMULTI properly.  I have attached
a patch that I have only compile-tested.

(I believe that a Dell server that I ordered has this same ethernet,
so I hope that the driver works!)

Dave

-- 
David Young             OJC Technologies
dyoung@ojctech.com      Urbana, IL * (217) 278-3933 ext 24

--GRPZ8SYKNexpdSJ7
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="bnx.patch"

Index: if_bnx.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pci/if_bnx.c,v
retrieving revision 1.10
diff -p -u -u -p -r1.10 if_bnx.c
--- if_bnx.c	9 Nov 2007 08:26:47 -0000	1.10
+++ if_bnx.c	3 Dec 2007 23:32:35 -0000
@@ -4420,11 +4420,12 @@ bnx_ioctl(struct ifnet *ifp, u_long comm
 
 	default:
 		error = ether_ioctl(ifp, command, data);
-		if (error == ENETRESET) {
-#if 0
+		if (error != ENETRESET)
+			;
+		else if (command == SIOCADDMULTI || command == SIOCDELMULTI) {
+			/* reload packet filter if running */
 			if (ifp->if_flags & IFF_RUNNING)
-				/*bnx_setmulti(sc)*/;
-#endif
+				bnx_set_rx_mode(sc);
 			error = 0;
 		}
 		break;

--GRPZ8SYKNexpdSJ7--