Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ethernet: use net core MTU range checking in more drivers

Somehow, I missed a healthy number of ethernet drivers in the last pass.
Most of these drivers either were in need of an updated max_mtu to make
jumbo frames possible to enable again. In a few cases, also setting a
different min_mtu to match previous lower bounds. There are also a few
drivers that had no upper bounds checking, so they're getting a brand new
ETH_MAX_MTU that is identical to IP_MAX_MTU, but accessible by includes
all ethernet and ethernet-like drivers all have already.

acenic:
- min_mtu = 0, max_mtu = 9000

amazon/ena:
- min_mtu = 128, max_mtu = adapter->max_mtu

amd/xgbe:
- min_mtu = 0, max_mtu = 9000

sb1250:
- min_mtu = 0, max_mtu = 1518

cxgb3:
- min_mtu = 81, max_mtu = 65535

cxgb4:
- min_mtu = 81, max_mtu = 9600

cxgb4vf:
- min_mtu = 81, max_mtu = 65535

benet:
- min_mtu = 256, max_mtu = 9000

ibmveth:
- min_mtu = 68, max_mtu = 65535

ibmvnic:
- min_mtu = adapter->min_mtu, max_mtu = adapter->max_mtu
- remove now redundant ibmvnic_change_mtu

jme:
- min_mtu = 1280, max_mtu = 9202

mv643xx_eth:
- min_mtu = 64, max_mtu = 9500

mlxsw:
- min_mtu = 0, max_mtu = 65535
- Basically bypassing the core checks, and instead relying on dynamic
checks in the respective switch drivers' ndo_change_mtu functions

ns83820:
- min_mtu = 0
- remove redundant ns83820_change_mtu, only checked for mtu > 1500

netxen:
- min_mtu = 0, max_mtu = 8000 (P2), max_mtu = 9600 (P3)

qlge:
- min_mtu = 1500, max_mtu = 9000
- driver only supports setting mtu to 1500 or 9000, so the core check only
rules out < 1500 and > 9000, qlge_change_mtu still needs to check that
the value is 1500 or 9000

qualcomm/emac:
- min_mtu = 46, max_mtu = 9194

xilinx_axienet:
- min_mtu = 64, max_mtu = 9000

Fixes: 61e84623ace3 ("net: centralize net_device min/max MTU checking")
CC: netdev@vger.kernel.org
CC: Jes Sorensen <jes@trained-monkey.org>
CC: Netanel Belgazal <netanel@annapurnalabs.com>
CC: Tom Lendacky <thomas.lendacky@amd.com>
CC: Santosh Raspatur <santosh@chelsio.com>
CC: Hariprasad S <hariprasad@chelsio.com>
CC: Sathya Perla <sathya.perla@broadcom.com>
CC: Ajit Khaparde <ajit.khaparde@broadcom.com>
CC: Sriharsha Basavapatna <sriharsha.basavapatna@broadcom.com>
CC: Somnath Kotur <somnath.kotur@broadcom.com>
CC: Thomas Falcon <tlfalcon@linux.vnet.ibm.com>
CC: John Allen <jallen@linux.vnet.ibm.com>
CC: Guo-Fu Tseng <cooldavid@cooldavid.org>
CC: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
CC: Jiri Pirko <jiri@mellanox.com>
CC: Ido Schimmel <idosch@mellanox.com>
CC: Manish Chopra <manish.chopra@qlogic.com>
CC: Sony Chacko <sony.chacko@qlogic.com>
CC: Rajesh Borundia <rajesh.borundia@qlogic.com>
CC: Timur Tabi <timur@codeaurora.org>
CC: Anirudha Sarangi <anirudh@xilinx.com>
CC: John Linn <John.Linn@xilinx.com>
Signed-off-by: Jarod Wilson <jarod@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Jarod Wilson and committed by
David S. Miller
d894be57 1a61a8f1

