From b9d68b9de02cc474c8a713f1232ce69fefafe18e Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Tue, 17 Jul 2018 12:01:30 +0100 Subject: [ethernet] Use standard 1500 byte MTU unless explicitly overridden Devices that support jumbo frames will currently default to the largest possible MTU. This assumption is valid for virtual adapters such as virtio-net, where the MTU must have been configured by a system administrator, but is unsafe in the general case of a physical adapter. Default to the standard Ethernet MTU, unless explicitly overridden either by the driver or via the ${netX/mtu} setting. Signed-off-by: Michael Brown --- src/drivers/net/ena.c | 1 + src/drivers/net/virtio-net.c | 1 + src/net/ethernet.c | 1 + 3 files changed, 3 insertions(+) diff --git a/src/drivers/net/ena.c b/src/drivers/net/ena.c index 8d29979b..0f25c0be 100644 --- a/src/drivers/net/ena.c +++ b/src/drivers/net/ena.c @@ -565,6 +565,7 @@ static int ena_get_device_attributes ( struct net_device *netdev ) { feature = &rsp->get_feature.feature; memcpy ( netdev->hw_addr, feature->device.mac, ETH_ALEN ); netdev->max_pkt_len = le32_to_cpu ( feature->device.mtu ); + netdev->mtu = ( netdev->max_pkt_len - ETH_HLEN ); DBGC ( ena, "ENA %p MAC %s MTU %zd\n", ena, eth_ntoa ( netdev->hw_addr ), netdev->max_pkt_len ); diff --git a/src/drivers/net/virtio-net.c b/src/drivers/net/virtio-net.c index fe79a92c..78ec9ac4 100644 --- a/src/drivers/net/virtio-net.c +++ b/src/drivers/net/virtio-net.c @@ -493,6 +493,7 @@ static int virtnet_probe_legacy ( struct pci_device *pci ) { &mtu, sizeof ( mtu ) ); DBGC ( virtnet, "VIRTIO-NET %p mtu=%d\n", virtnet, mtu ); netdev->max_pkt_len = ( mtu + ETH_HLEN ); + netdev->mtu = mtu; } /* Register network device */ diff --git a/src/net/ethernet.c b/src/net/ethernet.c index 26fdedea..707bdf90 100644 --- a/src/net/ethernet.c +++ b/src/net/ethernet.c @@ -269,6 +269,7 @@ struct net_device * alloc_etherdev ( size_t priv_size ) { netdev->ll_protocol = ðernet_protocol; netdev->ll_broadcast = eth_broadcast; netdev->max_pkt_len = ETH_FRAME_LEN; + netdev->mtu = ETH_MAX_MTU; } return netdev; } -- cgit v1.2.3-55-g7522