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
This commit is contained in:
parent
4126297e17
commit
8b316d0e55
@ -3439,7 +3439,7 @@ bge_ioctl(ifp, command, data)
|
|||||||
* instead of reinitializing the entire NIC. Doing
|
* instead of reinitializing the entire NIC. Doing
|
||||||
* a full re-init means reloading the firmware and
|
* a full re-init means reloading the firmware and
|
||||||
* waiting for it to start up, which may take a
|
* 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 &&
|
if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
|
||||||
ifp->if_flags & IFF_PROMISC &&
|
ifp->if_flags & IFF_PROMISC &&
|
||||||
@ -3451,6 +3451,9 @@ bge_ioctl(ifp, command, data)
|
|||||||
sc->bge_if_flags & IFF_PROMISC) {
|
sc->bge_if_flags & IFF_PROMISC) {
|
||||||
BGE_CLRBIT(sc, BGE_RX_MODE,
|
BGE_CLRBIT(sc, BGE_RX_MODE,
|
||||||
BGE_RXMODE_RX_PROMISC);
|
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
|
} else
|
||||||
bge_init_locked(sc);
|
bge_init_locked(sc);
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user