git: 580cadd6a5f0 - main - vtnet: allow IFF_ALLMULTI to be set without VIRTIO_NET_F_CTRL_RX
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 11 Aug 2023 07:52:56 UTC
The branch main has been updated by kp:
URL: https://cgit.FreeBSD.org/src/commit/?id=580cadd6a5f0828691ec0b94798728a1028afa33
commit 580cadd6a5f0828691ec0b94798728a1028afa33
Author: Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2023-08-08 07:15:53 +0000
Commit: Kristof Provost <kp@FreeBSD.org>
CommitDate: 2023-08-11 07:42:29 +0000
vtnet: allow IFF_ALLMULTI to be set without VIRTIO_NET_F_CTRL_RX
If the host doesn't announce VIRTIO_NET_F_CTRL_RX we cannot disable all
multicast traffic. Previously we'd refuse to set the IFF_ALLMULTI flag,
which is the exact opposite of what is actually happening.
This broke things such as igmpproxy.
See also: https://redmine.pfsense.org/issues/14301
Sponsored by: Rubicon Communications, LLC ("Netgate")
Differential Revision: https://reviews.freebsd.org/D41356
---
sys/dev/virtio/network/if_vtnet.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/sys/dev/virtio/network/if_vtnet.c b/sys/dev/virtio/network/if_vtnet.c
index 359ef0c423bb..82f7c6a47589 100644
--- a/sys/dev/virtio/network/if_vtnet.c
+++ b/sys/dev/virtio/network/if_vtnet.c
@@ -1299,8 +1299,11 @@ vtnet_ioctl_ifflags(struct vtnet_softc *sc)
if (sc->vtnet_flags & VTNET_FLAG_CTRL_RX)
vtnet_rx_filter(sc);
else {
- if ((if_getflags(ifp) ^ sc->vtnet_if_flags) & IFF_ALLMULTI)
- return (ENOTSUP);
+ /*
+ * We don't support filtering out multicast, so
+ * ALLMULTI is always set.
+ */
+ if_setflagbits(ifp, IFF_ALLMULTI, 0);
if_setflagbits(ifp, IFF_PROMISC, 0);
}
}