+68 -108
+2 -3
drivers/net/ethernet/alteon/acenic.c
··· 474 474 dev->features |= NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX; 475 475 476 476 dev->watchdog_timeo = 5*HZ; 477 + dev->min_mtu = 0; 478 + dev->max_mtu = ACE_JUMBO_MTU; 477 479 478 480 dev->netdev_ops = &ace_netdev_ops; 479 481 dev->ethtool_ops = &ace_ethtool_ops; ··· 2549 2547 { 2550 2548 struct ace_private *ap = netdev_priv(dev); 2551 2549 struct ace_regs __iomem *regs = ap->regs; 2552 - 2553 - if (new_mtu > ACE_JUMBO_MTU) 2554 - return -EINVAL; 2555 2550 2556 2551 writel(new_mtu + ETH_HLEN + 4, &regs->IfMtu); 2557 2552 dev->mtu = new_mtu;
+2 -7
drivers/net/ethernet/amazon/ena/ena_netdev.c
··· 103 103 struct ena_adapter *adapter = netdev_priv(dev); 104 104 int ret; 105 105 106 - if ((new_mtu > adapter->max_mtu) || (new_mtu < ENA_MIN_MTU)) { 107 - netif_err(adapter, drv, dev, 108 - "Invalid MTU setting. new_mtu: %d\n", new_mtu); 109 - 110 - return -EINVAL; 111 - } 112 - 113 106 ret = ena_com_set_dev_mtu(adapter->ena_dev, new_mtu); 114 107 if (!ret) { 115 108 netif_dbg(adapter, drv, dev, "set MTU to %d\n", new_mtu); ··· 2748 2755 ena_set_dev_offloads(feat, netdev); 2749 2756 2750 2757 adapter->max_mtu = feat->dev_attr.max_mtu; 2758 + netdev->max_mtu = adapter->max_mtu; 2759 + netdev->min_mtu = ENA_MIN_MTU; 2751 2760 } 2752 2761 2753 2762 static int ena_rss_init_default(struct ena_adapter *adapter)
-5
drivers/net/ethernet/amd/xgbe/xgbe-drv.c
··· 257 257 { 258 258 unsigned int rx_buf_size; 259 259 260 - if (mtu > XGMAC_JUMBO_PACKET_MTU) { 261 - netdev_alert(netdev, "MTU exceeds maximum supported value\n"); 262 - return -EINVAL; 263 - } 264 - 265 260 rx_buf_size = mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN; 266 261 rx_buf_size = clamp_val(rx_buf_size, XGBE_RX_MIN_BUF_SIZE, PAGE_SIZE); 267 262
+2
drivers/net/ethernet/amd/xgbe/xgbe-main.c
··· 738 738 pdata->netdev_features = netdev->features; 739 739 740 740 netdev->priv_flags |= IFF_UNICAST_FLT; 741 + netdev->min_mtu = 0; 742 + netdev->max_mtu = XGMAC_JUMBO_PACKET_MTU; 741 743 742 744 /* Use default watchdog timeout */ 743 745 netdev->watchdog_timeo = 0;
+2 -10
drivers/net/ethernet/broadcom/sb1250-mac.c
··· 2147 2147 } 2148 2148 } 2149 2149 2150 - static int sb1250_change_mtu(struct net_device *_dev, int new_mtu) 2151 - { 2152 - if (new_mtu > ENET_PACKET_SIZE) 2153 - return -EINVAL; 2154 - _dev->mtu = new_mtu; 2155 - pr_info("changing the mtu to %d\n", new_mtu); 2156 - return 0; 2157 - } 2158 - 2159 2150 static const struct net_device_ops sbmac_netdev_ops = { 2160 2151 .ndo_open = sbmac_open, 2161 2152 .ndo_stop = sbmac_close, ··· 2154 2163 .ndo_set_rx_mode = sbmac_set_rx_mode, 2155 2164 .ndo_tx_timeout = sbmac_tx_timeout, 2156 2165 .ndo_do_ioctl = sbmac_mii_ioctl, 2157 - .ndo_change_mtu = sb1250_change_mtu, 2158 2166 .ndo_validate_addr = eth_validate_addr, 2159 2167 .ndo_set_mac_address = eth_mac_addr, 2160 2168 #ifdef CONFIG_NET_POLL_CONTROLLER ··· 2219 2229 2220 2230 dev->netdev_ops = &sbmac_netdev_ops; 2221 2231 dev->watchdog_timeo = TX_TIMEOUT; 2232 + dev->max_mtu = 0; 2233 + dev->max_mtu = ENET_PACKET_SIZE; 2222 2234 2223 2235 netif_napi_add(dev, &sc->napi, sbmac_poll, 16); 2224 2236
+2 -2
drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
··· 2531 2531 struct adapter *adapter = pi->adapter; 2532 2532 int ret; 2533 2533 2534 - if (new_mtu < 81) /* accommodate SACK */ 2535 - return -EINVAL; 2536 2534 if ((ret = t3_mac_set_mtu(&pi->mac, new_mtu))) 2537 2535 return ret; 2538 2536 dev->mtu = new_mtu; ··· 3293 3295 3294 3296 netdev->netdev_ops = &cxgb_netdev_ops; 3295 3297 netdev->ethtool_ops = &cxgb_ethtool_ops; 3298 + netdev->min_mtu = 81; 3299 + netdev->max_mtu = ETH_MAX_MTU; 3296 3300 } 3297 3301 3298 3302 pci_set_drvdata(pdev, adapter);
+4 -2
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
··· 2502 2502 int ret; 2503 2503 struct port_info *pi = netdev_priv(dev); 2504 2504 2505 - if (new_mtu < 81 || new_mtu > MAX_MTU) /* accommodate SACK */ 2506 - return -EINVAL; 2507 2505 ret = t4_set_rxmode(pi->adapter, pi->adapter->pf, pi->viid, new_mtu, -1, 2508 2506 -1, -1, -1, true); 2509 2507 if (!ret) ··· 4800 4802 netdev->vlan_features = netdev->features & VLAN_FEAT; 4801 4803 4802 4804 netdev->priv_flags |= IFF_UNICAST_FLT; 4805 + 4806 + /* MTU range: 81 - 9600 */ 4807 + netdev->min_mtu = 81; 4808 + netdev->max_mtu = MAX_MTU; 4803 4809 4804 4810 netdev->netdev_ops = &cxgb4_netdev_ops; 4805 4811 #ifdef CONFIG_CHELSIO_T4_DCB
+2 -4
drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c
··· 1108 1108 int ret; 1109 1109 struct port_info *pi = netdev_priv(dev); 1110 1110 1111 - /* accommodate SACK */ 1112 - if (new_mtu < 81) 1113 - return -EINVAL; 1114 - 1115 1111 ret = t4vf_set_rxmode(pi->adapter, pi->viid, new_mtu, 1116 1112 -1, -1, -1, -1, true); 1117 1113 if (!ret) ··· 2962 2966 netdev->features |= NETIF_F_HIGHDMA; 2963 2967 2964 2968 netdev->priv_flags |= IFF_UNICAST_FLT; 2969 + netdev->min_mtu = 81; 2970 + netdev->max_mtu = ETH_MAX_MTU; 2965 2971 2966 2972 netdev->netdev_ops = &cxgb4vf_netdev_ops; 2967 2973 netdev->ethtool_ops = &cxgb4vf_ethtool_ops;
+4 -18
drivers/net/ethernet/emulex/benet/be_main.c
··· 1406 1406 return NETDEV_TX_OK; 1407 1407 } 1408 1408 1409 - static int be_change_mtu(struct net_device *netdev, int new_mtu) 1410 - { 1411 - struct be_adapter *adapter = netdev_priv(netdev); 1412 - struct device *dev = &adapter->pdev->dev; 1413 - 1414 - if (new_mtu < BE_MIN_MTU || new_mtu > BE_MAX_MTU) { 1415 - dev_info(dev, "MTU must be between %d and %d bytes\n", 1416 - BE_MIN_MTU, BE_MAX_MTU); 1417 - return -EINVAL; 1418 - } 1419 - 1420 - dev_info(dev, "MTU changed from %d to %d bytes\n", 1421 - netdev->mtu, new_mtu); 1422 - netdev->mtu = new_mtu; 1423 - return 0; 1424 - } 1425 - 1426 1409 static inline bool be_in_all_promisc(struct be_adapter *adapter) 1427 1410 { 1428 1411 return (adapter->if_flags & BE_IF_FLAGS_ALL_PROMISCUOUS) == ··· 5199 5216 .ndo_start_xmit = be_xmit, 5200 5217 .ndo_set_rx_mode = be_set_rx_mode, 5201 5218 .ndo_set_mac_address = be_mac_addr_set, 5202 - .ndo_change_mtu = be_change_mtu, 5203 5219 .ndo_get_stats64 = be_get_stats64, 5204 5220 .ndo_validate_addr = eth_validate_addr, 5205 5221 .ndo_vlan_rx_add_vid = be_vlan_add_vid, ··· 5248 5266 netdev->netdev_ops = &be_netdev_ops; 5249 5267 5250 5268 netdev->ethtool_ops = &be_ethtool_ops; 5269 + 5270 + /* MTU range: 256 - 9000 */ 5271 + netdev->min_mtu = BE_MIN_MTU; 5272 + netdev->max_mtu = BE_MAX_MTU; 5251 5273 } 5252 5274 5253 5275 static void be_cleanup(struct be_adapter *adapter)
+3 -3
drivers/net/ethernet/ibm/ibmveth.c
··· 1349 1349 int i, rc; 1350 1350 int need_restart = 0; 1351 1351 1352 - if (new_mtu < IBMVETH_MIN_MTU) 1353 - return -EINVAL; 1354 - 1355 1352 for (i = 0; i < IBMVETH_NUM_BUFF_POOLS; i++) 1356 1353 if (new_mtu_oh <= adapter->rx_buff_pool[i].buff_size) 1357 1354 break; ··· 1547 1550 } else { 1548 1551 netdev->hw_features |= NETIF_F_TSO; 1549 1552 } 1553 + 1554 + netdev->min_mtu = IBMVETH_MIN_MTU; 1555 + netdev->min_mtu = ETH_MAX_MTU; 1550 1556 1551 1557 memcpy(netdev->dev_addr, mac_addr_p, ETH_ALEN); 1552 1558
+4 -12
drivers/net/ethernet/ibm/ibmvnic.c
··· 902 902 return 0; 903 903 } 904 904 905 - static int ibmvnic_change_mtu(struct net_device *netdev, int new_mtu) 906 - { 907 - struct ibmvnic_adapter *adapter = netdev_priv(netdev); 908 - 909 - if (new_mtu > adapter->req_mtu || new_mtu < adapter->min_mtu) 910 - return -EINVAL; 911 - 912 - netdev->mtu = new_mtu; 913 - return 0; 914 - } 915 - 916 905 static void ibmvnic_tx_timeout(struct net_device *dev) 917 906 { 918 907 struct ibmvnic_adapter *adapter = netdev_priv(dev); ··· 1018 1029 .ndo_set_rx_mode = ibmvnic_set_multi, 1019 1030 .ndo_set_mac_address = ibmvnic_set_mac, 1020 1031 .ndo_validate_addr = eth_validate_addr, 1021 - .ndo_change_mtu = ibmvnic_change_mtu, 1022 1032 .ndo_tx_timeout = ibmvnic_tx_timeout, 1023 1033 #ifdef CONFIG_NET_POLL_CONTROLLER 1024 1034 .ndo_poll_controller = ibmvnic_netpoll_controller, ··· 2626 2638 break; 2627 2639 case MIN_MTU: 2628 2640 adapter->min_mtu = be64_to_cpu(crq->query_capability.number); 2641 + netdev->min_mtu = adapter->min_mtu; 2629 2642 netdev_dbg(netdev, "min_mtu = %lld\n", adapter->min_mtu); 2630 2643 break; 2631 2644 case MAX_MTU: 2632 2645 adapter->max_mtu = be64_to_cpu(crq->query_capability.number); 2646 + netdev->max_mtu = adapter->max_mtu; 2633 2647 netdev_dbg(netdev, "max_mtu = %lld\n", adapter->max_mtu); 2634 2648 break; 2635 2649 case MAX_MULTICAST_FILTERS: ··· 3644 3654 goto task_failed; 3645 3655 3646 3656 netdev->real_num_tx_queues = adapter->req_tx_queues; 3657 + netdev->min_mtu = adapter->min_mtu; 3658 + netdev->max_mtu = adapter->max_mtu; 3647 3659 3648 3660 if (adapter->failover) { 3649 3661 adapter->failover = false;
+4 -8
drivers/net/ethernet/jme.c
··· 2357 2357 { 2358 2358 struct jme_adapter *jme = netdev_priv(netdev); 2359 2359 2360 - if (new_mtu == jme->old_mtu) 2361 - return 0; 2362 - 2363 - if (((new_mtu + ETH_HLEN) > MAX_ETHERNET_JUMBO_PACKET_SIZE) || 2364 - ((new_mtu) < IPV6_MIN_MTU)) 2365 - return -EINVAL; 2366 - 2367 - 2368 2360 netdev->mtu = new_mtu; 2369 2361 netdev_update_features(netdev); 2370 2362 ··· 3054 3062 NETIF_F_HW_VLAN_CTAG_RX; 3055 3063 if (using_dac) 3056 3064 netdev->features |= NETIF_F_HIGHDMA; 3065 + 3066 + /* MTU range: 1280 - 9202*/ 3067 + netdev->min_mtu = IPV6_MIN_MTU; 3068 + netdev->max_mtu = MAX_ETHERNET_JUMBO_PACKET_SIZE - ETH_HLEN; 3057 3069 3058 3070 SET_NETDEV_DEV(netdev, &pdev->dev); 3059 3071 pci_set_drvdata(pdev, netdev);
+4 -3
drivers/net/ethernet/marvell/mv643xx_eth.c
··· 2585 2585 { 2586 2586 struct mv643xx_eth_private *mp = netdev_priv(dev); 2587 2587 2588 - if (new_mtu < 64 || new_mtu > 9500) 2589 - return -EINVAL; 2590 - 2591 2588 dev->mtu = new_mtu; 2592 2589 mv643xx_eth_recalc_skb_size(mp); 2593 2590 tx_set_rate(mp, 1000000000, 16777216); ··· 3202 3205 3203 3206 dev->priv_flags |= IFF_UNICAST_FLT; 3204 3207 dev->gso_max_segs = MV643XX_MAX_TSO_SEGS; 3208 + 3209 + /* MTU range: 64 - 9500 */ 3210 + dev->min_mtu = 64; 3211 + dev->max_mtu = 9500; 3205 3212 3206 3213 SET_NETDEV_DEV(dev, &pdev->dev); 3207 3214
+3
drivers/net/ethernet/mellanox/mlxsw/spectrum.c
··· 2284 2284 NETIF_F_HW_VLAN_CTAG_FILTER | NETIF_F_HW_TC; 2285 2285 dev->hw_features |= NETIF_F_HW_TC; 2286 2286 2287 + dev->min_mtu = 0; 2288 + dev->max_mtu = ETH_MAX_MTU; 2289 + 2287 2290 /* Each packet needs to have a Tx header (metadata) on top all other 2288 2291 * headers. 2289 2292 */
+3
drivers/net/ethernet/mellanox/mlxsw/switchx2.c
··· 994 994 dev->features |= NETIF_F_NETNS_LOCAL | NETIF_F_LLTX | NETIF_F_SG | 995 995 NETIF_F_VLAN_CHALLENGED; 996 996 997 + dev->min_mtu = 0; 998 + dev->max_mtu = ETH_MAX_MTU; 999 + 997 1000 /* Each packet needs to have a Tx header (metadata) on top all other 998 1001 * headers. 999 1002 */
+2 -9
drivers/net/ethernet/natsemi/ns83820.c
··· 1679 1679 } 1680 1680 } 1681 1681 1682 - static int ns83820_change_mtu(struct net_device *ndev, int new_mtu) 1683 - { 1684 - if (new_mtu > RX_BUF_SIZE) 1685 - return -EINVAL; 1686 - ndev->mtu = new_mtu; 1687 - return 0; 1688 - } 1689 - 1690 1682 static void ns83820_set_multicast(struct net_device *ndev) 1691 1683 { 1692 1684 struct ns83820 *dev = PRIV(ndev); ··· 1925 1933 .ndo_stop = ns83820_stop, 1926 1934 .ndo_start_xmit = ns83820_hard_start_xmit, 1927 1935 .ndo_get_stats = ns83820_get_stats, 1928 - .ndo_change_mtu = ns83820_change_mtu, 1929 1936 .ndo_set_rx_mode = ns83820_set_multicast, 1930 1937 .ndo_validate_addr = eth_validate_addr, 1931 1938 .ndo_set_mac_address = eth_mac_addr, ··· 2180 2189 /* Yes, we support dumb IP checksum on transmit */ 2181 2190 ndev->features |= NETIF_F_SG; 2182 2191 ndev->features |= NETIF_F_IP_CSUM; 2192 + 2193 + ndev->min_mtu = 0; 2183 2194 2184 2195 #ifdef NS83820_VLAN_ACCEL_SUPPORT 2185 2196 /* We also support hardware vlan acceleration */
-12
drivers/net/ethernet/qlogic/netxen/netxen_nic_hw.c
··· 987 987 int netxen_nic_change_mtu(struct net_device *netdev, int mtu) 988 988 { 989 989 struct netxen_adapter *adapter = netdev_priv(netdev); 990 - int max_mtu; 991 990 int rc = 0; 992 - 993 - if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) 994 - max_mtu = P3_MAX_MTU; 995 - else 996 - max_mtu = P2_MAX_MTU; 997 - 998 - if (mtu > max_mtu) { 999 - printk(KERN_ERR "%s: mtu > %d bytes unsupported\n", 1000 - netdev->name, max_mtu); 1001 - return -EINVAL; 1002 - } 1003 991 1004 992 if (adapter->set_mtu) 1005 993 rc = adapter->set_mtu(adapter, mtu);
+7
drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
··· 1572 1572 adapter->physical_port = i; 1573 1573 } 1574 1574 1575 + /* MTU range: 0 - 8000 (P2) or 9600 (P3) */ 1576 + netdev->min_mtu = 0; 1577 + if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) 1578 + netdev->max_mtu = P3_MAX_MTU; 1579 + else 1580 + netdev->max_mtu = P2_MAX_MTU; 1581 + 1575 1582 netxen_nic_clear_stats(adapter); 1576 1583 1577 1584 err = netxen_setup_intr(adapter);
+7
drivers/net/ethernet/qlogic/qlge/qlge_main.c
··· 4788 4788 ndev->ethtool_ops = &qlge_ethtool_ops; 4789 4789 ndev->watchdog_timeo = 10 * HZ; 4790 4790 4791 + /* MTU range: this driver only supports 1500 or 9000, so this only 4792 + * filters out values above or below, and we'll rely on 4793 + * qlge_change_mtu to make sure only 1500 or 9000 are allowed 4794 + */ 4795 + ndev->min_mtu = ETH_DATA_LEN; 4796 + ndev->max_mtu = 9000; 4797 + 4791 4798 err = register_netdev(ndev); 4792 4799 if (err) { 4793 4800 dev_err(&pdev->dev, "net device registration failed.\n");
+6 -7
drivers/net/ethernet/qualcomm/emac/emac.c
··· 239 239 /* Change the Maximum Transfer Unit (MTU) */ 240 240 static int emac_change_mtu(struct net_device *netdev, int new_mtu) 241 241 { 242 - unsigned int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN; 243 242 struct emac_adapter *adpt = netdev_priv(netdev); 244 - 245 - if ((max_frame < EMAC_MIN_ETH_FRAME_SIZE) || 246 - (max_frame > EMAC_MAX_ETH_FRAME_SIZE)) { 247 - netdev_err(adpt->netdev, "error: invalid MTU setting\n"); 248 - return -EINVAL; 249 - } 250 243 251 244 netif_info(adpt, hw, adpt->netdev, 252 245 "changing MTU from %d to %d\n", netdev->mtu, ··· 671 678 672 679 netdev->vlan_features |= NETIF_F_SG | NETIF_F_HW_CSUM | 673 680 NETIF_F_TSO | NETIF_F_TSO6; 681 + 682 + /* MTU range: 46 - 9194 */ 683 + netdev->min_mtu = EMAC_MIN_ETH_FRAME_SIZE - 684 + (ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN); 685 + netdev->max_mtu = EMAC_MAX_ETH_FRAME_SIZE - 686 + (ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN); 674 687 675 688 INIT_WORK(&adpt->work_thread, emac_work_thread); 676 689
+4 -3
drivers/net/ethernet/xilinx/xilinx_axienet_main.c
··· 1034 1034 XAE_TRL_SIZE) > lp->rxmem) 1035 1035 return -EINVAL; 1036 1036 1037 - if ((new_mtu > XAE_JUMBO_MTU) || (new_mtu < 64)) 1038 - return -EINVAL; 1039 - 1040 1037 ndev->mtu = new_mtu; 1041 1038 1042 1039 return 0; ··· 1471 1474 ndev->features = NETIF_F_SG; 1472 1475 ndev->netdev_ops = &axienet_netdev_ops; 1473 1476 ndev->ethtool_ops = &axienet_ethtool_ops; 1477 + 1478 + /* MTU range: 64 - 9000 */ 1479 + ndev->min_mtu = 64; 1480 + ndev->max_mtu = XAE_JUMBO_MTU; 1474 1481 1475 1482 lp = netdev_priv(ndev); 1476 1483 lp->ndev = ndev;
+1
include/uapi/linux/if_ether.h
··· 36 36 #define ETH_FCS_LEN 4 /* Octets in the FCS */ 37 37 38 38 #define ETH_MIN_MTU 68 /* Min IPv4 MTU per RFC791 */ 39 + #define ETH_MAX_MTU 0xFFFFU /* 65535, same as IP_MAX_MTU */ 39 40 40 41 /* 41 42 * These are the defined Ethernet Protocol ID's.