|
@@ -337,11 +337,12 @@ static struct ip6_tnl *ip6gre_tunnel_locate(struct net *net,
|
|
|
|
|
|
nt->dev = dev;
|
|
|
nt->net = dev_net(dev);
|
|
|
- ip6gre_tnl_link_config(nt, 1);
|
|
|
|
|
|
if (register_netdevice(dev) < 0)
|
|
|
goto failed_free;
|
|
|
|
|
|
+ ip6gre_tnl_link_config(nt, 1);
|
|
|
+
|
|
|
/* Can use a lockless transmit, unless we generate output sequences */
|
|
|
if (!(nt->parms.o_flags & TUNNEL_SEQ))
|
|
|
dev->features |= NETIF_F_LLTX;
|
|
@@ -1303,7 +1304,6 @@ static void ip6gre_netlink_parms(struct nlattr *data[],
|
|
|
|
|
|
static int ip6gre_tap_init(struct net_device *dev)
|
|
|
{
|
|
|
- struct ip6_tnl *tunnel;
|
|
|
int ret;
|
|
|
|
|
|
ret = ip6gre_tunnel_init_common(dev);
|
|
@@ -1312,10 +1312,6 @@ static int ip6gre_tap_init(struct net_device *dev)
|
|
|
|
|
|
dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
|
|
|
|
|
|
- tunnel = netdev_priv(dev);
|
|
|
-
|
|
|
- ip6gre_tnl_link_config(tunnel, 1);
|
|
|
-
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -1408,12 +1404,16 @@ static int ip6gre_newlink(struct net *src_net, struct net_device *dev,
|
|
|
|
|
|
nt->dev = dev;
|
|
|
nt->net = dev_net(dev);
|
|
|
- ip6gre_tnl_link_config(nt, !tb[IFLA_MTU]);
|
|
|
|
|
|
err = register_netdevice(dev);
|
|
|
if (err)
|
|
|
goto out;
|
|
|
|
|
|
+ ip6gre_tnl_link_config(nt, !tb[IFLA_MTU]);
|
|
|
+
|
|
|
+ if (tb[IFLA_MTU])
|
|
|
+ ip6_tnl_change_mtu(dev, nla_get_u32(tb[IFLA_MTU]));
|
|
|
+
|
|
|
dev_hold(dev);
|
|
|
ip6gre_tunnel_link(ign, nt);
|
|
|
|