aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6/ip6_vti.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2014-11-29 23:47:48 -0500
committerDavid S. Miller <davem@davemloft.net>2014-11-29 23:47:48 -0500
commit60b7379dc5b1743427b031cca53e30860a38ada6 (patch)
treec0462b8dd188861bd04f36dd31672b7446e35dd8 /net/ipv6/ip6_vti.c
parenta523a5ecc8c6ddceb8f783f600605553e5ad8963 (diff)
parent7a5a4f978750756755dc839014e13d1b088ccc8e (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Diffstat (limited to 'net/ipv6/ip6_vti.c')
-rw-r--r--net/ipv6/ip6_vti.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c
index 83082168b056..16a7e81e3f99 100644
--- a/net/ipv6/ip6_vti.c
+++ b/net/ipv6/ip6_vti.c
@@ -911,6 +911,15 @@ static int vti6_newlink(struct net *src_net, struct net_device *dev,
911 return vti6_tnl_create2(dev); 911 return vti6_tnl_create2(dev);
912} 912}
913 913
914static void vti6_dellink(struct net_device *dev, struct list_head *head)
915{
916 struct net *net = dev_net(dev);
917 struct vti6_net *ip6n = net_generic(net, vti6_net_id);
918
919 if (dev != ip6n->fb_tnl_dev)
920 unregister_netdevice_queue(dev, head);
921}
922
914static int vti6_changelink(struct net_device *dev, struct nlattr *tb[], 923static int vti6_changelink(struct net_device *dev, struct nlattr *tb[],
915 struct nlattr *data[]) 924 struct nlattr *data[])
916{ 925{
@@ -986,6 +995,7 @@ static struct rtnl_link_ops vti6_link_ops __read_mostly = {
986 .setup = vti6_dev_setup, 995 .setup = vti6_dev_setup,
987 .validate = vti6_validate, 996 .validate = vti6_validate,
988 .newlink = vti6_newlink, 997 .newlink = vti6_newlink,
998 .dellink = vti6_dellink,
989 .changelink = vti6_changelink, 999 .changelink = vti6_changelink,
990 .get_size = vti6_get_size, 1000 .get_size = vti6_get_size,
991 .fill_info = vti6_fill_info, 1001 .fill_info = vti6_fill_info,
@@ -1026,6 +1036,7 @@ static int __net_init vti6_init_net(struct net *net)
1026 if (!ip6n->fb_tnl_dev) 1036 if (!ip6n->fb_tnl_dev)
1027 goto err_alloc_dev; 1037 goto err_alloc_dev;
1028 dev_net_set(ip6n->fb_tnl_dev, net); 1038 dev_net_set(ip6n->fb_tnl_dev, net);
1039 ip6n->fb_tnl_dev->rtnl_link_ops = &vti6_link_ops;
1029 1040
1030 err = vti6_fb_tnl_dev_init(ip6n->fb_tnl_dev); 1041 err = vti6_fb_tnl_dev_init(ip6n->fb_tnl_dev);
1031 if (err < 0) 1042 if (err < 0)