Skip to content

Commit b3e3893

Browse files
jarodwilsondavem330
authored andcommitted
net: use core MTU range checking in misc drivers
firewire-net: - set min/max_mtu - remove fwnet_change_mtu nes: - set max_mtu - clean up nes_netdev_change_mtu xpnet: - set min/max_mtu - remove xpnet_dev_change_mtu hippi: - set min/max_mtu - remove hippi_change_mtu batman-adv: - set max_mtu - remove batadv_interface_change_mtu - initialization is a little async, not 100% certain that max_mtu is set in the optimal place, don't have hardware to test with rionet: - set min/max_mtu - remove rionet_change_mtu slip: - set min/max_mtu - streamline sl_change_mtu um/net_kern: - remove pointless ndo_change_mtu hsi/clients/ssi_protocol: - use core MTU range checking - remove now redundant ssip_pn_set_mtu ipoib: - set a default max MTU value - Note: ipoib's actual max MTU can vary, depending on if the device is in connected mode or not, so we'll just set the max_mtu value to the max possible, and let the ndo_change_mtu function continue to validate any new MTU change requests with checks for CM or not. Note that ipoib has no min_mtu set, and thus, the network core's mtu > 0 check is the only lower bounds here. mptlan: - use net core MTU range checking - remove now redundant mpt_lan_change_mtu fddi: - min_mtu = 21, max_mtu = 4470 - remove now redundant fddi_change_mtu (including export) fjes: - min_mtu = 8192, max_mtu = 65536 - The max_mtu value is actually one over IP_MAX_MTU here, but the idea is to get past the core net MTU range checks so fjes_change_mtu can validate a new MTU against what it supports (see fjes_support_mtu in fjes_hw.c) hsr: - min_mtu = 0 (calls ether_setup, max_mtu is 1500) f_phonet: - min_mtu = 6, max_mtu = 65541 u_ether: - min_mtu = 14, max_mtu = 15412 phonet/pep-gprs: - min_mtu = 576, max_mtu = 65530 - remove redundant gprs_set_mtu CC: [email protected] CC: [email protected] CC: Stefan Richter <[email protected]> CC: Faisal Latif <[email protected]> CC: [email protected] CC: Cliff Whickman <[email protected]> CC: Robin Holt <[email protected]> CC: Jes Sorensen <[email protected]> CC: Marek Lindner <[email protected]> CC: Simon Wunderlich <[email protected]> CC: Antonio Quartulli <[email protected]> CC: Sathya Prakash <[email protected]> CC: Chaitra P B <[email protected]> CC: Suganath Prabu Subramani <[email protected]> CC: [email protected] CC: Sebastian Reichel <[email protected]> CC: Felipe Balbi <[email protected]> CC: Arvid Brodin <[email protected]> CC: Remi Denis-Courmont <[email protected]> Signed-off-by: Jarod Wilson <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent d0c2c99 commit b3e3893

File tree

23 files changed

+46
-154
lines changed

23 files changed

+46
-154
lines changed

arch/um/drivers/net_kern.c

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -256,13 +256,6 @@ static void uml_net_tx_timeout(struct net_device *dev)
256256
netif_wake_queue(dev);
257257
}
258258

