vio(4): Fix hardmtu without MRG_RXBUF
authorsf <sf@openbsd.org>
Mon, 26 Aug 2024 19:24:02 +0000 (19:24 +0000)
committersf <sf@openbsd.org>
Mon, 26 Aug 2024 19:24:02 +0000 (19:24 +0000)
Without VIRTIO_NET_F_MRG_RXBUF, we cannot chain several buffers together
and we can only receive packets up to the length of the buffers we put
into the ring.

OK bluhm@

sys/dev/pv/if_vio.c

index 4901314..55de448 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if_vio.c,v 1.46 2024/08/16 13:02:44 jan Exp $ */
+/*     $OpenBSD: if_vio.c,v 1.47 2024/08/26 19:24:02 sf Exp $  */
 
 /*
  * Copyright (c) 2012 Stefan Fritsch, Alexander Fiveg.
@@ -599,7 +599,7 @@ vio_attach(struct device *parent, struct device *self, void *aux)
        if (virtio_has_feature(vsc, VIRTIO_NET_F_MRG_RXBUF))
                ifp->if_hardmtu = MAXMCLBYTES;
        else
-               ifp->if_hardmtu = MAXMCLBYTES - sc->sc_hdr_size - ETHER_HDR_LEN;
+               ifp->if_hardmtu = MCLBYTES - sc->sc_hdr_size - ETHER_HDR_LEN;
 
        if (virtio_alloc_vq(vsc, &sc->sc_vq[VQRX], 0, MCLBYTES, 2, "rx") != 0)
                goto err;