| Summary: | sf driver doesn't handle ALLMULTI in SIFFLAGS | ||
|---|---|---|---|
| Product: | Base System | Reporter: | Andrew Swan <aswan> |
| Component: | kern | Assignee: | Bill Paul <wpaul> |
| Status: | Closed FIXED | ||
| Severity: | Affects Only Me | CC: | wpaul |
| Priority: | Normal | ||
| Version: | 3.3-RELEASE | ||
| Hardware: | Any | ||
| OS: | Any | ||
Responsible Changed From-To: freebsd-bugs->wpaul Bill, this one includes a patch. State Changed From-To: open->closed For some reason, I forgot to add a call to sf_setmulti() to sf_init(), so the multicast filter wasn't being configured correctly when the interface was brought up. Fixed in -current and -stable. -Bill |
When the IFF_ALLMULTI flag is set on an sf interface and then the SIFFLAGS ioctl is invoked, the card is not properly programmed to receive all multicasts. Fix: This patch is for version 1.2.2.2 of if_sf.c (from 3.3-RELEASE) I don't have any newer installation locally to test on. --- if_sf.c 1999/10/14 00:51:23 1.1.1.1 +++ if_sf.c 2000/07/14 02:44:48 @@ -1479,6 +1479,13 @@ SF_CLRBIT(sc, SF_RXFILT, SF_RXFILT_BROAD); } + /* Dow we want all multicasts? (e.g., multicast routing) */ + if (ifp->if_flags & IFF_ALLMULTI) { + SF_SETBIT(sc, SF_RXFILT, SF_RXFILT_ALLMULTI); + } else { + SF_CLRBIT(sc, SF_RXFILT, SF_RXFILT_ALLMULTI); + } + /* Init the completion queue indexes */ csr_write_4(sc, SF_CQ_CONSIDX, 0); csr_write_4(sc, SF_CQ_PRODIDX, 0); How-To-Repeat: Run mrouted with a vif configured on a physical sf interface and source traffic on that interface -- it will not be properly forwarded.