svn commit: r269479 - head/sys/dev/nfe

Marcel Moolenaar marcel at FreeBSD.org
Sun Aug 3 16:45:08 UTC 2014


Author: marcel
Date: Sun Aug  3 16:45:07 2014
New Revision: 269479
URL: http://svnweb.freebsd.org/changeset/base/269479

Log:
  Fix multicast, broken by the conversion of the nfe(4) driver to the
  driver API.
  
  Submitted by:	Mikhail <mp at lenta.ru>

Modified:
  head/sys/dev/nfe/if_nfe.c

Modified: head/sys/dev/nfe/if_nfe.c
==============================================================================
--- head/sys/dev/nfe/if_nfe.c	Sun Aug  3 16:22:14 2014	(r269478)
+++ head/sys/dev/nfe/if_nfe.c	Sun Aug  3 16:45:07 2014	(r269479)
@@ -2582,7 +2582,6 @@ nfe_setmulti(struct nfe_softc *sc)
 	bcopy(etherbroadcastaddr, addr, ETHER_ADDR_LEN);
 	bcopy(etherbroadcastaddr, mask, ETHER_ADDR_LEN);
 
-	if_maddr_rlock(ifp);
 	mc_count = if_multiaddr_count(ifp, -1);
 	mta = malloc(sizeof(uint8_t) * ETHER_ADDR_LEN * mc_count, M_DEVBUF,
 	    M_NOWAIT);
@@ -2594,24 +2593,24 @@ nfe_setmulti(struct nfe_softc *sc)
 
 		bzero(addr, ETHER_ADDR_LEN);
 		bzero(mask, ETHER_ADDR_LEN);
-		free(mta, M_DEVBUF);
-		if_maddr_runlock(ifp);
 		goto done;
 	};
 
-	if_setupmultiaddr(ifp, mta, &mcnt, mc_count);
+	if_multiaddr_array(ifp, mta, &mcnt, mc_count);
 
 	for (i = 0; i < mcnt; i++) {
 		uint8_t *addrp;
+		int j;
 
 		addrp = mta + (i * ETHER_ADDR_LEN);
-		for (i = 0; i < ETHER_ADDR_LEN; i++) {
-			u_int8_t mcaddr = addrp[i];
-			addr[i] &= mcaddr;
-			mask[i] &= ~mcaddr;
+		for (j = 0; j < ETHER_ADDR_LEN; j++) {
+			u_int8_t mcaddr = addrp[j];
+			addr[j] &= mcaddr;
+			mask[j] &= ~mcaddr;
 		}
 	}
-	if_maddr_runlock(ifp);
+
+	free(mta, M_DEVBUF);
 
 	for (i = 0; i < ETHER_ADDR_LEN; i++) {
 		mask[i] |= addr[i];


More information about the svn-src-all mailing list