Merge branch 'tunnel-mtu-fixes'
Xin Long says: ==================== net: fix IFLA_MTU ignored on NEWLINK for some ip and ipv6 tunnels The fix for ip_gre follows the way other ip tunnels do: not to set mtu in ndo_init, as ip_tunnel_newlink will take care of it properly. The fix for ip6_tunnel and sit follows the way ipv6 tunenls do: to set mtu again according to IFLA_MTU after, as all bind_dev are called in ndo_init where it can't get the tb[IFLA_MTU]. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
ff2926d851
|
@ -970,9 +970,6 @@ static void __gre_tunnel_init(struct net_device *dev)
|
|||
|
||||
t_hlen = tunnel->hlen + sizeof(struct iphdr);
|
||||
|
||||
dev->needed_headroom = LL_MAX_HEADER + t_hlen + 4;
|
||||
dev->mtu = ETH_DATA_LEN - t_hlen - 4;
|
||||
|
||||
dev->features |= GRE_FEATURES;
|
||||
dev->hw_features |= GRE_FEATURES;
|
||||
|
||||
|
@ -1290,8 +1287,6 @@ static int erspan_tunnel_init(struct net_device *dev)
|
|||
erspan_hdr_len(tunnel->erspan_ver);
|
||||
t_hlen = tunnel->hlen + sizeof(struct iphdr);
|
||||
|
||||
dev->needed_headroom = LL_MAX_HEADER + t_hlen + 4;
|
||||
dev->mtu = ETH_DATA_LEN - t_hlen - 4;
|
||||
dev->features |= GRE_FEATURES;
|
||||
dev->hw_features |= GRE_FEATURES;
|
||||
dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
|
||||
|
|
|
@ -1982,14 +1982,14 @@ static int ip6_tnl_newlink(struct net *src_net, struct net_device *dev,
|
|||
{
|
||||
struct net *net = dev_net(dev);
|
||||
struct ip6_tnl_net *ip6n = net_generic(net, ip6_tnl_net_id);
|
||||
struct ip6_tnl *nt, *t;
|
||||
struct ip_tunnel_encap ipencap;
|
||||
struct ip6_tnl *nt, *t;
|
||||
int err;
|
||||
|
||||
nt = netdev_priv(dev);
|
||||
|
||||
if (ip6_tnl_netlink_encap_parms(data, &ipencap)) {
|
||||
int err = ip6_tnl_encap_setup(nt, &ipencap);
|
||||
|
||||
err = ip6_tnl_encap_setup(nt, &ipencap);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
|
@ -2005,7 +2005,11 @@ static int ip6_tnl_newlink(struct net *src_net, struct net_device *dev,
|
|||
return -EEXIST;
|
||||
}
|
||||
|
||||
return ip6_tnl_create2(dev);
|
||||
err = ip6_tnl_create2(dev);
|
||||
if (!err && tb[IFLA_MTU])
|
||||
ip6_tnl_change_mtu(dev, nla_get_u32(tb[IFLA_MTU]));
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static int ip6_tnl_changelink(struct net_device *dev, struct nlattr *tb[],
|
||||
|
|
|
@ -1578,6 +1578,13 @@ static int ipip6_newlink(struct net *src_net, struct net_device *dev,
|
|||
if (err < 0)
|
||||
return err;
|
||||
|
||||
if (tb[IFLA_MTU]) {
|
||||
u32 mtu = nla_get_u32(tb[IFLA_MTU]);
|
||||
|
||||
if (mtu >= IPV6_MIN_MTU && mtu <= 0xFFF8 - dev->hard_header_len)
|
||||
dev->mtu = mtu;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_IPV6_SIT_6RD
|
||||
if (ipip6_netlink_6rd_parms(data, &ip6rd))
|
||||
err = ipip6_tunnel_update_6rd(nt, &ip6rd);
|
||||
|
|
Loading…
Reference in New Issue