aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/009-revert-mtu-changes.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/009-revert-mtu-changes.patch')
-rw-r--r--package/kernel/mac80211/patches/009-revert-mtu-changes.patch338
1 files changed, 338 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/009-revert-mtu-changes.patch b/package/kernel/mac80211/patches/009-revert-mtu-changes.patch
new file mode 100644
index 0000000000..f5e2757d3f
--- /dev/null
+++ b/package/kernel/mac80211/patches/009-revert-mtu-changes.patch
@@ -0,0 +1,338 @@
+--- a/net/mac80211/iface.c
++++ b/net/mac80211/iface.c
+@@ -151,6 +151,15 @@ void ieee80211_recalc_idle(struct ieee80
+ ieee80211_hw_config(local, change);
+ }
+
++static int ieee80211_change_mtu(struct net_device *dev, int new_mtu)
++{
++ if (new_mtu < 256 || new_mtu > IEEE80211_MAX_DATA_LEN)
++ return -EINVAL;
++
++ dev->mtu = new_mtu;
++ return 0;
++}
++
+ static int ieee80211_verify_mac(struct ieee80211_sub_if_data *sdata, u8 *addr,
+ bool check_dup)
+ {
+@@ -1168,6 +1177,7 @@ static const struct net_device_ops ieee8
+ .ndo_uninit = ieee80211_uninit,
+ .ndo_start_xmit = ieee80211_subif_start_xmit,
+ .ndo_set_rx_mode = ieee80211_set_multicast_list,
++ .ndo_change_mtu = ieee80211_change_mtu,
+ .ndo_set_mac_address = ieee80211_change_mac,
+ .ndo_select_queue = ieee80211_netdev_select_queue,
+ .ndo_get_stats64 = ieee80211_get_stats64,
+@@ -1211,6 +1221,7 @@ static const struct net_device_ops ieee8
+ .ndo_uninit = ieee80211_uninit,
+ .ndo_start_xmit = ieee80211_monitor_start_xmit,
+ .ndo_set_rx_mode = ieee80211_set_multicast_list,
++ .ndo_change_mtu = ieee80211_change_mtu,
+ .ndo_set_mac_address = ieee80211_change_mac,
+ .ndo_select_queue = ieee80211_monitor_select_queue,
+ .ndo_get_stats64 = ieee80211_get_stats64,
+@@ -1919,10 +1930,6 @@ int ieee80211_if_add(struct ieee80211_lo
+
+ netdev_set_default_ethtool_ops(ndev, &ieee80211_ethtool_ops);
+
+- /* MTU range: 256 - 2304 */
+- ndev->min_mtu = 256;
+- ndev->max_mtu = IEEE80211_MAX_DATA_LEN;
+-
+ ret = register_netdevice(ndev);
+ if (ret) {
+ ieee80211_if_free(ndev);
+--- a/drivers/net/wireless/ath/wil6210/netdev.c
++++ b/drivers/net/wireless/ath/wil6210/netdev.c
+@@ -42,6 +42,21 @@ static int wil_stop(struct net_device *n
+ return wil_down(wil);
+ }
+
++static int wil_change_mtu(struct net_device *ndev, int new_mtu)
++{
++ struct wil6210_priv *wil = ndev_to_wil(ndev);
++
++ if (new_mtu < 68 || new_mtu > mtu_max) {
++ wil_err(wil, "invalid MTU %d\n", new_mtu);
++ return -EINVAL;
++ }
++
++ wil_dbg_misc(wil, "change MTU %d -> %d\n", ndev->mtu, new_mtu);
++ ndev->mtu = new_mtu;
++
++ return 0;
++}
++
+ static int wil_do_ioctl(struct net_device *ndev, struct ifreq *ifr, int cmd)
+ {
+ struct wil6210_priv *wil = ndev_to_wil(ndev);
+@@ -55,6 +70,7 @@ static const struct net_device_ops wil_n
+ .ndo_start_xmit = wil_start_xmit,
+ .ndo_set_mac_address = eth_mac_addr,
+ .ndo_validate_addr = eth_validate_addr,
++ .ndo_change_mtu = wil_change_mtu,
+ .ndo_do_ioctl = wil_do_ioctl,
+ };
+
+@@ -111,7 +127,6 @@ static int wil6210_netdev_poll_tx(struct
+ static void wil_dev_setup(struct net_device *dev)
+ {
+ ether_setup(dev);
+- dev->max_mtu = mtu_max;
+ dev->tx_queue_len = WIL_TX_Q_LEN_DEFAULT;
+ }
+
+--- a/drivers/net/wireless/atmel/atmel.c
++++ b/drivers/net/wireless/atmel/atmel.c
+@@ -1295,6 +1295,14 @@ static struct iw_statistics *atmel_get_w
+ return &priv->wstats;
+ }
+
++static int atmel_change_mtu(struct net_device *dev, int new_mtu)
++{
++ if ((new_mtu < 68) || (new_mtu > 2312))
++ return -EINVAL;
++ dev->mtu = new_mtu;
++ return 0;
++}
++
+ static int atmel_set_mac_address(struct net_device *dev, void *p)
+ {
+ struct sockaddr *addr = p;
+@@ -1498,6 +1506,7 @@ static const struct file_operations atme
+ static const struct net_device_ops atmel_netdev_ops = {
+ .ndo_open = atmel_open,
+ .ndo_stop = atmel_close,
++ .ndo_change_mtu = atmel_change_mtu,
+ .ndo_set_mac_address = atmel_set_mac_address,
+ .ndo_start_xmit = start_tx,
+ .ndo_do_ioctl = atmel_ioctl,
+@@ -1591,10 +1600,6 @@ struct net_device *init_atmel_card(unsig
+ dev->irq = irq;
+ dev->base_addr = port;
+
+- /* MTU range: 68 - 2312 */
+- dev->min_mtu = 68;
+- dev->max_mtu = MAX_WIRELESS_BODY - ETH_FCS_LEN;
+-
+ SET_NETDEV_DEV(dev, sys_dev);
+
+ if ((rc = request_irq(dev->irq, service_interrupt, IRQF_SHARED, dev->name, dev))) {
+--- a/drivers/net/wireless/cisco/airo.c
++++ b/drivers/net/wireless/cisco/airo.c
+@@ -2329,6 +2329,14 @@ static int airo_set_mac_address(struct n
+ return 0;
+ }
+
++static int airo_change_mtu(struct net_device *dev, int new_mtu)
++{
++ if ((new_mtu < 68) || (new_mtu > 2400))
++ return -EINVAL;
++ dev->mtu = new_mtu;
++ return 0;
++}
++
+ static LIST_HEAD(airo_devices);
+
+ static void add_airo_dev(struct airo_info *ai)
+@@ -2648,6 +2656,7 @@ static const struct net_device_ops airo1
+ .ndo_get_stats = airo_get_stats,
+ .ndo_set_mac_address = airo_set_mac_address,
+ .ndo_do_ioctl = airo_ioctl,
++ .ndo_change_mtu = airo_change_mtu,
+ };
+
+ static void wifi_setup(struct net_device *dev)
+@@ -2659,8 +2668,6 @@ static void wifi_setup(struct net_device
+ dev->type = ARPHRD_IEEE80211;
+ dev->hard_header_len = ETH_HLEN;
+ dev->mtu = AIRO_DEF_MTU;
+- dev->min_mtu = 68;
+- dev->max_mtu = MIC_MSGLEN_MAX;
+ dev->addr_len = ETH_ALEN;
+ dev->tx_queue_len = 100;
+
+@@ -2747,6 +2754,7 @@ static const struct net_device_ops airo_
+ .ndo_set_rx_mode = airo_set_multicast_list,
+ .ndo_set_mac_address = airo_set_mac_address,
+ .ndo_do_ioctl = airo_ioctl,
++ .ndo_change_mtu = airo_change_mtu,
+ .ndo_validate_addr = eth_validate_addr,
+ };
+
+@@ -2758,6 +2766,7 @@ static const struct net_device_ops mpi_n
+ .ndo_set_rx_mode = airo_set_multicast_list,
+ .ndo_set_mac_address = airo_set_mac_address,
+ .ndo_do_ioctl = airo_ioctl,
++ .ndo_change_mtu = airo_change_mtu,
+ .ndo_validate_addr = eth_validate_addr,
+ };
+
+@@ -2813,7 +2822,6 @@ static struct net_device *_init_airo_car
+ dev->irq = irq;
+ dev->base_addr = port;
+ dev->priv_flags &= ~IFF_TX_SKB_SHARING;
+- dev->max_mtu = MIC_MSGLEN_MAX;
+
+ SET_NETDEV_DEV(dev, dmdev);
+
+--- a/drivers/net/wireless/intel/ipw2x00/ipw2100.c
++++ b/drivers/net/wireless/intel/ipw2x00/ipw2100.c
+@@ -6039,6 +6039,7 @@ static const struct net_device_ops ipw21
+ .ndo_open = ipw2100_open,
+ .ndo_stop = ipw2100_close,
+ .ndo_start_xmit = libipw_xmit,
++ .ndo_change_mtu = libipw_change_mtu,
+ .ndo_tx_timeout = ipw2100_tx_timeout,
+ .ndo_set_mac_address = ipw2100_set_address,
+ .ndo_validate_addr = eth_validate_addr,
+@@ -6074,8 +6075,6 @@ static struct net_device *ipw2100_alloc_
+ dev->wireless_data = &priv->wireless_data;
+ dev->watchdog_timeo = 3 * HZ;
+ dev->irq = 0;
+- dev->min_mtu = 68;
+- dev->max_mtu = LIBIPW_DATA_LEN;
+
+ /* NOTE: We don't use the wireless_handlers hook
+ * in dev as the system will start throwing WX requests
+--- a/drivers/net/wireless/intel/ipw2x00/ipw2200.c
++++ b/drivers/net/wireless/intel/ipw2x00/ipw2200.c
+@@ -11561,6 +11561,7 @@ static const struct net_device_ops ipw_p
+ .ndo_open = ipw_prom_open,
+ .ndo_stop = ipw_prom_stop,
+ .ndo_start_xmit = ipw_prom_hard_start_xmit,
++ .ndo_change_mtu = libipw_change_mtu,
+ .ndo_set_mac_address = eth_mac_addr,
+ .ndo_validate_addr = eth_validate_addr,
+ };
+@@ -11586,9 +11587,6 @@ static int ipw_prom_alloc(struct ipw_pri
+ priv->prom_net_dev->type = ARPHRD_IEEE80211_RADIOTAP;
+ priv->prom_net_dev->netdev_ops = &ipw_prom_netdev_ops;
+
+- priv->prom_net_dev->min_mtu = 68;
+- priv->prom_net_dev->max_mtu = LIBIPW_DATA_LEN;
+-
+ priv->prom_priv->ieee->iw_mode = IW_MODE_MONITOR;
+ SET_NETDEV_DEV(priv->prom_net_dev, &priv->pci_dev->dev);
+
+@@ -11621,6 +11619,7 @@ static const struct net_device_ops ipw_n
+ .ndo_set_rx_mode = ipw_net_set_multicast_list,
+ .ndo_set_mac_address = ipw_net_set_mac_address,
+ .ndo_start_xmit = libipw_xmit,
++ .ndo_change_mtu = libipw_change_mtu,
+ .ndo_validate_addr = eth_validate_addr,
+ };
+
+@@ -11730,9 +11729,6 @@ static int ipw_pci_probe(struct pci_dev
+ net_dev->wireless_handlers = &ipw_wx_handler_def;
+ net_dev->ethtool_ops = &ipw_ethtool_ops;
+
+- net_dev->min_mtu = 68;
+- net_dev->max_mtu = LIBIPW_DATA_LEN;
+-
+ err = sysfs_create_group(&pdev->dev.kobj, &ipw_attribute_group);
+ if (err) {
+ IPW_ERROR("failed to create sysfs device attributes\n");
+--- a/drivers/net/wireless/intel/ipw2x00/libipw.h
++++ b/drivers/net/wireless/intel/ipw2x00/libipw.h
+@@ -948,6 +948,7 @@ static inline int libipw_is_cck_rate(u8
+ /* libipw.c */
+ void free_libipw(struct net_device *dev, int monitor);
+ struct net_device *alloc_libipw(int sizeof_priv, int monitor);
++int libipw_change_mtu(struct net_device *dev, int new_mtu);
+
+ void libipw_networks_age(struct libipw_device *ieee, unsigned long age_secs);
+
+--- a/drivers/net/wireless/intel/ipw2x00/libipw_module.c
++++ b/drivers/net/wireless/intel/ipw2x00/libipw_module.c
+@@ -118,6 +118,15 @@ static void libipw_networks_initialize(s
+ &ieee->network_free_list);
+ }
+
++int libipw_change_mtu(struct net_device *dev, int new_mtu)
++{
++ if ((new_mtu < 68) || (new_mtu > LIBIPW_DATA_LEN))
++ return -EINVAL;
++ dev->mtu = new_mtu;
++ return 0;
++}
++EXPORT_SYMBOL(libipw_change_mtu);
++
+ struct net_device *alloc_libipw(int sizeof_priv, int monitor)
+ {
+ struct libipw_device *ieee;
+--- a/drivers/net/wireless/intersil/hostap/hostap_main.c
++++ b/drivers/net/wireless/intersil/hostap/hostap_main.c
+@@ -765,6 +765,16 @@ static void hostap_set_multicast_list(st
+ }
+
+
++static int prism2_change_mtu(struct net_device *dev, int new_mtu)
++{
++ if (new_mtu < PRISM2_MIN_MTU || new_mtu > PRISM2_MAX_MTU)
++ return -EINVAL;
++
++ dev->mtu = new_mtu;
++ return 0;
++}
++
++
+ static void prism2_tx_timeout(struct net_device *dev)
+ {
+ struct hostap_interface *iface;
+@@ -803,6 +813,7 @@ static const struct net_device_ops hosta
+ .ndo_do_ioctl = hostap_ioctl,
+ .ndo_set_mac_address = prism2_set_mac_address,
+ .ndo_set_rx_mode = hostap_set_multicast_list,
++ .ndo_change_mtu = prism2_change_mtu,
+ .ndo_tx_timeout = prism2_tx_timeout,
+ .ndo_validate_addr = eth_validate_addr,
+ };
+@@ -815,6 +826,7 @@ static const struct net_device_ops hosta
+ .ndo_do_ioctl = hostap_ioctl,
+ .ndo_set_mac_address = prism2_set_mac_address,
+ .ndo_set_rx_mode = hostap_set_multicast_list,
++ .ndo_change_mtu = prism2_change_mtu,
+ .ndo_tx_timeout = prism2_tx_timeout,
+ .ndo_validate_addr = eth_validate_addr,
+ };
+@@ -827,6 +839,7 @@ static const struct net_device_ops hosta
+ .ndo_do_ioctl = hostap_ioctl,
+ .ndo_set_mac_address = prism2_set_mac_address,
+ .ndo_set_rx_mode = hostap_set_multicast_list,
++ .ndo_change_mtu = prism2_change_mtu,
+ .ndo_tx_timeout = prism2_tx_timeout,
+ .ndo_validate_addr = eth_validate_addr,
+ };
+@@ -838,8 +851,6 @@ void hostap_setup_dev(struct net_device
+
+ iface = netdev_priv(dev);
+ ether_setup(dev);
+- dev->min_mtu = PRISM2_MIN_MTU;
+- dev->max_mtu = PRISM2_MAX_MTU;
+ dev->priv_flags &= ~IFF_TX_SKB_SHARING;
+
+ /* kernel callbacks */
+--- a/drivers/net/wireless/intersil/orinoco/main.c
++++ b/drivers/net/wireless/intersil/orinoco/main.c
+@@ -322,6 +322,9 @@ int orinoco_change_mtu(struct net_device
+ {
+ struct orinoco_private *priv = ndev_priv(dev);
+
++ if ((new_mtu < ORINOCO_MIN_MTU) || (new_mtu > ORINOCO_MAX_MTU))
++ return -EINVAL;
++
+ /* MTU + encapsulation + header length */
+ if ((new_mtu + ENCAPS_OVERHEAD + sizeof(struct ieee80211_hdr)) >
+ (priv->nicbuf_size - ETH_HLEN))
+@@ -2285,9 +2288,6 @@ int orinoco_if_add(struct orinoco_privat
+ dev->base_addr = base_addr;
+ dev->irq = irq;
+
+- dev->min_mtu = ORINOCO_MIN_MTU;
+- dev->max_mtu = ORINOCO_MAX_MTU;
+-
+ SET_NETDEV_DEV(dev, priv->dev);
+ ret = register_netdev(dev);
+ if (ret)