Message ID | 200811281052.33474.rusty@rustcorp.com.au |
---|---|
State | Changes Requested, archived |
Delegated to: | David Miller |
Headers | show |
On Fri, 2008-11-28 at 10:52 +1030, Rusty Russell wrote: > On Friday 28 November 2008 00:27:05 Mark McLoughlin wrote: > > Hi Rusty, > > > > On Thu, 2008-11-27 at 23:00 +1030, Rusty Russell wrote: > > > On Thursday 27 November 2008 00:28:11 Mark McLoughlin wrote: > > > > We don't really have a max tx packet size limit, so allow configuring > > > > the device with up to 64k tx MTU. > > > > > > Hi Mark, > > > > > > Just one comment: maybe we should be conservative and maybe limit to 1500 > > > if the host doesn't offer any of the GSO or MRG_RXBUF features? > > > > That was actually what I was going to do until I thought about it a bit > > more and discussed it with Herbert. > > > > The virtio_net MTU only affects the transmit path, so there shouldn't be > > any issue with a host that doesn't support those features. > > Not quite what I meant. Well, you did mention MRG_RXBUF :-) > A minimal host can reasonably expect ethernet-fitting packets. If it > supports GSO of course it must handle larger ones. I think this is orthogonal to GSO - e.g. a host may support GSO even if it can only physically transmit 1500 byte frames. MTU configuration is commonly a trial and error thing, so we're better off allowing larger MTU sizes in cases where the host might not support it rather than disallowing it in cases where the host can support it. > Otherwise we should add YA feature bit or even a max-mtu field. If e.g. we allowed physical device assignment via virtio, then the MTU would be limited to the MTU supported by the physical device. In that case it might make sense to add a max-mtu field or similar, but IMHO it's fine to allow larger MTU sizes in the mean time. Cheers, Mark. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Friday 28 November 2008 19:59:55 Mark McLoughlin wrote: > On Fri, 2008-11-28 at 10:52 +1030, Rusty Russell wrote: > > On Friday 28 November 2008 00:27:05 Mark McLoughlin wrote: > > > Hi Rusty, > > > > > > On Thu, 2008-11-27 at 23:00 +1030, Rusty Russell wrote: > > > > On Thursday 27 November 2008 00:28:11 Mark McLoughlin wrote: > > > > > We don't really have a max tx packet size limit, so allow > > > > > configuring the device with up to 64k tx MTU. > > > > > > > > Hi Mark, > > > > > > > > Just one comment: maybe we should be conservative and maybe limit to > > > > 1500 if the host doesn't offer any of the GSO or MRG_RXBUF features? > > > > > > That was actually what I was going to do until I thought about it a bit > > > more and discussed it with Herbert. > > > > > > The virtio_net MTU only affects the transmit path, so there shouldn't > > > be any issue with a host that doesn't support those features. > > > > Not quite what I meant. > > Well, you did mention MRG_RXBUF :-) Yeah, but you should know by now not to listen to me! > > A minimal host can reasonably expect ethernet-fitting packets. If it > > supports GSO of course it must handle larger ones. > > I think this is orthogonal to GSO - e.g. a host may support GSO even if > it can only physically transmit 1500 byte frames. Sure, but we know at least it can take large packets in some respect. > MTU configuration is commonly a trial and error thing, so we're better > off allowing larger MTU sizes in cases where the host might not support > it rather than disallowing it in cases where the host can support it. We're changing the driver behaviour; we *should* add a feature bit. The only counter-argument to this is that all the existing hosts we know of allow the behaviour we're specifying. (Grovelling through an old qemu here it seems to be true, and old tun/tap would take anything). > If e.g. we allowed physical device assignment via virtio, then the MTU > would be limited to the MTU supported by the physical device. In that > case it might make sense to add a max-mtu field or similar, but IMHO > it's fine to allow larger MTU sizes in the mean time. OK, I'm swayed. Only because the user has to make a conscious decision to up the MTU; and if they choose wrong, networking won't work. I've applied your original patch. Thanks! Rusty. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -480,26 +480,24 @@ static struct ethtool_ops virtnet_ethtoo .set_sg = ethtool_op_set_sg, }; -#define MIN_MTU 68 -#define MAX_MTU 65535 - static int virtnet_change_mtu(struct net_device *dev, int new_mtu) { struct virtnet_info *vi = netdev_priv(dev); int max_mtu; - /* Only allow a large MTU if we know we have a chance - * of also supporting that MTU on the receive side. */ - if (vi->mergeable_rx_bufs || vi->big_packets) - max_mtu = MAX_MTU; + /* A host which can handle GSO must handle large packets. */ + if (virtio_has_feature(vi->vdev, VIRTIO_NET_F_GSO) + || virtio_has_feature(vi->vdev, VIRTIO_NET_F_HOST_TSO4) + || virtio_has_feature(vi->vdev, VIRTIO_NET_F_HOST_TSO6) + || virtio_has_feature(vi->vdev, VIRTIO_NET_F_HOST_UFO)) + max_mtu = 65535; else max_mtu = ETH_DATA_LEN; - if (new_mtu < MIN_MTU || new_mtu > max_mtu) + if (new_mtu < 68 || new_mtu > max_mtu) return -EINVAL; dev->mtu = new_mtu; - return 0; }