Subject: kern/10990: multicast doesn't work with SMC EPCI/100 in 100Mbs
To: None <gnats-bugs@gnats.netbsd.org>
From: None <bouyer@antioche.lip6.fr>
List: netbsd-bugs
Date: 09/11/2000 11:54:18
>Number:         10990
>Category:       kern
>Synopsis:       multicast doesn't work with SMC EPCI/100 in 100Mbs
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Sep 11 11:55:00 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator:     
>Release:        1.5_ALPHA2
>Organization:

LIP6/ASIM

>Environment:
	
NetBSD horn 1.5_ALPHA2 NetBSD 1.5_ALPHA2 (HORN) #1: Mon Sep 11 20:30:22 CEST 2000     root@horn:/usr/src/sys/arch/i386/compile/HORN i386
epic0 at pci0 dev 9 function 0: SMC 83c170 Fast Ethernet, rev. 8
epic0: interrupting at irq 11
epic0: SMC9432TX, Ethernet address 00:e0:29:3e:d2:af
qsphy0 at epic0 phy 3: QS6612 10/100 media interface, rev. 1
qsphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto

>Description:
	With the above ethernet board, connected to a 100Mbs switch, IP
	multicast doesn't work. I traced this down to, probably, multicast
	ethernet frame not being received: igmp messages are properly
	echanged and the router properly forwards the multicast traffic
	to the local net. However, putting the interface in promisc mode
	made things working. I suspect either I have a board which is buggy in
	100Mbs mode too, or that the multicast filter setup isn't correct.
	
>How-To-Repeat:
	
	install and start sdr on a i386 machine with a epic/100 connected to
	a 100mbs switch. Wonder why you don't get anything.
>Fix:
	workaround: don't use the ethernet multicast filter:

Index: smc83c170.c
===================================================================
RCS file: /cvsroot/syssrc/sys/dev/ic/smc83c170.c,v
retrieving revision 1.32
diff -u -r1.32 smc83c170.c
--- smc83c170.c	2000/05/26 00:14:41	1.32
+++ smc83c170.c	2000/09/11 18:49:01
@@ -1344,6 +1344,9 @@
 		/* XXX hardware bug in 10Mbps mode. */
 		goto allmulti;
 	}
+	else
+		goto allmulti; /* In 100Mbs too ?? */
+	
 
 	mchash[0] = mchash[1] = mchash[2] = mchash[3] = 0;
 
>Release-Note:
>Audit-Trail:
>Unformatted: