Commit 540bfe30 authored by Jarod Wilson's avatar Jarod Wilson Committed by David S. Miller

ethernet/sun: use core min/max MTU checking

cassini: min_mtu 60, max_mtu 9000

niu: min_mtu 68, max_mtu 9216

sungem: min_mtu 68, max_mtu 1500 (comments say jumbo mode is broken)

sunvnet: min_mtu 68, max_mtu 65535
- removed sunvnet_change_mut_common as it does nothing now

CC: netdev@vger.kernel.org
Signed-off-by: default avatarJarod Wilson <jarod@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c7315a95
...@@ -3863,9 +3863,6 @@ static int cas_change_mtu(struct net_device *dev, int new_mtu) ...@@ -3863,9 +3863,6 @@ static int cas_change_mtu(struct net_device *dev, int new_mtu)
{ {
struct cas *cp = netdev_priv(dev); struct cas *cp = netdev_priv(dev);
if (new_mtu < CAS_MIN_MTU || new_mtu > CAS_MAX_MTU)
return -EINVAL;
dev->mtu = new_mtu; dev->mtu = new_mtu;
if (!netif_running(dev) || !netif_device_present(dev)) if (!netif_running(dev) || !netif_device_present(dev))
return 0; return 0;
...@@ -5115,6 +5112,10 @@ static int cas_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -5115,6 +5112,10 @@ static int cas_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
if (pci_using_dac) if (pci_using_dac)
dev->features |= NETIF_F_HIGHDMA; dev->features |= NETIF_F_HIGHDMA;
/* MTU range: 60 - varies or 9000 */
dev->min_mtu = CAS_MIN_MTU;
dev->max_mtu = CAS_MAX_MTU;
if (register_netdev(dev)) { if (register_netdev(dev)) {
dev_err(&pdev->dev, "Cannot register net device, aborting\n"); dev_err(&pdev->dev, "Cannot register net device, aborting\n");
goto err_out_free_consistent; goto err_out_free_consistent;
......
...@@ -139,7 +139,6 @@ static const struct net_device_ops vsw_ops = { ...@@ -139,7 +139,6 @@ static const struct net_device_ops vsw_ops = {
.ndo_set_mac_address = sunvnet_set_mac_addr_common, .ndo_set_mac_address = sunvnet_set_mac_addr_common,
.ndo_validate_addr = eth_validate_addr, .ndo_validate_addr = eth_validate_addr,
.ndo_tx_timeout = sunvnet_tx_timeout_common, .ndo_tx_timeout = sunvnet_tx_timeout_common,
.ndo_change_mtu = sunvnet_change_mtu_common,
.ndo_start_xmit = vsw_start_xmit, .ndo_start_xmit = vsw_start_xmit,
.ndo_select_queue = vsw_select_queue, .ndo_select_queue = vsw_select_queue,
#ifdef CONFIG_NET_POLL_CONTROLLER #ifdef CONFIG_NET_POLL_CONTROLLER
...@@ -239,6 +238,10 @@ static struct net_device *vsw_alloc_netdev(u8 hwaddr[], ...@@ -239,6 +238,10 @@ static struct net_device *vsw_alloc_netdev(u8 hwaddr[],
NETIF_F_HW_CSUM | NETIF_F_SG; NETIF_F_HW_CSUM | NETIF_F_SG;
dev->features = dev->hw_features; dev->features = dev->hw_features;
/* MTU range: 68 - 65535 */
dev->min_mtu = ETH_MIN_MTU;
dev->max_mtu = VNET_MAX_MTU;
SET_NETDEV_DEV(dev, &vdev->dev); SET_NETDEV_DEV(dev, &vdev->dev);
return dev; return dev;
......
...@@ -6754,9 +6754,6 @@ static int niu_change_mtu(struct net_device *dev, int new_mtu) ...@@ -6754,9 +6754,6 @@ static int niu_change_mtu(struct net_device *dev, int new_mtu)
struct niu *np = netdev_priv(dev); struct niu *np = netdev_priv(dev);
int err, orig_jumbo, new_jumbo; int err, orig_jumbo, new_jumbo;
if (new_mtu < 68 || new_mtu > NIU_MAX_MTU)
return -EINVAL;
orig_jumbo = (dev->mtu > ETH_DATA_LEN); orig_jumbo = (dev->mtu > ETH_DATA_LEN);
new_jumbo = (new_mtu > ETH_DATA_LEN); new_jumbo = (new_mtu > ETH_DATA_LEN);
...@@ -9823,6 +9820,10 @@ static int niu_pci_init_one(struct pci_dev *pdev, ...@@ -9823,6 +9820,10 @@ static int niu_pci_init_one(struct pci_dev *pdev,
dev->irq = pdev->irq; dev->irq = pdev->irq;
/* MTU range: 68 - 9216 */
dev->min_mtu = ETH_MIN_MTU;
dev->max_mtu = NIU_MAX_MTU;
niu_assign_netdev_ops(dev); niu_assign_netdev_ops(dev);
err = niu_get_invariants(np); err = niu_get_invariants(np);
......
...@@ -2476,9 +2476,9 @@ static void gem_set_multicast(struct net_device *dev) ...@@ -2476,9 +2476,9 @@ static void gem_set_multicast(struct net_device *dev)
} }
/* Jumbo-grams don't seem to work :-( */ /* Jumbo-grams don't seem to work :-( */
#define GEM_MIN_MTU 68 #define GEM_MIN_MTU ETH_MIN_MTU
#if 1 #if 1
#define GEM_MAX_MTU 1500 #define GEM_MAX_MTU ETH_DATA_LEN
#else #else
#define GEM_MAX_MTU 9000 #define GEM_MAX_MTU 9000
#endif #endif
...@@ -2487,9 +2487,6 @@ static int gem_change_mtu(struct net_device *dev, int new_mtu) ...@@ -2487,9 +2487,6 @@ static int gem_change_mtu(struct net_device *dev, int new_mtu)
{ {
struct gem *gp = netdev_priv(dev); struct gem *gp = netdev_priv(dev);
if (new_mtu < GEM_MIN_MTU || new_mtu > GEM_MAX_MTU)
return -EINVAL;
dev->mtu = new_mtu; dev->mtu = new_mtu;
/* We'll just catch it later when the device is up'd or resumed */ /* We'll just catch it later when the device is up'd or resumed */
...@@ -2977,6 +2974,10 @@ static int gem_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -2977,6 +2974,10 @@ static int gem_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
if (pci_using_dac) if (pci_using_dac)
dev->features |= NETIF_F_HIGHDMA; dev->features |= NETIF_F_HIGHDMA;
/* MTU range: 68 - 1500 (Jumbo mode is broken) */
dev->min_mtu = GEM_MIN_MTU;
dev->max_mtu = GEM_MAX_MTU;
/* Register with kernel */ /* Register with kernel */
if (register_netdev(dev)) { if (register_netdev(dev)) {
pr_err("Cannot register net device, aborting\n"); pr_err("Cannot register net device, aborting\n");
......
...@@ -159,7 +159,6 @@ static const struct net_device_ops vnet_ops = { ...@@ -159,7 +159,6 @@ static const struct net_device_ops vnet_ops = {
.ndo_set_mac_address = sunvnet_set_mac_addr_common, .ndo_set_mac_address = sunvnet_set_mac_addr_common,
.ndo_validate_addr = eth_validate_addr, .ndo_validate_addr = eth_validate_addr,
.ndo_tx_timeout = sunvnet_tx_timeout_common, .ndo_tx_timeout = sunvnet_tx_timeout_common,
.ndo_change_mtu = sunvnet_change_mtu_common,
.ndo_start_xmit = vnet_start_xmit, .ndo_start_xmit = vnet_start_xmit,
.ndo_select_queue = vnet_select_queue, .ndo_select_queue = vnet_select_queue,
#ifdef CONFIG_NET_POLL_CONTROLLER #ifdef CONFIG_NET_POLL_CONTROLLER
...@@ -202,6 +201,10 @@ static struct vnet *vnet_new(const u64 *local_mac, ...@@ -202,6 +201,10 @@ static struct vnet *vnet_new(const u64 *local_mac,
NETIF_F_HW_CSUM | NETIF_F_SG; NETIF_F_HW_CSUM | NETIF_F_SG;
dev->features = dev->hw_features; dev->features = dev->hw_features;
/* MTU range: 68 - 65535 */
dev->min_mtu = ETH_MIN_MTU;
dev->max_mtu = VNET_MAX_MTU;
SET_NETDEV_DEV(dev, &vdev->dev); SET_NETDEV_DEV(dev, &vdev->dev);
err = register_netdev(dev); err = register_netdev(dev);
......
...@@ -1583,16 +1583,6 @@ void sunvnet_set_rx_mode_common(struct net_device *dev, struct vnet *vp) ...@@ -1583,16 +1583,6 @@ void sunvnet_set_rx_mode_common(struct net_device *dev, struct vnet *vp)
} }
EXPORT_SYMBOL_GPL(sunvnet_set_rx_mode_common); EXPORT_SYMBOL_GPL(sunvnet_set_rx_mode_common);
int sunvnet_change_mtu_common(struct net_device *dev, int new_mtu)
{
if (new_mtu < 68 || new_mtu > 65535)
return -EINVAL;
dev->mtu = new_mtu;
return 0;
}
EXPORT_SYMBOL_GPL(sunvnet_change_mtu_common);
int sunvnet_set_mac_addr_common(struct net_device *dev, void *p) int sunvnet_set_mac_addr_common(struct net_device *dev, void *p)
{ {
return -EINVAL; return -EINVAL;
......
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
#define VNET_MINTSO 2048 /* VIO protocol's minimum TSO len */ #define VNET_MINTSO 2048 /* VIO protocol's minimum TSO len */
#define VNET_MAXTSO 65535 /* VIO protocol's maximum TSO len */ #define VNET_MAXTSO 65535 /* VIO protocol's maximum TSO len */
#define VNET_MAX_MTU 65535
/* VNET packets are sent in buffers with the first 6 bytes skipped /* VNET packets are sent in buffers with the first 6 bytes skipped
* so that after the ethernet header the IPv4/IPv6 headers are aligned * so that after the ethernet header the IPv4/IPv6 headers are aligned
* properly. * properly.
...@@ -125,7 +127,6 @@ int sunvnet_close_common(struct net_device *dev); ...@@ -125,7 +127,6 @@ int sunvnet_close_common(struct net_device *dev);
void sunvnet_set_rx_mode_common(struct net_device *dev, struct vnet *vp); void sunvnet_set_rx_mode_common(struct net_device *dev, struct vnet *vp);
int sunvnet_set_mac_addr_common(struct net_device *dev, void *p); int sunvnet_set_mac_addr_common(struct net_device *dev, void *p);
void sunvnet_tx_timeout_common(struct net_device *dev); void sunvnet_tx_timeout_common(struct net_device *dev);
int sunvnet_change_mtu_common(struct net_device *dev, int new_mtu);
int sunvnet_start_xmit_common(struct sk_buff *skb, struct net_device *dev, int sunvnet_start_xmit_common(struct sk_buff *skb, struct net_device *dev,
struct vnet_port *(*vnet_tx_port) struct vnet_port *(*vnet_tx_port)
(struct sk_buff *, struct net_device *)); (struct sk_buff *, struct net_device *));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment