diff options
Diffstat (limited to 'net/batman-adv/hard-interface.c')
-rw-r--r-- | net/batman-adv/hard-interface.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/net/batman-adv/hard-interface.c b/net/batman-adv/hard-interface.c index 004017c523fa..d564af295db4 100644 --- a/net/batman-adv/hard-interface.c +++ b/net/batman-adv/hard-interface.c | |||
@@ -269,9 +269,10 @@ int batadv_hardif_min_mtu(struct net_device *soft_iface) | |||
269 | const struct batadv_priv *bat_priv = netdev_priv(soft_iface); | 269 | const struct batadv_priv *bat_priv = netdev_priv(soft_iface); |
270 | const struct batadv_hard_iface *hard_iface; | 270 | const struct batadv_hard_iface *hard_iface; |
271 | /* allow big frames if all devices are capable to do so | 271 | /* allow big frames if all devices are capable to do so |
272 | * (have MTU > 1500 + BAT_HEADER_LEN) | 272 | * (have MTU > 1500 + batadv_max_header_len()) |
273 | */ | 273 | */ |
274 | int min_mtu = ETH_DATA_LEN; | 274 | int min_mtu = ETH_DATA_LEN; |
275 | int max_header_len = batadv_max_header_len(); | ||
275 | 276 | ||
276 | if (atomic_read(&bat_priv->fragmentation)) | 277 | if (atomic_read(&bat_priv->fragmentation)) |
277 | goto out; | 278 | goto out; |
@@ -285,8 +286,7 @@ int batadv_hardif_min_mtu(struct net_device *soft_iface) | |||
285 | if (hard_iface->soft_iface != soft_iface) | 286 | if (hard_iface->soft_iface != soft_iface) |
286 | continue; | 287 | continue; |
287 | 288 | ||
288 | min_mtu = min_t(int, | 289 | min_mtu = min_t(int, hard_iface->net_dev->mtu - max_header_len, |
289 | hard_iface->net_dev->mtu - BATADV_HEADER_LEN, | ||
290 | min_mtu); | 290 | min_mtu); |
291 | } | 291 | } |
292 | rcu_read_unlock(); | 292 | rcu_read_unlock(); |
@@ -380,6 +380,7 @@ int batadv_hardif_enable_interface(struct batadv_hard_iface *hard_iface, | |||
380 | struct batadv_priv *bat_priv; | 380 | struct batadv_priv *bat_priv; |
381 | struct net_device *soft_iface, *master; | 381 | struct net_device *soft_iface, *master; |
382 | __be16 ethertype = htons(ETH_P_BATMAN); | 382 | __be16 ethertype = htons(ETH_P_BATMAN); |
383 | int max_header_len = batadv_max_header_len(); | ||
383 | int ret; | 384 | int ret; |
384 | 385 | ||
385 | if (hard_iface->if_status != BATADV_IF_NOT_IN_USE) | 386 | if (hard_iface->if_status != BATADV_IF_NOT_IN_USE) |
@@ -448,18 +449,18 @@ int batadv_hardif_enable_interface(struct batadv_hard_iface *hard_iface, | |||
448 | hard_iface->net_dev->name); | 449 | hard_iface->net_dev->name); |
449 | 450 | ||
450 | if (atomic_read(&bat_priv->fragmentation) && | 451 | if (atomic_read(&bat_priv->fragmentation) && |
451 | hard_iface->net_dev->mtu < ETH_DATA_LEN + BATADV_HEADER_LEN) | 452 | hard_iface->net_dev->mtu < ETH_DATA_LEN + max_header_len) |
452 | batadv_info(hard_iface->soft_iface, | 453 | batadv_info(hard_iface->soft_iface, |
453 | "The MTU of interface %s is too small (%i) to handle the transport of batman-adv packets. Packets going over this interface will be fragmented on layer2 which could impact the performance. Setting the MTU to %zi would solve the problem.\n", | 454 | "The MTU of interface %s is too small (%i) to handle the transport of batman-adv packets. Packets going over this interface will be fragmented on layer2 which could impact the performance. Setting the MTU to %i would solve the problem.\n", |
454 | hard_iface->net_dev->name, hard_iface->net_dev->mtu, | 455 | hard_iface->net_dev->name, hard_iface->net_dev->mtu, |
455 | ETH_DATA_LEN + BATADV_HEADER_LEN); | 456 | ETH_DATA_LEN + max_header_len); |
456 | 457 | ||
457 | if (!atomic_read(&bat_priv->fragmentation) && | 458 | if (!atomic_read(&bat_priv->fragmentation) && |
458 | hard_iface->net_dev->mtu < ETH_DATA_LEN + BATADV_HEADER_LEN) | 459 | hard_iface->net_dev->mtu < ETH_DATA_LEN + max_header_len) |
459 | batadv_info(hard_iface->soft_iface, | 460 | batadv_info(hard_iface->soft_iface, |
460 | "The MTU of interface %s is too small (%i) to handle the transport of batman-adv packets. If you experience problems getting traffic through try increasing the MTU to %zi.\n", | 461 | "The MTU of interface %s is too small (%i) to handle the transport of batman-adv packets. If you experience problems getting traffic through try increasing the MTU to %i.\n", |
461 | hard_iface->net_dev->name, hard_iface->net_dev->mtu, | 462 | hard_iface->net_dev->name, hard_iface->net_dev->mtu, |
462 | ETH_DATA_LEN + BATADV_HEADER_LEN); | 463 | ETH_DATA_LEN + max_header_len); |
463 | 464 | ||
464 | if (batadv_hardif_is_iface_up(hard_iface)) | 465 | if (batadv_hardif_is_iface_up(hard_iface)) |
465 | batadv_hardif_activate_interface(hard_iface); | 466 | batadv_hardif_activate_interface(hard_iface); |