259-
static int uml_net_change_mtu(struct net_device *dev, int new_mtu)
260-
{
261-
dev->mtu = new_mtu;
262-
263-
return 0;
264-
}
265-
266259
#ifdef CONFIG_NET_POLL_CONTROLLER
267260
static void uml_net_poll_controller(struct net_device *dev)
268261
{
@@ -374,7 +367,6 @@ static const struct net_device_ops uml_netdev_ops = {
374367
.ndo_set_rx_mode = uml_net_set_multicast_list,
375368
.ndo_tx_timeout = uml_net_tx_timeout,
376369
.ndo_set_mac_address = eth_mac_addr,
377-
.ndo_change_mtu = uml_net_change_mtu,
378370
.ndo_validate_addr = eth_validate_addr,
379371
#ifdef CONFIG_NET_POLL_CONTROLLER
380372
.ndo_poll_controller = uml_net_poll_controller,

drivers/firewire/net.c

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1349,15 +1349,6 @@ static netdev_tx_t fwnet_tx(struct sk_buff *skb, struct net_device *net)
13491349
return NETDEV_TX_OK;
13501350
}
13511351

1352-
static int fwnet_change_mtu(struct net_device *net, int new_mtu)
1353-
{
1354-
if (new_mtu < 68)
1355-
return -EINVAL;
1356-
1357-
net->mtu = new_mtu;
1358-
return 0;
1359-
}
1360-
13611352
static const struct ethtool_ops fwnet_ethtool_ops = {
13621353
.get_link = ethtool_op_get_link,
13631354
};
@@ -1366,7 +1357,6 @@ static const struct net_device_ops fwnet_netdev_ops = {
13661357
.ndo_open = fwnet_open,
13671358
.ndo_stop = fwnet_stop,
13681359
.ndo_start_xmit = fwnet_tx,
1369-
.ndo_change_mtu = fwnet_change_mtu,
13701360
};
13711361

13721362
static void fwnet_init_dev(struct net_device *net)
@@ -1435,7 +1425,6 @@ static int fwnet_probe(struct fw_unit *unit,
14351425
struct net_device *net;
14361426
bool allocated_netdev = false;
14371427
struct fwnet_device *dev;
1438-
unsigned max_mtu;
14391428
int ret;
14401429
union fwnet_hwaddr *ha;
14411430

@@ -1478,9 +1467,10 @@ static int fwnet_probe(struct fw_unit *unit,
14781467
* Use the RFC 2734 default 1500 octets or the maximum payload
14791468
* as initial MTU
14801469
*/
1481-
max_mtu = (1 << (card->max_receive + 1))
1482-
- sizeof(struct rfc2734_header) - IEEE1394_GASP_HDR_SIZE;
1483-
net->mtu = min(1500U, max_mtu);
1470+
net->max_mtu = (1 << (card->max_receive + 1))
1471+
- sizeof(struct rfc2734_header) - IEEE1394_GASP_HDR_SIZE;
1472+
net->mtu = min(1500U, net->max_mtu);
1473+
net->min_mtu = ETH_MIN_MTU;
14841474

14851475
/* Set our hardware address while we're at it */
14861476
ha = (union fwnet_hwaddr *)net->dev_addr;

drivers/hsi/clients/ssi_protocol.c

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -960,15 +960,6 @@ static int ssip_pn_stop(struct net_device *dev)
960960
return 0;
961961
}
962962

963-
static int ssip_pn_set_mtu(struct net_device *dev, int new_mtu)
964-
{
965-
if (new_mtu > SSIP_MAX_MTU || new_mtu < PHONET_MIN_MTU)
966-
return -EINVAL;
967-
dev->mtu = new_mtu;
968-
969-
return 0;
970-
}
971-
972963
static void ssip_xmit_work(struct work_struct *work)
973964
{
974965
struct ssi_protocol *ssi =
@@ -1060,7 +1051,6 @@ static const struct net_device_ops ssip_pn_ops = {
10601051
.ndo_open = ssip_pn_open,
10611052
.ndo_stop = ssip_pn_stop,
10621053
.ndo_start_xmit = ssip_pn_xmit,
1063-
.ndo_change_mtu = ssip_pn_set_mtu,
10641054
};
10651055

10661056
static void ssip_pn_setup(struct net_device *dev)
@@ -1136,6 +1126,10 @@ static int ssi_protocol_probe(struct device *dev)
11361126
goto out1;
11371127
}
11381128

1129+
/* MTU range: 6 - 65535 */
1130+
ssi->netdev->min_mtu = PHONET_MIN_MTU;
1131+
ssi->netdev->max_mtu = SSIP_MAX_MTU;
1132+
11391133
SET_NETDEV_DEV(ssi->netdev, dev);
11401134
netif_carrier_off(ssi->netdev);
11411135
err = register_netdev(ssi->netdev);

drivers/infiniband/hw/nes/nes.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ MODULE_DESCRIPTION("NetEffect RNIC Low-level iWARP Driver");
6565
MODULE_LICENSE("Dual BSD/GPL");
6666
MODULE_VERSION(DRV_VERSION);
6767

68-
int max_mtu = 9000;
6968
int interrupt_mod_interval = 0;
7069

7170
/* Interoperability */

drivers/infiniband/hw/nes/nes.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@
8383
#define NES_FIRST_QPN 64
8484
#define NES_SW_CONTEXT_ALIGN 1024
8585

86+
#define NES_MAX_MTU 9000
87+
8688
#define NES_NIC_MAX_NICS 16
8789
#define NES_MAX_ARP_TABLE_SIZE 4096
8890

@@ -169,8 +171,6 @@ do { \
169171
#include "nes_cm.h"
170172
#include "nes_mgt.h"
171173

172-
extern int max_mtu;
173-
#define max_frame_len (max_mtu+ETH_HLEN)
174174
extern int interrupt_mod_interval;
175175
extern int nes_if_count;
176176
extern int mpa_version;

drivers/infiniband/hw/nes/nes_nic.c

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -981,20 +981,16 @@ static int nes_netdev_change_mtu(struct net_device *netdev, int new_mtu)
981981
{
982982
struct nes_vnic *nesvnic = netdev_priv(netdev);
983983
struct nes_device *nesdev = nesvnic->nesdev;
984-
int ret = 0;
985984
u8 jumbomode = 0;
986985
u32 nic_active;
987986
u32 nic_active_bit;
988987
u32 uc_all_active;
989988
u32 mc_all_active;
990989

991-
if ((new_mtu < ETH_ZLEN) || (new_mtu > max_mtu))
992-
return -EINVAL;
993-
994990
netdev->mtu = new_mtu;
995991
nesvnic->max_frame_size = new_mtu + VLAN_ETH_HLEN;
996992

997-
if (netdev->mtu > 1500) {
993+
if (netdev->mtu > ETH_DATA_LEN) {
998994
jumbomode=1;
999995
}
1000996
nes_nic_init_timer_defaults(nesdev, jumbomode);
@@ -1020,7 +1016,7 @@ static int nes_netdev_change_mtu(struct net_device *netdev, int new_mtu)
10201016
nes_write_indexed(nesdev, NES_IDX_NIC_UNICAST_ALL, nic_active);
10211017
}
10221018

1023-
return ret;
1019+
return 0;
10241020
}
10251021

10261022

@@ -1658,7 +1654,7 @@ struct net_device *nes_netdev_init(struct nes_device *nesdev,
16581654

16591655
netdev->watchdog_timeo = NES_TX_TIMEOUT;
16601656
netdev->irq = nesdev->pcidev->irq;
1661-
netdev->mtu = ETH_DATA_LEN;
1657+
netdev->max_mtu = NES_MAX_MTU;
16621658
netdev->hard_header_len = ETH_HLEN;
16631659
netdev->addr_len = ETH_ALEN;
16641660
netdev->type = ARPHRD_ETHER;

drivers/infiniband/ulp/ipoib/ipoib_main.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2017,6 +2017,7 @@ static struct net_device *ipoib_add_port(const char *format,
20172017
/* MTU will be reset when mcast join happens */
20182018
priv->dev->mtu = IPOIB_UD_MTU(priv->max_ib_mtu);
20192019
priv->mcast_mtu = priv->admin_mtu = priv->dev->mtu;
2020+
priv->dev->max_mtu = IPOIB_CM_MTU;
20202021

20212022
priv->dev->neigh_priv_len = sizeof(struct ipoib_neigh);
20222023

drivers/message/fusion/mptlan.c

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -548,16 +548,6 @@ mpt_lan_close(struct net_device *dev)
548548
return 0;
549549
}
550550

551-
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
552-
static int
553-
mpt_lan_change_mtu(struct net_device *dev, int new_mtu)
554-
{
555-
if ((new_mtu < MPT_LAN_MIN_MTU) || (new_mtu > MPT_LAN_MAX_MTU))
556-
return -EINVAL;
557-
dev->mtu = new_mtu;
558-
return 0;
559-
}
560-
561551
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
562552
/* Tx timeout handler. */
563553
static void
@@ -1304,7 +1294,6 @@ static const struct net_device_ops mpt_netdev_ops = {
13041294
.ndo_open = mpt_lan_open,
13051295
.ndo_stop = mpt_lan_close,
13061296
.ndo_start_xmit = mpt_lan_sdu_send,
1307-
.ndo_change_mtu = mpt_lan_change_mtu,
13081297
.ndo_tx_timeout = mpt_lan_tx_timeout,
13091298
};
13101299

@@ -1375,6 +1364,10 @@ mpt_register_lan_device (MPT_ADAPTER *mpt_dev, int pnum)
13751364
dev->netdev_ops = &mpt_netdev_ops;
13761365
dev->watchdog_timeo = MPT_LAN_TX_TIMEOUT;
13771366

1367+
/* MTU range: 96 - 65280 */
1368+
dev->min_mtu = MPT_LAN_MIN_MTU;
1369+
dev->max_mtu = MPT_LAN_MAX_MTU;
1370+
13781371
dlprintk((KERN_INFO MYNAM ": Finished registering dev "
13791372
"and setting initial values\n"));
13801373

drivers/misc/sgi-xp/xpnet.c

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ static DEFINE_SPINLOCK(xpnet_broadcast_lock);
118118
* now, the default is 64KB.
119119
*/
120120
#define XPNET_MAX_MTU (0x800000UL - L1_CACHE_BYTES)
121+
/* 68 comes from min TCP+IP+MAC header */
122+
#define XPNET_MIN_MTU 68
121123
/* 32KB has been determined to be the ideal */
122124
#define XPNET_DEF_MTU (0x8000UL)
123125

@@ -330,22 +332,6 @@ xpnet_dev_stop(struct net_device *dev)
330332
return 0;
331333
}
332334

333-
static int
334-
xpnet_dev_change_mtu(struct net_device *dev, int new_mtu)
335-
{
336-
/* 68 comes from min TCP+IP+MAC header */
337-
if ((new_mtu < 68) || (new_mtu > XPNET_MAX_MTU)) {
338-
dev_err(xpnet, "ifconfig %s mtu %d failed; value must be "
339-
"between 68 and %ld\n", dev->name, new_mtu,
340-
XPNET_MAX_MTU);
341-
return -EINVAL;
342-
}
343-
344-
dev->mtu = new_mtu;
345-
dev_dbg(xpnet, "ifconfig %s mtu set to %d\n", dev->name, new_mtu);
346-
return 0;
347-
}
348-
349335
/*
350336
* Notification that the other end has received the message and
351337
* DMA'd the skb information. At this point, they are done with
@@ -519,7 +505,6 @@ static const struct net_device_ops xpnet_netdev_ops = {
519505
.ndo_open = xpnet_dev_open,
520506
.ndo_stop = xpnet_dev_stop,
521507
.ndo_start_xmit = xpnet_dev_hard_start_xmit,
522-
.ndo_change_mtu = xpnet_dev_change_mtu,
523508
.ndo_tx_timeout = xpnet_dev_tx_timeout,
524509
.ndo_set_mac_address = eth_mac_addr,
525510
.ndo_validate_addr = eth_validate_addr,
@@ -555,6 +540,8 @@ xpnet_init(void)
555540

556541
xpnet_device->netdev_ops = &xpnet_netdev_ops;
557542
xpnet_device->mtu = XPNET_DEF_MTU;
543+
xpnet_device->min_mtu = XPNET_MIN_MTU;
544+
xpnet_device->max_mtu = XPNET_MAX_MTU;
558545

559546
/*
560547
* Multicast assumes the LSB of the first octet is set for multicast

drivers/net/fddi/skfp/skfddi.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,6 @@ static const struct net_device_ops skfp_netdev_ops = {
166166
.ndo_stop = skfp_close,
167167
.ndo_start_xmit = skfp_send_pkt,
168168
.ndo_get_stats = skfp_ctl_get_stats,
169-
.ndo_change_mtu = fddi_change_mtu,
170169
.ndo_set_rx_mode = skfp_ctl_set_multicast_list,
171170
.ndo_set_mac_address = skfp_ctl_set_mac_address,
172171
.ndo_do_ioctl = skfp_ioctl,

drivers/net/fjes/fjes_main.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1316,6 +1316,8 @@ static void fjes_netdev_setup(struct net_device *netdev)
13161316
netdev->netdev_ops = &fjes_netdev_ops;
13171317
fjes_set_ethtool_ops(netdev);
13181318
netdev->mtu = fjes_support_mtu[3];
1319+
netdev->min_mtu = fjes_support_mtu[0];
1320+
netdev->max_mtu = fjes_support_mtu[3];
13191321
netdev->flags |= IFF_BROADCAST;
13201322
netdev->features |= NETIF_F_HW_CSUM | NETIF_F_HW_VLAN_CTAG_FILTER;
13211323
}

drivers/net/hippi/rrunner.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ static const struct net_device_ops rr_netdev_ops = {
6868
.ndo_stop = rr_close,
6969
.ndo_do_ioctl = rr_ioctl,
7070
.ndo_start_xmit = rr_start_xmit,
71-
.ndo_change_mtu = hippi_change_mtu,
7271
.ndo_set_mac_address = hippi_mac_addr,
7372
};
7473

drivers/net/rionet.c

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -466,17 +466,6 @@ static void rionet_set_msglevel(struct net_device *ndev, u32 value)
466466
rnet->msg_enable = value;
467467
}
468468

469-
static int rionet_change_mtu(struct net_device *ndev, int new_mtu)
470-
{
471-
if ((new_mtu < 68) || (new_mtu > RIONET_MAX_MTU)) {
472-
printk(KERN_ERR "%s: Invalid MTU size %d\n",
473-
ndev->name, new_mtu);
474-
return -EINVAL;
475-
}
476-
ndev->mtu = new_mtu;
477-
return 0;
478-
}
479-
480469
static const struct ethtool_ops rionet_ethtool_ops = {
481470
.get_drvinfo = rionet_get_drvinfo,
482471
.get_msglevel = rionet_get_msglevel,
@@ -488,7 +477,6 @@ static const struct net_device_ops rionet_netdev_ops = {
488477
.ndo_open = rionet_open,
489478
.ndo_stop = rionet_close,
490479
.ndo_start_xmit = rionet_start_xmit,
491-
.ndo_change_mtu = rionet_change_mtu,
492480
.ndo_validate_addr = eth_validate_addr,
493481
.ndo_set_mac_address = eth_mac_addr,
494482
};
@@ -525,6 +513,9 @@ static int rionet_setup_netdev(struct rio_mport *mport, struct net_device *ndev)
525513

526514
ndev->netdev_ops = &rionet_netdev_ops;
527515
ndev->mtu = RIONET_MAX_MTU;
516+
/* MTU range: 68 - 4082 */
517+
ndev->min_mtu = ETH_MIN_MTU;
518+
ndev->max_mtu = RIONET_MAX_MTU;
528519
ndev->features = NETIF_F_LLTX;
529520
SET_NETDEV_DEV(ndev, &mport->dev);
530521
ndev->ethtool_ops = &rionet_ethtool_ops;

drivers/net/slip/slip.c

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -561,12 +561,7 @@ static int sl_change_mtu(struct net_device *dev, int new_mtu)
561561
{
562562
struct slip *sl = netdev_priv(dev);
563563

564-
if (new_mtu < 68 || new_mtu > 65534)
565-
return -EINVAL;
566-
567-
if (new_mtu != dev->mtu)
568-
return sl_realloc_bufs(sl, new_mtu);
569-
return 0;
564+
return sl_realloc_bufs(sl, new_mtu);
570565
}
571566

572567
/* Netdevice get statistics request */
@@ -663,6 +658,10 @@ static void sl_setup(struct net_device *dev)
663658
dev->addr_len = 0;
664659
dev->tx_queue_len = 10;
665660

661+
/* MTU range: 68 - 65534 */
662+
dev->min_mtu = 68;
663+
dev->max_mtu = 65534;
664+
666665
/* New-style flags. */
667666
dev->flags = IFF_NOARP|IFF_POINTOPOINT|IFF_MULTICAST;
668667
}

drivers/usb/gadget/function/f_phonet.c

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -261,19 +261,10 @@ static int pn_net_xmit(struct sk_buff *skb, struct net_device *dev)
261261
return NETDEV_TX_OK;
262262
}
263263

264-
static int pn_net_mtu(struct net_device *dev, int new_mtu)
265-
{
266-
if ((new_mtu < PHONET_MIN_MTU) || (new_mtu > PHONET_MAX_MTU))
267-
return -EINVAL;
268-
dev->mtu = new_mtu;
269-
return 0;
270-
}
271-
272264
static const struct net_device_ops pn_netdev_ops = {
273265
.ndo_open = pn_net_open,
274266
.ndo_stop = pn_net_close,
275267
.ndo_start_xmit = pn_net_xmit,
276-
.ndo_change_mtu = pn_net_mtu,
277268
};
278269

279270
static void pn_net_setup(struct net_device *dev)
@@ -282,6 +273,8 @@ static void pn_net_setup(struct net_device *dev)
282273
dev->type = ARPHRD_PHONET;
283274
dev->flags = IFF_POINTOPOINT | IFF_NOARP;
284275
dev->mtu = PHONET_DEV_MTU;
276+
dev->min_mtu = PHONET_MIN_MTU;
277+
dev->max_mtu = PHONET_MAX_MTU;
285278
dev->hard_header_len = 1;
286279
dev->dev_addr[0] = PN_MEDIA_USB;
287280
dev->addr_len = 1;

0 commit comments

Comments
 (0)