diff options
author | ru <ru@FreeBSD.org> | 2006-02-01 10:11:24 +0000 |
---|---|---|
committer | ru <ru@FreeBSD.org> | 2006-02-01 10:11:24 +0000 |
commit | 8b316d0e55c41780d0fcd9fd56dcc1df94d22d96 (patch) | |
tree | 8db42462b8d8c7bd46ba63e92c82ccc1d6fb2aca | |
parent | 4126297e171c6d0616d4e4f19fb1121c8b0b495e (diff) | |
download | FreeBSD-src-8b316d0e55c41780d0fcd9fd56dcc1df94d22d96.zip FreeBSD-src-8b316d0e55c41780d0fcd9fd56dcc1df94d22d96.tar.gz |
Setting IFF_ALLMULTI on a running interface didn't call bge_setmulti()
as intended, resulting in a non-working multicast routing. Fix it.
MFC after: 3 days
-rw-r--r-- | sys/dev/bge/if_bge.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/sys/dev/bge/if_bge.c b/sys/dev/bge/if_bge.c index b56e099..22a4c6c 100644 --- a/sys/dev/bge/if_bge.c +++ b/sys/dev/bge/if_bge.c @@ -3439,7 +3439,7 @@ bge_ioctl(ifp, command, data) * instead of reinitializing the entire NIC. Doing * a full re-init means reloading the firmware and * waiting for it to start up, which may take a - * second or two. + * second or two. Similarly for ALLMULTI. */ if (ifp->if_drv_flags & IFF_DRV_RUNNING && ifp->if_flags & IFF_PROMISC && @@ -3451,6 +3451,9 @@ bge_ioctl(ifp, command, data) sc->bge_if_flags & IFF_PROMISC) { BGE_CLRBIT(sc, BGE_RX_MODE, BGE_RXMODE_RX_PROMISC); + } else if (ifp->if_drv_flags & IFF_DRV_RUNNING && + (ifp->if_flags ^ sc->bge_if_flags) & IFF_ALLMULTI) { + bge_setmulti(sc); } else bge_init_locked(sc); } else { |