| From foo@baz Tue Nov 18 09:07:46 PST 2014 |
| From: Steffen Klassert <steffen.klassert@secunet.com> |
| Date: Mon, 3 Nov 2014 09:19:27 +0100 |
| Subject: ip6_tunnel: Use ip6_tnl_dev_init as the ndo_init function. |
| |
| From: Steffen Klassert <steffen.klassert@secunet.com> |
| |
| [ Upstream commit 6c6151daaf2d8dc2046d9926539feed5f66bf74e ] |
| |
| ip6_tnl_dev_init() sets the dev->iflink via a call to |
| ip6_tnl_link_config(). After that, register_netdevice() |
| sets dev->iflink = -1. So we loose the iflink configuration |
| for ipv6 tunnels. Fix this by using ip6_tnl_dev_init() as the |
| ndo_init function. Then ip6_tnl_dev_init() is called after |
| dev->iflink is set to -1 from register_netdevice(). |
| |
| Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/ipv6/ip6_tunnel.c | 10 +--------- |
| 1 file changed, 1 insertion(+), 9 deletions(-) |
| |
| --- a/net/ipv6/ip6_tunnel.c |
| +++ b/net/ipv6/ip6_tunnel.c |
| @@ -265,9 +265,6 @@ static int ip6_tnl_create2(struct net_de |
| int err; |
| |
| t = netdev_priv(dev); |
| - err = ip6_tnl_dev_init(dev); |
| - if (err < 0) |
| - goto out; |
| |
| err = register_netdevice(dev); |
| if (err < 0) |
| @@ -1433,6 +1430,7 @@ ip6_tnl_change_mtu(struct net_device *de |
| |
| |
| static const struct net_device_ops ip6_tnl_netdev_ops = { |
| + .ndo_init = ip6_tnl_dev_init, |
| .ndo_uninit = ip6_tnl_dev_uninit, |
| .ndo_start_xmit = ip6_tnl_xmit, |
| .ndo_do_ioctl = ip6_tnl_ioctl, |
| @@ -1514,16 +1512,10 @@ static int __net_init ip6_fb_tnl_dev_ini |
| struct ip6_tnl *t = netdev_priv(dev); |
| struct net *net = dev_net(dev); |
| struct ip6_tnl_net *ip6n = net_generic(net, ip6_tnl_net_id); |
| - int err = ip6_tnl_dev_init_gen(dev); |
| - |
| - if (err) |
| - return err; |
| |
| t->parms.proto = IPPROTO_IPV6; |
| dev_hold(dev); |
| |
| - ip6_tnl_link_config(t); |
| - |
| rcu_assign_pointer(ip6n->tnls_wc[0], t); |
| return 0; |
| } |