diff options
author | Michael Brown <mcb30@ipxe.org> | 2018-07-17 12:01:30 +0100 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2018-07-17 12:14:43 +0100 |
commit | b9d68b9de02cc474c8a713f1232ce69fefafe18e (patch) | |
tree | bb78cdd2596ec08a7d926315519e2c30b3e2b892 | |
parent | 05b979146ddb0b957354663a99c181357ad310b2 (diff) | |
download | ipxe-b9d68b9de02cc474c8a713f1232ce69fefafe18e.tar.gz |
[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 <mcb30@ipxe.org>
-rw-r--r-- | src/drivers/net/ena.c | 1 | ||||
-rw-r--r-- | src/drivers/net/virtio-net.c | 1 | ||||
-rw-r--r-- | src/net/ethernet.c | 1 |
3 files changed, 3 insertions, 0 deletions
diff --git a/src/drivers/net/ena.c b/src/drivers/net/ena.c index 8d29979bb..0f25c0beb 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 fe79a92c4..78ec9ac4e 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 26fdedea8..707bdf905 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; } |