mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	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: netdev@vger.kernel.org CC: linux-rdma@vger.kernel.org CC: Stefan Richter <stefanr@s5r6.in-berlin.de> CC: Faisal Latif <faisal.latif@intel.com> CC: linux-rdma@vger.kernel.org CC: Cliff Whickman <cpw@sgi.com> CC: Robin Holt <robinmholt@gmail.com> CC: Jes Sorensen <jes@trained-monkey.org> CC: Marek Lindner <mareklindner@neomailbox.ch> CC: Simon Wunderlich <sw@simonwunderlich.de> CC: Antonio Quartulli <a@unstable.cc> CC: Sathya Prakash <sathya.prakash@broadcom.com> CC: Chaitra P B <chaitra.basappa@broadcom.com> CC: Suganath Prabu Subramani <suganath-prabu.subramani@broadcom.com> CC: MPT-FusionLinux.pdl@broadcom.com CC: Sebastian Reichel <sre@kernel.org> CC: Felipe Balbi <balbi@kernel.org> CC: Arvid Brodin <arvid.brodin@alten.se> CC: Remi Denis-Courmont <courmisch@gmail.com> Signed-off-by: Jarod Wilson <jarod@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									d0c2c9973e
								
							
						
					
					
						commit
						b3e3893e12
					
				
					 23 changed files with 46 additions and 154 deletions
				
			
		| 
						 | 
				
			
			@ -256,13 +256,6 @@ static void uml_net_tx_timeout(struct net_device *dev)
 | 
			
		|||
	netif_wake_queue(dev);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int uml_net_change_mtu(struct net_device *dev, int new_mtu)
 | 
			
		||||
{
 | 
			
		||||
	dev->mtu = new_mtu;
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_NET_POLL_CONTROLLER
 | 
			
		||||
static void uml_net_poll_controller(struct net_device *dev)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -374,7 +367,6 @@ static const struct net_device_ops uml_netdev_ops = {
 | 
			
		|||
	.ndo_set_rx_mode	= uml_net_set_multicast_list,
 | 
			
		||||
	.ndo_tx_timeout 	= uml_net_tx_timeout,
 | 
			
		||||
	.ndo_set_mac_address	= eth_mac_addr,
 | 
			
		||||
	.ndo_change_mtu 	= uml_net_change_mtu,
 | 
			
		||||
	.ndo_validate_addr	= eth_validate_addr,
 | 
			
		||||
#ifdef CONFIG_NET_POLL_CONTROLLER
 | 
			
		||||
	.ndo_poll_controller = uml_net_poll_controller,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1349,15 +1349,6 @@ static netdev_tx_t fwnet_tx(struct sk_buff *skb, struct net_device *net)
 | 
			
		|||
	return NETDEV_TX_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int fwnet_change_mtu(struct net_device *net, int new_mtu)
 | 
			
		||||
{
 | 
			
		||||
	if (new_mtu < 68)
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
 | 
			
		||||
	net->mtu = new_mtu;
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct ethtool_ops fwnet_ethtool_ops = {
 | 
			
		||||
	.get_link	= ethtool_op_get_link,
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -1366,7 +1357,6 @@ static const struct net_device_ops fwnet_netdev_ops = {
 | 
			
		|||
	.ndo_open       = fwnet_open,
 | 
			
		||||
	.ndo_stop	= fwnet_stop,
 | 
			
		||||
	.ndo_start_xmit = fwnet_tx,
 | 
			
		||||
	.ndo_change_mtu = fwnet_change_mtu,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void fwnet_init_dev(struct net_device *net)
 | 
			
		||||
| 
						 | 
				
			
			@ -1435,7 +1425,6 @@ static int fwnet_probe(struct fw_unit *unit,
 | 
			
		|||
	struct net_device *net;
 | 
			
		||||
	bool allocated_netdev = false;
 | 
			
		||||
	struct fwnet_device *dev;
 | 
			
		||||
	unsigned max_mtu;
 | 
			
		||||
	int ret;
 | 
			
		||||
	union fwnet_hwaddr *ha;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1478,9 +1467,10 @@ static int fwnet_probe(struct fw_unit *unit,
 | 
			
		|||
	 * Use the RFC 2734 default 1500 octets or the maximum payload
 | 
			
		||||
	 * as initial MTU
 | 
			
		||||
	 */
 | 
			
		||||
	max_mtu = (1 << (card->max_receive + 1))
 | 
			
		||||
		  - sizeof(struct rfc2734_header) - IEEE1394_GASP_HDR_SIZE;
 | 
			
		||||
	net->mtu = min(1500U, max_mtu);
 | 
			
		||||
	net->max_mtu = (1 << (card->max_receive + 1))
 | 
			
		||||
		       - sizeof(struct rfc2734_header) - IEEE1394_GASP_HDR_SIZE;
 | 
			
		||||
	net->mtu = min(1500U, net->max_mtu);
 | 
			
		||||
	net->min_mtu = ETH_MIN_MTU;
 | 
			
		||||
 | 
			
		||||
	/* Set our hardware address while we're at it */
 | 
			
		||||
	ha = (union fwnet_hwaddr *)net->dev_addr;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -960,15 +960,6 @@ static int ssip_pn_stop(struct net_device *dev)
 | 
			
		|||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int ssip_pn_set_mtu(struct net_device *dev, int new_mtu)
 | 
			
		||||
{
 | 
			
		||||
	if (new_mtu > SSIP_MAX_MTU || new_mtu < PHONET_MIN_MTU)
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
	dev->mtu = new_mtu;
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void ssip_xmit_work(struct work_struct *work)
 | 
			
		||||
{
 | 
			
		||||
	struct ssi_protocol *ssi =
 | 
			
		||||
| 
						 | 
				
			
			@ -1060,7 +1051,6 @@ static const struct net_device_ops ssip_pn_ops = {
 | 
			
		|||
	.ndo_open	= ssip_pn_open,
 | 
			
		||||
	.ndo_stop	= ssip_pn_stop,
 | 
			
		||||
	.ndo_start_xmit	= ssip_pn_xmit,
 | 
			
		||||
	.ndo_change_mtu	= ssip_pn_set_mtu,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void ssip_pn_setup(struct net_device *dev)
 | 
			
		||||
| 
						 | 
				
			
			@ -1136,6 +1126,10 @@ static int ssi_protocol_probe(struct device *dev)
 | 
			
		|||
		goto out1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* MTU range: 6 - 65535 */
 | 
			
		||||
	ssi->netdev->min_mtu = PHONET_MIN_MTU;
 | 
			
		||||
	ssi->netdev->max_mtu = SSIP_MAX_MTU;
 | 
			
		||||
 | 
			
		||||
	SET_NETDEV_DEV(ssi->netdev, dev);
 | 
			
		||||
	netif_carrier_off(ssi->netdev);
 | 
			
		||||
	err = register_netdev(ssi->netdev);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -65,7 +65,6 @@ MODULE_DESCRIPTION("NetEffect RNIC Low-level iWARP Driver");
 | 
			
		|||
MODULE_LICENSE("Dual BSD/GPL");
 | 
			
		||||
MODULE_VERSION(DRV_VERSION);
 | 
			
		||||
 | 
			
		||||
int max_mtu = 9000;
 | 
			
		||||
int interrupt_mod_interval = 0;
 | 
			
		||||
 | 
			
		||||
/* Interoperability */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -83,6 +83,8 @@
 | 
			
		|||
#define NES_FIRST_QPN           64
 | 
			
		||||
#define NES_SW_CONTEXT_ALIGN    1024
 | 
			
		||||
 | 
			
		||||
#define NES_MAX_MTU		9000
 | 
			
		||||
 | 
			
		||||
#define NES_NIC_MAX_NICS        16
 | 
			
		||||
#define NES_MAX_ARP_TABLE_SIZE  4096
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -169,8 +171,6 @@ do { \
 | 
			
		|||
#include "nes_cm.h"
 | 
			
		||||
#include "nes_mgt.h"
 | 
			
		||||
 | 
			
		||||
extern int max_mtu;
 | 
			
		||||
#define max_frame_len (max_mtu+ETH_HLEN)
 | 
			
		||||
extern int interrupt_mod_interval;
 | 
			
		||||
extern int nes_if_count;
 | 
			
		||||
extern int mpa_version;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -981,20 +981,16 @@ static int nes_netdev_change_mtu(struct net_device *netdev, int new_mtu)
 | 
			
		|||
{
 | 
			
		||||
	struct nes_vnic	*nesvnic = netdev_priv(netdev);
 | 
			
		||||
	struct nes_device *nesdev = nesvnic->nesdev;
 | 
			
		||||
	int ret = 0;
 | 
			
		||||
	u8 jumbomode = 0;
 | 
			
		||||
	u32 nic_active;
 | 
			
		||||
	u32 nic_active_bit;
 | 
			
		||||
	u32 uc_all_active;
 | 
			
		||||
	u32 mc_all_active;
 | 
			
		||||
 | 
			
		||||
	if ((new_mtu < ETH_ZLEN) || (new_mtu > max_mtu))
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
 | 
			
		||||
	netdev->mtu = new_mtu;
 | 
			
		||||
	nesvnic->max_frame_size	= new_mtu + VLAN_ETH_HLEN;
 | 
			
		||||
 | 
			
		||||
	if (netdev->mtu	> 1500)	{
 | 
			
		||||
	if (netdev->mtu	> ETH_DATA_LEN)	{
 | 
			
		||||
		jumbomode=1;
 | 
			
		||||
	}
 | 
			
		||||
	nes_nic_init_timer_defaults(nesdev, jumbomode);
 | 
			
		||||
| 
						 | 
				
			
			@ -1020,7 +1016,7 @@ static int nes_netdev_change_mtu(struct net_device *netdev, int new_mtu)
 | 
			
		|||
		nes_write_indexed(nesdev, NES_IDX_NIC_UNICAST_ALL, nic_active);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1658,7 +1654,7 @@ struct net_device *nes_netdev_init(struct nes_device *nesdev,
 | 
			
		|||
 | 
			
		||||
	netdev->watchdog_timeo = NES_TX_TIMEOUT;
 | 
			
		||||
	netdev->irq = nesdev->pcidev->irq;
 | 
			
		||||
	netdev->mtu = ETH_DATA_LEN;
 | 
			
		||||
	netdev->max_mtu = NES_MAX_MTU;
 | 
			
		||||
	netdev->hard_header_len = ETH_HLEN;
 | 
			
		||||
	netdev->addr_len = ETH_ALEN;
 | 
			
		||||
	netdev->type = ARPHRD_ETHER;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2017,6 +2017,7 @@ static struct net_device *ipoib_add_port(const char *format,
 | 
			
		|||
	/* MTU will be reset when mcast join happens */
 | 
			
		||||
	priv->dev->mtu  = IPOIB_UD_MTU(priv->max_ib_mtu);
 | 
			
		||||
	priv->mcast_mtu  = priv->admin_mtu = priv->dev->mtu;
 | 
			
		||||
	priv->dev->max_mtu = IPOIB_CM_MTU;
 | 
			
		||||
 | 
			
		||||
	priv->dev->neigh_priv_len = sizeof(struct ipoib_neigh);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -548,16 +548,6 @@ mpt_lan_close(struct net_device *dev)
 | 
			
		|||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
 | 
			
		||||
static int
 | 
			
		||||
mpt_lan_change_mtu(struct net_device *dev, int new_mtu)
 | 
			
		||||
{
 | 
			
		||||
	if ((new_mtu < MPT_LAN_MIN_MTU) || (new_mtu > MPT_LAN_MAX_MTU))
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
	dev->mtu = new_mtu;
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
 | 
			
		||||
/* Tx timeout handler. */
 | 
			
		||||
static void
 | 
			
		||||
| 
						 | 
				
			
			@ -1304,7 +1294,6 @@ static const struct net_device_ops mpt_netdev_ops = {
 | 
			
		|||
	.ndo_open       = mpt_lan_open,
 | 
			
		||||
	.ndo_stop       = mpt_lan_close,
 | 
			
		||||
	.ndo_start_xmit = mpt_lan_sdu_send,
 | 
			
		||||
	.ndo_change_mtu = mpt_lan_change_mtu,
 | 
			
		||||
	.ndo_tx_timeout = mpt_lan_tx_timeout,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1375,6 +1364,10 @@ mpt_register_lan_device (MPT_ADAPTER *mpt_dev, int pnum)
 | 
			
		|||
	dev->netdev_ops = &mpt_netdev_ops;
 | 
			
		||||
	dev->watchdog_timeo = MPT_LAN_TX_TIMEOUT;
 | 
			
		||||
 | 
			
		||||
	/* MTU range: 96 - 65280 */
 | 
			
		||||
	dev->min_mtu = MPT_LAN_MIN_MTU;
 | 
			
		||||
	dev->max_mtu = MPT_LAN_MAX_MTU;
 | 
			
		||||
 | 
			
		||||
	dlprintk((KERN_INFO MYNAM ": Finished registering dev "
 | 
			
		||||
		"and setting initial values\n"));
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -118,6 +118,8 @@ static DEFINE_SPINLOCK(xpnet_broadcast_lock);
 | 
			
		|||
 * now, the default is 64KB.
 | 
			
		||||
 */
 | 
			
		||||
#define XPNET_MAX_MTU (0x800000UL - L1_CACHE_BYTES)
 | 
			
		||||
/* 68 comes from min TCP+IP+MAC header */
 | 
			
		||||
#define XPNET_MIN_MTU 68
 | 
			
		||||
/* 32KB has been determined to be the ideal */
 | 
			
		||||
#define XPNET_DEF_MTU (0x8000UL)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -330,22 +332,6 @@ xpnet_dev_stop(struct net_device *dev)
 | 
			
		|||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
xpnet_dev_change_mtu(struct net_device *dev, int new_mtu)
 | 
			
		||||
{
 | 
			
		||||
	/* 68 comes from min TCP+IP+MAC header */
 | 
			
		||||
	if ((new_mtu < 68) || (new_mtu > XPNET_MAX_MTU)) {
 | 
			
		||||
		dev_err(xpnet, "ifconfig %s mtu %d failed; value must be "
 | 
			
		||||
			"between 68 and %ld\n", dev->name, new_mtu,
 | 
			
		||||
			XPNET_MAX_MTU);
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	dev->mtu = new_mtu;
 | 
			
		||||
	dev_dbg(xpnet, "ifconfig %s mtu set to %d\n", dev->name, new_mtu);
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Notification that the other end has received the message and
 | 
			
		||||
 * 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 = {
 | 
			
		|||
	.ndo_open		= xpnet_dev_open,
 | 
			
		||||
	.ndo_stop		= xpnet_dev_stop,
 | 
			
		||||
	.ndo_start_xmit		= xpnet_dev_hard_start_xmit,
 | 
			
		||||
	.ndo_change_mtu		= xpnet_dev_change_mtu,
 | 
			
		||||
	.ndo_tx_timeout		= xpnet_dev_tx_timeout,
 | 
			
		||||
	.ndo_set_mac_address 	= eth_mac_addr,
 | 
			
		||||
	.ndo_validate_addr	= eth_validate_addr,
 | 
			
		||||
| 
						 | 
				
			
			@ -555,6 +540,8 @@ xpnet_init(void)
 | 
			
		|||
 | 
			
		||||
	xpnet_device->netdev_ops = &xpnet_netdev_ops;
 | 
			
		||||
	xpnet_device->mtu = XPNET_DEF_MTU;
 | 
			
		||||
	xpnet_device->min_mtu = XPNET_MIN_MTU;
 | 
			
		||||
	xpnet_device->max_mtu = XPNET_MAX_MTU;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Multicast assumes the LSB of the first octet is set for multicast
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -166,7 +166,6 @@ static const struct net_device_ops skfp_netdev_ops = {
 | 
			
		|||
	.ndo_stop		= skfp_close,
 | 
			
		||||
	.ndo_start_xmit		= skfp_send_pkt,
 | 
			
		||||
	.ndo_get_stats		= skfp_ctl_get_stats,
 | 
			
		||||
	.ndo_change_mtu		= fddi_change_mtu,
 | 
			
		||||
	.ndo_set_rx_mode	= skfp_ctl_set_multicast_list,
 | 
			
		||||
	.ndo_set_mac_address	= skfp_ctl_set_mac_address,
 | 
			
		||||
	.ndo_do_ioctl		= skfp_ioctl,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1316,6 +1316,8 @@ static void fjes_netdev_setup(struct net_device *netdev)
 | 
			
		|||
	netdev->netdev_ops = &fjes_netdev_ops;
 | 
			
		||||
	fjes_set_ethtool_ops(netdev);
 | 
			
		||||
	netdev->mtu = fjes_support_mtu[3];
 | 
			
		||||
	netdev->min_mtu = fjes_support_mtu[0];
 | 
			
		||||
	netdev->max_mtu = fjes_support_mtu[3];
 | 
			
		||||
	netdev->flags |= IFF_BROADCAST;
 | 
			
		||||
	netdev->features |= NETIF_F_HW_CSUM | NETIF_F_HW_VLAN_CTAG_FILTER;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -68,7 +68,6 @@ static const struct net_device_ops rr_netdev_ops = {
 | 
			
		|||
	.ndo_stop		= rr_close,
 | 
			
		||||
	.ndo_do_ioctl		= rr_ioctl,
 | 
			
		||||
	.ndo_start_xmit		= rr_start_xmit,
 | 
			
		||||
	.ndo_change_mtu		= hippi_change_mtu,
 | 
			
		||||
	.ndo_set_mac_address	= hippi_mac_addr,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -466,17 +466,6 @@ static void rionet_set_msglevel(struct net_device *ndev, u32 value)
 | 
			
		|||
	rnet->msg_enable = value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int rionet_change_mtu(struct net_device *ndev, int new_mtu)
 | 
			
		||||
{
 | 
			
		||||
	if ((new_mtu < 68) || (new_mtu > RIONET_MAX_MTU)) {
 | 
			
		||||
		printk(KERN_ERR "%s: Invalid MTU size %d\n",
 | 
			
		||||
		       ndev->name, new_mtu);
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
	}
 | 
			
		||||
	ndev->mtu = new_mtu;
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct ethtool_ops rionet_ethtool_ops = {
 | 
			
		||||
	.get_drvinfo = rionet_get_drvinfo,
 | 
			
		||||
	.get_msglevel = rionet_get_msglevel,
 | 
			
		||||
| 
						 | 
				
			
			@ -488,7 +477,6 @@ static const struct net_device_ops rionet_netdev_ops = {
 | 
			
		|||
	.ndo_open		= rionet_open,
 | 
			
		||||
	.ndo_stop		= rionet_close,
 | 
			
		||||
	.ndo_start_xmit		= rionet_start_xmit,
 | 
			
		||||
	.ndo_change_mtu		= rionet_change_mtu,
 | 
			
		||||
	.ndo_validate_addr	= eth_validate_addr,
 | 
			
		||||
	.ndo_set_mac_address	= eth_mac_addr,
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -525,6 +513,9 @@ static int rionet_setup_netdev(struct rio_mport *mport, struct net_device *ndev)
 | 
			
		|||
 | 
			
		||||
	ndev->netdev_ops = &rionet_netdev_ops;
 | 
			
		||||
	ndev->mtu = RIONET_MAX_MTU;
 | 
			
		||||
	/* MTU range: 68 - 4082 */
 | 
			
		||||
	ndev->min_mtu = ETH_MIN_MTU;
 | 
			
		||||
	ndev->max_mtu = RIONET_MAX_MTU;
 | 
			
		||||
	ndev->features = NETIF_F_LLTX;
 | 
			
		||||
	SET_NETDEV_DEV(ndev, &mport->dev);
 | 
			
		||||
	ndev->ethtool_ops = &rionet_ethtool_ops;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -561,12 +561,7 @@ static int sl_change_mtu(struct net_device *dev, int new_mtu)
 | 
			
		|||
{
 | 
			
		||||
	struct slip *sl = netdev_priv(dev);
 | 
			
		||||
 | 
			
		||||
	if (new_mtu < 68 || new_mtu > 65534)
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
 | 
			
		||||
	if (new_mtu != dev->mtu)
 | 
			
		||||
		return sl_realloc_bufs(sl, new_mtu);
 | 
			
		||||
	return 0;
 | 
			
		||||
	return sl_realloc_bufs(sl, new_mtu);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Netdevice get statistics request */
 | 
			
		||||
| 
						 | 
				
			
			@ -663,6 +658,10 @@ static void sl_setup(struct net_device *dev)
 | 
			
		|||
	dev->addr_len		= 0;
 | 
			
		||||
	dev->tx_queue_len	= 10;
 | 
			
		||||
 | 
			
		||||
	/* MTU range: 68 - 65534 */
 | 
			
		||||
	dev->min_mtu = 68;
 | 
			
		||||
	dev->max_mtu = 65534;
 | 
			
		||||
 | 
			
		||||
	/* New-style flags. */
 | 
			
		||||
	dev->flags		= IFF_NOARP|IFF_POINTOPOINT|IFF_MULTICAST;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -261,19 +261,10 @@ static int pn_net_xmit(struct sk_buff *skb, struct net_device *dev)
 | 
			
		|||
	return NETDEV_TX_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int pn_net_mtu(struct net_device *dev, int new_mtu)
 | 
			
		||||
{
 | 
			
		||||
	if ((new_mtu < PHONET_MIN_MTU) || (new_mtu > PHONET_MAX_MTU))
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
	dev->mtu = new_mtu;
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct net_device_ops pn_netdev_ops = {
 | 
			
		||||
	.ndo_open	= pn_net_open,
 | 
			
		||||
	.ndo_stop	= pn_net_close,
 | 
			
		||||
	.ndo_start_xmit	= pn_net_xmit,
 | 
			
		||||
	.ndo_change_mtu	= pn_net_mtu,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void pn_net_setup(struct net_device *dev)
 | 
			
		||||
| 
						 | 
				
			
			@ -282,6 +273,8 @@ static void pn_net_setup(struct net_device *dev)
 | 
			
		|||
	dev->type		= ARPHRD_PHONET;
 | 
			
		||||
	dev->flags		= IFF_POINTOPOINT | IFF_NOARP;
 | 
			
		||||
	dev->mtu		= PHONET_DEV_MTU;
 | 
			
		||||
	dev->min_mtu		= PHONET_MIN_MTU;
 | 
			
		||||
	dev->max_mtu		= PHONET_MAX_MTU;
 | 
			
		||||
	dev->hard_header_len	= 1;
 | 
			
		||||
	dev->dev_addr[0]	= PN_MEDIA_USB;
 | 
			
		||||
	dev->addr_len		= 1;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -142,15 +142,6 @@ static inline int qlen(struct usb_gadget *gadget, unsigned qmult)
 | 
			
		|||
 | 
			
		||||
/* NETWORK DRIVER HOOKUP (to the layer above this driver) */
 | 
			
		||||
 | 
			
		||||
static int ueth_change_mtu(struct net_device *net, int new_mtu)
 | 
			
		||||
{
 | 
			
		||||
	if (new_mtu <= ETH_HLEN || new_mtu > GETHER_MAX_ETH_FRAME_LEN)
 | 
			
		||||
		return -ERANGE;
 | 
			
		||||
	net->mtu = new_mtu;
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void eth_get_drvinfo(struct net_device *net, struct ethtool_drvinfo *p)
 | 
			
		||||
{
 | 
			
		||||
	struct eth_dev *dev = netdev_priv(net);
 | 
			
		||||
| 
						 | 
				
			
			@ -736,7 +727,6 @@ static const struct net_device_ops eth_netdev_ops = {
 | 
			
		|||
	.ndo_open		= eth_open,
 | 
			
		||||
	.ndo_stop		= eth_stop,
 | 
			
		||||
	.ndo_start_xmit		= eth_start_xmit,
 | 
			
		||||
	.ndo_change_mtu		= ueth_change_mtu,
 | 
			
		||||
	.ndo_set_mac_address 	= eth_mac_addr,
 | 
			
		||||
	.ndo_validate_addr	= eth_validate_addr,
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -799,6 +789,10 @@ struct eth_dev *gether_setup_name(struct usb_gadget *g,
 | 
			
		|||
 | 
			
		||||
	net->ethtool_ops = &ops;
 | 
			
		||||
 | 
			
		||||
	/* MTU range: 14 - 15412 */
 | 
			
		||||
	net->min_mtu = ETH_HLEN;
 | 
			
		||||
	net->max_mtu = GETHER_MAX_ETH_FRAME_LEN;
 | 
			
		||||
 | 
			
		||||
	dev->gadget = g;
 | 
			
		||||
	SET_NETDEV_DEV(net, &g->dev);
 | 
			
		||||
	SET_NETDEV_DEVTYPE(net, &gadget_type);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,7 +26,6 @@
 | 
			
		|||
 | 
			
		||||
#ifdef __KERNEL__
 | 
			
		||||
__be16 fddi_type_trans(struct sk_buff *skb, struct net_device *dev);
 | 
			
		||||
int fddi_change_mtu(struct net_device *dev, int new_mtu);
 | 
			
		||||
struct net_device *alloc_fddidev(int sizeof_priv);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,7 +32,6 @@ struct hippi_cb {
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
__be16 hippi_type_trans(struct sk_buff *skb, struct net_device *dev);
 | 
			
		||||
int hippi_change_mtu(struct net_device *dev, int new_mtu);
 | 
			
		||||
int hippi_mac_addr(struct net_device *dev, void *p);
 | 
			
		||||
int hippi_neigh_setup_dev(struct net_device *dev, struct neigh_parms *p);
 | 
			
		||||
struct net_device *alloc_hippi_dev(int sizeof_priv);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -141,15 +141,6 @@ __be16 fddi_type_trans(struct sk_buff *skb, struct net_device *dev)
 | 
			
		|||
 | 
			
		||||
EXPORT_SYMBOL(fddi_type_trans);
 | 
			
		||||
 | 
			
		||||
int fddi_change_mtu(struct net_device *dev, int new_mtu)
 | 
			
		||||
{
 | 
			
		||||
	if ((new_mtu < FDDI_K_SNAP_HLEN) || (new_mtu > FDDI_K_SNAP_DLEN))
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
	dev->mtu = new_mtu;
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
EXPORT_SYMBOL(fddi_change_mtu);
 | 
			
		||||
 | 
			
		||||
static const struct header_ops fddi_header_ops = {
 | 
			
		||||
	.create		= fddi_header,
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -161,6 +152,8 @@ static void fddi_setup(struct net_device *dev)
 | 
			
		|||
	dev->type		= ARPHRD_FDDI;
 | 
			
		||||
	dev->hard_header_len	= FDDI_K_SNAP_HLEN+3;	/* Assume 802.2 SNAP hdr len + 3 pad bytes */
 | 
			
		||||
	dev->mtu		= FDDI_K_SNAP_DLEN;	/* Assume max payload of 802.2 SNAP frame */
 | 
			
		||||
	dev->min_mtu		= FDDI_K_SNAP_HLEN;
 | 
			
		||||
	dev->max_mtu		= FDDI_K_SNAP_DLEN;
 | 
			
		||||
	dev->addr_len		= FDDI_K_ALEN;
 | 
			
		||||
	dev->tx_queue_len	= 100;			/* Long queues on FDDI */
 | 
			
		||||
	dev->flags		= IFF_BROADCAST | IFF_MULTICAST;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -116,18 +116,6 @@ __be16 hippi_type_trans(struct sk_buff *skb, struct net_device *dev)
 | 
			
		|||
 | 
			
		||||
EXPORT_SYMBOL(hippi_type_trans);
 | 
			
		||||
 | 
			
		||||
int hippi_change_mtu(struct net_device *dev, int new_mtu)
 | 
			
		||||
{
 | 
			
		||||
	/*
 | 
			
		||||
	 * HIPPI's got these nice large MTUs.
 | 
			
		||||
	 */
 | 
			
		||||
	if ((new_mtu < 68) || (new_mtu > 65280))
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
	dev->mtu = new_mtu;
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
EXPORT_SYMBOL(hippi_change_mtu);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * For HIPPI we will actually use the lower 4 bytes of the hardware
 | 
			
		||||
 * address as the I-FIELD rather than the actual hardware address.
 | 
			
		||||
| 
						 | 
				
			
			@ -174,6 +162,8 @@ static void hippi_setup(struct net_device *dev)
 | 
			
		|||
	dev->type		= ARPHRD_HIPPI;
 | 
			
		||||
	dev->hard_header_len 	= HIPPI_HLEN;
 | 
			
		||||
	dev->mtu		= 65280;
 | 
			
		||||
	dev->min_mtu		= 68;
 | 
			
		||||
	dev->max_mtu		= 65280;
 | 
			
		||||
	dev->addr_len		= HIPPI_ALEN;
 | 
			
		||||
	dev->tx_queue_len	= 25 /* 5 */;
 | 
			
		||||
	memset(dev->broadcast, 0xFF, HIPPI_ALEN);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -158,17 +158,6 @@ static int batadv_interface_set_mac_addr(struct net_device *dev, void *p)
 | 
			
		|||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int batadv_interface_change_mtu(struct net_device *dev, int new_mtu)
 | 
			
		||||
{
 | 
			
		||||
	/* check ranges */
 | 
			
		||||
	if ((new_mtu < 68) || (new_mtu > batadv_hardif_min_mtu(dev)))
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
 | 
			
		||||
	dev->mtu = new_mtu;
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * batadv_interface_set_rx_mode - set the rx mode of a device
 | 
			
		||||
 * @dev: registered network device to modify
 | 
			
		||||
| 
						 | 
				
			
			@ -920,7 +909,6 @@ static const struct net_device_ops batadv_netdev_ops = {
 | 
			
		|||
	.ndo_vlan_rx_add_vid = batadv_interface_add_vid,
 | 
			
		||||
	.ndo_vlan_rx_kill_vid = batadv_interface_kill_vid,
 | 
			
		||||
	.ndo_set_mac_address = batadv_interface_set_mac_addr,
 | 
			
		||||
	.ndo_change_mtu = batadv_interface_change_mtu,
 | 
			
		||||
	.ndo_set_rx_mode = batadv_interface_set_rx_mode,
 | 
			
		||||
	.ndo_start_xmit = batadv_interface_tx,
 | 
			
		||||
	.ndo_validate_addr = eth_validate_addr,
 | 
			
		||||
| 
						 | 
				
			
			@ -987,6 +975,7 @@ struct net_device *batadv_softif_create(struct net *net, const char *name)
 | 
			
		|||
	dev_net_set(soft_iface, net);
 | 
			
		||||
 | 
			
		||||
	soft_iface->rtnl_link_ops = &batadv_link_ops;
 | 
			
		||||
	soft_iface->max_mtu = batadv_hardif_min_mtu(soft_iface);
 | 
			
		||||
 | 
			
		||||
	ret = register_netdevice(soft_iface);
 | 
			
		||||
	if (ret < 0) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -398,6 +398,7 @@ void hsr_dev_setup(struct net_device *dev)
 | 
			
		|||
	random_ether_addr(dev->dev_addr);
 | 
			
		||||
 | 
			
		||||
	ether_setup(dev);
 | 
			
		||||
	dev->min_mtu = 0;
 | 
			
		||||
	dev->header_ops = &hsr_header_ops;
 | 
			
		||||
	dev->netdev_ops = &hsr_device_ops;
 | 
			
		||||
	SET_NETDEV_DEVTYPE(dev, &hsr_type);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -217,20 +217,10 @@ static netdev_tx_t gprs_xmit(struct sk_buff *skb, struct net_device *dev)
 | 
			
		|||
	return NETDEV_TX_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int gprs_set_mtu(struct net_device *dev, int new_mtu)
 | 
			
		||||
{
 | 
			
		||||
	if ((new_mtu < 576) || (new_mtu > (PHONET_MAX_MTU - 11)))
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
 | 
			
		||||
	dev->mtu = new_mtu;
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct net_device_ops gprs_netdev_ops = {
 | 
			
		||||
	.ndo_open	= gprs_open,
 | 
			
		||||
	.ndo_stop	= gprs_close,
 | 
			
		||||
	.ndo_start_xmit	= gprs_xmit,
 | 
			
		||||
	.ndo_change_mtu	= gprs_set_mtu,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void gprs_setup(struct net_device *dev)
 | 
			
		||||
| 
						 | 
				
			
			@ -239,6 +229,8 @@ static void gprs_setup(struct net_device *dev)
 | 
			
		|||
	dev->type		= ARPHRD_PHONET_PIPE;
 | 
			
		||||
	dev->flags		= IFF_POINTOPOINT | IFF_NOARP;
 | 
			
		||||
	dev->mtu		= GPRS_DEFAULT_MTU;
 | 
			
		||||
	dev->min_mtu		= 576;
 | 
			
		||||
	dev->max_mtu		= (PHONET_MAX_MTU - 11);
 | 
			
		||||
	dev->hard_header_len	= 0;
 | 
			
		||||
	dev->addr_len		= 0;
 | 
			
		||||
	dev->tx_queue_len	= 10;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue